Промпт в продакшене — часть поведения вашего ПО. Управление промптами — это дисциплина, которая относится к нему именно так: знать, какая версия работает, кто и почему её изменил, тестировалась ли она и как вернуться назад. Эту практику иногда называют PromptOps.
Какие проблемы это решает
- Промпт правят в панели управления, и никто не может сказать, каким он был на прошлой неделе.
- Один и тот же промпт скопирован в четыре сервиса, и три из них устарели.
- Небольшая правка формулировки удваивает расход токенов, и это замечают только по счёту.
- Обновление модели меняет поведение, а теста, показывающего как именно, нет.
- Ключ API вставлен в файл промпта и закоммичен.
Храните промпты как файлы
Держите каждый промпт в отдельном файле под контролем версий, рядом с кодом, который его использует.
prompts/
support-reply.md
ticket-classify.md
summarize-incident.md
Файлы бесплатно дают историю, различия, ревью, blame и откат. Достаточно простого текстового файла или Markdown с именованными переменными:
## Task
Classify the support ticket as billing, bug, or feature request.
## Output format
Return only the label.
## Input
<ticket>
{{ticket}}
</ticket>
Избегайте сборки промптов конкатенацией строк, разбросанной по функциям. Если никто не может прочитать весь промпт в одном месте, никто не может его проверить.
Отделяйте шаблон от данных
У шаблона промпта есть фиксированные инструкции и именованные переменные. Держите их раздельно:
- Переменные явные.
{{ticket}}, а не безымянный слот формата. - Каждая переменная отделена разделителями. Обёрнута в теги, чтобы вставленный текст нельзя было прочитать как инструкции.
- Рендеринг происходит в одном месте. Одна функция заполняет шаблоны, экранирует ввод и записывает, какая версия шаблона использовалась.
Версионируйте каждое изменение
Используйте коммиты как версии. У каждого изменения есть автор, дата и сообщение, объясняющее причину.
Записывайте важную пару. Поведение зависит от промпта и модели. Логируйте и версию промпта, и идентификатор модели для каждого запроса, чтобы вывод можно было связать с тем, что его породило.
Ведите журнал изменений для важных промптов. Одна строка на изменение: что, почему и влияние на результаты тестов.
Помечайте релизы тегами. Когда промпт выкатывается, пометьте его тегом. Тогда откат — известная операция.
Проверяйте изменения промптов как изменения кода
Различия в промпте заслуживают настоящего ревью. Рецензентам стоит спрашивать:
- Не противоречит ли изменение существующей инструкции?
- Не удалено ли что-то, например ограничение или формат вывода?
- Сдвинулось ли число токенов, и приемлемо ли это?
- Есть ли тест на поведение, которое это изменение должно исправить?
Автоматические проверки отвечают на несколько из этих вопросов, прежде чем посмотрит человек. Проверка промптов в CI проваливает сборку, когда файл промпта опускается ниже минимальной оценки качества, превышает бюджет токенов или содержит критическое замечание. Конфигурация хранится в репозитории:
{
"include": ["prompts/**/*.md"],
"model": "gpt-4.1",
"minScore": 70,
"maxTokens": 2000,
"failOn": "critical"
}
Поскольку проверки детерминированные и работают офлайн, им не нужен ключ API в CI, и они никогда не дают нестабильных сбоев.
Тестируйте перед выпуском
Статические проверки подтверждают, что промпт в порядке. Тестовый набор для вывода подтверждает, что он по-прежнему ведёт себя правильно. Запускайте оба, когда промпт меняется, и повторно запускайте тесты вывода, когда меняется версия модели. См. тестирование и оценку промптов.
Выкатывайте постепенно
Для промптов с реальным трафиком:
- Тень. Запустите новую версию рядом со старой и сравните выводы, не показывая их пользователям.
- Канарейка. Отправьте небольшую долю трафика на новую версию и следите за долей ошибок, корректностью формата и сигналами пользователей.
- Продвиньте или откатите. Решайте по цифрам.
Держите предыдущую версию готовой к развёртыванию, пока новая не докажет себя.
Мониторьте в продакшене
Отслеживайте для каждой версии промпта:
- Входные и выходные токены и стоимость.
- Задержку.
- Долю ответов, не прошедших проверку.
- Отказы и откаты на запасной вариант.
- Отзывы пользователей, если вы их собираете.
Осторожнее с тем, что вы логируете. Промпты и выводы могут содержать персональные данные и секреты. По умолчанию логируйте метаданные и маскируйте содержимое перед сохранением. См. обнаружение персональных данных и секретов в промптах.
Не храните секреты в промптах
Файлы промптов читают, сравнивают, делятся ими и отправляют их третьим сторонам. Никогда не храните в них учётные данные. Передавайте секреты инструментам через приложение, а не через контекст модели. Сканер в CI ловит случайности; сканер безопасности промптов проваливает проверку при любых обнаруженных учётных данных.
Владение и повторное использование
- Назначьте владельца каждому промпту. Кто-то решает по изменениям и отвечает на вопросы.
- Делитесь через библиотеку, а не копированием. Один источник, импортируемый там, где нужен.
- Документируйте контракт. Какие переменные он принимает, что возвращает и что предполагает.
- Выводите из обращения старые промпты. Неиспользуемые промпты всё равно копирует следующий, кто их найдёт.
Здесь помогают отобранные и проверенные отправные точки. Шаблоны PromptFlowEngine при каждой сборке держатся на высокой оценке без предупреждений.
Специальные инструменты или обычные файлы
Платформы управления промптами добавляют визуальный редактор, отслеживание экспериментов и доступ для неинженеров. Они стоят своих денег, когда промпты правят многие люди вне инженерной команды. Для большинства команд файлы в git плюс автоматические проверки дают всё необходимое без чего-либо нового для эксплуатации. Что бы вы ни выбрали, требования те же: единый источник истины, история, ревью, тесты и откат.
Контрольный список для начала
- Каждый промпт в продакшене — файл под контролем версий.
- Переменные названы и отделены разделителями.
- Версия промпта и модель записываются с каждым запросом.
- Статическая проверка запускается при каждом pull request.
- Есть тестовый набор, запускаемый при изменении промпта или модели.
- Бюджеты токенов заданы и соблюдаются.
- В файлах промптов нет секретов, это проверяется автоматически.
- Есть задокументированный способ отката.