Краевые случаи и проверяемость

Надёжный промпт описывает не только «счастливый путь», но и что делать с пустотой, мусором и неоднозначностью на входе.

Краевой случай — нетипичный вход (пустой, противоречивый, вне темы, на другом языке), на котором плохо спроектированный промпт ломается.

Почему о крае надо думать заранее

На демо-примерах промпт работает, а в проде приходит: пустая строка, текст на другом языке, оскорбление, две задачи в одном сообщении, нерелевантный вопрос. Если поведение для таких входов не задано, модель импровизирует — и часто неудачно. Опишите правила для края явно.

Классифицируй обращение в один из классов:
оплата, доставка, возврат, прочее.

Правила краевых случаев:
- Пустой или бессмысленный текст -> класс «прочее».
- Несколько тем сразу -> выбери основную.
- Текст на другом языке -> сначала пойми смысл, потом классифицируй.
- Оскорбление без сути -> класс «прочее».

Обращение: """{текст}"""

Теперь у модели есть детерминированное поведение на нештатных входах, а не догадки.

Типовые краевые случаи

ВходЧто задать в промпте
Пустой/мусорныйДефолтный класс или «нет данных»
Несколько задач сразуКак выбрать или обработать все
Вне темыВежливый отказ/перенаправление
ДвусмысленныйЗадать уточняющий вопрос или дефолт
Слишком длинныйЧто урезать/на чём фокус

Проверяемость вывода

Хороший вывод можно проверить — программно или человеком. Приёмы:

  • Строгий формат (фиксированные классы, JSON) — легко валидировать в коде.
  • Самооценка уверенности: «добавь поле confidence от 0 до 1» — отсекаем слабые ответы порогом.
  • Опора на источник: цитата/ссылка на фрагмент — проверяет человек.
  • Контроль допустимых значений: «класс — строго из списка; ничего иного».
Верни JSON: {"class": один из [оплата, доставка, возврат, прочее],
"confidence": число 0..1}. Класс — строго из списка, иначе «прочее».

В коде потом легко проверить, что class в допустимом множестве, а confidence выше порога — иначе отправить на ручную проверку.

Итог

  • Описывайте поведение на пустом, мусорном, неоднозначном и нерелевантном вводе заранее.
  • Дайте детерминированные правила для края вместо импровизации.
  • Делайте вывод проверяемым: строгий формат, допустимые значения, поле уверенности, опора на источник.
  • Порог по confidence отправляет слабые ответы на ручную проверку.
Проверьте себя
1. Почему нужно описывать краевые случаи в промпте?
AОни не встречаются в проде
BИначе на нештатном вводе модель импровизирует и часто ошибается
CЭто требование API
DЧтобы удлинить промпт
2. Как поле confidence помогает проверяемости?
AОно ускоряет модель
BПо порогу уверенности можно отсекать слабые ответы и отправлять их на ручную проверку
CОно гарантирует правильность
DОно убирает галлюцинации полностью
3. Что делает вывод легко валидируемым в коде?
AСвободная проза
BСтрогий формат с фиксированным множеством допустимых значений
CСлучайный набор слов
DДлинные рассуждения
Поддержать проект