Заметки

Few-shot и примеры в промпте: как получить нужный ответ

M
Markabus
·1 сентября 2026 г.
Вид сверху на рабочий стол: ряд бумажных карточек с короткими парами «вход — выход», рядом ручка, механическая клавиатура и край экрана с кодом

Модель отвечает не так, как вы хотели: формат плавает, тон не тот, ярлыки классификации она придумывает свои. Вы дописываете в инструкцию ещё абзац, потом ещё один — и получаете простыню правил, которая всё равно не работает. Обычно помогает другое: нужный результат стоит не описывать словами, а показать. Два-три примера «вход → выход» делают то, чего не добиться и десятью строками инструкций. Приём называется few-shot (буквально «несколько подходов») и остаётся самым дешёвым способом стабилизировать ответы модели.

Что такое few-shot и откуда взялся термин

Термин пришёл из статьи OpenAI «Language Models are Few-Shot Learners» (Brown et al., 2020) — той самой, где представили GPT-3. Авторы показали: большая языковая модель осваивает новую задачу прямо в момент запроса, если положить в промпт несколько решённых примеров. Дообучать не нужно, она подхватывает закономерность из контекста. Явление назвали in-context learning — «обучение в контексте».

Отсюда и шкала «shot» — сколько решённых примеров вы дали:

  • Zero-shot — примеров нет, только инструкция: «Определи тональность отзыва». Современные модели с простыми задачами так справляются нормально.
  • One-shot — один пример. Часто хватает, чтобы задать формат.
  • Few-shot — несколько примеров, обычно 3–5. Рабочий режим для задач со своей спецификой.

Важно понимать, что модель при этом не «учится» в привычном смысле: веса не меняются, после ответа контекст забывается. Примеры работают как образец, по которому достраивается следующий ответ. Поэтому few-shot — не замена дообучению (fine-tuning), а промежуточный вариант: дешевле, быстрее, правится за секунду, но действует только в пределах одного запроса.

Когда примеры действительно нужны

Примеры дают выигрыш там, где нужное поведение сложно описать словами, но легко продемонстрировать:

  • Формат ответа. Нужен свой шаблон или строгая длина — покажите две-три готовые строки, и модель повторит структуру точнее, чем по описанию.
  • Тон и стиль. «Пиши дружелюбно, но без панибратства» — фраза, под которой каждый понимает своё. Три реальных ответа вашей поддержки снимают вопрос.
  • Свои ярлыки и категории. О границах класса «возврат-частичный» модель не догадается — примеры показывают, что в него попадает, а что нет.
  • Пограничные случаи. Отдельным примером удобно показать поведение, когда данных не хватает: вернуть null, попросить уточнение, поставить класс «другое».

Когда лучше обойтись без примеров

Few-shot — не бесплатный приём, и не всегда лучший. Обойтись без него стоит, если:

  • Задача общеизвестная. Перевод, пересказ, исправление грамматики — модель и так знает, что делать. Примеры только съедят токены.
  • Формат можно задать схемой. Для JSON фиксированной структуры надёжнее режим структурированного вывода, чем надежда, что модель повторит форму из примеров, — см. Структурированный вывод (JSON) от модели.
  • Задача требует рассуждения, а не формы. Тогда полезнее показать в примере ход мысли, а не только готовый ответ.

Как собрать хороший набор примеров

Сколько штук

Anthropic в документации по промптингу даёт ориентир 3–5 примеров. Google в руководстве для Gemini предупреждает о другой крайности: слишком большой набор ведёт к «переобучению» под примеры — модель начинает копировать их буквально, вплоть до подстановки данных из примера в ответ. Универсального числа нет: начните с трёх, добавляйте по одному и смотрите, меняется ли качество.

Разнообразие важнее количества

Пять почти одинаковых примеров хуже трёх разных. Модель ищет закономерность и подхватывает любую, что есть в наборе, — в том числе ту, которую вы не имели в виду. Если все ваши примеры короткие сообщения от физлиц, на длинной претензии от юрлица разметка поедет. Набор примеров должен быть маленькой копией вашего реального потока данных, со всеми его перекосами.

Отсюда же следует: берите примеры из настоящих данных, а не сочиняйте. Придуманные всегда получаются слишком чистыми — без опечаток, обрывов, эмодзи и смеси языков, которые есть в реальных обращениях.

Одинаковая разметка

