Почему промпт в production - часть программного продукта

Изменение одного ограничения, примера или порядка блоков способно поменять формат, стоимость, tool calls и поведение на редких запросах. Если текст редактируется прямо в панели без версии и теста, команда не может воспроизвести инцидент.

Prompt management - управление инструкциями как артефактами: контракт, история, владельцы, evals, выпуск, monitoring и rollback.

1
immutable version на каждый release
4
этапа: author, evaluate, deploy, observe
0
непроверенных правок прямо в production

Что именно нужно версионировать

Prompt bundle
  1. System и developer instructions.
  2. Шаблоны сообщений и порядок блоков.
  3. Имена, типы и правила переменных.
  4. Few-shot examples и их provenance.
  5. Output schema и validators.
  6. Tool definitions и descriptions.
  7. Model, temperature и token limits.
  8. Retrieval template и context policy.
  9. Guardrails и запрещённые действия.
  10. 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Пользователь, язык, параметрыПриложение
ContextRetrieved и внешние данные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: выбор не бинарный

ХранилищеСильная сторонаОграничение
GitDiff, review, CI и связь с кодомНе всегда удобен non-dev команде
Prompt registryRuntime fetch, aliases и быстрый rollbackНужен контроль доступа и экспорт
Конфигурация в БДГибкое управление приложениемЛегко потерять review и immutability
КодПростой deploy единым артефактомПравка требует release приложения

Практичный вариант: source of truth и review в Git, registry - для deployment и runtime resolution, с автоматической сверкой hash.

Review промпта: проверяйте не только стиль

Pull request checklist
  1. Есть change reason и связанная задача.
  2. Изменён один понятный фактор.
  3. Контракт и schemas совместимы.
  4. Переменные типизированы и проверяются.
  5. Недоверенный context отделён.
  6. Tools не получили лишние права.
  7. Examples разрешены и репрезентативны.
  8. Добавлен regression case для исправляемой ошибки.
  9. Пройдены quality и safety evals.
  10. Оценены latency и стоимость.
  11. Указаны rollout и rollback.

Test suite: golden, regression, edge и safety

Golden cases фиксируют тщательно проверенные сценарии. Regression хранит прошлые сбои. Edge покрывает пустые, длинные, неоднозначные и конфликтующие входы. Safety проверяет injection, leakage, запреты и actions.

Microsoft рекомендует оценивать prompt variants на репрезентативном batch, меняя один фактор и удерживая остальные. Просмотр нескольких ответов не показывает разнообразие реальных данных.

Eval gate перед выпуском

Contract
Schema, required facts и deterministic rules.
Quality
Candidate не хуже control по сегментам.
Safety
Нет новых критических нарушений.
Budget
Latency и tokens допустимы.

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

  1. Dev. Локальные и synthetic cases.
  2. Offline. Полный eval suite против control.
  3. Shadow. Candidate получает копию разрешённого input, но не влияет на пользователя.
  4. Canary. Малый стабильный cohort получает candidate.
  5. Ramp. Доля растёт только после review метрик.
  6. 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.

Rollback readiness
  1. Предыдущая версия доступна и immutable.
  2. Schemas обратно совместимы либо есть adapter.
  3. Alias переключается без deploy.
  4. Активные sessions имеют правило миграции.
  5. Caches включают version key.
  6. Есть права и ответственный за rollback.
  7. После отката выполняется smoke eval.
  8. Инцидент создаёт новый regression case.

Доступ, секреты и аудит

Разделите роли author, reviewer и deployer. Production alias меняют только утверждённые identities, все операции пишутся в audit log. API keys и customer data не хранятся внутри prompt version.

Для внешнего registry проверьте region, retention, export и decommissioning. Резервная копия должна позволять восстановить prompt bundle без зависимости от одной панели.

План внедрения за четыре недели

Неделя 1
Инвентаризация, contract и prompt bundle.
Неделя 2
Git/registry, manifests, review и eval suite.
Неделя 3
CI gate, flags, shadow и canary.
Неделя 4
Monitoring, rollback drill и ownership.

Финальный чек-лист prompt lifecycle

Production readiness
  1. У prompt есть contract и owner.
  2. Версионируется весь bundle, а не одна строка.
  3. Опубликованные версии immutable.
  4. Variables типизированы и валидируются.
  5. Untrusted context отделён от instructions.
  6. Examples имеют provenance и разрешение.
  7. Каждое изменение проходит review.
  8. Есть golden, regression, edge и safety cases.
  9. Candidate сравнивается с control по сегментам.
  10. Critical errors блокируют release.
  11. Latency и cost входят в gate.
  12. Rollout идёт через flag и stable cohort.
  13. Prompt version видна в каждом trace.
  14. A/B запускается только после quality gate.
  15. Rollback target выбран заранее.
  16. Alias переключается без нового deploy.
  17. Доступы разделены и аудитируются.
  18. Инциденты пополняют regression suite.

Хороший prompt lifecycle делает изменение поведения таким же проверяемым и обратимым, как изменение кода.

Зачем версионировать промпты?
Чтобы воспроизводить ответы и инциденты, сравнивать варианты, проводить review и evals, понимать, какая версия обслужила запрос, и быстро откатывать неудачное изменение.
Что хранить вместе с текстом промпта?
System и task instructions, variables, examples, output schema, tools, model settings, retrieval policy, validators, совместимые модели, owner и результаты evals.
Можно ли хранить промпты только в Git?
Да, если runtime deployment, access и rollback решены. Часто Git используют как source of truth, а prompt registry - для aliases, выдачи версий и переключения production.
Как тестировать новую версию промпта?
Прогнать golden, regression, edge и safety-наборы, сравнить с текущей версией по сегментам, проверить критические ошибки, schema, latency и стоимость, затем выполнить shadow или canary rollout.
Чем A/B-тест отличается от eval?
Eval проверяет качество по заданным критериям на контролируемом наборе. A/B измеряет продуктовый outcome на реальном трафике. A/B нельзя использовать вместо safety и quality gate.
Как безопасно подставлять переменные?
Использовать структурированные роли и шаблоны, типы, enum, ограничения длины и validation. Недоверенный пользовательский текст и retrieved context не должны становиться системными инструкциями.
Как выпускать новый промпт без риска?
Через immutable version, feature flag, shadow, небольшой стабильный canary cohort и постепенный ramp с monitoring. Предыдущая проверенная версия остаётся rollback target.
Как быстро откатить промпт?
Атомарно переключить production alias или feature flag на заранее проверенную версию, остановить ramp, выполнить smoke eval и проверить активные sessions, schemas и caches.
← Все статьи блога