Практика · Средний уровень

Чек-лист выпуска AI-агента в production

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

Время чтения: до 8 минут Результат: проверки перед релизом и план отката

Почему успешной демонстрации недостаточно

AI-агент в production работает не только с моделью, но и с инструментами, пользовательскими данными, очередями, базами и внешними API. Ошибка в рассуждении становится инцидентом, если агенту разрешено без подтверждения удалять записи, отправлять сообщения или раскрывать чужие данные.

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

Шаг 1. Зафиксируйте единицу релиза

Откатывать нужно не абстрактного «агента», а согласованный набор версий. Создайте запись релиза и храните её рядом с конфигурацией развертывания.

# Пример файла release.yaml — значения демонстрационные
release_id: agent-2026-07-28-01
application_image: registry.example.invalid/agent:1.8.0
prompt_version: prompt-14
model_alias: approved-model
tool_policy_version: tools-7
schema_version: "12"
feature_flags:
  autonomous_write: false
  require_confirmation: true

Адрес с доменом .invalid намеренно неработоспособен. Замените его внутренним адресом реестра. Не помещайте токены, пароли и ключи API в этот файл.

Шаг 2. Ограничьте доступ и полномочия

Используйте отдельную сервисную учётную запись. Разрешайте только операции, необходимые для заявленного сценария. Чтение и изменение данных должны быть разными разрешениями.

# Пример политики; синтаксис условный и требует адаптации
principal: service-account/agent-production
default: deny
allow:
  - resource: knowledge-base/public
    actions: [read]
  - resource: tickets
    actions: [read, create]
conditions:
  tenant_from_authenticated_session: true
  destructive_actions: deny
  external_messages:
    require_human_confirmation: true

Идентификатор пользователя или организации берите из проверенной серверной сессии, а не из текста запроса к модели. Модель не должна выбирать роль, область данных или владельца ресурса.

Шаг 3. Проверьте поведение воспроизводимо

Подготовьте фиксированный набор входов и ожидаемых ограничений. Не требуйте дословного совпадения естественного языка: проверяйте разрешённые инструменты, структуру результата и отсутствие запрещённых действий.

  1. Запустите тесты без сетевого доступа или с имитаторами внешних сервисов.
  2. Зафиксируйте версию модели и параметры генерации, если платформа это поддерживает.
  3. Повторите критические сценарии несколько раз: недетерминированность может скрыть редкую ошибку.
  4. Сравните кандидата с текущей production-версией на одном наборе входов.
# Пример безопасного локального запуска
# Команда должна читать только тестовые данные и использовать имитаторы инструментов
agent-eval run \
  --cases ./eval/cases.jsonl \
  --tool-mode mock \
  --network disabled \
  --report ./artifacts/release-report.json

agent-eval — условное имя команды, а не заявление о наличии такого инструмента в проекте. Реальная команда должна завершаться ненулевым кодом при нарушении политики.

Минимальный набор сценариев:

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

Шаг 4. Установите технические предохранители

Ограничения должны исполняться кодом вокруг модели. Текстовая инструкция в системном промпте полезна, но не заменяет контроль на стороне приложения.

# Пример конфигурации защитных лимитов
runtime:
  request_timeout_seconds: 45
  max_agent_steps: 8
  max_tool_calls: 5
  max_parallel_tool_calls: 2
  max_output_tokens: 1200

tools:
  write_operations:
    require_idempotency_key: true
  failure_policy: stop
  unknown_tool_policy: deny

budget:
  per_request_cost_limit: configured_by_owner
  daily_limit_action: disable_new_runs

Шаг 5. Подготовьте наблюдаемость

До релиза убедитесь, что команда сможет понять, что сделал агент и почему сработал предохранитель. Журналируйте идентификатор запроса, версию релиза, выбранный инструмент, длительность, итоговый статус и код политики. Аргументы и ответы инструментов сохраняйте только после фильтрации чувствительных данных.

Определите пороги для остановки выпуска:

  • рост ошибок приложения или инструментов;
  • нарушение политики доступа;
  • неожиданный рост стоимости, задержки или числа шагов;
  • увеличение доли ручных исправлений;
  • жалобы на действия, совершённые без подтверждения.