Формат всех примеров должен совпадать до символа. Google прямо указывает: разная структура примеров даёт ответы в неожиданном формате. Если в одном примере поле «Категория:», а в другом «Класс:», модель будет чередовать оба.

Удобный способ отделить примеры от инструкций — XML-подобные теги. И OpenAI, и Anthropic в своих руководствах показывают именно такую разметку:

<examples>
  <example>
    <input>Заказ не пришёл, жду вторую неделю</input>
    <output>доставка</output>
  </example>
  <example>
    <input>Пришла кофеварка, но без фильтра в коробке</input>
    <output>комплектация</output>
  </example>
  <example>
    <input>Здравствуйте</input>
    <output>другое</output>
  </example>
</examples>

Теги здесь — просто устойчивые разделители: модели хорошо видят такие границы и не путают образец с заданием. Роль и список правил лучше держать отдельно, в системном промпте, — об этом заметка Системный промпт: как задать модели роль и правила.

Порядок и баланс — не мелочь

На этом спотыкаются чаще всего. В работе «Calibrate Before Use» (Zhao et al., 2021) показано, что few-shot-промпт крайне чувствителен к деталям: выбор примеров, их порядок и формат могут менять точность «от почти случайной до почти лучшей в классе». Авторы описали три перекоса:

  • Перекос большинства (majority label bias). Если среди примеров четыре «спам» и один «не спам», модель начинает чаще отвечать «спам» независимо от входа. Держите классы примерно в равных долях.
  • Перекос по свежести (recency bias). Ответ из последнего примера имеет больше влияния, чем из первого. Не ставьте все примеры одного класса подряд в конце — перемешайте.
  • Перекос по частым токенам (common token bias). Модель охотнее выдаёт слова, часто встречавшиеся при обучении: редкое название класса проигрывает привычному. Иногда достаточно переименовать ярлык, чтобы точность выросла.

Вывод простой: если качество «плавает» без видимой причины, прежде чем менять модель, перемешайте примеры и выровняйте классы.

Как выглядит рабочий промпт целиком

Сложите части в привычном порядке: роль и правила → примеры → само задание.

Ты классифицируешь обращения в поддержку интернет-магазина.
Выбери ровно одну категорию из списка:
доставка, оплата, комплектация, возврат, другое.
Ответь одним словом из списка, без пояснений.
Если обращение не подходит ни под одну категорию, ответь: другое.

<examples>
  ... три-пять пар вход/выход, классы вперемешку ...
</examples>

Обращение: {текст}
Категория:

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

Частые ошибки

  • Примеры противоречат инструкции. В правилах «отвечай кратко», а в примерах — абзац на пять строк. Модель почти всегда идёт за примером: он конкретнее.
  • В примерах только «хорошие» случаи. Ни одного отказа, ни одного пустого поля — и на реальных данных модель начинает выдумывать вместо честного «не знаю».
  • Примеры устарели вместе с продуктом. Категории переименовали, а в промпте живут старые. Набор примеров — часть кода: держите его в репозитории и ревьюите.
  • В примерах реальные персональные данные. Промпт уходит к внешнему провайдеру целиком и при каждом запросе — обезличивайте, см. Как не слить данные через ИИ.
  • Примеры подставляются из пользовательского ввода. Динамический подбор примеров из базы, куда пишут пользователи, открывает дорогу подмене инструкций — см. Промпт-инъекция: что это и как защититься.

Проверяйте, а не угадывайте

Главная ловушка few-shot в том, что улучшение легко почувствовать, а ухудшение — трудно заметить: вы правите промпт, смотрите два-три ответа, они выглядят лучше — и катите в прод. Через неделю выясняется, что на другом типе входа стало хуже.

Лечится это набором тестовых случаев с известными правильными ответами, который прогоняется при каждой правке промпта; двадцати-тридцати штук уже достаточно, чтобы поймать заметную регрессию. Как это устроить — в заметке Как тестировать AI-агента: гайд по evals. Важное правило: тестовые случаи не должны пересекаться с примерами из промпта, иначе вы измеряете, насколько хорошо модель копирует, а не насколько хорошо обобщает.

Сколько это стоит

