Почему промпт в production - часть программного продукта
Изменение одного ограничения, примера или порядка блоков способно поменять формат, стоимость, tool calls и поведение на редких запросах. Если текст редактируется прямо в панели без версии и теста, команда не может воспроизвести инцидент.
Prompt management - управление инструкциями как артефактами: контракт, история, владельцы, evals, выпуск, monitoring и rollback.
Что именно нужно версионировать
- System и developer instructions.
- Шаблоны сообщений и порядок блоков.
- Имена, типы и правила переменных.
- Few-shot examples и их provenance.
- Output schema и validators.
- Tool definitions и descriptions.
- Model, temperature и token limits.
- Retrieval template и context policy.
- Guardrails и запрещённые действия.
- Fallback prompt и совместимые модели.
Версия только текста без модели и настроек не воспроизводит поведение.
Prompt contract: вход, результат и границы
До формулировок опишите контракт: задача, аудитория, входные поля, обязательные свойства ответа, допустимый отказ, источники, инструменты и критические ошибки. Промпт реализует этот контракт.
Создай prompt contract для функции [название]. Пользовательский результат: [описание]. Входы и источники: [поля]. Допустимые actions: [список]. Риски: [список]. Определи: preconditions, typed inputs, output schema, обязательные факты, запрещённые утверждения, abstain behavior, validators, human handoff и критерии приёмки. Не пиши сам production prompt до согласования контракта.
Разделите стабильные инструкции и динамические данные
| Слой | Содержимое | Кто меняет |
|---|---|---|
| Policy | Роль, права, запреты, приоритеты | Владелец с review |
| Task template | Алгоритм конкретной функции | Product/AI team |
| Variables | Пользователь, язык, параметры | Приложение |
| Context | Retrieved и внешние данные | Runtime pipeline |
| Examples | Пограничные input/output pairs | Размеченный набор |
Недоверенный context должен быть явно отделён от инструкций. Не вставляйте его в system block как равноправный текст.
Переменные: типы, validation и escaping
Шаблон Ответь клиенту: {message} не описывает длину, язык, формат и доверие к message. Для каждой переменной задайте тип, maximum size, nullable, источник, разрешённые значения и способ сериализации.
- Используйте структурированный messages API, а не одну склеенную строку.
- Передавайте enum из закрытого списка.
- Обрезайте чрезмерный input до вызова модели по явной политике.
- Не раскрывайте отсутствие данных пустой строкой - используйте явный null/status.
- Не подставляйте secrets в prompt.
Few-shot examples - данные, а не украшение
Примеры задают формат и неявные предпочтения. Один идеальный пример может ухудшить сложные сегменты. Храните источник, лицензию, reason и связь с test case.
Не копируйте реальные клиентские тексты без разрешения. Обезличивайте или создавайте проверенные синтетические примеры. Проверяйте баланс языков, классов и ошибок.
Схема версии и manifest
prompt_id: support.reply version: 2.4.0 status: candidate owner: support-ai change_reason: stricter source citations compatible_models: [approved-model-alias] input_schema: support_reply_input_v3 output_schema: support_reply_output_v2 eval_suite: support-regression-2026-12 parent_version: 2.3.1 created_at: ISO-8601 timestamp rollback_to: 2.3.1 approvals: [product, security]
Номер версии может следовать внутренней схеме, но идентификатор опубликованной версии должен быть неизменяемым. Alias production указывает на конкретную версию.
Git или prompt registry: выбор не бинарный
| Хранилище | Сильная сторона | Ограничение |
|---|---|---|
| Git | Diff, review, CI и связь с кодом | Не всегда удобен non-dev команде |
| Prompt registry | Runtime fetch, aliases и быстрый rollback | Нужен контроль доступа и экспорт |
| Конфигурация в БД | Гибкое управление приложением | Легко потерять review и immutability |
| Код | Простой deploy единым артефактом | Правка требует release приложения |
Практичный вариант: source of truth и review в Git, registry - для deployment и runtime resolution, с автоматической сверкой hash.
Review промпта: проверяйте не только стиль
- Есть change reason и связанная задача.
- Изменён один понятный фактор.
- Контракт и schemas совместимы.
- Переменные типизированы и проверяются.
- Недоверенный context отделён.
- Tools не получили лишние права.
- Examples разрешены и репрезентативны.
- Добавлен regression case для исправляемой ошибки.
- Пройдены quality и safety evals.
- Оценены latency и стоимость.
- Указаны rollout и rollback.
Test suite: golden, regression, edge и safety
Golden cases фиксируют тщательно проверенные сценарии. Regression хранит прошлые сбои. Edge покрывает пустые, длинные, неоднозначные и конфликтующие входы. Safety проверяет injection, leakage, запреты и actions.
Microsoft рекомендует оценивать prompt variants на репрезентативном batch, меняя один фактор и удерживая остальные. Просмотр нескольких ответов не показывает разнообразие реальных данных.
Eval gate перед выпуском
Prompt diff должен быть семантическим
Обычный diff показывает строки, но не объясняет изменение поведения. В PR добавьте: какое правило поменялось, какие сегменты затронуты, ожидаемая польза, возможная регрессия и test IDs.
Сравни две версии prompt как reviewer. Contract: [описание]. Control: [версия]. Candidate: [версия]. Выдели изменения приоритета инструкций, variables, examples, output contract, tools и refusal behavior. Для каждого предложи гипотезу влияния и минимальные test cases. Не утверждай улучшение без результатов eval.
Rollout: dev, shadow, canary, production
- Dev. Локальные и synthetic cases.
- Offline. Полный eval suite против control.
- Shadow. Candidate получает копию разрешённого input, но не влияет на пользователя.
- Canary. Малый стабильный cohort получает candidate.
- Ramp. Доля растёт только после review метрик.
- Production. Alias закреплён на версии, старый вариант остаётся rollback target.
Shadow mode требует той же политики данных; нельзя незаметно удваивать отправку чувствительного content другому провайдеру.
Feature flags и стабильное распределение
Флаг отделяет prompt release от deploy кода. Cohort назначайте по стабильному hash пользователя или tenant, чтобы один человек не прыгал между вариантами. Для диалога версия фиксируется на session либо миграция задаётся явно.
Не меняйте одновременно prompt, model, retrieval и UI в одном эксперименте - причину результата будет невозможно установить.
A/B-тест и eval отвечают на разные вопросы
| Метод | Проверяет | Не гарантирует |
|---|---|---|
| Offline eval | Критерии на контролируемом наборе | Реальное продуктовое поведение |
| A/B | Изменение product outcome | Фактическую корректность каждого ответа |
| Human review | Смысл и риск на выборке | Полное покрытие трафика |
| Deterministic validator | Строгое правило | Общую полезность текста |
Сначала safety и quality gate, затем продуктовый эксперимент. Нельзя выпускать опасный вариант ради проверки конверсии.
Monitoring: version ID на каждом trace
Логируйте prompt ID/version, template hash, model request/response version, schemas, experiment cohort, token usage, latency, validator result и business outcome. Полный prompt и content могут содержать секреты - сохраняйте их только по утверждённой политике.
Dashboard сравнивает control/candidate по сегментам, critical errors, fallback, handoff, cost и latency. Средний quality score без версии бесполезен для расследования.
Rollback: переключить alias, а не писать новый prompt
Rollback target выбирается до release и уже прошёл проверки. При алерте система атомарно переводит alias на предыдущую версию, останавливает ramp и сохраняет затронутые trace IDs.
- Предыдущая версия доступна и immutable.
- Schemas обратно совместимы либо есть adapter.
- Alias переключается без deploy.
- Активные sessions имеют правило миграции.
- Caches включают version key.
- Есть права и ответственный за rollback.
- После отката выполняется smoke eval.
- Инцидент создаёт новый regression case.
Доступ, секреты и аудит
Разделите роли author, reviewer и deployer. Production alias меняют только утверждённые identities, все операции пишутся в audit log. API keys и customer data не хранятся внутри prompt version.
Для внешнего registry проверьте region, retention, export и decommissioning. Резервная копия должна позволять восстановить prompt bundle без зависимости от одной панели.
План внедрения за четыре недели
Финальный чек-лист prompt lifecycle
- У prompt есть contract и owner.
- Версионируется весь bundle, а не одна строка.
- Опубликованные версии immutable.
- Variables типизированы и валидируются.
- Untrusted context отделён от instructions.
- Examples имеют provenance и разрешение.
- Каждое изменение проходит review.
- Есть golden, regression, edge и safety cases.
- Candidate сравнивается с control по сегментам.
- Critical errors блокируют release.
- Latency и cost входят в gate.
- Rollout идёт через flag и stable cohort.
- Prompt version видна в каждом trace.
- A/B запускается только после quality gate.
- Rollback target выбран заранее.
- Alias переключается без нового deploy.
- Доступы разделены и аудитируются.
- Инциденты пополняют regression suite.
Хороший prompt lifecycle делает изменение поведения таким же проверяемым и обратимым, как изменение кода.
Зачем версионировать промпты?
Что хранить вместе с текстом промпта?
Можно ли хранить промпты только в Git?
Как тестировать новую версию промпта?
Чем A/B-тест отличается от eval?
Как безопасно подставлять переменные?
Как выпускать новый промпт без риска?
Как быстро откатить промпт?
- Google Cloud Vertex AI: Prompt management API
- Google Cloud Vertex AI: Generative AI release notes for prompt management
- Microsoft Learn: Tune prompts using variants
- Microsoft Learn: Bulk test and evaluate flows
- Microsoft Learn: GenAIOps with prompt flow and GitHub
- Microsoft Learn: Design evaluation prompts
- OpenAI API: Evaluation best practices
- Anthropic Docs: Prompt engineering overview