跳转到主要内容
一批评估跑完,有几条 failed 或 errored。你要找到原因:是应用答错了、Adapter 映射漏了、环境没起来,还是断言写得太紧。 从一个明确的 Run 或 Attempt 开始查。在终端用 niceeval show,在浏览器用 niceeval view;脚本和 CI 用 query 读 JSON。

从 Run 找到出问题的 Attempt

先看这次运行的整体情况。Run ID 在 exp 结束时的 NEXT 面板里:
输出会列出这个 Run 的时间、各评估用例的判定、分数、结果覆盖、用量和限制。每个 Attempt 前面有一个以 @ 开头的 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 格式会自动升级,不需要走这个流程。
  1. 停止原项目里仍在运行的 NiceEval 进程。不要根据锁文件的修改时间判断它能不能删。
  2. 保留原项目和完整的 .niceeval 目录。需要查看历史时,在原项目里使用当时写入数据的 NiceEval 版本。不确定是哪个版本时,先保留现场再核实。
  3. 把配置、评估用例、实验和其它项目文件复制到一个新目录,不复制 .niceeval,并在新目录安装当前版本的 NiceEval。
  4. 在新目录运行原实验,例如 pnpm exec niceeval exp <experiment> --rerun all。新结果写进新目录的结果文件,原项目的历史数据保持原样。
这个流程不会把旧结果带进新的结果文件。不要只删除个别锁文件或数据文件来绕过检查。niceeval state migrate --all 管理的是用户级服务状态,不能转换项目的结果文件。

View 显示旧结果

niceeval view 打开时,固定读取当时已经发布的结果。页面提示有新结果时,确认刷新即可看到最新内容;刷新失败时,页面保留上一份能读到的结果。 正常的查看流程见查看运行结果,命令细节见 CLI。