# Eval или не выпущено

Почему я отказываюсь выпускать агента без holdout evaluation, что делает eval полезным и какой failure mode я регулярно вижу, когда команды это пропускают.

- **Author:** Фёдор Чищин
- **Published:** 2026-05-10
- **Tags:** agents, eval, methodology
- **Source:** https://fedorthinks.com/ru/blog/evals-or-it-didnt-ship

---

Самый частый failure mode в AI-проектах, который я вижу: команда выпускает
демо, демо работает на входных данных, в которые команда вглядывалась
неделями, и никто не знает, стала ли система реально лучше или хуже
между июнем и августом.

Решение не звучит эффектно: holdout evaluation set, который прогоняется перед каждым
merge, агент его никогда не видит во время разработки.

## Что значит "holdout" на практике

Если ты написал агента и видел eval-входы — eval загрязнён. То же самое с
prompt tweak: каждый промпт, который я трогаю, видит dev split. Holdout
split закреплён в version control, читается CI, а люди смотрят в него
только когда счёт изменился достаточно сильно, чтобы расследовать. Всё.

## Что делает eval полезной

Три свойства, по порядку:

1. **Отражает production-трафик.** Умный benchmark, который кто-то
   собрал полезен для сравнения систем, но не говорит тебе что нужно
   твоим пользователям. Майнь production-логи, сэмплируй, анонимизируй,
   курируй. Раз в квартал.
2. **Оценивает то, на что ты реально отреагируешь.** «Helpfulness 4.2/5»
   не даёт понятного действия. «78% сценариев проходят контракт structured output» —
   даёт.
3. **Дёшево гонять.** Если eval занимает 6 часов — никто не запустит
   его в PR. Цельтесь в 5 минут на smoke set, час на полный.

## Форма хорошего eval suite

Два слоя:

- Маленький smoke set (~30 сценариев), бежит на каждом PR. Ловит
  регрессии рано.
- Больший holdout set (~300 сценариев), бежит на main еженедельно.
  Набор, который агент не видит во время разработки.

Публичные benchmarks стоят рядом, а не вместо. Они полезны для разговора
с другими командами, но контракт, который имеет значение, — это контракт
с твоим собственным production-трафиком.

## Что я перестал принимать

«В тестах выглядело хорошо» — не состояние, в котором я выпускаю агентов
в продакшен. Если eval не существует, агент не уходит. Если eval-score
регрессирует — merge не происходит пока не разберёмся почему.

Звучит жёстко пока не посмотришь как система тихо регрессирует за
шесть спринтов, потому что никто не измерял. После этого звучит очевидно.
