*.eval.ts 文件导出,通过 defineEval 声明。
评估用例的组成
评估用例本身不声明用哪个 Agent——它默认保持 agent-neutral,同一个评估用例可以在不同 experiment 下跑不同 Agent。选哪个 Agent 是 experiment 的字段,不由 CLI 临时覆盖。
不要手写
id 或 name。NiceEval 从文件路径推导 ID。路径即身份
evals/weather/brooklyn.eval.ts 的 ID 是 weather/brooklyn。experiment 名之后的位置参数按 ID 前缀过滤:
terminal-swe-bench 也会命中 terminal-swe-bench-astropy-1,不要求后一个字符必须是 /。
生命周期
1
Discovery
runner 加载
evals/ 下的 *.eval.ts 文件和 fixture 目录。2
Scheduling
结合并发、缓存、runs、attempt 和 early-exit 生成执行计划。
3
agent.send
t.send() 调用被选中的 Adapter,并得到标准 Turn。4
Scoring
NiceEval 收集值断言、作用域断言、judge 分数和测试结果。
5
Verdict
所有断言结果折叠成一个最终 verdict。
6
Report
控制台和 reporters 输出结果,同时写入
.niceeval/ artifacts。Verdict 类型
passed
所有 gate 断言通过(
--strict 下 soft 断言也都达到阈值),并且没有执行错误。failed
至少一个 gate 断言失败,或
--strict 下有 soft 断言低于阈值。errored
执行异常、超时或作者错误,本次执行无法形成可信结论。
skipped
评估用例主动跳过,通常通过
t.skip(reason)。gate 与 soft
gate 是硬门槛,失败会让 eval 失败;soft 参与打分,但不一定让 eval 失败。完整规则见 Assert。
*.eval.ts 约定
只有以 .eval.ts 结尾的文件会被发现。目录只形成 ID 前缀:
数组导出与数据驱动测试(dataset fan-out)
一个文件也可以默认导出defineEval(...) 数组,用同一套逻辑生成多个 case:
sql/0000、sql/0001。详见 数据驱动测试。