Skip to main content
experiment 对着哪个 agent、用哪个模型、开哪些 flags、跑几次。用于做 AB 测试、模型对比、feature 对比——flags 就是 A/B 测试里的 feature flag,一个 experiment 是一组 flag 取值。

一个 experiment 里有什么

experiment 是 experiments/ 下可签入的 TypeScript 文件,核心就几个字段:
  • agent:评谁。放的是已经配置好的实例——被测系统的 URL、鉴权传给 Adapter 工厂,不进 experiment 的其它字段。
  • model / flags:透传语义。NiceEval 不解释它们的含义,原样经 ctx 递给 Adapter,由 Adapter 随请求转发、应用按需切换——这正是 Tier 里模型对比(Tier 1)和 feature A/B(Tier 3)的通道。
  • attemptsbudget、并发、sandbox 等运行参数:怎么跑、跑多少。完整字段见写实验
Experiment 还有一对实验级 Hook setup / teardown:整个实验只跑一次,在你自己的机器上执行,用来起停所有 Attempt 共享的服务(比如一条到内网服务的隧道、一个实验专用的 mock server)。 setup 在本实验第一个 Attempt 派发前执行。teardown 在全部 Attempt 收尾后执行(中断也执行),当且仅当 setup 的时点已经走到才触发。 要按实验在 Sandbox 里准备环境,把 action 挂在 sandbox 字段的 .before() 链上。稳定 action 会按指纹形成可复用准备前缀;动态回调可以用 context.onCleanup() 登记收尾。写法见写实验 · 启动 Experiment 共享服务Sandbox · 按顺序准备 Sandbox 同一实验里的评估用例需要不同预制环境时,把对应的 template-bearing sandbox layer 直接放在各评估用例上,并让 Experiment 不再提供 template。重复 layer 用普通 TypeScript 辅助函数复用;这里没有 environment profile registry。同一个 Experiment 仍能覆盖全部评估用例,因为 link planning 会逐条把评估用例 layer 与 Experiment layer 配对。写法见写实验 · 让不同评估用例使用不同预制环境

矩阵对比

要比较的每个变体写一个 experiment 文件:两个模型就是两个文件,只差 model 一行。prompt A/B 就是只差一个参数。同一批评估用例在多个 experiment 下各跑一遍,固定 Inspection operation 在同一 PublicationCutoff 中比较已发布 Attempt;每个 Experiment 保留自己的评估用例集合与分母,不伪造共同交集。适合比什么、结果怎么读,见实验矩阵 只用于报告归类、不会改变 Attempt 里发生什么的值写进 labels。它们是 Run 的不可变配置上下文,不会透传给 Adapter 或评估用例。改变 labels 后再次运行会建立带新标注的 Run,并可按当次 policy 引用既有 Attempt;历史 Run 保留当时的 labels

相关阅读

  • 写实验defineExperiment 的完整字段:attempts、预算、并发与 sandbox。
  • 实验矩阵 — 跨 agent / model / flags 的对比怎么组织、怎么读结果。
  • 评估 — 另一半:评估用例是什么、生命周期与 verdict。
  • Tiermodel / flags 各在哪一档生效。