你把分记给了谁:agent 评测的四层归因失配
换掉一个决策模型,离线 AUROC 涨到 0.78,线上成本涨 19%、成功率一动不动。问题不在模型,在于被测单元和优化单元从来不是同一个。
一次换模型,成本涨了没人记账
10 月 17 日挂出来的一项预注册研究做了一件很少有人做的事:把 agent 循环的控制器当成唯一变量来测。作者固定住一个 Claude Sonnet 5.5 终端 agent 的主循环,只替换在确定性决策点上做判断的小模型——五个臂:不用控制器、确定性规则、问同样问题的小 LLM(Claude Haiku 5.5)、一个类型化决策模型 Jev 1.13,以及一个安慰剂臂,它在完全相同的时刻、以 Jev 开发期的选择频率随机下发同样的指令。
结果很难看:在 Terminal-Bench 2.1 的 21 个留出任务、315 次试验里,Jev 把每次尝试的成本抬高了 19%(几何均值比 1.19,95% CI 1.02–1.36),而通过率是 73.0% 对 73.0%,一模一样。离线看,Jev 的判别质量其实是最好的——排序 finish 请求的 AUROC 0.78,规则是 0.62,小 LLM 是 0.60。
这两件事并不矛盾。它们测的根本不是同一个单元。AUROC 测的是”这个模型打分准不准”,成本与通过率测的是”整个循环省没省钱”。中间隔着一层策略映射,那一层没人测。
这类失配不是孤例。把 10 月中旬的几篇工作按”被测单元”从内到外排一遍,能排出四层,每层都有对应的论文证据和可直接抄进流水线的做法。
第一层:先确认这个能力到底是谁给的
大多数 agent 评测跑在已对齐的模型上,分数涨了就归给后训练。ASAP(arXiv:2610.19425)指出这是一笔糊涂账:基座模型在交互式环境里到底有没有 agent 行为,现有方法要么用静态轨迹导出的任务,要么用似然代理指标,都看不到真实行为。
它的做法很省事:不把 base model 改造成 chat agent,而是保留 completion 接口,靠三样东西适配现有 scaffold——Markdown+XML 的轨迹格式、短参考轨迹前缀、以及只处理两类结构性失败(提前提交、重复动作)的最小恢复机制。这样一条 harness 就能覆盖 base checkpoint 与后训练模型,在软件工程与深度研究两类基准上都拉开了区分度。
它实测的基准是 SWE-bench Verified、BrowseComp-Plus 与 Terminal Bench 2.1,对象是 6 个开源 base model。报的也不只是一个分数:Pass@k 反映模型”够得着”的能力上限,Intersection@n 反映这个能力能不能稳定复现——前者涨、后者不动,说明能力是采样出来的偶然,不是训练出来的稳定行为。
工程上这一层的动作只有一个,但很容易漏:评测 harness 必须保留 completion 与 chat 双通道,并且存 trajectory 而不是只存 score。ASAP 的价值不在总分,而在它暴露的模型生成执行轨迹——探索、编辑、测试、恢复、收尾五类行为可以跨训练阶段对比。只存分数,等于把”哪个阶段贡献了这个能力”这个问题永久删掉。
第二层:组件要单独诊断,聚合分会骗人
决策模型(路由、护栏、输出校验、目标判定)在 LLM 系统里无处不在,但它们的评测通常是把公开测试集改造成判断题,然后报 item accuracy。DecisionPivot(arXiv:2610.28522)认为 item accuracy 什么都证明不了。
它用 48 个任务、40,033 个条目覆盖七类决策角色:A 可答性与路由、B 策略护栏、C 输出校验、D 工具校验与目标判定、E 推理式分类、F 记录完整性与对账、G 约束检索与匹配。核心赛道 7,800 条来自 13 个生成器家族,答案由独立实现的 solver 验算;参考赛道 32,233 条来自 35 个公开测试集。关键在于对比组:改一个决定性细节(例如运费让总价从比上限低一分钱变成高一分钱),正确答案翻转,其余上下文原样不动。
踩在聚合分上的结论有多脆,看它给出的三个数字就知道:
- 两个 27B 模型在参考赛道上只差 2.6 分,对比组准确率是 70.1% 和 44.2%,差出近 26 个点;
- 2,400 组二元对比里,Perplexity Decider 把正例排在负例之上的比例是 92.3%,两个成员都答对的比例只有 74.1%;
- 一个不看内容的死规则在 llmbar 上能拿到 73.0% 准确率,而随机基线是 50%。
第二条最值得警惕:概率排对了,不等于决策对了。0.86 和 0.84 方向正确(正例在上),但两个都越过了 0.5 这条判定线——负例的 0.84 也会被读成”是”。正确决策要求的是正例概率在线上、负例概率在线下(p+ > 0.5 > p-),而不是谁高谁低。
它一共测了 40 个决策模型和 14 个通用模型,联合看五个维度而不是一个:条目准确率、对比组准确率、概率排序、校准、选择性覆盖。只报第一项,等于把后四项全扔掉。
还有一个容易被当成噪声的变量是推理档位:在同一个 1,296 条子集上,GLM-5.3 在高推理档位下对比组准确率 93.5%,最低档位只有 81.5%——同一模型、同一数据,差 12 个点。跑这一层评测时,推理档位必须作为显式变量固定并上报,否则”换了个模型”和”换了个档位”会混成同一个结论。
基准自己也在迭代:核心赛道 v1.1(2026 年 10 月 8 日修订了 10 个任务族的条目缺陷),参考赛道用过滤后的 v1.3;20 个配置在 v1.0 与 v1.1 上的排名相关性 Spearman ρ = 0.986。相关性高不代表可以混用版本,但说明条目级缺陷的修复没有整体洗牌。
审计里最刺眼的一条是”部分信息捷径”:toolcall_valid 上只检查 schema 就能拿到 91.7% 条目准确率。这类捷径和前面那个 73.0% 的死规则是同一类问题——分数高不是因为会决策,是因为题目给了可钻的空子。
这一层可以直接落成代码。核心指标是对比组全对率,组内有一个错就算这组错:
def pair_accuracy(groups):
"""组内全部成员答对,该组才计 1。"""
if not groups:
return 0.0
return sum(all(p == g for p, g in group) for group in groups) / len(groups)
def pair_direction(pos_prob, neg_prob):
"""只看概率排序,不看是否过阈值。单独报,别和 pair_accuracy 混。"""
return sum(p > n for p, n in zip(pos_prob, neg_prob)) / len(pos_prob)
配套三条硬要求:失败或缺失的预测计为错误,不许从准确率分母里剔除;对比样本要贴着决策边界构造(阈值类任务的正负例各差一个最小单位);pair_direction 与 pair_accuracy 必须分两列上报,合并报就抹掉了”排序对、决策错”这一整类失效。
第三层:组件分涨了,系统分可以纹丝不动
回到开头那项研究(arXiv:2610.24649)。它的价值不在”决策模型没用”这个结论,而在它把中间那层策略映射的失效机制拆开了:
- 校准崩了。Jev 给出”这次运行已完成”的平均概率是 0.50,而实际这些运行有 87% 是通过的。低于基准率的概率配上 argmax 动作,就变成频繁的、低价值的干预——它让 agent 去复查本来已经做对的工作。
- 成本来自哪儿是能拆的。每尝试的验证消息数:安慰剂 0.33(成本比 0.98)、Jev 0.51(1.19)、规则 0.92(1.24)、小 LLM 1.30(1.47)。Jev 多花的 0.029 美元里只有 0.011 美元发生在第一条验证消息之后,其余来自整体更长的轨迹——16.0 步对 13.3 步。
- 真正省钱的那个动作没人用。315 次试验里没有任何控制器选择过 abandon。15 次
make-doom-for-mips运行全部撞死在超时(11 次)或 1.00 美元预算上限(4 次)。10/17 的原生失败是以超时或撞上限结束的,压根没有 finish 请求可供判断。 - 开销不是问题。Jev 平均每次决策 0.52 秒,占总花费 0.11%。问题从来不在调用成本,在把概率映射成动作的策略。
试验设计本身也值得抄:21 个任务 × 每臂 3 次尝试 × 5 个臂 = 315 次试验,任务内配对、按任务重采样 10,000 次出区间。整套评测只花了 72.29 美元(其中评测 59.46 美元)——便宜到没有任何理由省掉对照臂。
最该被抄走的是那个安慰剂臂。它的结果是:在同一时刻随机干预,通过率与所有知情控制器没有可检出差异(安慰剂 71.4%,Jev 73.0%,差值 +1.6pp,95% CI −4.8 至 +9.5,Holm 校正后 p = 1.00),而 Jev 的成本比安慰剂高 22%(比值 1.22,95% CI 1.08–1.39,p = 0.001)。
⚠️ 原稿此处写作”成本还低 22%“,是基数互换造成的方向性误读:论文口径是 Jev 比安慰剂贵 22%(Jev/安慰剂 = 1.22),换算成”安慰剂比 Jev 便宜”应约为 18%(1 − 1/1.22)。两个数都真实,但不能混用——22% 的分母是安慰剂,18% 的分母是 Jev。
没有这一臂,你无法区分”决策内容有效”和”被推了一下有效”。作者自己也把话写死了:控制器应当在成本上端到端评测,对照规则与安慰剂,而不是只看判别准确率。
几处容易被漏掉的对照:Jev 与规则臂成本其实打平(比值 0.96,p = 0.623),真正贵的是小 LLM 臂(比值 1.47)——而它恰好是五臂里通过率最高的(76.2%,比 native 高 3.2pp)。也就是说,这批数据里”最贵”和”通过率最高”落在同一个臂上,成本和通过率从来不是一条单调曲线。Jev 的成本上升也不是个别任务拖的:21 个任务里它在 15 个上更贵,去掉任意一个任务,比值仍落在 1.16–1.25 之间。
abandon 这条通道值得单独看一眼:不止是没人选它,Jev 对”该不该放弃”的判别本身也几乎不分离成败(AUROC 0.55)。反过来,它在 92 次进度决策里有 30 次选了 investigate 或 recover——真正被用起来的动作是”再查一遍”,而不是”止损”。
最小可运行的姿态:
class Controller:
def decide(self, state, options) -> tuple[str, float]: ...
class PlaceboController(Controller):
"""同一时刻、同一动作频率,决策内容换成按开发期频率抽样。"""
def __init__(self, choice_freq): self.choice_freq = choice_freq
def decide(self, state, options):
actions = list(self.choice_freq); w = [self.choice_freq[a] for a in actions]
return random.choices(actions, weights=w, k=1)[0], 0.5
# 报告里必须四列并排:pass_rate / cost_per_attempt / verify_msgs / steps
再加一条上线前检查:画出控制器概率分桶与实际通过率的关系。Jev 最没信心的那一档,实际通过率仍有 79%——按基础率重设阈值,干预次数会断崖式下降。
第四层:端到端分数里,召回和准确率是两条线
MMEnterprise-Bench(arXiv:2610.27911)测的是企业 agent 在多模态工作记录上的问答,1,613 个问题分三类:证据推理、冲突消解、不可回答。这些记录是”活的”——信息在文档、聊天、图表之间被共享、更正、修订,同一件事会积累出多个版本。
1,613 个问题由 8 种任务类型构成,归入这三类:证据推理要从充足证据里推出答案,冲突消解要识别跨源冲突或判断哪个版本生效,不可回答要识别缺失信息与无依据前提。
10 个闭源与开源多模态 LLM 测下来,最强的模型在证据存在跨源或时序冲突、或需要跨多张图时依然吃力。更有工程价值的是后半句:提高检索预算或换更大的检索器,能提升证据召回,却不能稳定转化为答案准确率的提升。
具体到数字,这条”张口”是能画出来的:2B 检索器把 k 从 50 提到 100,召回从 57.0% 涨到 64.8%,而 Qwen3.5-2B 的准确率反而从 25.0% 掉到 22.2%。换成 8B 检索器,在 k = 10 / 50 / 100 上召回分别 +1.7 / +2.6 / +2.5 个百分点;到 k = 100 时,GPT-5.6 Sol 从 75.9% 升到 77.2%,Qwen3.5-4B 却从 46.9% 降到 46.6%。召回涨 7.8 个点而准确率掉 2.8 个点,同一组数据里同时发生——这就是”瓶颈不在没看到”最硬的证据。
这条结论给所有”先把召回做上去”的路线提了醒。跑这一类评测时,把证据召回率与答案准确率画成两条线并排看,两条线张口就是信号——模型的瓶颈在消解冲突,不在没看到。还有一条:“不可回答”必须单列为一级指标:不给拒答分,猜答案的模型会系统性地虚高。
收口:上线前三问
四层排下来是一张归因对齐表,每一层回答的是不同的问题:
| 层 | 被测单元 | 该把分记给谁 | 必配基线 | 排查成本 |
|---|---|---|---|---|
| 底座 | base checkpoint 的 agent 行为 | 预训练阶段 | 后训练同 harness 对照 | 周 |
| 组件 | 决策模型单点判断 | 该模型 | 对比组全对率 + 不看内容的死规则 | 小时 |
| 净增益 | 控制器接入后的循环 | 策略映射,不是模型 | 规则臂 + 安慰剂臂 | 天 |
| 端到端 | 真实演化数据上的交付 | 全栈 | 召回率与准确率双线 | 天 |
排查成本和收益是反的:组件层最便宜(几小时就能加对比组),端到端层最贵(要造演化数据)。多数团队的力气花反了方向——端到端分数一跌就回去调 prompt,而组件层的对比组全对率从来没测过。
任何一次”指标提升”要上线前,问三个问题:它测的单元是不是我要优化的单元?它有没有安慰剂对照?它的收益和代价是不是记在同一张报表上?三个问题里有一个答不上来,那个分数就还不该进决策。
参考来源
- DecisionPivot: A Diagnostic Benchmark for Decision Models in LLM Systems — arXiv:2610.28522(全文)
- Good Judgment, Bad Advice: Decision-Model Controllers Raise Agent Cost Without Improving Success — arXiv:2610.24649(全文,代码)
- Evaluating Agentic Capabilities Before Post-Training: An End-to-End Approach(ASAP,Agent Scaffold Adaptation for Pretraining Evaluation)— arXiv:2610.19425(全文)
- MMEnterprise-Bench: Evaluating Enterprise Agents over Evolving Multimodal Records — arXiv:2610.27911(全文,项目页)