跳转到主要内容
Experiment 用于比较多组运行配置。典型比较包括 Claude Code 与 Codex 在同一批 Coding Agent 任务上的通过率、prompt 改动前后的成本,以及不同模型的延迟与质量。

基本形状

一个实验文件 = 一个配置(一个 agent × 一个 model)。路径只生成 experiment id 和支持前缀选择:
另一个模型写另一个文件。默认 show / view 直接比较当前结果范围里的 experiments,不需要额外分组字段。 多层目录只负责 id 和批量选择: 某一格结果反常、需要单独复现时,用该配置的完整 id(目录路径/文件名)精确只跑这一格,不用先批量运行同目录配置:
目录里如果还有 gpt-5.4-mini.ts 这类共享前缀的变体,可以用文件名前缀选择:
defineExperiment 的字段配置与 flags 传递方式见写实验

可比较的运行维度

  • 不同 Adapters。
  • 不同模型(Tier 1 接入即可:应用接口暴露模型选择,modelctx.model 透传)。
  • 不同 prompts 或 feature flags(要求 Tier 3 接入:变体在应用内部,需要应用把它暴露成 experiment 可选的 flag,经 flagsctx.flags 透传)。
  • 不同 sandbox provider。
  • 不同运行环境条件(比如装不装某个记忆工具的二进制、有没有预置状态):环境差异写在 sandbox spec 的 .setup() / .teardown() Hook 里,一个变体一个 experiment 文件,见 Sandbox provider · 生命周期
  • 同一任务的 pass@N。
Tier 1 / Tier 2 / Tier 3 的定义见 Tier

查看结果

Experiment 输出通常按 (agent, model, eval) 维度展示:
除了 pass rate,还应该看平均耗时、token、成本和失败类型。
每个 experiment 用自己的 evals 选择评估用例。函数形式会遍历所有已发现的评估用例:
eval.id 是文件路径推导出的项目内 ID,不是绝对路径,可以直接用 startsWith / includes 判断。在评估用例里的两个例子中,coding/fix-button 会被选中,research/gpu-literature 不会。实验快照记录解析后的 selectedEvalIds;报告直接读取它。

设计 experiment 的建议

  • 保持评估用例集合稳定,避免比较时混入新变量。
  • 每个 cell 跑多个 attempts,尤其是非确定性 coding agent。
  • 把预算和并发写清楚。
  • 对“失败原因”做归类,不只看总分。

与普通运行的关系

npx niceeval exp <路径或 id> 按文件身份运行;每个文件的 evals 决定它覆盖哪些评估用例,结果以 selectedEvalIds 落盘。