Оптимизация, тестирование и безопасность

Управление промптами и версионирование

Управление промптами для команд. Храните промпты как файлы, версионируйте и проверяйте их, тестируйте каждое изменение и выкатывайте безопасно. Практический рабочий процесс PromptOps.

  • Автор: Vijayraj Palanisamy
  • Обновлено
  • 4 мин чтения

Перевод английского оригинала. Код, промпты и вывод моделей оставлены на английском.

Промпт в продакшене — часть поведения вашего ПО. Управление промптами — это дисциплина, которая относится к нему именно так: знать, какая версия работает, кто и почему её изменил, тестировалась ли она и как вернуться назад. Эту практику иногда называют 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, и они никогда не дают нестабильных сбоев.

Тестируйте перед выпуском

Статические проверки подтверждают, что промпт в порядке. Тестовый набор для вывода подтверждает, что он по-прежнему ведёт себя правильно. Запускайте оба, когда промпт меняется, и повторно запускайте тесты вывода, когда меняется версия модели. См. тестирование и оценку промптов.

Выкатывайте постепенно

Для промптов с реальным трафиком:

  1. Тень. Запустите новую версию рядом со старой и сравните выводы, не показывая их пользователям.
  2. Канарейка. Отправьте небольшую долю трафика на новую версию и следите за долей ошибок, корректностью формата и сигналами пользователей.
  3. Продвиньте или откатите. Решайте по цифрам.

Держите предыдущую версию готовой к развёртыванию, пока новая не докажет себя.

Мониторьте в продакшене

Отслеживайте для каждой версии промпта:

  • Входные и выходные токены и стоимость.
  • Задержку.
  • Долю ответов, не прошедших проверку.
  • Отказы и откаты на запасной вариант.
  • Отзывы пользователей, если вы их собираете.

Осторожнее с тем, что вы логируете. Промпты и выводы могут содержать персональные данные и секреты. По умолчанию логируйте метаданные и маскируйте содержимое перед сохранением. См. обнаружение персональных данных и секретов в промптах.

Не храните секреты в промптах

Файлы промптов читают, сравнивают, делятся ими и отправляют их третьим сторонам. Никогда не храните в них учётные данные. Передавайте секреты инструментам через приложение, а не через контекст модели. Сканер в CI ловит случайности; сканер безопасности промптов проваливает проверку при любых обнаруженных учётных данных.

Владение и повторное использование

  • Назначьте владельца каждому промпту. Кто-то решает по изменениям и отвечает на вопросы.
  • Делитесь через библиотеку, а не копированием. Один источник, импортируемый там, где нужен.
  • Документируйте контракт. Какие переменные он принимает, что возвращает и что предполагает.
  • Выводите из обращения старые промпты. Неиспользуемые промпты всё равно копирует следующий, кто их найдёт.

Здесь помогают отобранные и проверенные отправные точки. Шаблоны PromptFlowEngine при каждой сборке держатся на высокой оценке без предупреждений.

Специальные инструменты или обычные файлы

Платформы управления промптами добавляют визуальный редактор, отслеживание экспериментов и доступ для неинженеров. Они стоят своих денег, когда промпты правят многие люди вне инженерной команды. Для большинства команд файлы в git плюс автоматические проверки дают всё необходимое без чего-либо нового для эксплуатации. Что бы вы ни выбрали, требования те же: единый источник истины, история, ревью, тесты и откат.

Контрольный список для начала

  • Каждый промпт в продакшене — файл под контролем версий.
  • Переменные названы и отделены разделителями.
  • Версия промпта и модель записываются с каждым запросом.
  • Статическая проверка запускается при каждом pull request.
  • Есть тестовый набор, запускаемый при изменении промпта или модели.
  • Бюджеты токенов заданы и соблюдаются.
  • В файлах промптов нет секретов, это проверяется автоматически.
  • Есть задокументированный способ отката.

Применить на практике

Попробуйте: тестирование промптов

Проверка в CI для файлов промптов: планка качества, бюджет токенов и порог серьёзности. Бесплатно, детерминированно и без аккаунта.

Связанные инструменты PromptFlowEngine

Ещё по теме «оптимизация, тестирование и безопасность»

Все руководства по промпт-инжинирингу