Мультимодальность
Мультимодальные модели работают не только с текстом — они понимают изображения, аудио, видео и документы, и могут комбинировать разные типы данных в одном запросе.
Что такое модальность
Модальность — тип входных/выходных данных:
| Модальность | Примеры |
|---|---|
| Текст | Промты, ответы, код |
| Изображение | PNG, JPEG, скриншоты, схемы |
| Аудио | Речь, звук |
| Видео | MP4, последовательности кадров |
| Документы | PDF, таблицы Excel |
Поддержка модальностей по моделям
| Модель | Текст | Картинки | Аудио | Видео | |
|---|---|---|---|---|---|
| GPT-4o | ✓ | ✓ | ✓ | — | ✓ |
| GPT-4o mini | ✓ | ✓ | — | — | ✓ |
| Claude Sonnet/Opus | ✓ | ✓ | — | — | ✓ |
| Gemini 1.5 Pro | ✓ | ✓ | ✓ | ✓ | ✓ |
| Gemini 2.0 Flash | ✓ | ✓ | ✓ | ✓ | ✓ |
| Llama 3.2 Vision | ✓ | ✓ | — | — | — |
Vision — работа с изображениями
Что умеют
- Описание — что изображено на картинке
- Анализ — данные, графики, диаграммы
- OCR — извлечение текста с изображений
- Сравнение — найти различия между двумя картинками
- UI/UX — анализ скриншотов интерфейсов
- Документы — читать сканы, рукописный текст
- Код с диаграмм — генерировать код по схеме или макету
Как передать изображение в API
URL:
# OpenAI
messages=[{
"role": "user",
"content": [
{"type": "image_url", "image_url": {"url": "https://example.com/image.png"}},
{"type": "text", "text": "Опиши что на картинке"}
]
}]
Base64:
import base64
with open("image.png", "rb") as f:
image_data = base64.b64encode(f.read()).decode("utf-8")
# Anthropic
messages=[{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/png",
"data": image_data
}
},
{"type": "text", "text": "Что на изображении?"}
]
}]
Ограничения Vision
| Ограничение | Детали |
|---|---|
| Размер файла | Обычно до 20 МБ |
| Форматы | PNG, JPEG, GIF, WebP |
| Качество OCR | Хуже специализированных OCR-систем |
| Точный счёт | Модели плохо считают объекты (>10 штук) |
| Мелкий текст | Плохо читает очень мелкий шрифт |
| Конфиденциальность | Изображения отправляются в облако |
Стоимость изображений (токены)
Изображения тоже тратят токены. Стоимость зависит от размера:
Маленькое (< 512×512) ≈ 85 токенов (detail: low)
Большое (1024×1024) ≈ 765 токенов (detail: high)
У Anthropic: ~1500–2500 токенов за стандартное изображение.
Audio — работа с речью
Speech-to-Text (транскрипция)
Whisper (OpenAI) — лучший публичный STT-инструмент:
from openai import OpenAI
client = OpenAI()
with open("audio.mp3", "rb") as f:
transcript = client.audio.transcriptions.create(
model="whisper-1",
file=f,
language="ru" # опционально, ускоряет
)
print(transcript.text)
Поддерживаемые форматы: MP3, MP4, MPEG, MPGA, M4A, WAV, WEBM
Лимит файла: 25 МБ
Качество: поддерживает 99 языков, включая русский
Realtime Audio (GPT-4o)
GPT-4o поддерживает Realtime API — речь в реальном времени без промежуточной транскрипции:
Микрофон → WebSocket → GPT-4o → Аудио-ответ
Применение: голосовые ассистенты, call center боты, интерактивные системы.
Text-to-Speech
response = client.audio.speech.create(
model="tts-1", # или tts-1-hd для лучшего качества
voice="alloy", # alloy, echo, fable, onyx, nova, shimmer
input="Привет, это тестовый текст"
)
response.stream_to_file("output.mp3")
Video — работа с видео
Пока только Gemini поддерживает видео нативно:
import google.generativeai as genai
# Загрузка видео
video_file = genai.upload_file("video.mp4")
model = genai.GenerativeModel("gemini-1.5-pro")
response = model.generate_content([
video_file,
"Сделай краткое описание видео и выдели ключевые моменты"
])
Ограничения:
- До 1 часа видео (в рамках 1M контекста)
- Модель "видит" кадры, не понимает аудио отдельно
- Файл нужно загрузить заранее (File API)
PDF и документы
Нативная поддержка PDF
Claude и GPT-4o читают PDF напрямую — текст извлекается автоматически, сохраняется структура.
# Anthropic — PDF через base64
with open("document.pdf", "rb") as f:
pdf_data = base64.b64encode(f.read()).decode("utf-8")
messages=[{
"role": "user",
"content": [
{
"type": "document",
"source": {
"type": "base64",
"media_type": "application/pdf",
"data": pdf_data
}
},
{"type": "text", "text": "Сделай краткое резюме документа"}
]
}]
Ограничения PDF
| Ограничение | Детали |
|---|---|
| Размер | Обычно до 32 МБ или 100 страниц |
| Сканы | Плохо работает с отсканированными PDF без OCR-слоя |
| Таблицы | Иногда теряется структура сложных таблиц |
| Формулы | Математические формулы читаются плохо |
Практические кейсы
Анализ скриншота ошибки
Пользователь: [скриншот] + "Что за ошибка и как исправить?"
Модель: читает текст ошибки, анализирует стек-трейс, даёт решение
Извлечение данных из документа
"Из приложенного PDF извлеки все суммы договоров в JSON формат:
{contractor: string, amount: number, currency: string}"
Анализ UI макета
"По этому макету напиши React-компонент"
"Что улучшить в этом интерфейсе с точки зрения UX?"
Транскрипция встречи
# 1. Транскрибировать аудио встречи
transcript = client.audio.transcriptions.create(model="whisper-1", file=audio)
# 2. Сформатировать в структурированный документ
summary = client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "user",
"content": f"Из этой транскрипции выдели:\n1. Ключевые решения\n2. Action items\n3. Участники\n\nТранскрипция:\n{transcript.text}"
}]
)
Резюме
| Модальность | Лучшая модель | Ключевое применение |
|---|---|---|
| Изображения | GPT-4o, Claude | Анализ, OCR, UI-ревью |
| STT | Whisper | Транскрипция речи |
| TTS | OpenAI TTS | Озвучивание текста |
| Realtime аудио | GPT-4o Realtime | Голосовые ассистенты |
| Видео | Gemini 1.5 Pro | Анализ видео-контента |
| PDF/документы | Claude, GPT-4o | Анализ документов |