Мультимодальный AI локально: работа с изображениями через LLaVA
multimodalaillavaollama
LLM умеет не только текст. Мультимодальные модели анализируют изображения: описывают содержимое, отвечают на вопросы, извлекают данные. И всё это можно запустить локально.

Доступные модели
| Модель | Размер | VRAM | Качество | Через Ollama |
|---|---|---|---|---|
| LLaVA 1.6 7B | 4.7 GB | 8 GB | Хорошее | llava:7b |
| LLaVA 1.6 13B | 8 GB | 12 GB | Очень хорошее | llava:13b |
| Llama 3.2 Vision 11B | 6.4 GB | 10 GB | Отличное | llama3.2-vision |
| Llama 3.2 Vision 90B | 55 GB | 80+ GB | Топовое | llama3.2-vision:90b |
Для начала — llava:7b или llama3.2-vision (если GPU позволяет).
Установка
ollama pull llama3.2-vision Проверяем в чате:
ollama run llama3.2-vision
>>> [загружаем изображение] Что на этой картинке? API для работы с изображениями
import ollama
import base64
def analyze_image(image_path: str, question: str) -> str:
"""Задаём вопрос по изображению."""
with open(image_path, "rb") as f:
image_data = base64.b64encode(f.read()).decode()
response = ollama.chat(
model="llama3.2-vision",
messages=[{
"role": "user",
"content": question,
"images": [image_data]
}]
)
return response["message"]["content"]
# Примеры использования
print(analyze_image("screenshot.png", "Опиши, что на скриншоте"))
print(analyze_image("diagram.png", "Объясни эту архитектурную диаграмму"))
print(analyze_image("error.png", "Какая ошибка на скриншоте и как её исправить?")) Практические сценарии
1. OCR из скриншотов
text = analyze_image(
"terminal_screenshot.png",
"Извлеки весь текст с этого скриншота терминала. "
"Выведи только текст, без описания."
)
print(text) 2. Анализ Grafana-дашбордов
analysis = analyze_image(
"grafana_cpu.png",
"Проанализируй этот график CPU usage. "
"Есть ли аномалии? Какой тренд?"
) 3. Описание для документации
description = analyze_image(
"network_diagram.png",
"Опиши эту сетевую диаграмму для документации. "
"Перечисли все компоненты и связи между ними."
) 4. Автоматическая классификация
categories = ["скриншот кода", "диаграмма", "график", "фото", "мем"]
category = analyze_image(
"image.png",
f"К какой категории относится это изображение? "
f"Выбери одну из: {', '.join(categories)}. "
f"Ответь одним словом/фразой."
) 
Интеграция с Open WebUI
Open WebUI поддерживает мультимодальность из коробки. Если модель поддерживает изображения — в чате появляется кнопка загрузки:
- Скачиваем мультимодальную модель:
ollama pull llama3.2-vision - В Open WebUI выбираем эту модель
- Перетаскиваем изображение в чат
- Задаём вопрос
Это самый удобный способ для интерактивной работы.
Пайплайн: изображение → текст → действие
Комбинируем vision-модель с обычной LLM для сложных задач:
def smart_image_pipeline(image_path: str, task: str):
# 1. Vision: описываем изображение
description = ollama.chat(
model="llama3.2-vision",
messages=[{
"role": "user",
"content": "Подробно опиши это изображение",
"images": [encode_image(image_path)]
}]
)["message"]["content"]
# 2. LLM: выполняем задачу на основе описания
result = ollama.chat(
model="llama3.1:8b",
messages=[{
"role": "user",
"content": f"На основе описания изображения:\n{description}\n\n{task}"
}]
)
return result["message"]["content"]
# Пример: генерация alt-текста для веб-сайта
alt_text = smart_image_pipeline(
"product_photo.jpg",
"Напиши SEO-оптимизированный alt-текст для этого изображения. "
"Максимум 125 символов."
) Ограничения
- Скорость: анализ одного изображения — 5-15 секунд на RTX 3060
- Галлюцинации: модель может «увидеть» то, чего нет
- Текст: OCR работает, но хуже специализированных решений (Tesseract)
- Разрешение: высокое разрешение ≠ лучший результат (модели ресайзят внутри)
Итого
Мультимодальные модели локально — это реально. LLaVA/Llama 3.2 Vision через Ollama работают из коробки. Основные применения: OCR, анализ графиков, описание диаграмм, классификация изображений. Требуется GPU с 8+ GB VRAM.