Практика: добавление примеров в промпт

Практика: добавление примеров в промпт

В этом уроке мы пройдём полный цикл: возьмём задачу, решим её без примеров, добавим примеры по одному и посмотрим, как меняется качество. Ты увидишь few-shot в действии на реальной задаче.

Задача: нормализация адресов

У нас есть список адресов, записанных в свободной форме. Нужно привести их к единому формату: «Индекс, Город, Улица, Дом».

Тестовые адреса:

  1. «г. Москва, ул. Тверская, д. 15, 125009»
  2. «Санкт-Петербург, Невский проспект, 22, 191186»
  3. «Казань, ул Баумана 5 кв 12»
  4. «630099, Новосибирск, Красный проспект, дом 34»

Версия 0: Zero-shot (без примеров)

Вход:

Приведи адрес к формату: "Индекс, Город, Улица, Дом".

Адрес: "г. Москва, ул. Тверская, д. 15, 125009"

Выход:

125009, Москва, ул. Тверская, д. 15

Неплохо. Но посмотрим на других адресах:

Вход: "Санкт-Петербург, Невский проспект, 22, 191186"

Выход: 191186, Санкт-Петербург, Невский проспект, 22

Вход: "Казань, ул Баумана 5 кв 12" (здесь нет индекса!)

Выход: , Казань, ул Баумана, 5 — модель придумала запятую перед индексом и потеряла «кв 12».

Вход: "630099, Новосибирск, Красный проспект, дом 34"

Выход: 630099, Новосибирск, Красный проспект, 34 — потеряла «дом».

Проблемы zero-shot: модель не знает, как обрабатывать отсутствующий индекс, что делать с «кв», нужно ли оставлять «дом»/«д.» в номере дома.

Версия 1: One-shot (один пример)

Добавим один пример, покрывающий самый частый случай:

Вход:

Приведи адрес к формату: "Индекс, Город, Улица, Дом".
Если какой-то части адреса нет — оставь пустое место.
Улица: только название, без "ул.", "проспект" и т.д.
Дом: только номер, без "д.", "дом".

Пример:
Вход: "г. Москва, ул. Тверская, д. 15, 125009"
Выход: "125009, Москва, Тверская, 15"

Теперь:
Вход: "Казань, ул Баумана 5 кв 12"

Выход:

, Казань, Баумана, 5

Уже лучше: модель убрала «ул» и «д.». Но индекс пустой (правильно — его нет в адресе). Однако модель проигнорировала «кв 12» — она не знает, что с этим делать, потому что в примере не было квартиры.

Версия 2: Few-shot (три примера с вариациями)

Добавим примеры, покрывающие разные ситуации:

Вход:

Приведи адрес к формату: "Индекс, Город, Улица, Дом".
Правила:
- Если части адреса нет — оставь пустое место, но сохрани запятые.
- Улица: только название (без "ул.", "пр.", "проспект").
- Дом: только номер (без "д.", "дом"). Если есть квартира — не включай.
- Город: без "г.", "город".
- Если индекс в конце — перенеси его в начало.

Пример 1:
Вход: "г. Москва, ул. Тверская, д. 15, 125009"
Выход: "125009, Москва, Тверская, 15"

Пример 2:
Вход: "Санкт-Петербург, Невский проспект, 22, 191186"
Выход: "191186, Санкт-Петербург, Невский, 22"

Пример 3:
Вход: "Казань, ул Баумана 5 кв 12"
Выход: ", Казань, Баумана, 5"

Пример 4:
Вход: "630099, Новосибирск, Красный проспект, дом 34"
Выход: "630099, Новосибирск, Красный, 34"

Теперь:
Вход: "город Екатеринбург, улица Ленина, строение 3А, 620000"

Выход:

620000, Екатеринбург, Ленина, 3А

Отлично! Модель справилась со всеми нюансами: убрала «город», «улица», «строение», перенесла индекс в начало, сохранила литеру «А» в номере дома.

Что изменилось на каждом шаге

ВерсияПримеровЧто пошло не такЧто исправили
Zero-shot0Не знает, как убирать «ул.»/«д.»; теряется без индекса; не знает про «кв»
One-shot1Убирает «ул.»/«д.», но не знает про квартирыДобавили пример с точным форматом
Few-shot4Добавили примеры: без индекса, с индексом в начале, с «кв»

Правило создания практического few-shot промпта

  1. Начни с zero-shot. Напиши инструкцию и протестируй на 3–5 примерах.
  2. Найди ошибки. На каких примерах модель ошибается? Запиши их.
  3. Классифицируй ошибки. Ошибки одного типа? Или разных? Каждому типу ошибки — свой пример.
  4. Добавь примеры на каждый тип ошибки. По одному примеру на тип.
  5. Повтори тестирование. Все ли типы ошибок исчезли? Если нет — добавь ещё пример или уточни инструкцию.

Проверь себя

Дана задача: модель должна извлекать дату из текста в формате «ДД.ММ.ГГГГ». Тексты: «встреча 15 января 2025», «05.02.25», «завтра», «в пятницу», «10/03/2025». Какие примеры добавишь в промпт?

Пример ответа: минимум 3 примера — для словесной даты («15 января 2025» → «15.01.2025»), для сокращённого числового формата («05.02.25» → «05.02.2025»), для формата с "/" («10/03/2025» → «10.03.2025»). Для «завтра» и «в пятницу» — нужен дополнительный контекст (текущая дата), возможно, стоит указать в инструкции: «если дата относительная, напиши ОТНОСИТЕЛЬНАЯ».

Итог

  • Few-shot не пишется с первой попытки — это итеративный процесс: тестируешь, находишь ошибки, добавляешь примеры.
  • Каждый пример должен закрывать конкретный тип ошибки.
  • Начинай с zero-shot. Один пример исправляет один класс ошибок. Три-четыре хорошо подобранных примера покрывают большинство задач.
  • Разнообразие примеров важнее их количества. Четыре примера на четыре разных типа ошибок > десяти примеров на один тип.

Что дальше

Few-shot освоен. В следующем модуле перейдём к структурной организации промптов. Ты научишься использовать разделители и XML-теги, чтобы даже очень длинные и сложные промпты оставались понятными — и для тебя, и для модели.

Попробуйте интерактивную версию

Практические задачи, квизы и AI-наставник — бесплатный старт без карты

Перейти к практике