Few-shot prompting: примеры в шаблоне

Урок о том, как примеры в промпте задают модели нужный формат и стиль ответа.

Few-shot prompting — приём, при котором в промпт включают несколько примеров «вход → выход», чтобы модель повторила нужный формат на новом входе.

Зачем нужны примеры

Иногда инструкции словами недостаточно: модель понимает задачу, но выдаёт ответ в произвольном виде. Самый надёжный способ задать формат — показать примеры. Это и есть few-shot: «делай вот так, как в этих образцах». Особенно полезно для классификации, извлечения полей, нестандартного формата вывода.

FewShotPromptTemplate

LangChain даёт специальный шаблон, который берёт список примеров и подставляет их по единому под-шаблону, а затем добавляет текущий вопрос.

from langchain_core.prompts import FewShotPromptTemplate, PromptTemplate

example_prompt = PromptTemplate.from_template("Текст: {text}\nТон: {tone}")
examples = [
    {"text": "Всё сломалось, ужасно!", "tone": "негативный"},
    {"text": "Спасибо, очень помогли!", "tone": "позитивный"},
]
prompt = FewShotPromptTemplate(
    examples=examples,
    example_prompt=example_prompt,
    suffix="Текст: {input}\nТон:",
    input_variables=["input"],
)
print(prompt.format(input="Заказ пришёл вовремя"))

Логику сборки few-shot-промпта легко показать на чистом Python:

examples = [
    ("Всё сломалось, ужасно!", "негативный"),
    ("Спасибо, очень помогли!", "позитивный"),
]
lines = [f"Текст: {t}\nТон: {tone}" for t, tone in examples]
query = "Заказ пришёл вовремя"
prompt = "\n\n".join(lines) + f"\n\nТекст: {query}\nТон:"
print(prompt)

Вывод:

Текст: Всё сломалось, ужасно!
Тон: негативный

Текст: Спасибо, очень помогли!
Тон: позитивный

Текст: Заказ пришёл вовремя
Тон:

Как работает под капотом

FewShotPromptTemplate прогоняет каждый пример через example_prompt, склеивает результаты, добавляет необязательный prefix сверху и suffix с текущим вводом снизу. На выходе — обычный текстовый промпт. Никакой магии: модель видит цельный текст, где после нескольких пар «вход → выход» идёт новый вход без ответа, и достраивает ответ по образцу. Чем согласованнее формат примеров, тем стабильнее ответ.

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

  • Слишком много примеров. Каждый пример — это токены и деньги; обычно хватает 2–5 хорошо подобранных.
  • Несогласованный формат примеров. Если образцы оформлены по-разному, модель «теряется».
  • Примеры не покрывают краевые случаи. Подбирайте показательные, а не случайные образцы.

Итог

  • Few-shot задаёт формат и стиль через примеры «вход → выход».
  • FewShotPromptTemplate собирает примеры по единому под-шаблону плюс текущий ввод.
  • 2–5 согласованных примеров обычно эффективнее десятков случайных.
Проверьте себя
1. В чём суть few-shot prompting?
AОбучить модель заново на ваших данных
BДать в промпте несколько примеров «вход → выход», чтобы модель повторила формат
CУменьшить температуру до нуля
DЗапретить модели отвечать длинно
2. Почему не стоит класть в few-shot-промпт десятки примеров?
ALangChain не поддерживает более трёх примеров
BПримеры расходуют токены и деньги, обычно хватает 2–5 показательных
CМодель игнорирует любые примеры
DЭто запрещено лицензией