failed 或 errored。你要找到原因:是应用答错了、Adapter 映射漏了、环境没起来,还是断言写得太紧。
从一个明确的 Run 或 Attempt 开始查。在终端用 niceeval show,在浏览器用 niceeval view;脚本和 CI 用 query 读 JSON。
从 Run 找到出问题的 Attempt
先看这次运行的整体情况。Run ID 在exp 结束时的 NEXT 面板里:
@ 开头的 locator,复制出问题的那一个:
errored 时会显示出错的阶段和完整错误正文,通常先看这里就够了。
按问题选择要看的内容
单看摘要还不够时,按你怀疑的方向加一个参数:--execution 显示的是精简过的执行过程。要展开其中一项,复制它旁边的 ID:
查清一条断言为什么得这个分
问题落在某一条断言上时,用query 取结构化详情。它会返回这条断言的各项贡献、测量值和 Judge 给出的理由:
show 的排版文本反推断言字段。完整 request 示例见查看运行结果。
无法打开结果
已发布的结果不能手动修改。需要不同的结果时,重新运行创建新的 Run。
niceeval run recover 只会结束能证明原进程已经终止的 Run,已经发布的 Attempt 都会保留。完整步骤见运行被强杀后恢复。
读取历史 Record
这里的格式版本是结果文件内部的标识,和 NiceEval 的 npm 包版本无关。不要通过修改数据库里的版本字段尝试升级。show、query、run list、run show 与 view 可以直接读取 0.15、0.16、0.17 格式的历史结果文件。读取时 NiceEval 在私有副本里自动升级,原文件、Run、Attempt 和引用都保持不变,不需要先运行评估。
用 --record 读取时,文件必须是已经交付的完整单文件,读取期间不能被其它进程修改。文件还带着未合并的 WAL、仍有运行在写,或无法确认写入进程是否已经结束时,命令会拒绝读取。不要删除旁边的文件来绕过检查。
在项目里正常运行 exp 等写入命令时,NiceEval 会先备份、验证,再自动升级支持的旧格式。读取当前格式的项目时,不会执行升级或恢复。
结果不完整或无法比较
脚本或 CI 先运行pnpm --silent exec niceeval query discover 找到合适的查询,再用 explain 检查 request,最后用 run 执行。结果会指出缺了哪些结果、有哪些问题、用了什么证据,以及怎样修正。
query 只输出 JSON,不适合人直接阅读。要逐项解释分数时,用 attempt.get 和 attempt.assertion.detail,不要只看汇总分数。
需要浏览器界面时运行 pnpm exec niceeval view --run <run-id> --no-open。不要解析 View 页面,也不要直接查询 SQLite 里的表。
比较两个 Run 用 runs.compare。它的 exact 和 paired 模式遇到无法对齐的评估或配对时会直接拒绝,不会悄悄缩小分母。
读懂成批错误
一次运行里,同一类已知错误第一次出现时,终端会立即给出完整原因、负责方、源码位置和下一步。运行结束时,再用摘要列出总次数、受影响的对象和源码位置。迁移指南按guideId 只完整显示一次,不会为每个对象重复展开。
只有 code、owner、修复目标与 guideId 四项完全相同的错误才会归为一组。摘要最多保留 32 组,每组最多展示 32 个受影响对象和 32 个源码位置;超出的数量会单独写明,每条原始错误仍各自保留。没有稳定来源的未知错误单独显示,不会仅凭相似的 message 或 stack 合并。
源码位置按已知调用点或 source map 定位,找不到时显示 unknown。NiceEval 不会为了报错扫描整个项目,也不要求应用开启额外的 AST 扫描。
旧项目状态阻塞运行
如果项目数据早于支持自动升级的格式,或错误提示旧的locks/、sessions/ 等目录阻塞写入,按下面步骤保留历史。上面说的 0.15、0.16、0.17 格式会自动升级,不需要走这个流程。
- 停止原项目里仍在运行的 NiceEval 进程。不要根据锁文件的修改时间判断它能不能删。
- 保留原项目和完整的
.niceeval目录。需要查看历史时,在原项目里使用当时写入数据的 NiceEval 版本。不确定是哪个版本时,先保留现场再核实。 - 把配置、评估用例、实验和其它项目文件复制到一个新目录,不复制
.niceeval,并在新目录安装当前版本的 NiceEval。 - 在新目录运行原实验,例如
pnpm exec niceeval exp <experiment> --rerun all。新结果写进新目录的结果文件,原项目的历史数据保持原样。
niceeval state migrate --all 管理的是用户级服务状态,不能转换项目的结果文件。
View 显示旧结果
niceeval view 打开时,固定读取当时已经发布的结果。页面提示有新结果时,确认刷新即可看到最新内容;刷新失败时,页面保留上一份能读到的结果。
正常的查看流程见查看运行结果,命令细节见 CLI。