Skip to content

03. 评测门禁、回放与版本基线

版本:v1.1

最后更新:2026-07-08

适用对象:已经知道“要做 eval”,但还没有把评测、回放、失败样例、版本基线和发布门禁连成闭环的团队

AI 系统最常见的一个工程错觉是:

  • 大家都知道要评测
  • 但真正变更时,还是靠主观体验决定上不上线

这通常会带来两个问题:

  • 质量下降发现太晚
  • 出问题后说不清到底哪层变差

OpenAI 当前 Evaluation best practicesGetting started with datasetsPrompt optimizer 都在强调:

  • 先定义目标
  • 先准备数据
  • 再持续比较版本

这篇重点讲的就是怎么把这件事做成日常生产能力。

0.1 评测不是“测试替代品”,更像变更控制的一部分

OpenAI 当前 Working with evalsEvaluate agent workflowsEvaluation best practices 放在一起看,会很容易得出一个更稳的工程结论:

  • eval 不是附属 QA
  • 它更像 AI 变更控制面的核心资产

也就是说,真正成熟的团队不是在问:

  • “我们有没有评测”

而是在问:

  • “模型、prompt、检索、工具、状态和审批一改,靠什么证明这次变更还安全可发”

1. 评测门禁到底要挡住什么

评测门禁不是为了追求“绝对完美”,而是为了挡住下面这几类典型事故:

  • 新 Prompt 让高频任务退化
  • 新模型让成本暴涨但质量没涨
  • 检索策略一改,引用错位增多
  • 工具 schema 一改,结构化输出崩掉
  • 长任务状态策略一变,恢复能力下降

所以门禁真正要回答的是:

  • 这次变更有没有把我们最在意的关键能力打穿

2. 先区分三种不同层次的评测

2.1 能力层评测

看的是:

  • 输出内容是否更接近目标
  • 模型本身是否适合这个任务

2.2 系统层评测

看的是:

  • 检索、工具、状态、审批是否协同工作

2.3 发布层评测

看的是:

  • 和上一个生产基线比,这次变更能不能过线

很多团队只做能力层评测,结果一上线发现真正坏掉的是系统层。

3. 什么叫“版本基线”

一个更实用的基线,不是“曾经最好的一版”,而是:

  • 当前生产流量上稳定可接受、已知风险可控、且可回退的那个版本快照

这个快照最好至少绑定:

  • 模型
  • Prompt
  • tool schema
  • retrieval config
  • safety / approval policy
  • eval dataset

这样你对比的就不是“印象里以前更好”,而是有明确对象。

3.1 baseline bundle 通常比单独“模型版本”更重要

很多团队嘴里说“和上个版本比”,实际比较的却只有:

  • 模型名

但真实结果往往还受这些东西一起影响:

  • prompt
  • retrieval config
  • rerank config
  • tool schema
  • guardrails
  • approval policy
  • timeout / retry
  • cache strategy

更稳的做法通常是把这些冻结成:

  • baseline bundle

这样你在判断退化时,比较的才是:

  • 一套完整运行快照

而不是单独某个模型 slug。

3.2 不同任务桶通常需要不同基线

很多团队只维护一条总基线,但真实系统里往往至少要分:

  • 高频主任务基线
  • 高风险任务基线
  • 新能力试点基线
  • 大客户 / 核心租户基线

因为这些桶关心的东西不一样:

  • 有的桶更在意通过率
  • 有的桶更在意引用正确率
  • 有的桶更在意误放行率

如果所有任务共用一条总基线,很容易出现:

  • 总分过线了
  • 但关键桶已经掉穿

4. 回放为什么是评测闭环的中轴

没有回放,很多失败只能停留在描述层:

  • 用户说今天变差了
  • 但你没法稳定重现

回放的价值在于:

  • 把真实线上输入、上下文、候选池、工具调用和最终输出重新跑一遍

这样你才能判断问题是:

  • Prompt 变了
  • 模型变了
  • 检索变了
  • 工具变了
  • 状态拼装变了

4.1 回放最好区分“静态回放”和“环境回放”

不是所有回放都应该追求完全同态。

更实用的两种回放通常是:

  • 静态回放
    • 重放输入、prompt、候选池、工具结果快照
    • 更适合稳定定位 prompt / model / ranking 变化
  • 环境回放
    • 复现更真实的在线依赖
    • 更适合判断工具、权限、状态恢复是否受环境影响

这两者解决的不是同一个问题:

  • 静态回放更适合找可重复退化
  • 环境回放更适合找真实依赖抖动

4.2 高价值投诉和事故样本最好先冻结回放证据

很多团队线上出事后,会先忙着修。

