fedorthinks
Все заметки

AGENTS · 10 мая 2026 г.

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

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

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

Самый частый 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 не происходит пока не разберёмся почему.

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

Комментарии

Пока нет комментариев

Войдите, чтобы участвовать в разговоре.

Будьте первым, кто оставит мысль.