
本篇是系列第 7 篇,也是收口的一篇。前面六篇分别解决了评什么(01)、任务从哪来(02)、怎么打分(03、04)、分数算不算数(05)、安全怎么测(06),本篇把它们全部接进一条能自动跑起来的流程。
这是本篇要解决的最后一个,也是最普遍的一个落差。
三个具体原因:
所以闭环的答案不是"多跑几次离线",是离线和在线两条轨一起跑,并且让样本在两条轨之间流动。
闭环怎么搭,有 5 档方案,自动化程度和覆盖面对照如下:
注意前两档没有门禁,所以它们只是「跑评测」,不是闭环;从 CI 集成这一档开始才有门禁,从双轨这一档开始才有线上数据回流。判断自己在哪一档,看这两列就够了。
离线轨要解决的第一件事是触发方式。凡是靠人记得跑的评测,最后都会变成不跑。
触发点至少三个:
门禁阈值直接沿用稳定性评测的结论:按 pass^k 设,不按单次通过率设。具体建议核心任务 pass^5 不低于 80%、普通任务 pass^3 不低于 85%,成本类指标(调用次数中位数)涨幅不超过 20%。三类阈值任一不满足即阻断。
还有一个容易被忽略的配置:裁判与评测器要锁版本。裁判模型升级、评分脚本改动,都会让分数不可比。把评测器版本写进评测报告,否则你会发现两次发版的分差根本说不清是 Agent 变了还是尺子变了。
回归范围要和变更的影响域对齐,不是所有变更都跑全量。prompt 局部小调整只跑受影响的指令遵循子集;模型替换是全局变更,必须跑完整基准;裁判或评分脚本的变更最容易被漏掉,但它会让所有评测结论的可信度一起变,反而要优先验证。范围估窄了风险漏出去,估宽了回归成本压垮流程,两边都要平衡。
门禁之外还有两段不能省:灰度和监控。灰度建议三桶并行,对照桶、实验桶、稳定性验证桶,后者跑的是上一版策略。三桶的意义不只是比效果,更是把「策略本身的问题」和「环境引入的噪声」分开:如果稳定性验证桶的指标同样异常,说明问题来自外部环境,比如流量结构变化或大促扰动,这时触发熔断就是误判,先排除环境因素再决策。
在线轨不重复评正确性的离线部分,它评的是三件离线评不了的事:
1. 真实输入分布:用户实际怎么问、上下文有多脏、有多少情况根本不在集子里。
2. 真实环境噪声:超时、限流、脏数据、并发,这些离线环境都模拟不全。
3. 长尾与组合:离线集子里的任务是人拆过的,线上是连着来的。
做法上两个组件:
坑在于用在线分数当门禁。在线数据是真实分布,但它有选择偏差(抽到的样本不代表全部),而且波动大。在线轨的用途是发现问题和提供样本,不是卡发版。
这一节是双轨之外最该记住的一条风险。
公开基准会腐化:命令行任务基准 Terminal-Bench 升到 2.1 时,修正了 2.0 里 89 个任务中的 28 个,其中 9 个是外部依赖漂移、8 个是资源预算卡死了正解、其余是指令与测试对不上。也就是说,上一个版本里接近三分之一的题目本身有问题,而不是模型不行。
更严重的是基准可以被主动攻击。2026 年 4 月加州大学伯克利分校的研究显示,8 个主流 Agent 基准全部可以被 reward hacking 手段刷到接近满分,攻击面有三类:
第三类和 05 篇直接相关:只跑一次上报,本质就是拿 pass@k 冒充可靠性。
对你的自建评测集,这三条同样成立。所以评测集需要定期体检,体检动作四条:
1. 每季度复核参考答案:业务变了没有,接口变了没有,golden 轨迹还成立吗?
2. 随机抽查被判失败的用例:看是不是评分器判错了,假负例会污染整个度量。
3. 检查是否有泄漏:评测环境里有没有 accidentally 暴露答案或标签。
4. 强制多次运行上报:禁止单次运行报数,这一条写进流水线。
双轨的价值不在"跑两遍",在于互流。
在线流回离线(补集子):在线 trace 里发现的失败、漂移、badcase,定期回流进离线评测集。这一条直接承接评测实操的难负构造,回流时要抽检,避免把垃圾样本灌进去污染集子。
离线流到在线(补判据):离线沉淀的评分卡、裁判 prompt、关键步骤断言,直接复用到在线 trace 打分上,保证两轨口径一致。两轨口径不一致是最大的浪费,会导致离线涨、在线跌却无从归因。
对齐的量化检查:每月抽一批任务,同时看离线分和在线分,算两者相关性。相关性持续偏低,说明离线集子已经偏离真实分布,该换样本了。
发现问题之后没有处置动作,闭环就断在最后一步。
三类告警阈值:
处置动作要预先定义好,不要等出事再想:
1. 降级:切回上一版 prompt 或关闭某个工具。
2. 熔断:某工具错误率超阈值时自动禁用,走兜底路径。
3. 回滚:版本级回滚,前提是发版时保留了上一版可回滚状态。
4. 挂起待确认:高危动作默认挂起,沿用 安全评测的闸门设计。
告警接在哪里也要提前定:接在能看见的地方,并且指定到人。无人认领的告警等于没有告警。
处置之前还有一个判断要先做:这是 Agent 问题还是结构性问题。做法是看同一个输入在所有桶下是否一致劣化,如果是,问题多半在外部环境、数据缺失或大盘异常,不在 Agent 决策本身。把结构性问题误判成模型能力不足,后面所有优化动作都会打偏。这个判断放在归因第一步,成本几乎为零,能挡掉一半的无效排查。
离线管能不能发,在线管发了之后是不是真的好。你现在有没有一条线上的数据,能告诉你昨天上线那版真实表现如何?