返回 AICAP-180
B10 · Day 98p95/cost 测量 + 成本级联 + tau2-bench

pass^k 测量 (M2)

Day 96 搭了 tau2 双控制脚手架,Day 97 写了 3 个 held-out retail 任务 + 确定性验证函数(纯逻辑已可单测)。

阶段: B10 · p95/cost 测量 + 成本级联 + tau2-bench(Day 91-100) 标签: #passk #stability #consistency #agent-eval

今日导引(由浅入深)

Day 96 搭了 tau2 双控制脚手架,Day 97 写了 3 个 held-out retail 任务 + 确定性验证函数(纯逻辑已可单测)。 但「一道题跑一次过了」不等于「这个 agent 可靠」。 B1→B18 曲线上,M2 评测能力的最后一块拼图是稳定性度量:用 pass^k 把「靠运气过」和「稳稳过」区分开。 今天的内核是 pass^1 vs pass^k 的定义与测量——同一任务独立跑 k 次,全部通过才算稳定通过。 最小可判定产出:在 3 个 held-out 任务上用 deepseek-v4-flash 各跑 k=3,出一张 pass^1 / pass^3 数字表(需 key 跑,scaffold 仍 gated)。

1. 机理精读

定义。 pass^1 = 单次通过率,即任务跑一次就 pass 的比例。 pass^k = 同一任务用相同配置独立重复跑 k 次,k 次全部通过才记为该任务「pass^k 通过」,再对任务集求比例。 注意上标 k 是「全过」语义(all-of-k),不是「k 次里至少一次过」(那是 pass@k,方向相反)。 pass^k 随 k 单调不增:pass^3 ≤ pass^1 恒成立。

为什么这样设计——惩罚不一致性。 多轮 agent 的输出有方差:采样温度、user 模拟器的抖动、工具调用顺序的微小差异,都可能让同一任务这次过、下次翻车。 pass^1 把这种波动平均掉,给出一个「平均会不会过」的乐观数字。 pass^k 则直接问「能不能每次都过」。 对生产,后者才是用户体感——一个 pass^1=0.8、pass^3=0.4 的 agent,意味着同一个请求三次里大概率有一次失败。 这在合规/调查场景是不可接受的,所以 pass^k 把「一致性」做成可量化的一等指标。

手算直觉。 若某任务每次独立通过概率为 p(且各次近似独立),则该任务的 pass^k ≈ p^k。 p=0.9 时 pass^3 ≈ 0.729;p=0.7 时 pass^3 ≈ 0.343。 可见 p 稍低,pass^3 就掉得很快——这正是 pass^k 对「勉强能过」的放大惩罚。 实际测量不假设独立,直接数「k 次是否全过」,但 p^k 给了为什么 pass^3 远低于 pass^1 的直觉。

关键权衡。 pass^k 的代价是 k 倍 token 成本:每任务跑 k 次,加上 tau2 本身是多轮 + dual-control,token 消耗成倍。 这也是今天选 deepseek-v4-flash 的原因——它的成本基线已知($0.0139/run,B10 实测),用它做 k=3 重复的边际成本可控;贵模型留给最终对照。 另一个权衡是 k 的取值:k 太小(如 2)统计意义弱,k 太大成本爆炸。 retail 单域起步选 k=3 是稳定性信号与成本的折中。

与相邻概念边界。 pass^k 是稳定性口径,正交于 Day 97 的 held-out(哪些任务)和验证函数(单次怎么判 pass/fail)。 pass^k 复用验证函数的单次判定结果,只是把它重复 k 次再做 all-of-k 聚合。 它也不同于 Day 95 的 A/B 显著性——pass^k 测一个 agent 的自一致性,A/B 测两个配置的差异是否显著。 (B17 教训:Δ+10.3pp 在 N=29 下并不显著,需 ~70 任务才有功效。)

pass^k 与温度/采样的关系。 pass^k 的方差主要来自采样随机性:温度越高、top-p 越宽,同一任务的输出越发散,pass^k 越低。 所以报告 pass^k 时必须把采样配置(temperature/top-p/seed 策略)一并记录,否则数字不可复现。 一个常见的工程取舍是:对话流用较高温度求多样性,但评测跑 pass^k 时固定一套采样参数,让稳定性数字可比。 这也意味着 pass^k 既测「模型能力」也测「采样配置」——两者必须绑定汇报。

2. 推导 / 手算 / 代码走读

pass^k 聚合逻辑目前待建(依赖 Day 96 的 bench/tau2/ scaffold,仓库内 bench/ 不存在)。 今天给出可手算的聚合定义 + 与已有统计工具的衔接。

手算示例(3 任务、k=3,记 ✓=pass ✗=fail,每格一次独立跑):

任务run1run2run3pass^1(任一过?)pass^3(三次全过?)
return-basic11
modify-address10
modify-shipped-blocked10

