FAILED,12 条里有 3 条没通过。你想知道是哪几条、Agent 在那几次运行里实际说了什么、调用了什么工具、为什么没满足断言。
NiceEval 给不同读者准备了三个入口,读的是同一份结果:
每次 Attempt 一结束,结果就能读到,不必等整批跑完。
从总览开始
Covered是当前有可用结果的位置数和计划数。Gaps不为 0 时,说明有些位置还没有结果,或者旧结果已经不适用,例如你改了这条评估用例。缺口下面会写原因和上次的结果入口,旧分数不会被算进当前通过率;这时通过率后面会带(partial),提醒你它只基于已有结果。errored不为 0 时,先处理它们。errored说明运行本身没跑成,例如应用没启动或接口报错,这些 Attempt 没有得出结论。- 计分制评估显示
Score而不是通过率,读法见通过制与计分制。
niceeval exp <id> --dry 看看会跑哪些,再去掉 --dry 正式运行。
看到 Attempts hidden 时,用它建议的命令缩小范围;要显示全部 Attempt,加 --all。
缩小到一个 Experiment 或一次运行
--experiment 显示一个 Experiment 下每条评估用例的结果。--run 显示某一次运行,Run ID 在 exp 结束时的 NEXT 面板里。两者都可以重复传入多个。
运行还没结束时也可以看:已经完成的 Attempt 会出现,还没完成的显示为 pending。
查看一次失败的运行
总览和 Experiment 视图里,每个 Attempt 前面都有一个以@ 开头的 Attempt 定位符(locator),它在项目里唯一指向这一次运行。复制它:
Next 列出了能继续看的方面,按你要回答的问题选:
--execution 给出对话和工具调用的提纲。要展开其中一项,复制提纲里显示的 ID:
not-recorded、partial 或 unavailable,表示这部分信息没有采集到或不完整,不代表它是零或者失败。例如直连应用不会有文件改动,diff 就是 not-recorded。
判断该改应用还是改断言
failed 只说明至少一条断言没满足,不一定说明 Agent 做错了。看完 --execution 后分三种情况:
- Agent 的输出确实不符合任务要求:改应用或 prompt。
- Agent 的输出符合任务要求,断言却拒绝了它,例如正则写得太死:改评估用例。
- 任务本身写得模糊,说不清 Agent 算不算做对:先把任务和判据写清楚。
在浏览器里看
--run 打开指定的一次或几次运行。浏览器里能看到完整对话、工具调用的输入输出和耗时瀑布图。
有新结果发布时,页面会提示刷新,你确认后才会切换,正在看的内容不会突然变掉。--no-open 不自动打开浏览器,--port 指定端口。
看一条断言具体为什么得这个分
show 告诉你哪条断言没过。要看 Judge 给出的理由、计分项具体得了几分,用 query 读这条断言的详情。先取得这次运行的断言清单:
assertions.entries 里选一个 entryId,再读它的详情:
unavailable 时,按返回的 reason 理解,不要从别的字段推测。
让脚本和 CI 读结果
query 只输出 JSON,不做终端排版。不要解析 show 的文字输出,也不要直接读 .niceeval/ 下的文件,格式可能随版本变化。
discover 列出当前版本支持的全部请求类型,例如列出 Run、读取 Run 摘要、读取 Attempt 详情、trace、diff,以及比较两个 Run。按CLI 参考写好请求后,先用 query explain --request <file> 检查,再用 query run --request <file> 执行。
在 pnpm 项目里加 --silent,否则 pnpm 自己的输出会混进 JSON。
比较两次运行见比较两次运行。