Few-shot промптинг: примеры в запросе вместо долгих объяснений
Few-shot — несколько примеров правильного ответа прямо в промпте. Разбираем, когда это помогает, как оформлять примеры и как посчитать, окупаются ли они.
5 мин · · разработка · автоматизация
Few-shot промптинг — это несколько примеров «вход → правильный выход» прямо в запросе к модели. Вместо длинного описания формата вы показываете два-три образца, и модель продолжает в том же духе. Приём полезный, но примеры отправляются с каждым запросом и стоят токенов. Ниже — когда few-shot помогает, как оформлять примеры, какие ошибки встречаются чаще всего и как посчитать, окупаются ли примеры.
Как работает few-shot
Zero-shot, без примеров:
Преобразуй текст в JSON с полями name и age.
Текст: "John is 30 years old"
Модель сама решает, как оформить ответ: добавить ли пояснение, обернуть ли JSON в блок кода, строкой или числом записать возраст.
Few-shot, с примерами:
Преобразуй текст в JSON с полями name и age. Отвечай только JSON.
Текст: "Alice is 25 years old"
JSON: {"name": "Alice", "age": 25}
Текст: "Bob, 40"
JSON: {"name": "Bob", "age": 40}
Текст: "John is 30 years old"
JSON:
Примеры задают формат точнее любого описания: видно, что возраст — число, что лишнего текста нет и что вход бывает разным.
Когда few-shot помогает
Нестандартный формат вывода. Внутренняя разметка, особый вид отчёта, строгий порядок полей — всё, что трудно описать словами.
Неочевидные правила классификации. Например, нужно не только определить тональность, но и коротко объяснить причину:
Определи тональность и коротко объясни причину.
Текст: "Доставка опоздала на неделю"
Ответ: {"sentiment": "negative", "reason": "задержка доставки"}
Текст: "Курьер приехал раньше срока"
Ответ: {"sentiment": "positive", "reason": "доставка быстрее ожидаемого"}
Текст: "Заказ пришёл в обычный срок"
Ответ:
Свой синтаксис. Если ответ должен быть в формате вашей системы, один образец часто полезнее абзаца объяснений:
Преобразуй задачу в команду внутри блока [EXEC].
Задача: "Найди все файлы .txt в папке /home"
[EXEC]
find /home -name "*.txt"
[/EXEC]
Задача: "Посчитай строки во всех файлах .py в текущей папке"
Когда примеры не нужны
- Простой ответ. Если нужно одно слово из короткого списка («positive, negative или neutral»), хватит инструкции и перечня вариантов.
- Формат, который задаётся схемой. Для JSON можно описать поля и типы или использовать structured output, если ваш клиент его поддерживает.
- Много однотипных примеров. Десять похожих образцов почти не добавляют информации по сравнению с тремя разными, а токенов стоят втрое больше.
Как оформлять примеры
Через messages (рекомендуется для API)
Каждый пример — пара сообщений user и assistant, а настоящий запрос идёт последним:
messages = [
{"role": "system", "content": "Classify sentiment. Answer with one word: positive, negative or neutral."},
{"role": "user", "content": "Доставка опоздала на неделю"},
{"role": "assistant", "content": "negative"},
{"role": "user", "content": "Курьер приехал раньше срока"},
{"role": "assistant", "content": "positive"},
{"role": "user", "content": "Заказ пришёл в обычный срок"},
{"role": "assistant", "content": "neutral"},
{"role": "user", "content": "Отличный сервис, спасибо!"},
]Модель видит примеры как свои прошлые ответы, и граница между образцами и настоящим запросом получается чёткой.
В одном тексте
Когда интерфейс позволяет отправить только одно сообщение, используйте явные метки и одинаковое оформление для всех примеров:
Вход: "Доставка опоздала на неделю"
Выход: negative
Вход: "Курьер приехал раньше срока"
Выход: positive
Вход: "Отличный сервис, спасибо!"
Выход:
Типичные ошибки
Реальные данные в примерах
Если в образцах реальные номера, адреса или имена, модель может перенести их в ответ на другой запрос. Для маскирования и извлечения данных берите заведомо синтетические значения: 000-00-0000, user@example.com.
Перекос в примерах
Если все три примера — негативные отзывы, модель будет чаще отвечать «negative». Если все входы короткие, длинный текст может обработаться хуже. Подбирайте образцы так, чтобы они покрывали разные классы и разные виды входа.
Ошибка в образце
Модель повторяет то, что видит. Опечатка в ключе JSON или неверный ответ в одном примере перейдут в результат. Проверяйте примеры так же внимательно, как код.
Слишком похожие примеры
Если образцы почти одинаковые, модель может копировать их структуру там, где задача требует другой. Достаточно трёх-пяти разных примеров.
Сколько стоят примеры
Примеры отправляются с каждым запросом как входные токены. Формула:
стоимость примеров = токены_примеров × число_запросов × цена_входа / 1 000 000
Цены Zukko за 1M токенов (вход и выход одинаковые): claude-sonnet-5 и gpt-5.6-sol — $0.3, glm-5.3 — $0.1, glm-5.3-flash — $0.04. Актуальный список моделей и цен — GET https://api.zukko.pro/v1/models или страница «Модели» в кабинете.
Пример: пять примеров по 50 токенов, всего 250 токенов на запрос.
- 10 000 запросов × 250 токенов = 2 500 000 токенов;
- на
claude-sonnet-5: 2.5 × $0.3 = $0.75; - на
glm-5.3-flash: 2.5 × $0.04 = $0.10.
Окупаются ли примеры? Пусть без них ответ в среднем занимает 500 токенов, а с ними — 400. Экономия на выходе — 100 токенов на запрос, расход на примеры — 250. В Zukko вход и выход стоят одинаково, поэтому достаточно сравнить токены: 400 + 250 = 650 против 500. С примерами получается дороже. По одному только размеру ответа примеры окупятся, если сократят его минимум на 250 токенов, то есть вдвое. Обычно few-shot окупается иначе: меньше брака, повторных запросов и ручных исправлений. Это и нужно измерять.
Оговорка про кэш: у вендора повторяющееся начало промпта можно кэшировать, и чтение из кэша стоит около 10% входной цены. В Zukko кэшированные токены оплачиваются по обычной входной цене. Поэтому для запросов с большим одинаковым блоком примеров разница с официальным прайсом меньше, чем при прямом сравнении цен.
Код: few-shot на Python
from openai import OpenAI
client = OpenAI(
base_url="https://api.zukko.pro/v1",
api_key="fetch_ваш_ключ",
)
EXAMPLES = [
("Доставка опоздала на неделю", "negative"),
("Курьер приехал раньше срока", "positive"),
("Заказ пришёл в обычный срок", "neutral"),
]
response.usage.prompt_tokens показывает, сколько входных токенов заняли инструкция, примеры и запрос. По этой цифре видно, во что обходятся примеры. Подробнее о формате запроса — в справке по chat completions, ключ создаётся в кабинете.
Как проверить, помогает ли few-shot
- Соберите 30–50 реальных входов с известными правильными ответами.
- Прогоните их без примеров и с примерами на одной и той же модели.
- Сравните долю правильных ответов и средний расход токенов из
usage. - Повторите на другой модели из списка: результат зависит от модели и задачи, переносить его вслепую не стоит.
Частые вопросы
Сколько примеров нужно?
Для формата обычно хватает одного-двух. Для неочевидной логики — трёх-пяти разных. Больше имеет смысл, только если тест показывает рост точности.
Нужны ли примеры для классификации на 10 и больше классов?
Примеры должны покрывать хотя бы самые частые и самые похожие друг на друга классы. Если примеров по всем классам выходит слишком много, лучше дать список классов с короткими определениями и примеры только для спорных случаев.
Можно ли использовать few-shot со стримингом?
Да. Примеры передаются в messages как обычно. При стриминге проверяйте if chunk.choices: перед chunk.choices[0], потому что последний чанк приходит с usage и пустым choices.
Работает ли few-shot одинаково на всех моделях?
Нет, отклик на примеры у моделей разный. Проверяйте на своих данных по методу выше, прежде чем выбирать модель и число примеров.
zukko
Платите в 25×
меньше
за Claude Code & ChatGPT
Один ключ fetch_* и base URL api.zukko.pro — в Cursor, Claude Code, Codex и любом SDK.
Похожие статьи
- Перевод субтитров нейросетью: SRT без сбитых таймкодовГлавный риск при переводе SRT нейросетью — сломанная структура файла. Показываем схему, где таймкоды не попадают к модели, и скрипт на Python с проверкой.
- Редактирование текстов нейросетью: корректура, стиль и сокращениеРазные виды редактуры требуют разных промптов. Показываем формулировки для корректуры, стиля и сокращения, как получать правки с объяснением и не терять авторский голос.
- Нейросеть для написания скриптов: Bash, PowerShell и PythonМодель быстро пишет скрипты для рутины, но запускать их вслепую нельзя. Показываем, как ставить задачу, требовать безопасный режим dry-run и проверять результат до запуска.
- Dify в Docker: установка, первичная настройка и подключение моделейСтавим Dify через Docker Compose, создаём администратора и подключаем модели Claude, GPT и DeepSeek по одному ключу. Отдельно — что делать, если контейнеры не стартуют.