但更稳的顺序通常是:

  1. 先冻结关键回放证据
  2. 再修问题
  3. 修完后用同一套证据回放验证

否则常见情况就是:

  • 问题当下确实发生过
  • 但证据没留住
  • 后面只能靠印象争论

5. 至少要保留哪些回放证据

建议至少保留:

  1. raw input
  2. normalized / rewritten input
  3. model id
  4. prompt version
  5. retrieval config
  6. top-k candidate pool
  7. tool calls and results
  8. final output
  9. final citations
  10. release batch id

如果系统里没有这些字段,复盘时通常只能靠猜。

6. 失败样例不应该只是“坏案例收藏夹”

失败样例真正有价值,是因为它们能变成:

  • 回归测试集
  • 风险样例集
  • 发布门禁的一部分

也就是说,一次失败如果只停留在复盘文档里,没有回流到门禁里,下次大概率还会再来。

6.1 失败样例最好带 root cause 和 fix status

更有治理价值的失败样例,通常不只记录:

  • 输入是什么
  • 输出错了什么

还应至少补上:

  • 所属任务桶
  • 失败层级:prompt / retrieval / tool / state / approval / routing
  • 严重级别
  • 是否已进入门禁
  • fix status:待修 / 已修待验证 / 已纳入基线

这样它才更像:

  • 版本治理资产

而不只是:

  • 失败截图档案

7. 基线评测至少要分哪几桶

不要只看总分。

更稳的做法是至少按下面几类分桶:

7.1 高频主任务

  • 用户最常做的事

7.2 高风险任务

  • 一旦错了代价高的事

7.3 已知脆弱任务

  • 过去经常翻车的桶

7.4 新增能力任务

  • 这次改动重点想提升的桶

这样你才能避免一种常见误判:

  • 平均分上涨了,但高风险任务其实退化了

7.5 门禁桶最好再区分“阻断桶”和“观察桶”

不是所有桶都应该拥有一样的发布权重。

更稳的分层通常是:

  • 阻断桶
    • 只要明显退化就不能发
  • 观察桶
    • 可以先带着风险灰度,但要明确观察窗口

例如:

  • 高风险任务、监管相关任务、关键租户任务通常更适合阻断桶
  • 新能力试点、低流量长尾场景可以先放在观察桶

这样门禁就不会变成:

  • 要么所有事情都卡死
  • 要么所有事情都随便放

8. OpenAI eval 指南给出的一个重要启发

OpenAI 当前评测最佳实践反复强调:

  • 先定义什么叫成功
  • 用有代表性的数据集持续比较

这对生产团队最大的启发是:

  • 评测不应该从“有什么指标可看”出发
  • 而应该从“这次变更最怕出什么事故”出发

8.1 graders 也应该分层,而不是只靠一个总分

按 OpenAI 当前 Working with evalsEvaluation best practicesdatasets 相关资料来看,更稳的做法通常是同时准备几类 grader:

  • 规则型 grader
    • 判断结构化字段、schema、引用格式、是否命中硬约束
  • 模型型 grader
    • 判断答案相关性、是否覆盖关键点、是否符合风格要求
  • 业务型 grader
    • 判断是否真的完成任务目标

这几类 grader 的价值不同:

  • 规则型适合做硬门禁
  • 模型型适合发现语义质量变化
  • 业务型适合贴近真实上线价值

如果所有判断都压成一个总分,后面通常很难解释:

  • 到底是哪一层退化了

9. 发布门禁应该怎样和评测基线绑定

一个更稳的方式通常是:

  1. 每次变更前声明影响范围。
  2. 选择对应评测桶。
  3. 与当前生产基线比较。
  4. 设置清晰过线条件。
  5. 记录结果并绑定发布批次。

这样一来,发布就有了可解释证据:

  • 不是“大家觉得还行”
  • 而是“对这几类关键任务,它确实没退化”

9.1 gate profile 最好也版本化

很多团队会版本化 prompt 和模型,但不会版本化门禁规则本身。

更稳的做法通常是把下面这些也一起版本化:

  • 当前阻断桶定义
  • 当前观察桶定义
  • 每桶过线阈值
  • 成本 / 延迟 / 风险阈值
  • 对应 release type:全量 / 灰度 / 大版本切换

这样后面你才能回答:

  • 是模型变了导致没过线
  • 还是 gate profile 本身被收紧了

9.2 不同发布类型,应该匹配不同 gate profile

例如:

  • 热修复
    • 更关注高风险阻断桶和回归稳定性
  • 常规迭代
    • 质量、成本、延迟一起过线
  • 大版本切换
    • 更强调 shadow、灰度和观察窗口

