TL;DR
Visual ICL (in-context learning, обучение на примерах прямо в промпте) для моделей, которые работают с картинками (VLM), означает: перед вопросом ты показываешь несколько пар «изображение → правильный ответ». Модель переключается с «как обычно бывает у такого объекта» на «что реально видно на этом изображении». Примеры нужно подбирать так, чтобы ответы были сбалансированы, а нетипичные случаи шли вместе с типичными.
Главная находка: когда модель ошибается на нестандартной картинке, она часто умеет видеть нужное, но привычка побеждает глаза. На трёхногом павлине она говорит «2 ноги», потому что у птиц обычно две. Это ошибка не зрения, а «авторитета знаний». Прирост от 16 примеров на нетипичных картинках в крупных моделях составил около +15…+27 п.п., а на обычных картинках точность почти не изменилась.
Метод одношаговый: в один запрос кладёшь 8–16 пар «картинка → ответ» из той же задачи, а потом задаёшь свой вопрос. Важное условие: модель должна уметь делать нужную операцию. Если способности нет (например, считать 4–5 объектов в сложной сцене), примеры почти не помогают.
Схема метода
ШАГ 1: Сформулируй задачу + закрытый список ответов → одна строка инструкции
ШАГ 2: Подбери 8–16 примеров (картинка → ответ) из ТОЙ ЖЕ задачи
• ответы сбалансированы (не 12 «красных» и 2 «синих»)
• типичные и нетипичные случаи вперемешку
ШАГ 3: Добавь запрос: новая картинка + тот же вопрос → ответ одним словом из списка
(всё в одном промпте, примеры идут ДО вопроса)
Пример применения
Задача: Ты ведёшь модерацию карточек на маркетплейсе (Ozon, Wildberries). Нужно автоматически сверять заявленный цвет товара с фото. Модель стабильно «исправляет» реальность: на фото синие бананы для кондитерской фотосессии она отвечает «жёлтый», потому что бананы жёлтые. Это сильная зона метода: цвет модель различает легко, мешает только привычка.
Промпт:
Ты проверяешь фото товаров для маркетплейса. Определи основной цвет
предмета ТАК, КАК ОН ВИДЕН НА ЭТОМ ФОТО. Не опирайся на то, какого цвета
такой предмет обычно бывает. Допустимые ответы: красный, синий, жёлтый,
зелёный, розовый, фиолетовый, чёрный, белый.
Пример 1: [фото розового банана]. Вопрос: какой цвет предмета? Ответ: розовый
Пример 2: [фото жёлтого лимона]. Вопрос: какой цвет предмета? Ответ: жёлтый
Пример 3: [фото синей кружки "Хохлома"]. Вопрос: какой цвет предмета? Ответ: синий
Пример 4: [фото красного огурца]. Вопрос: какой цвет предмета? Ответ: красный
Пример 5: [фото зелёного помидора]. Вопрос: какой цвет предмета? Ответ: зелёный
Пример 6: [фото чёрного банана]. Вопрос: какой цвет предмета? Ответ: чёрный
... (до 8–16 примеров, ответы сбалансированы)
Теперь задача: [фото синего банана]. Вопрос: какой цвет предмета?
Ответ одним словом из списка.
Результат: Модель выдаст одно слово из списка. Ожидай, что на нетипичных фото (синий банан) ответ станет чаще совпадать с реальным цветом, чем при запросе без примеров. На обычных фото (жёлтый лимон) качество почти не изменится. Если в выборке остались ошибки, смотри, не слишком ли однообразны примеры.
Почему это работает
Слабость. Модель училась на миллиардах картинок, где у павлина две ноги, а банан жёлтый. Когда на картинке иначе, внутри конкурируют два «пути ответа». Первый путь: узнать объект и ответить по привычке. Второй: посмотреть на пиксели и посчитать или определить. Если у запроса нет подсказки, какой путь нужен, чаще выигрывает привычка.
Сильная сторона. Модель хорошо ловит правило задачи по примерам. Пары «картинка → ответ» показывают ей: здесь нужен именно визуальный ответ. По исследованию, у модели внимание смещается с токенов «павлин» на токены «ноги». Примеры работают как указатель, а не как новое знание.
Как метод это использует. Примеры сдвигают вероятность в сторону пути «смотри на изображение». Баланс ответов нужен, чтобы выигрыш нельзя было объяснить тем, что модель просто выучила «чаще отвечать X».
Рычаги управления: - Число примеров: 1–2 почти ничего не дают. Рост идёт к 16, у больших моделей ещё и до 32. Для простых случаев хватит 4–8, это экономит токены и деньги. - Баланс ответов: уравнивай классы. Иначе модель начнёт угадывать по частоте. - Состав примеров: добавляй и типичные, и нетипичные случаи. Только «странные» примеры могут сместить модель в другую сторону. - Формулировка инструкции: требуй «закрытый список ответов» и «отвечай по тому, что видно, а не по привычке». Это сужает пространство и снижает болтовню. - Размер модели: на маленьких моделях (порядка 4–8B) эффект слабее и менее избирателен. Они больше перенимают формат ответа, чем смысл примеров.
Шаблон промпта
Ты проверяешь изображения. Задача: {что определить}.
Отвечай ТОЛЬКО по тому, что реально видно на этом изображении.
Не опирайся на то, как это обычно выглядит у такого объекта.
Допустимые ответы: {список ответов}.
Пример 1: {изображение_1}. Вопрос: {вопрос}. Ответ: {ответ_1}
Пример 2: {изображение_2}. Вопрос: {вопрос}. Ответ: {ответ_2}
...
Пример {N}: {изображение_N}. Вопрос: {вопрос}. Ответ: {ответ_N}
Теперь задача: {новое_изображение}. Вопрос: {вопрос}.
Ответ — одно значение из списка.
Что подставлять:
- {что определить}: одна операция (цвет, форма, число, направление, взаимное положение).
- {список ответов}: закрытый набор вариантов, как можно меньше.
- Примеры: 8–16 штук из ТОЙ ЖЕ задачи. Ответы сбалансированы, нетипичные случаи есть.
- {вопрос}: одна и та же формулировка во всех примерах и в запросе.
🚀 Быстрый старт — вставь в чат:
Вот шаблон визуального few-shot для проверки изображений. Адаптируй под
мою задачу: [твоя задача]. Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит, что именно определять на изображении, какие допустимые ответы, и какие типичные и нетипичные случаи у тебя встречаются. Это нужно, чтобы собрать сбалансированный набор примеров и закрытый список ответов, на которых держится метод.
Ограничения
⚠️ Нужна базовая способность: если модель плохо делает саму операцию, примеры почти не помогают. Прирост падал на сложном счёте (4–5 объектов), где модели приходится полагаться на хрупкое зрение. Метод выбирает уже имеющееся умение, а не создаёт его.
⚠️ Маленькие модели: у моделей небольшого размера эффект слабее и менее избирателен. Они в основном подхватывают формат ответа. В одном случае с 16 примерами точность на нетипичных картинках упала ниже, чем без примеров.
⚠️ Цена за обычные случаи: на типичных картинках точность в целом не страдала, но в счёте она снижалась на 6–7 п.п. Проверяй качество на обоих типах случаев.
⚠️ Узкая постановка: задачи были закрытые, с одним верным ответом из короткого списка. Для открытых описаний картинок выводы напрямую не переносятся.
⚠️ Лабораторные данные: картинки в основном искусственные, часть сгенерирована и отредактирована. Модели открытые (Qwen, InternVL, Gemma), не GPT, Claude или Gemini в их чат-версиях. Проверь эффект на своих фото.
⚠️ Механистическая часть недоступна: маскирование «подсказывающих» токенов в картинке требует доступа к внутренностям модели. В чате это не повторить, применим только приём с примерами.
Как исследовали
Идея была простой: если модель не справляется с нестандартной картинкой, то либо не умеет смотреть, либо привычка перекрывает зрение. Авторы использовали примеры в промпте как диагностический инструмент. Если примеры чинят ошибку, значит, зрение работало.
Они собрали набор из пяти задач: счёт ног животных, цвет животного, форма дорожного знака, направление объекта и пространственное положение. В каждой есть «реальные» картинки (привычка и факт совпадают) и «контрфактические» (привычка и факт расходятся, например ромбовидный знак «Стоп» или трёхногий павлин). Контрфактические картинки получали точечной правкой: меняли только нужное свойство, остальное оставляли. Картинки проверяли двое разметчиков вслепую.
Проверяли модели Qwen3-VL от 2B до 235B и ещё четыре семейства (Qwen2.5-VL, Qwen3.5, InternVL3.5, Gemma-4) на 0, 1, 2, 4, 8, 16 и 32 примерах, по 10 разных наборов примеров на каждую задачу. Примеры были сбалансированы по ответам. Главная проверка: если примеры учат только формату, прирост будет одинаков на реальных и контрфактических картинках. Прирост оказался неравномерным. У Qwen3-VL 235B на контрфактических картинках он составил +27,2 п.п., на реальных +2,9 п.п. У 32B: +15,1 против −1,6. Все семейства улучшились при ~30B, от +9,7 до +30,3 п.п.
Затем авторы заглянули внутрь моделей и показали, что при примерах внимание смещается с признаков «привычки» на признаки «реального ответа». Маскирование «привычных» токенов даёт сходный эффект. Удивило и вывод, который полезен практику: на маленьких моделях и на сложном счёте примеры почти не работают. Значит, метод выбирает имеющуюся способность, а не создаёт новую.
Адаптации и экстраполяции
🔧 Техника: добавить «антипривычную» инструкцию + примеры → ещё меньше вероятность ответа по привычке
В начале промпта: «Правило: если на фото то, что отличается от нормы, ответь по фото. Норма не аргумент». Эффект этой фразы в статье отдельно не измеряли, измеряли примеры. Бери её как дополнение, не как замену.
Экстраполяция (в статье не проверялось): в агентах, которые смотрят скриншоты (Claude Code, Cursor с картинками), в файл инструкций можно положить 3–6 пар «скриншот интерфейса → что именно сломано». Особенно нетипичные: кнопка на непривычном месте, нестандартный цвет статуса. Гипотеза та же: показываем, что нужно смотреть на пиксели, а не на «как обычно бывает». Проверяй на своих скриншотах.
Ресурсы
- Работа: In-Context Learning Can Help Vision-Language Models Overcome Training Priors
- Авторы: Kun Wang, Xindi Wu, Sanghyuk Chun, Olga Russakovsky, Esin Tureci
- Университет: Princeton University
- Упомянутые модели: Qwen3-VL, Qwen2.5-VL, Qwen3.5, InternVL3.5, Gemma-4
- Инструменты анализа: logit lens, LatentLens (для механистической части, читателю не нужны)
