Типы промптов

Zero-shot, one-shot и few-shot промптинг

Zero-shot, one-shot и few-shot промптинг: когда помогают примеры, сколько их брать, как выбирать и какие ошибки оборачиваются против вас.

  • Автор: Vijayraj Palanisamy
  • Обновлено
  • 3 мин чтения

Перевод английского оригинала. Код, промпты и вывод моделей оставлены на английском.

«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 шаблонах.

Применить на практике

Попробуйте: анализатор промптов

Находит неоднозначности, недостающий контекст, противоречия и лишние токены в любом промпте. Бесплатно, детерминированно и без аккаунта.

Связанные инструменты PromptFlowEngine

Ещё по теме «типы промптов»

Все руководства по промпт-инжинирингу