«Shot» в этих терминах — это пример. В zero-shot промпте их нет, в one-shot промпте один, в few-shot промпте несколько. Выбор между ними — это компромисс между длиной промпта и тем, насколько точно вы можете задать вывод.
Zero-shot промптинг
Zero-shot промпт даёт инструкции и ввод, больше ничего.
Classify the support ticket as billing, bug, or feature request.
Return only the label.
<ticket>
{{ticket}}
</ticket>
Современные модели так справляются с широким кругом задач. Zero-shot — правильный выбор по умолчанию, потому что он самый короткий, самый дешёвый и самый простой в сопровождении. Обращайтесь к примерам, только когда чёткие инструкции не дали нужного результата.
One-shot промптинг
One-shot промпт добавляет один пример. Один пример очень хорош для закрепления формата ответа и слаб для обучения суждению.
Write a changelog entry for the commit below.
Example:
Commit: "fix: retry webhook delivery on 5xx"
Entry: "Fixed: webhooks are now retried when your server returns a 5xx error."
Commit: "{{commit_message}}"
Entry:
Риск — чрезмерное подражание. С одним примером модель может скопировать его длину, первое слово или тему.
Few-shot промптинг
Few-shot промпт содержит несколько примеров, обычно от двух до пяти, чтобы модель вывела закономерность из того, что у них общего.
Rate the urgency of each message as low, medium, or high.
Message: "The export button is slightly misaligned." -> low
Message: "Checkout fails for all customers since 09:00." -> high
Message: "Can you add dark mode at some point?" -> low
Message: "Invoices for March show the wrong tax rate." -> medium
Message: "{{message}}" ->
Few-shot промптинг особенно полезен, когда:
- у категорий размытые границы, которые трудно описать правилами;
- нужен особый голос, стиль или степень детализации;
- у вывода собственный формат, который модель встречала нечасто.
Как выбирать хорошие примеры
Охватите диапазон. Включите каждую метку или случай хотя бы раз. Если все примеры — «high», модель склоняется к «high».
Включите трудные случаи. Пример очевидного случая мало чему учит. Пограничные случаи, например сообщение о налоговой ставке выше, определяют, где проходит граница.
Варьируйте поверхность. Используйте разную длину, темы и формулировки, чтобы единственным общим у примеров был нужный вам шаблон.
Сохраняйте формат одинаковым. Одни и те же разделители, порядок и отступы в каждом примере. Непоследовательное форматирование само является шаблоном, и модель его усвоит.
Используйте реальные данные. Примеры из настоящих входных данных соответствуют распределению, с которым столкнётся промпт.
Сколько примеров
Начните с двух-трёх. Добавляйте больше, только если тест показывает улучшение вывода. Каждый пример стоит токенов при каждом вызове, поэтому промпт с десятью примерами, запускаемый миллион раз, — реальная строка в счёте. Для длинных наборов примеров, которые никогда не меняются, кеширование промптов у провайдера снижает эти расходы. См. оптимизацию токенов.
Когда примеры оборачиваются против вас
- Эффекты порядка. Модели могут придавать больший вес поздним примерам. Если результаты смещаются к последней метке, перемешайте примеры.
- Дисбаланс меток. Три положительных примера и один отрицательный смещают вывод в положительную сторону.
- Утечка содержимого. Модель использует в ответе имена или факты из примеров. Скажите ей, что примеры нужны только для формата, или используйте явно условное содержимое.
- Примеры, противоречащие инструкциям. Если правила говорят «одно предложение», а в примере два, обычно побеждает пример.
Zero-shot или few-shot: правило выбора
| Ситуация | С чего начать |
|---|---|
| Распространённая задача, ясные правила | Zero-shot |
| Формат вывода постоянно «плывёт» | One-shot или схема |
| Метки зависят от суждения | Few-shot |
| Нужен особый стиль письма | Few-shot |
| Задача, требующая рассуждений | Zero-shot с приёмом рассуждения |
Для строгих форматов схема надёжнее примеров. См. промпты для структурированного вывода. В задачах на рассуждение примеры одного лишь ответа помогают меньше, чем демонстрация хода рассуждений, — на этом основан промптинг с цепочкой рассуждений.
Отделение примеров от ввода
Оберните примеры и реальный ввод в разные разделители, чтобы модель не могла их спутать, а пользовательский текст не мог выдать себя за пример.
<examples>
...
</examples>
<input>
{{message}}
</input>
Анализатор промптов PromptFlowEngine отмечает переменные шаблона без разделителей — самую частую ошибку в few-shot шаблонах.