Evals для агентов: пирамида тестов и Harbor на примере CLI

Если агент ходит в ваш API, CLI или MCP-сервер, логи могут быть зелёными, а заказ — не тот: горячий латте вместо айсед. Eval отвечает на другой вопрос — как часто финал совпадает с запросом пользователя, если гонять одни и те же сценарии до и после правки промпта, тулов или skills.
Воронка как у человека: Discovery, Selection, Access, Success. Для продуктов с ботами чаще всего важна последняя стадия — довёл ли агент дело до правильного итога. Из‑за разброса ответов LLM одного ручного прогона мало: нужны повторы и сводка по исходам.
Пирамида по числу вызовов модели
Обычный тест — «сработало?», eval — «как часто и насколько хорошо». Уровни:
- детерминированные тесты — 0 вызовов LLM;
- one-turn evals — одно решение за один вызов;
- E2E evals — вся цепочка, 2+ вызова; для Success важен этот верх.
Нижние слои дешевле, их должно быть больше. Отдельный шаг может выглядеть разумно, а заказ всё равно мимо — для такого сценария берут E2E. SWE-bench и Terminal-Bench — известные примеры.
Цифры на вымышленном CLI sfbeans
Демо — заказ кофе в Сан‑Франциско: агент сверяет температуру, бюджет с налогом и чаевыми и время pickup. Пять прогонов Claude Code с Opus 5.5 через AI Gateway: success rate 60%, три pass из пяти.
Pass@5 ≈ 99% — за пять попыток почти наверняка один раз верно; Pass^5 ≈ 8% — пять удач подряд. Для ежедневного заказа кофе важнее Pass^k (перезапуска нет), для coding-агента с тестами — Pass@k (провал дешёв, есть retry).
Harbor: среда, прогоны, верификатор
E2E eval собирают на Harbor — open-source от авторов Terminal-Bench: агент в контейнере, trace с сообщениями, tool calls и итогом. Task — среда и проверка, Variant — модель и промпт, Trial — одна попытка, Run — все варианты × задачи × повторы.
- iced-latte-mission — типичный заказ;
- usual-unavailable — любимое кафе без напитка;
- team-order — шесть напитков, бюджет $45;
- impossible-request — корректный отказ.
После агента верификатор пишет скор в /logs/verifier/reward.json; check_orders.py ставит reward 1 только если все ограничения выполнены. Среду частично фиксируют — seeded cafes.json и 8:30 в sfbeans при реальном CLI. Интеграция Harbor с Vercel гоняет trials параллельно в Sandbox и кеширует окружения, чтобы CI не простаивал часами.
Источник: WTF are evals? How to test agents and the software they use.