Суть
Модель «подхватывает» паттерн прямо из контекста запроса: показав 2–3 примера «вход → выход», вы конкретизируете задачу лучше, чем длинным текстовым описанием.
Зачем это нужно
Дешёвый способ поднять качество без дообучения (см. LLM Training Stages): примеры задают формат вывода и уточняют намерение. Особенно помогает на классификации, разметке, специфичных форматах. Оговорка: «улучшает не всегда и не везде», но на многих задачах/моделях — заметно.
Как работает
- Zero-shot: только описание задачи («переведи с английского на французский: …»).
- One-shot: описание + 1 пример решения.
- Few-shot: описание + несколько примеров.
- Это называют in-context learning: модель «учится» по примерам в контексте, без обновления градиентов (есть и техники few-shot с обновлением градиентов — это уже другое).
- Что именно переносят примеры — не то, что кажется. Замер с намеренно перепутанными ответами в примерах показал, что правильность самих ответов вносит гораздо меньше, чем ожидается; основной вклад дают набор допустимых меток, распределение входного текста и формат. То есть примеры показывают модели форму задачи, а не учат её решать. Практических следствий два: примеры обязаны покрывать все метки и быть похожими на настоящий вход, а вылизывать в них правильность ответа до последнего — не там, где лежит выигрыш.
- Способность к emergent few-shot проявилась с ростом моделей (GPT-3).
- «Запекание» примеров в системный промпт (Anthropic): примеры — главный способ «раздвинуть границы» приложения. Организуй feedback loop: где модель ошиблась — добавляй этот кейс в example set, чтобы в следующий раз она ссылалась на него. Сильнее всего помогает на пограничных/сложных случаях.
Пример
Задача: классифицируй запрос → [навигационный | информационный | транзакционный]
Пример: "сайт сбербанка" → навигационный
Пример: "как испечь хлеб" → информационный
Пример: "купить iphone 15" → транзакционный
Запрос: "погода в москве" →
Сколько примеров и как их выбирать
Количество. Отдача убывающая и быстро: основной прирост даёт переход от нуля к одному-двум примерам — модель понимает формат и уровень детализации. Дальше кривая выполаживается, а стоимость растёт линейно, причём дважды: примеры занимают контекст и оплачиваются как входные токены на каждом запросе, а не один раз. Стабильный набор примеров при этом хорошо кэшируется, если стоит в начале промпта (Prompt Caching) — это и есть способ сделать few-shot дешёвым.
Признак, что примеров слишком много: модель начинает копировать их содержание, а не форму — в ответах всплывают сущности из примеров. Это не «мало примеров, добавим ещё», а сигнал сократить и разнообразить.
Подбор. Главный риск — не малое число, а смещение: если все примеры одного типа, модель считает этот тип нормой и на остальных случаях отвечает хуже, чем без примеров вовсе. Отсюда правило: примеры покрывают разные классы входа, включая пограничные и тот случай, где правильный ответ — отказ или уточняющий вопрос. Последнее забывают чаще всего, и в результате модель, обученная примерами всегда отвечать, не умеет сказать «данных нет».
Практический источник примеров — тот же eval-набор со срезами (Agent Evals): он уже собран по классам входа, и брать примеры оттуда надёжнее, чем придумывать.
Связано с
- Prompt Engineering — few-shot как техника внутри «контракта»
- Chain of Thought — часто комбинируют: примеры + рассуждения
- LLM Training Stages — in-context vs реальное дообучение