niceeval exp --output ... 选择,不是用户配置的 Reporter;.niceeval/ results artifacts 始终开启。其余 Reporter 从 niceeval/reporters 导入,按需挂载。
挂载位置有两个:
niceeval.config.ts的reporters:观测整次运行的每个评估用例。共享目的地(比如一个 Braintrust 实验)通常写在这里。- 单个评估用例的
reporters:实例只观测引用它的评估用例。多个评估用例引用同一个实例时合并观测,结果落进同一个目的地;已经写在 config 里的实例在评估用例上再列一遍也不会重复上报。
Braintrust
Braintrust(...) 把一次运行作为一个 Braintrust experiment 上传,每个 attempt 一行。放在 config 里覆盖整次运行:
niceeval.config.ts
evals/forecast.eval.ts
braintrust 包(npm install braintrust,它是可选依赖,不装不影响其它功能),并设置 BRAINTRUST_API_KEY;需要在代码里显式传 key 时用 apiKey 参数。运行结束后终端会打印 experiment URL。
上报口径
- 每个 attempt 是 Braintrust 里的一行;
runs: 3会产生三行,靠 metadata 里的attempt区分。 - soft 断言按名字记为 score;gate 断言记在
gate:前缀下。这样在 Braintrust 的实验对比里,gate 回归和 soft 分数回归用同一套 diff 看。 - metrics 带开始/结束时间、token 用量和估算成本;缺的数据不写,不补零。
- metadata 带
agent、model、experiment、flags、verdict和失败断言明细,方便在 Braintrust 里按维度过滤。
配置项
Braintrust 项目名。省略时用
niceeval。Braintrust 项目 id。与
project 给一个即可。实验名。省略时由 Braintrust 自动命名。
作为对比基线(diff base)的既有实验名。
作为对比基线的既有实验 id。
为
true 时更新同名既有实验,而不是新建一个。实验级附加 metadata,与 NiceEval 自动写入的字段合并,同名以这里为准。
Braintrust API key。省略时 SDK 读
BRAINTRUST_API_KEY。JUnit 与 Json
JUnit(path) 输出 JUnit XML,让失败出现在 CI 的测试报告 UI 里;临时生成可以直接用 CLI 的 --junit <path>,不用改配置。Json(path) 把完整 RunSummary 落成一个 JSON 文件,喂下游脚本或 dashboard。CI 场景的完整接法见CI 集成。
自定义 reporter
reporter 是实现若干可选回调的对象,拿到的是和内置 reporter 相同的结构化结果:onRunStart(evals, agent, shape):运行开始,收到本次实际要跑的评估用例列表和运行规模。onEvalComplete(result):每个 attempt 完成即时触发,回调串行化,不会交错。onRunComplete(summary):运行结束,收到聚合汇总。onEvent(event):更细粒度的事件流(eval:start、run:budgetExceeded等)。
--json / --junit 与默认 results artifacts 是 required 输出,写失败会让最终运行判红。只有目的地没被内置覆盖时才需要自定义——.niceeval/ 的 artifacts 已经记录了完整结果,事后分析直接读它(见查看结果)。