基本形状
一个实验文件 = 一个配置(一个 agent × 一个 model)。路径只生成 experiment id 和支持前缀选择:show / view 直接比较当前结果范围里的 experiments,不需要额外分组字段。
多层目录只负责 id 和批量选择:
某一格结果反常、需要单独复现时,用该配置的完整 id(目录路径/文件名)精确只跑这一格,不用先批量运行同目录配置:
gpt-5.4-mini.ts 这类共享前缀的变体,可以用文件名前缀选择:
defineExperiment 的字段配置与 flags 传递方式见写实验。
可比较的运行维度
- 不同 Adapters。
- 不同模型(Tier 1 接入即可:应用接口暴露模型选择,
model经ctx.model透传)。 - 不同 prompts 或 feature flags(要求 Tier 3 接入:变体在应用内部,需要应用把它暴露成 experiment 可选的 flag,经
flags→ctx.flags透传)。 - 不同 sandbox provider。
- 不同运行环境条件(比如装不装某个记忆工具的二进制、有没有预置状态):环境差异写在
sandboxspec 的.setup()/.teardown()Hook 里,一个变体一个 experiment 文件,见 Sandbox provider · 生命周期。 - 同一任务的 pass@N。
查看结果
Experiment 输出通常按(agent, model, eval) 维度展示:
evals 选择评估用例。函数形式会遍历所有已发现的评估用例:
eval.id 是文件路径推导出的项目内 ID,不是绝对路径,可以直接用 startsWith / includes 判断。在评估用例里的两个例子中,coding/fix-button 会被选中,research/gpu-literature 不会。实验快照记录解析后的 selectedEvalIds;报告直接读取它。
设计 experiment 的建议
- 保持评估用例集合稳定,避免比较时混入新变量。
- 每个 cell 跑多个 attempts,尤其是非确定性 coding agent。
- 把预算和并发写清楚。
- 对“失败原因”做归类,不只看总分。
与普通运行的关系
npx niceeval exp <路径或 id> 按文件身份运行;每个文件的 evals 决定它覆盖哪些评估用例,结果以 selectedEvalIds 落盘。