Урок 0020 · CI/CD для LLM-приложений

Как промпты, модели и агенты живут в пайплайне: golden sets, регрессии, канарейки, откаты. «Промпт — это код» — на практике.

Цель урока Нарисовать CI/CD для LLM: PR → eval → канарейка → прод → мониторинг → откат. И сказать, что eval-гейт — это как юнит-тесты, только для поведения.

1. Промпт — это код

Промпт, схема тулов, index-версия, модель — это артефакты с версиями, диффами и откатами (урок 0007). Одна строчка промпта может изменить поведение бота сильнее, чем 100 строк кода.

Значит, им нужен тот же контур: Git → ревью → тесты (evals) → деплой → мониторинг → откат.

2. CI: eval-гейт как юнит-тесты

На каждый PR с изменением промпта/тулов/индекса:

  1. Golden set — 100–500 размеченных пар (вопрос → ожидаемое поведение). Хранится в репо.
  2. Критичные evals — PII-leak, деньги, отказы: обязаны быть 100% (уроки 0001, 0013).
  3. Общие evals — faithfulness, resolution-прокси: не ниже порога (например, не хуже baseline на 1%).
  4. Скорость: критичные evals — быстрые (кодом); тяжёлые судьи — ночной прогон, не блокируют каждый PR.

Правило: не пускай деградацию в прод. Если golden set упал — PR не мержится, как с упавшими юнит-тестами.

3. CD: канарейка вместо «выкатили и молимся»

  1. Canary 5–10% трафика на новую версию промпта (урок 0005/0007).
  2. Сравнение метрик: resolution, recontact, эскалация, $/диалог — новая версия против старой.
  3. Гарды: PII-leak > 0 или эскалации скакнули → автоматический откат (kill switch).
  4. Rollout: 10% → 50% → 100% по метрикам, не по календарю.

Правило из урока 0006: A/B в прод — когда офлайн-eval уже не различает варианты. CD-канарейка — это и есть финальный A/B.

4. Версионирование всего

config_version = {prompt_version, tool_schema_version, index_version, model_id}

Лог пишет config_version → регрессию можно отнести к конкретной версии
→ откат = переключение конфига, не пересборка

Модель тоже версия: смена модели = PR с eval-гейтом (прогон golden set на новой модели до мержа).

5. Регрессионный датасет растёт из прода

Каждый фейл из прода (жалоба, PII, эскалация) → в датасет → eval в CI. Это петля из урока 0019: observe → dataset → evaluate. Со временем датасет покрывает всё больше реальных случаев, и регрессии ловятся до пользователей.

Проверь себя

Eval-гейт в CI — это как?

Канарейка — это?

Откат промпта — это?

Видео и статьи

Первоисточник урока Promptfoo (eval в CI) + Hamel FAQ (CI vs prod).

Sources: