Промпт это интерфейс к модели. В проде он живёт как код: под версионированием, с тестами и метриками. На собесе проверяют не «волшебные фразы», а умение сделать поведение модели предсказуемым.
Роли сообщений
Чат-API принимает список сообщений с ролями:
- system (у некоторых провайдеров developer): правила, роль, формат, ограничения. Самый приоритетный слой инструкций.
- user: запрос пользователя.
- assistant: прошлые ответы модели; можно подложить свой текст как пример или начало ответа.
- tool: результат вызова инструмента.
Модель не исполняет системный промпт как программу: это просто текст в начале контекста, которому она обучена доверять больше. Поэтому системный промпт не защищает от утечки и инъекций сам по себе.
Что делает промпт хорошим
- Конкретная задача и критерии. «Сократи до 3 пунктов по 15 слов, без вводных фраз» лучше, чем «сделай короче».
- Контекст и аудитория. Для кого ответ, что уже известно, чего избегать.
- Чёткие границы данных. Документы и ввод пользователя оборачивают в разделители или теги, чтобы модель отличала инструкции от данных:
Ответь на вопрос только по тексту внутри <doc>. Если ответа нет, напиши "нет данных".
<doc>
...
</doc>
Вопрос: ...
- Примеры (few-shot). 2-5 примеров «вход и выход» сильнее любого описания формата. Примеры должны быть разнообразными: если все примеры положительные, модель начнёт всем отвечать положительно.
- Что делать при неопределённости. Явно разрешите отвечать «не знаю», иначе модель будет угадывать.
Рассуждение перед ответом
Для задач с несколькими шагами (математика, логика, сложная классификация) помогает попросить модель сначала рассуждать, а потом дать ответ: chain-of-thought. Современные reasoning-модели делают это сами, им отдельная просьба не нужна, а иногда мешает.
Практичная схема для прода: рассуждение в отдельном поле или блоке, финальный ответ в строгом формате, парсится только ответ. Платите за это токенами и задержкой, поэтому для простых задач рассуждение лишнее.
Другие приёмы:
- Декомпозиция: вместо одного огромного промпта цепочка из нескольких простых шагов. Каждый шаг легче тестировать.
- Self-consistency: несколько ответов с ненулевой температурой и голосование. Дорого, но повышает точность на задачах с одним правильным ответом.
Структурированный вывод
Если ответ читает программа, просите JSON и проверяйте его. Уровни надёжности, от слабого к сильному:
- Просьба в промпте «ответь в JSON» и пример. Иногда получаем текст вокруг JSON или пропущенные поля.
- JSON mode: провайдер гарантирует синтаксически валидный JSON, но не схему.
- Structured outputs / constrained decoding: генерация ограничена JSON-схемой или грамматикой. На каждом шаге запрещены токены, которые нарушат схему. Ответ гарантированно соответствует схеме (насколько провайдер поддерживает конструкции схемы).
Даже при гарантии схемы проверяйте смысл: валидный JSON может содержать выдуманные значения. Типичная обвязка: парсинг, валидация (Pydantic, JSON Schema, Zod), при ошибке повтор с текстом ошибки или фолбэк.
Советы по схемам:
- Перечисления (
enum) вместо свободного текста для категорий. - Поле для «не определено» (
nullили"unknown"), иначе модель выдумает значение. - Порядок полей важен: если нужно рассуждение, ставьте поле
reasoningпередanswer, потому что модель генерирует слева направо.
Промпт как код
- Шаблоны с подстановкой переменных, без склейки строк по всему коду.
- Версии промптов и запись версии в логи каждого вызова.
- Регрессионный набор примеров: перед выкаткой новой версии прогон и сравнение метрик.
- Смена модели = новая версия: промпт, отлаженный под одну модель, может хуже работать на другой.
Частые ошибки
- Писать «никогда не делай X» и считать это защитой. Модель может нарушить правило, особенно под давлением инъекции.
- Давать пример, который случайно задаёт лишний паттерн (всегда одна длина, один класс).
- Парсить ответ регуляркой без валидации и повторов.
- Менять промпт в проде без прогона по тестовому набору.
Что спросят на собесе
- Роли system, user, assistant и почему системный промпт не граница безопасности.
- Zero-shot, few-shot и chain-of-thought: когда что.
- Как гарантировать JSON по схеме: JSON mode против constrained decoding, валидация и повтор.
- Как вы версионируете и тестируете промпты.