Практика: итеративное улучшение промпта

Практика: итеративное улучшение промпта

Пройдём полный цикл из четырёх итераций с метриками на каждой. Ты увидишь, как данные управляют улучшением промпта.

Задача

Промпт должен извлекать из описания товара: название, бренд, цену, цвет и наличие (в наличии / нет / не указано). Ответ — JSON.

Eval set (8 товаров):

IDОписаниеОжидаемый JSON
1«iPhone 15 Pro, Apple, 120 000 руб., чёрный, в наличии»{"name":"iPhone 15 Pro","brand":"Apple","price":120000,"color":"чёрный","stock":"в наличии"}
2«Samsung Galaxy S24, 80 000 ₽»{"name":"Samsung Galaxy S24","brand":"Samsung","price":80000,"color":null,"stock":"не указано"}
3«Ноутбук Lenovo ThinkPad X1»{"name":"ThinkPad X1","brand":"Lenovo","price":null,"color":null,"stock":"не указано"}
4«Redmi Note 13 Pro, зелёный, нет в наличии»{"name":"Redmi Note 13 Pro","brand":"Xiaomi","price":null,"color":"зелёный","stock":"нет"}

(Ещё 4 примера в eval set)

Итерация 1: Zero-shot baseline

Промпт v1:

Извлеки из описания товара название, бренд, цену, цвет, наличие.
Ответь JSON. Если данных нет — null.

Описание: {{description}}

Результат на 8 примерах: точность 4/8 = 50%.

Анализ ошибок:

  • Ошибка 1 (ID 3): модель вернула "brand": "ThinkPad" вместо "Lenovo" — перепутала бренд и модель.
  • Ошибка 2 (ID 4): модель вернула "brand": "Redmi" — хотя Redmi это не бренд, а суббренд Xiaomi.
  • Ошибка 3: модель не извлекла цену числом — вернула "price": "120 000 руб.".
  • Ошибка 4: для отсутствующего товара модель вернула "stock": "нет" вместо "stock": "нет в наличии".

Гипотеза: модель не знает, какой формат данных нужен, и путает поля.

Итерация 2: Уточняем формат

Изменение: добавил типы полей и пример.

Промпт v2:

Извлеки из описания товара информацию. Ответь СТРОГО по схеме:

{
  "name": "название модели (строка)",
  "brand": "бренд-производитель (строка или null). ВНИМАНИЕ: Redmi —
   суббренд Xiaomi, в таких случаях brand = 'Xiaomi'.",
  "price": "цена числом в рублях (число или null). Например: '120 000 руб.' → 120000.",
  "color": "цвет (строка или null)",
  "stock": "одно из: 'в наличии', 'нет', 'не указано'"
}

Пример:
Описание: "iPhone 15 Pro, Apple, 120 000 руб., чёрный, в наличии"
Ответ: {"name": "iPhone 15 Pro", "brand": "Apple", "price": 120000,
"color": "чёрный", "stock": "в наличии"}

Описание: {{description}}

Результат: точность 6/8 = 75%. (+25%!)

Анализ ошибок:

  • Ошибка 1: «Ноутбук Lenovo ThinkPad X1» → "brand": "ThinkPad" — модель всё ещё путает бренд и модель в многословных названиях.
  • Ошибка 2: для описания «Чехол для телефона, красный, 500 руб.» модель вернула "name": "Чехол для телефона" но "brand": "Чехол" — приняла категорию за бренд.

Итерация 3: Few-shot с краевыми случаями

Изменение: добавил примеры на проблемные случаи.

Промпт v3:

(та же инструкция и схема, что в v2)

Дополнительные примеры:

Пример 2:
Описание: "Ноутбук Lenovo ThinkPad X1"
Ответ: {"name": "ThinkPad X1", "brand": "Lenovo", "price": null,
"color": null, "stock": "не указано"}

Пример 3:
Описание: "Чехол для телефона, красный, 500 руб."
Ответ: {"name": "Чехол для телефона", "brand": null, "price": 500,
"color": "красный", "stock": "не указано"}

Результат: точность 7/8 = 87.5%. (+12.5%!)

Анализ ошибки: последняя ошибка — «Планшет iPad, Apple, серый, был в наличии 2 дня назад» → модель вернула "stock": "в наличии". Спорный случай: «был в наличии» ≠ «в наличии сейчас». Но модель не уловила временной нюанс.

Итерация 4: Уточнение правила

Изменение: добавил уточнение про «был в наличии».

Промпт v4:

(всё из v3 +)
Уточнение: если про наличие написано в прошедшем времени («был»,
«было», «закончился») — stock = "не указано".

Результат: точность 8/8 = 100%.

График прогресса

Точность
  100% ┤                          ●
   90% ┤                    ●
   80% ┤              ●
   70% ┤
   60% ┤
   50% ┤●
       └───┬───────┬───────┬───────
          v1      v2      v3      v4

Чему мы научились

  • Каждая итерация решала КОНКРЕТНУЮ проблему, найденную через анализ ошибок.
  • Изменения: формат (v2) → примеры (v3) → уточнение правила (v4).
  • Каждое изменение — ОДНО. Не смешивали.
  • Метрики подтверждали улучшение на каждом шаге.
  • 4 итерации превратили 50% в 100% на этом eval set.

Проверь себя

Возьми любой промпт, который ты писал ранее в курсе. Создай eval set из 5 примеров, измерь baseline, проведи 2 итерации улучшения.

Итог

  • Итеративный подход — это не «исправляю всё сразу», а методичный процесс.
  • Каждая итерация: анализ ошибок → гипотеза → одно изменение → замер.
  • Четыре итерации — и промпт может вырасти с 50% до 90%+ точности.
  • В реальной работе редко достигают 100% — 90–95% обычно достаточно.

Что дальше

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

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

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

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