Примеры лежат в промпте и оплачиваются как входные токены при каждом запросе — пять развёрнутых примеров легко дают лишние полторы-две тысячи токенов. Отсюда два следствия. Первое: сокращайте примеры до сути. Для задачи классификации не нужно письмо целиком — хватит характерного фрагмента. Второе: блок с примерами неизменен от запроса к запросу, а значит, это идеальный кандидат на кеширование промпта — общий префикс считается один раз и дальше идёт по сниженной цене. Держите примеры в начале промпта, до меняющихся данных, иначе кеш не сработает. Механику и экономию разбирали в заметках Кэширование промптов и Токены и лимиты: как считать и экономить.

Отдельный случай — динамический few-shot: примеры не зашиты в промпт, а подбираются под запрос поиском по базе похожих случаев. По сути это тот же механизм, что и в RAG, только вместо документов достаются решённые задачи. Приём мощный, но кеш при нём не работает, а инфраструктуру векторного поиска придётся поднимать, — начинать с него не стоит.

Коротко

Few-shot — не «магическая фраза», а способ заменить длинное описание коротким показом. Возьмите три-пять реальных случаев, приведите к одинаковому формату, отделите тегами от инструкции, выровняйте классы и перемешайте порядок. Затем прогоните на тестовом наборе и смотрите на цифры, а не на ощущения. Если качество не растёт, шестой пример обычно бесполезен: дело не в примерах, а в постановке задачи. Что пробовать дальше — в заметке Промпт-инжиниринг: практические приёмы, которые работают.

Частые вопросы

Q.Сколько примеров класть в промпт?

Ориентир из документации Anthropic — 3–5. Начните с трёх и добавляйте по одному, проверяя качество на тестовом наборе. Слишком большой набор вреден: Google предупреждает, что модель начинает копировать примеры буквально, вплоть до подстановки данных из примера в ответ.

Q.Чем few-shot отличается от дообучения модели?

При few-shot веса модели не меняются: примеры лежат в промпте и действуют только в пределах одного запроса, после ответа контекст забывается. Это дешевле и правится за секунду, но оплачивается входными токенами при каждом вызове. Дообучение (fine-tuning) меняет саму модель — дороже и дольше, зато примеры не нужно возить в каждом запросе.

Q.Почему при одном и том же наборе примеров качество плавает?

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

Q.Примеры сильно увеличивают счёт за API?

Да, они оплачиваются как входные токены при каждом запросе — пять развёрнутых примеров легко дают лишние полторы-две тысячи токенов. Сокращайте примеры до характерного фрагмента и держите блок с ними в начале промпта: он не меняется от запроса к запросу, поэтому попадает под кеширование промпта.

Источники

Предыдущая
Промпт для генерации изображения: как добиться фотореализма

Читайте также

Рабочий стол ретушёра в полутёмной студии: крупный монитор с фотореалистичным снимком и панелями цветокоррекции, рядом фотоаппарат со светосильным объективом, калибровочная карта и тестовые отпечаткиЗаметки
31 августа 2026 г.

Промпт для генерации изображения: как добиться фотореализма

Модель выдаёт восковую кожу и пластиковый глянец не потому, что она слабая, а потому что промпт слишком короткий. Разбираем формулу из шести слотов — герой, план, объектив, свет, среда, материалы, — готовый шаблон с примером и обзор моделей: Gemini Nano Banana, GPT-Image-2, Midjourney V8.2 и FLUX.2.

Читать →
Рабочий стол разработчика в тёмной комнате: на экране ноутбука терминал с красной ошибкой неудавшегося запроса, рядом второй монитор с кодом, роутер с индикаторами и моток сетевого кабеляЗаметки
28 августа 2026 г.

Не работает Gemini в России: почему и что делать

Gemini API отвечает 400 FAILED_PRECONDITION, а AI Studio не даёт выпустить ключ. Разбираем, как Google определяет регион, почему VPN на компьютере не спасает боевой сервер и как за вечер поднять свой обратный прокси на nginx — с проверкой IP, конфигом и типичными граблями.

Читать →
Открытый серверный блок на тёмном рабочем столе: материнская плата, планки памяти и NVMe-накопитель крупным планом, за ним монитор с тёмной панелью управления и синим облаком точек — визуализацией векторов.Заметки
27 августа 2026 г.

Qdrant: разворачиваем векторную базу на своём сервере

Практический гайд по самостоятельному хостингу Qdrant: сколько нужно памяти, запуск в Docker и docker compose, API-ключ и TLS, первая коллекция, фильтры по метаданным, квантизация и бэкапы.

Читать →