Има шаблон, който виждаме в почти всяка агентна система, която работи повече от шест месеца: папка evals/ с 40 сценария, написани ентусиазирано през втората седмица, и last_run.json отпреди последната промяна на prompt-а.
Това не е eval suite. Това е скрийншот от среща през март.
Проблемът с двете задачи
Когато един eval suite живее извън CI, той в крайна сметка изпълнява две задачи, които дърпат в противоположни посоки:
- Да убедите себе си, че системата работи (пуска се веднъж, демо, архив)
- Да хваща регресии преди потребителите (пуска се на всяка промяна, блокира релийзи)
Първата задача възнаграждава задълбочеността — напишете 200 случая, покриващи всеки edge. Втората възнаграждава скоростта — пускайте под пет минути или никой няма да чака.
Извън CI suite-ът се отклонява към първата задача, защото втората няма налагане. Резултатът е suite, който е впечатляващ за демо и безполезен на практика.
Какво всъщност означава „в CI“
Три конкретни неща, по ред на цена:
- Подмножество се пуска на всеки PR. Изберете 20–40 бързи случая с високо покритие. Те трябва да завършват под 90 секунди и да блокират merge-а, ако се провалят.
- Целият suite се пуска нощно срещу main branch. Провалите вдигат някого — не on-call ротацията, а собственика на prompt-а.
- Делтите в score се проследяват във времето. Не само pass/fail. 4% регресия в точността на цитиране, която не проваля hard gate, все още е регресия.
Средната — провалите вдигат собственик — е частта, която екипите пропускат и после се чудят защо drift-ът се натрупва.
Какво доставяме с всяка система
pnpm eval (или еквивалентен) target, който пуска бързото подмножество локално под две минути. GitHub Action, който прави същото на PR. Нощна задача, която пуска пълния set срещу production prompts. И едно табло с две графики: pass rate по таг и pass rate във времето.
Това е всичко. Нищо в този списък не е ново. Новото е, че е вързано от ден първи и остава вързано, след като си тръгнем.
Защо това работи
Инженерите няма да пишат evals за системи, които не ги налагат. Eval suite-ът не е морален артефакт, той е носещ елемент от тестовата пирамида. Поставете го там, където са останалите тестове.