Команда Kapa строит ассистентов, которые отвечают на вопросы по технической документации. В базах знаний лежат миллионы изображений: скриншоты, схемы, таблицы. Инженеры потратили несколько месяцев, чтобы научиться их использовать в RAG-пайплайне.
Они не отправляют картинки модели в момент запроса. Каждое изображение описывается один раз, на этапе индексации, дешёвой vision-моделью. Описание сохраняется как текст и ищется вместе с обычными текстовыми кусками. Индексация платится один раз. После этого накладные расходы на запрос — от 1% до 6% сверх текстового режима. Ответы при этом статистически значимо лучше.
Сначала инженеры проверили очевидный путь: достать релевантные чанки, собрать привязанные картинки и скормить всё мультимодальной модели. Протестировали с GPT 5.1 и Claude 4.6 Sonnet. Столкнулись с тремя проблемами. Экономика не работает: картинки добавляли 27% к стоимости на GPT и 51% на Claude (Claude токенизирует изображение примерно в 975 токенов против 716 у GPT). При миллионах запросов это неприемлемо. Физически не влезают: типовой запрос вытаскивает 20–30 картинок, а лимит Claude — 30 MB. Мультимодальный поиск не подходит для этой задачи: CLIP-эмбеддинги теряют детали из таблиц и аннотированных скриншотов, а короткие технические запросы дают слишком слабый сигнал.
Поэтому построили иную архитектуру. При индексации VLM пишет подпись для каждого изображения. Подпись хранится отдельным чанком. В момент запроса ретривер достаёт её как обычный текст, модель видит только подпись, а картинку не загружает. Тяжёлая работа делается один раз при загрузке.
Пришлось решить несколько продакшн-задач. Фильтрация: бОльшая часть картинок — мусор (логотипы, аватарки, декоративные баннеры). Эвристики убирают очевидное (неподдерживаемые форматы, крошечные размеры). Для остального построили zero-shot классификатор на мультимодальных эмбеддингах. На чётких картинках точность 96,8%, на неоднозначных падает до 59,8% — два визуально одинаковых скриншота могут значить разное в зависимости от контекста. Это приняли как данность. Контекст при описании картинки оказался важнее размера модели: если скормить модели абзацы до и после изображения, качество подписи резко скачет. Дорогие модели почти не дают выгоды: GPT 5.4 mini неотличим от моделей вчетверо дороже. Хранение отдельными чанками победило встраивание в документ: встроенные подписи раздувают чанки и грузятся на каждый запрос, даже если картинка не нужна. Отдельные чанки попадают в контекст только по релевантности.
Результаты на трёх проектах с GPT 5.1 и Claude 4.6 Sonnet: картинки цитируются в ответах в 10–64% случаев, качество ответов значимо выше, стоимость запроса выросла на 1–6%, задержка — менее секунды, точность размещения изображений — 94–99%. Индексация — разовая плата. Решение выходит в превью.