聚合计算:

  • pass^1 = (3/3 任务至少一次过) = 1.00
  • pass^3 = (1/3 任务三次全过) = 0.33
  • 两者落差(1.00 − 0.33)= 不一致性的度量——落差越大,说明结果越靠采样运气。

注意上表的 pass^1 取「任一次过」是这套 seed 的口径定义("pass^1 任一次过的比例"),与「全过」的 pass^3 形成稳定性对照。 (上表是说明聚合算法的虚构示意,不是 DeepSeek-V4-Flash 的真实测量值;真实数字待 key 跑出。)

代码衔接(真实可用部分):

  • 单次 pass/fail 来自 Day 97 的确定性验证函数(纯函数,可单测,不需 key)——pass^k 不重新发明判定,只重复调用它 k 次。
  • 比例统计 复用 src/agent/eval/stats.tsmean(xs)(stats.ts:5)可对 0/1 序列求通过比例。
  • CI 自助法:若要给 pass^1/pass^3 带置信区间,可用 pairedBootstrap(stats.ts:36)的重采样思路,对 per-task 通过指示量自助重采样。
  • 延迟侧不混淆summarizeLatency(stats.ts:76)继续负责延迟 p50/p95/p99,与本日 pass^k 在 Day 99 同表整合但口径分列。
  • 聚合是纯函数passK(results: boolean[][]) 读「每任务 × 每次跑」的布尔矩阵,返回 {pass1, passK}——可脱离模型先用断言测通;真实矩阵需 key 跑出。

3. 今日实战

  1. bench/tau2/passk.ts:纯函数 passK(runMatrix: boolean[][]),对每任务计 all-of-k 与 any-of-k,聚合成 pass^1 / pass^k 比例(先单测,不需 key)。
  2. 对 Day 97 的 3 个 held-out retail 任务,配置 agent = deepseek-v4-flash,各独立跑 k=3,把每次验证函数的 pass/fail 填进 runMatrix
  3. 记录采样配置(temperature/top-p/是否固定 seed),保证 pass^k 可复现。
  4. 选 V4-Flash 的依据:成本基线已知($0.0139/run),k=3 重复的边际成本可估。
  5. 出数字表:retail 单域 3 任务的 pass^1 与 pass^3,连同 token/$ 一并记录(口径与 Day 91-95 一致,便于 Day 99 整合)。

4. 今日实测 / 产出

  • 待跑(需 key 跑) — tau2 scaffold gated(bench/tau2/ 尚未建)。
  • 跑后产出里程碑数字之三:tau2 retail (DeepSeek-V4-Flash) 的 pass^1 / pass^3 数字表(held-out 3 任务, k=3)
  • 可立即落地(不需 key):passK 聚合纯函数 + 其断言单测。

状态如实:pass^1/pass^3 真实数字尚未跑出,标注待跑(需 key);本笔记表格仅为算法示意,不臆造任何具体测量百分比。

5. 常见误区 / 陷阱

  • 把 pass^k 和 pass@k 搞反:pass^k 是「k 次全过」(稳定性,越严越低);pass@k 是「k 次至少一次过」(能力上界,越宽越高)。两者方向相反,结论不可混用。
  • 只报 pass^1 当结论:多轮 agent 必须报 pass^k 才有说服力——pass^1 高、pass^k 低恰恰说明结果靠运气。
  • k 取 1:那就退化成单跑,测不出一致性;retail 单域至少 k=3。
  • 把 pass^k 的低值误读为 A/B 显著:pass^k 测自一致性,不是两配置差异;显著性另算(B17:N=29 时 Δ+10.3pp CI[0,20.7] 不显著)。

6. 学习资源(每条带 YYYY-MM)

  • tau2-bench 论文(pass^k 稳定性指标的提出处),2026-03。
  • 本仓 src/agent/eval/stats.tsmean / percentile / pairedBootstrap / summarizeLatency,统计口径来源),2026-06。
  • Anthropic "Demystifying evals"(pass^k 与一致性度量讨论),2026-01。

SOTA检查 (2026-06 更新)

  • 当前主流:pass^k 是 tau2-bench(2026-03)引入的稳定性指标,当前 SOTA;多轮 agent 报告必带 pass^k。
  • 是否仍 SOTA:是。一致性度量是 2026 上半年 agent 评测的硬要求,pass^1 单独报告已被视为不充分。
  • 过时黑名单:避免只报 pass^1 当结论;避免把 pass^k 与 pass@k 混用;避免用旧 deepseek-chat/-reasoner(2026-07-24 退役)跑重复采样。
  • 下次复查点:k 的社区惯例(3 vs 5)与 tau2 排行榜口径执行当周重验;token 单价随周波动须查。

衔接

  • 昨天:Day 97 — held-out 任务设计(M2),确定性验证函数(纯逻辑可单测)。
  • 今天:pass^k 测量——k=3 重复,pass^1 / pass^3 数字表(需 key)。
  • 明天:Day 99 — 三表整合(M4+M6+M2),把 p95/$、省 $%/pass、pass^k 拉进一张能力-成本报告。