跳转到主要内容
你的团队已经在 Braintrust 上看实验结果,或者有一个内部看板。你希望 NiceEval 跑完后,结果自动出现在那里,不用手动导出。 Reporter 做的就是这件事:在这一次运行过程中,把结果发给外部系统。它只负责“这一次”的上报,NiceEval 保存的结果不会因此改变。事后要重新读取、比较或分享结果,仍然用 show、view 和 query。 一次 niceeval exp 会同时产出这几样东西:

选择合适的上报方式

用 Reporter 推送到外部系统

在 niceeval.config.ts 的 reporters 里配置项目默认的 Reporter,评估用例的 reporters 会和它合并。字段说明见 defineConfig 参考。 Reporter 能拿到的是这次运行过程中已知的结果。外部系统可以接收运行摘要、每个 Attempt 的结果或查看链接。要读取完整的结果,用 receipt 里的 Run ID 重新打开保存下来的结果。 Reporter 不能:
  • 把外部系统里的数据当作 NiceEval 的结果;
  • 代替 NiceEval 保存的判定、用量、断言或诊断;
  • 让 query、show 或 view 改从外部系统读数据;
  • 把外部系统的结果写回 .niceeval/record.sqlite。

在 CI 中输出 JUnit

接入 CI 平台最直接的方式是 JUnit:
NiceEval 先写临时文件,再一次性替换目标文件,CI 平台不会读到写了一半的内容。JUnit 只描述这一次运行,结果仍以 NiceEval 保存的为准。完整的 CI 配置见在 CI 里自动跑评估。

用 receipt 关联后续步骤

--json 输出这次运行的 NDJSON。最后一行是 receipt,包含 invocationId、createdRunIds、publicationCutoff、开始时间、结束时间和 completion。外部自动化可以保存 receipt,再用 createdRunIds 打开对应的 Run:
脚本需要结构化结果时,先运行 pnpm --silent exec niceeval query discover 找到可用的查询。 不要把进度或诊断行当作长期保存的结果格式。它们只描述这一次运行正在发生什么。

接入外部系统时的原则

  1. 外部上报只使用这次运行中已知的信息。
  2. 凭据放在环境变量里,不写进任何输出。
  3. CI 门禁看退出状态。
  4. 用 receipt 的 createdRunIds 把外部工作流和 NiceEval 保存的结果关联起来。
  5. 需要审阅结果时,人用 show 或 view 打开那个 Run,自动化流程用 query。