Конкретные значения порогов зависят от нагрузки и допустимого риска. Их следует получить из базовой линии текущей версии, а не копировать из примера.

Шаг 6. Выпускайте поэтапно

  1. Разверните кандидата без пользовательского трафика и выполните проверку готовности.
  2. Запустите внутренние или тестовые запросы без побочных эффектов.
  3. Направьте малую долю подходящего трафика, сохранив опасные функции выключенными.
  4. Сравните показатели с базовой линией за заранее выбранное окно наблюдения.
  5. Увеличивайте долю только при выполнении критериев продолжения.
# Пример последовательности для оркестратора с декларативной конфигурацией
# Сначала только просмотр изменений
deploy-tool diff --file release.yaml

# Затем применение после ручной проверки diff
deploy-tool apply --file release.yaml

# Проверка состояния без изменения ресурсов
deploy-tool status --release agent-2026-07-28-01

Названия команд условные. Перед применением проверьте справку вашего оркестратора и убедитесь, что команда diff действительно не меняет состояние.

Шаг 7. Проверьте план отката до релиза

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

План отката

  1. Триггер: зафиксировать измеримые условия автоматической или ручной остановки.
  2. Ограничение ущерба: выключить новые запуски и операции записи отдельным флагом.
  3. Переключение: вернуть трафик на идентификатор предыдущего успешного релиза.
  4. Данные: остановить несовместимые фоновые задания; применить только заранее проверенную обратную миграцию.
  5. Проверка: выполнить чтение, разрешённый вызов инструмента и контроль отсутствия новых записей от отозванной версии.
  6. Разбор: сохранить журналы и идентификаторы запросов, не раскрывая секреты.
# Пример аварийного переключения; команды условные
deploy-tool flag set autonomous_write=false
deploy-tool traffic set --release agent-previous-stable --percent 100
deploy-tool traffic set --release agent-2026-07-28-01 --percent 0
deploy-tool status --release agent-previous-stable

Отрепетируйте эту последовательность в тестовом окружении. Запишите исполнителя, резервного исполнителя, ожидаемое время восстановления и способ связи. Если обратная миграция не доказана, выбирайте совместимые изменения схемы и откат приложения без отката данных.

Проверка результата

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

Типовые ошибки

«Модель получила инструкцию ничего не удалять»
Промпт не является границей безопасности. Удаление нужно запретить в политике инструмента и в серверной авторизации.
Один общий ключ для разработки и production
Инцидент в тестовой среде затронет реальные ресурсы. Разделяйте учётные записи, права, квоты и хранилища секретов.
Логи содержат полный промпт и ответы API
Так в журнал могут попасть персональные данные и секреты. Применяйте минимизацию, маскирование и ограничение срока хранения.
Откатывается только код
Промпт, политика инструментов или флаги остаются новыми. Храните их версии в единой записи релиза.
Канареечный выпуск без критериев остановки
Малая доля трафика сама по себе не защищает. Нужны пороги, окно наблюдения и ответственный за решение.
Сначала релиз, потом проверка отката
В момент инцидента выясняется, что старый образ удалён или схема несовместима. Репетиция должна предшествовать выпуску.

Ограничения чек-листа

Этот список не заменяет моделирование угроз, аудит инфраструктуры, требования отраслевого регулирования и план реагирования на инциденты. Для агентов с финансовыми, медицинскими, юридическими или физическими последствиями нужны дополнительные проверки и обязательное участие профильных специалистов.

Даже полный набор проверок не доказывает корректность всех будущих ответов модели. Его задача — снизить вероятность инцидента, ограничить масштаб последствий и ускорить восстановление.

Короткий выпускной барьер

Не переводите агента на полный production-трафик, пока не выполнены четыре условия: полномочия минимальны, опасные сценарии воспроизведены, отклонения видны в метриках, а предыдущая версия реально восстановлена на учебном откате.

Дополнительные практические материалы доступны в разделе гайдов, а определения терминов — в глоссарии.