如果所有发布都走同一套门禁,很容易:

  • 小改太重
  • 大改太轻

10. 评测门禁不要只卡质量

还建议同时看:

10.1 成本门禁

  • 单请求成本是否超预算

10.2 延迟门禁

  • P95 是否明显恶化

10.3 稳定性门禁

  • 工具成功率是否下降
  • 超时率是否上升

10.4 风险门禁

  • 高风险误放行率是否上升
  • 安全回归样例是否通过

10.5 恢复与状态门禁

对 Agent / workflow 系统来说,还建议单独观察:

  • 长任务恢复成功率
  • 审批后恢复成功率
  • run 中断后上下文一致性
  • handoff 后任务完成率

很多系统离线看答案没问题,但一进长工作流,真正坏掉的是:

  • 恢复链路
  • 状态拼装
  • 人机接力

11. 一个更实用的回放链路

建议把回放拆成下面四层:

11.1 请求回放

  • 复现原始输入和上下文

11.2 检索回放

  • 复现候选池和过滤条件

11.3 工具回放

  • 复现工具入参、出参与异常

11.4 输出回放

  • 对比最终结构化结果、引用和文本输出

这样做能帮你快速缩小问题范围。

11.5 发布回放

除了单条请求回放,更成熟的团队通常还会做:

  • 发布回放

也就是拿一组冻结样本,直接比较:

  • 当前基线 bundle
  • 候选 bundle
  • fallback bundle

这样你判断的就不只是:

  • 某条 case 会不会坏

而是:

  • 一整次发布的证据是否足够支持上线

12. 哪些场景最值得优先做回放

  • RAG 引用错位
  • Agent 工具误调用
  • 长任务恢复失败
  • 高价值客户投诉样例
  • 新模型切换后的异常请求

这些场景的共同点是:

  • 一次事故的学习价值很高

13. 数据集应该如何持续更新

如果数据集只在项目启动时建一次,它很快就会过时。

更实用的维护节奏通常是:

  1. 从线上收集失败样例。
  2. 人工标注成高价值样本。
  3. 按任务桶回流到数据集。
  4. 周期性清理过时样本。
  5. 更新后重新定义基线。

这也是为什么数据集更像产品资产,而不是测试附件。

13.1 数据集最好显式区分“训练视角”和“门禁视角”

有些样本适合:

  • 帮 prompt 或系统改得更好

但不一定适合直接做发布阻断。

更稳的区分通常是:

  • 优化样本池
    • 用来发现改进机会
  • 门禁样本池
    • 用来判断能不能发
  • 事故样本池
    • 用来防止严重问题复发

这样团队就不会把:

  • 还在探索中的新样本

直接混进:

  • 必须稳定过线的发布门禁

14. 什么情况下应该重建基线

以下情况通常值得重建或刷新基线:

  • 模型大版本切换
  • Prompt 主骨架变化
  • 检索链路重大改动
  • 工具能力边界变化
  • 业务目标或成功标准变化

否则你很可能拿旧时代的基线在判断新系统。

14.1 route bundle、lane 或 gating policy 大改时也该重建基线

不仅模型切换会让旧基线失效。

如果你改了:

  • route bundle
  • fallback 逻辑
  • service lane
  • approval / guardrail policy
  • gate profile

旧基线同样可能失去解释力。

因为这时系统变的可能不是“回答内容”,而是:

  • 整个运行控制方式

15. 常见反模式

  • 没有失败样例回流,只反复跑“好看样本”。
  • 只看总分,不按任务桶看。
  • 只做离线评测,不做线上回放。
  • 发布门禁只看质量,不看成本和风险。
  • 评测结论没有和具体版本绑定。

16. 一个最小可用的门禁模板

发布前必须满足

  • 关键任务桶不退化
  • 高风险桶通过率不低于基线
  • 成本、延迟没有明显越线
  • 安全回归集没有新增严重失败

发布后必须观察

  • 首批灰度流量真实表现
  • 人工接管率变化
  • 失败样例新增分布

需要保留的证据

  • 评测报告
  • 对比基线
  • 发布批次
  • 回滚目标

16.1 更像生产系统的 release evidence bundle 通常还应包括

  • baseline bundle 版本
  • gate profile 版本
  • 关键阻断桶结果
  • 观察桶风险说明
  • shadow 或灰度结果摘要
  • 主要退化点与接受理由
  • 回滚入口和负责人

这样值班或复盘时,团队拿到的就不是:

  • 一张“过了 / 没过”的结论

而是一份能解释:

  • 为什么敢发
  • 哪些风险被接受
  • 出问题时往哪回

17. 推荐搭配阅读

18. 重点官方资料

以下资源已按 2026-07-08 复核可访问: