Interleaved Content: Смешивание текста, изображений и видео в контексте

45 минут Урок 8

Введение: Выход за рамки «Картинка + Вопрос»

Добро пожаловать на урок, который изменит ваше представление о взаимодействии с мультимодальными моделями. До сих пор мы, вероятно, рассматривали мультимодальность как простой процесс: вы даете модели изображение (или видео) и задаете вопрос. Это классическая схема [Media] -> [Prompt].

Однако Gemini 3 API обладает гораздо более мощной возможностью — работой с чередующимся контентом (Interleaved Content). Это способность модели воспринимать и обрабатывать информацию, где текст, изображения и видео перемешаны в едином потоке, подобно тому, как они представлены в учебнике, новостной ленте или в живом диалоге, где вы показываете собеседнику фото на телефоне посреди рассказа.

В этом уроке мы научимся конструировать сложные промпты, где медиа-файлы выступают не просто как контекст, а как активные участники диалога, примеры для обучения (few-shot prompting) или последовательные шаги алгоритма.

Анатомия Interleaved Request

На техническом уровне, когда мы используем метод generate_content, мы передаем список parts. Ранее вы могли передавать туда просто строку текста или одно изображение. Но сила Gemini раскрывается, когда этот список превращается в хронологию событий.

Представьте, что вы объясняете модели, как выглядит «хороший» и «плохой» дизайн сайта. Словами это описать долго. Но используя чередование, вы можете построить такой запрос:

  • Текст: «Взгляни на этот пример. Здесь слишком низкий контраст.»
  • Изображение 1: (Скриншот плохого сайта)
  • Текст: «А вот здесь отличная типографика и отступы.»
  • Изображение 2: (Скриншот хорошего сайта)
  • Текст: «Теперь проанализируй следующий макет и скажи, к какой категории он относится и почему.»
  • Изображение 3: (Целевой макет для анализа)

Модель читает этот поток сверху вниз. Контекст изображения 1 влияет на понимание изображения 2, а оба они формируют критерии для оценки изображения 3.

python
import google.generativeai as genai
import PIL.Image

# Загружаем изображения (предположим, они у вас есть локально)
img_bad_contrast = PIL.Image.open('bad_contrast_example.png')
img_good_typography = PIL.Image.open('good_ux_example.png')
img_target = PIL.Image.open('user_submission.png')

model = genai.GenerativeModel('gemini-1.5-pro-latest') # Или gemini-3-ver

# Формируем список parts для Interleaved запроса
prompt_parts = [
    "Ты - эксперт по UX/UI дизайну. Давай разберем примеры.",
    "Пример 1. Ошибка: низкий контраст текста и фона, читать трудно.",
    img_bad_contrast,
    "Пример 2. Хорошая практика: четкая иерархия и достаточно 'воздуха'.",
    img_good_typography,
    "Задание: Проведи аудит следующего дизайна, основываясь на принципах выше. Дай рекомендации.",
    img_target
]

response = model.generate_content(prompt_parts)
print(response.text)

Мультимодальный Few-Shot Prompting

Один из самых мощных сценариев использования чередующегося контента — это мультимодальное обучение на примерах (Few-Shot). Вместо того чтобы писать огромные инструкции (system instructions) о том, как извлекать данные из чеков или как классифицировать дефекты на производстве, вы можете просто показать это.

В текстовых LLM мы привыкли давать примеры в формате:

Вопрос: 2+2? Ответ: 4.
Вопрос: 3+5? Ответ: ...

В Gemini 3 мы делаем то же самое, но с визуальными данными. Это критически важно для задач, где вербальное описание субъективно. Например, понятие «винтажный стиль» в одежде. Проще показать три фото «винтажа» и три фото «модерна», чем описывать это словами.

Ключевой принцип: Последовательность имеет значение. Модель «держит в уме» предыдущие изображения как часть текущего контекста. Если вы разорвете логическую цепочку лишним текстом, качество может упасть.

python
# Пример: Обучаем модель читать специфические показания аналоговых приборов
# без сложного промпт-инжиниринга, просто на примерах.

response = model.generate_content([
    "Задача: Определи показания манометра. Формат ответа: JSON {value: число, unit: 'bar'}",
    
    # Пример 1
    img_gauge_1, 
    "```json\n{\"value\": 2.5, \"unit\": \"bar\"}\n```",
    
    # Пример 2
    img_gauge_2,
    "```json\n{\"value\": 10.0, \"unit\": \"bar\"}\n```",
    
    # Целевой запрос
    img_current_reading,
    "Ответ:"
])

Смешивание Видео и Текста

Видео для Gemini — это, по сути, последовательность кадров с временными метками. Но работа с видео в режиме interleaved открывает уникальные возможности для анализа намерений и причинно-следственных связей.

Представьте задачу анализа записей с камеры наблюдения. Вы можете подать видео, а затем текстовый вопрос. Но что, если вам нужно сравнить два видеофрагмента?

Вы можете передать: [Видео 1], [Текст: 'Посмотри, как здесь сотрудник упаковывает товар'], [Видео 2], [Текст: 'А здесь он допускает ошибку. В чем разница?'].

Важный нюанс: Видеофайлы обычно тяжелее изображений по токенам (в зависимости от фреймрейта выборки). При смешивании нескольких видео следите за общим лимитом контекстного окна (хотя у Gemini 1.5/3 оно огромно, хорошие практики экономии ресурсов никто не отменял).

Упражнение

Вы создаете бота-ассистента для магазина мебели. Вам нужно написать структуру списка `parts` (на Python или псевдокоде) для следующего сценария:<br>1. Пользователь присылает фото своей гостиной.<br>2. Бот должен 'посмотреть' на фото.<br>3. Пользователь пишет: 'Я хочу диван в таком стиле, но зеленого цвета'.<br>4. Бот должен получить изображение дивана из каталога (представим, что у нас есть переменная `catalog_sofa_img`).<br>5. Бот должен сравнить, впишется ли этот диван в интерьер на первом фото.<br><br>Напишите только формирование списка `request_content`.

Тонкости и лучшие практики

При работе с Interleaved Content есть несколько подводных камней, о которых отличает новичка от эксперта:

  1. Явные ссылки (Explicit Referencing): Хотя модель умна, лучше явно указывать: «на первом изображении», «на предыдущем графике». Это снижает галлюцинации при работе с 3+ медиафайлами.
  2. Роль «Склеивающего» текста: Не оставляйте изображения просто висеть в списке подряд, если они не являются серией кадров. Вставка даже короткого текста между ними (например, «А теперь вид сбоку») значительно улучшает понимание пространственных связей моделью.
  3. Порядок модальностей: Эксперименты показывают, что структура [Контекст/Правила] -> [Примеры Изображение+Текст] -> [Целевое Изображение] -> [Вопрос] работает стабильнее всего. Попытка дать правила после примеров может привести к тому, что модель начнет генерировать описание раньше, чем «осознает» правила.

Вопрос

Почему при использовании Few-Shot prompting с изображениями важно сохранять строгую последовательность [Изображение 1, Текст 1, Изображение 2, Текст 2]?

Заключение

Interleaved Content — это мост между разрозненными данными и осмысленным анализом. Используя эту технику, вы переходите от простых запросов к созданию сложных аналитических систем, способных «смотреть» фильмы, сравнивать документы, обучаться визуальным паттернам на лету и выступать в роли полноценного мультимодального ассистента.

В следующем уроке мы разберем, как управлять параметрами генерации (Temperature, Top-K) именно для мультимодальных задач, так как они влияют на креативность описания изображений иначе, чем на чистый текст.