Как это работает
Eval состоит из четырёх частей: набор кейсов (golden dataset), прогон тестируемой системы, оценщики (метрики, судья) и отчёт с порогами. Результат прогона имеет смысл только вместе с версиями промпта, модели, базы знаний и набора.
Отличие от обычных тестов в том, что ожидаемого значения нет: проверяют свойства ответа (фактичность, релевантность, безопасность, формат) и смотрят на pass rate по группам кейсов.
Пример
1def test_bucket_pass_rate(results, bucket, threshold):
2 rows = results[bucket]
3 passed = sum(r["verdict"] == "pass" for r in rows)
4 assert passed / len(rows) >= threshold, f"{bucket}: {passed}/{len(rows)}"Как применять в тестировании ИИ
Быстрый smoke-набор запускают на каждый pull request, полный набор перед релизом, а при смене модели, промпта или базы знаний обязательно полную регрессию. В проде оценивают выборку реальных диалогов тем же судьёй.
Типичные ошибки
- Считать только итоговую цифру и не читать проваленные кейсы: именно в них видны реальные дефекты.
- Менять несколько компонентов между прогонами: невозможно понять, что вызвало регрессию.
- Не фиксировать версии модели и промпта в записи прогона.
Частые вопросы
Когда запускать LLM evals?
Быстрый набор на каждый pull request, полный набор перед релизом, полную регрессию при смене модели, промпта или базы знаний и выборочную оценку в проде. Эти изменения меняют поведение бота при неизменном коде.
Чем evals отличаются от обычных автотестов?
В evals нет точного ожидаемого значения: проверяют свойства ответа и считают долю успешных кейсов. Вердикт выносят метрики и LLM-судья, а результат зависит от версий модели, промпта и базы знаний.