模块四 · 质量与生产
评估:没有回归集,改 prompt 就是在赌
模型输出有随机性,"试一下感觉不错"不是评估。这一节给出三层评估、评估集怎么建、judge 的偏差与缓解,以及灰度该看什么。
读完这一节,你能做到
- 说清为什么 AI 功能必须有离线评估集。
- 按检索层、生成层、任务层三层定位问题。
- 建一个能一键跑、能持续补充的回归集。
- 用 judge 做规模评估,同时知道它什么时候不可信。
一、为什么必须有评估集
三个现实:
- 模型输出有随机性。 同一条 prompt 跑两次结果可能不同,单次成功不能说明问题。
- 改动的因果不直观。 换一个词、加一句话,可能整体变好也可能局部变差。
- 回归极容易发生。 修好 A 场景的 prompt,常常弄坏 B 场景。
没有评估集,团队的协作方式会退化成"谁嗓门大听谁的"。
二、三层评估
| 层 | 看什么 | 数据来源 |
|---|---|---|
| 检索 | 正确片段有没有被召回、排第几 | 问题 + 正确片段 id |
| 生成 | 是否忠于材料、是否答到要点 | 人工抽检 + 规则/模型辅助 |
| 任务 | 端到端是否完成 | 业务指标(解决率、转人工率) |
为什么要分层
端到端掉点,可能是检索没给对材料,也可能是材料给了但模型跑偏。不分层,就只能瞎猜。
一个实用顺序
端到端出问题时,先看两条 trace:一条成功的、一条失败的。对比检索片段和 prompt,差异通常一眼能看出来。
多步流程怎么测
端到端太慢、也太贵,要分三层:
| 层 | 怎么测 | 特点 |
|---|---|---|
| 单步 | 固定输入,断言工具参数与解析结果 | 快,能进 CI |
| 链路 | 回放线上 trace,工具返回用固定桩 | 可重复,测编排与分支 |
| 端到端 | 少量真实场景 | 慢但最真实 |
必须覆盖的五个分支:工具超时、工具返回空、参数校验失败、超过步数上限、需要转人工。这五条覆盖了绝大多数线上事故。
三、评估集怎么建
四个来源
- 真实日志采样:按意图分层抽样,别只抽热门的。
- 边界样本:空输入、超长输入、多意图混合、错别字。
- 历史 badcase:修过的每一个问题都入集,防止回归。
- 对抗样本:诱导提问、越权请求、套系统提示、文档里埋指令。
规模
起步 50-100 条就能用;每周从线上补 5-10 条。关键是能一键跑完并输出通过率,不能一键跑的评估集两周后就不会有人用。
维护节奏
- 每周:从线上补 5-10 条新样本(含 badcase)。
- 每次发版:跑全量,记录通过率并与上一版对比。
- 每月:清理重复样本,补充新的对抗样本(攻击手法会变)。
- 每季度:检查标注是否还符合当前业务口径,过时样本下线。
评估集不是一次性资产,它会腐化。没人维护的评估集,半年后测的是半年前的问题。
每条要标注什么
- 输入
- 期望行为(答案要点 / 该拒答 / 该转人工)
- 归属层(检索 / 生成 / 任务)
四、用模型当评委:能用,但不能全信
四类偏差
- 位置偏好:更靠前的答案容易得分高。
- 长度偏好:更长、更有条理的回答被判更好。
- 自我偏好:同族模型打分会偏高。
- 宽松倾向:很少给低分,区分度不够。
四个缓解手段
- 成对比较 + 交换位置:A/B 各跑一次并互换位置,两次都判同一方赢才算赢。
- 给评分标准:把"好"拆成可判定条目(是否引用来源、是否答到要点、是否编造),逐条判。
- 换模型打分:评委与被评不同族。
- 人工校准:抽 30-50 条人工打分,对比模型打分,偏差大的维度就不用模型评。
什么时候不能用 judge
涉及事实正确性时,judge 会被"看起来很对"的编造骗过。这类必须接可验证来源(对数据库、对原文)。
五、灰度与 A/B
为什么按会话或用户分流
Agent 是有状态的。同一会话里前半段用新版本、后半段用旧版本,行为会前后矛盾。按用户 id 或会话 id 哈希分流才能保证一致性。
灰度看什么
| 指标 | 说明 |
|---|---|
| 兜底率 | 走到规则兜底或转人工的比例 |
| 平均步数 | 突然变多说明规划变差 |
| 工具失败率 | 参数错、权限错的占比 |
| 单次成本 | token 与调用次数 |
| 负反馈 | 点踩、重复追问、直接转人工 |
A/B 的前提
提前定一个主指标(如任务完成率),其他作为护栏指标(成本、延迟、投诉率)。主指标不显著、护栏变差,就不该上。
一个常见错误
同时改 prompt、模型和检索参数,然后比较效果——无法归因。
六、常见坑
- 只用 happy path 验证。 上线后长尾全线崩。
- 评估靠手工点。 跑不起来的评估等于没有。
- 直接信 judge 分数。 位置与长度偏好会让结论失真。
- badcase 修完不入集。 同一个问题会反复出现。
- 按请求随机分流。 同一用户在两版之间跳变。
- 一次改多个变量。 改好了不知道是哪一处起的作用。
七、动手任务:自写 → AI 写 → 对比 → 取舍
四步不跳:① 自己写(限时,关掉补全)→ ② 让 AI 写同一题 → ③ 逐条比对 → ④ 说出保留谁的写法。
① 自己写
- 为你的场景写 10 条评估样本:输入、期望行为、归属层。
- 设计一张灰度看板:主指标、护栏指标、回滚条件。
② 让 AI 写同一题
把第 1 题交给 AI,补一句 按 CSV 列结构输出(input、expected、layer、note),其中至少 3 条是边界或对抗样本。
③ 对比要盯的点
- 它生成的样本是不是都很规整(缺真实用户的错别字与半句话)?
- 期望行为写的是"要点"还是"标准答案"?
- 有没有分层?
④ 一句话取舍
它给的样本里,你能直接拿去跑的有几条?剩下的为什么不能用。
八、自测
- 为什么 AI 功能必须有离线评估集?
- 三层评估分别看什么?
- 评估集的四个来源是什么?
- judge 的四类偏差与四个缓解手段是什么?
- 为什么灰度要按用户或会话分流?
- 灰度期间主指标与护栏指标分别举例。
参考答案要点:随机性、因果不直观、易回归;检索/生成/任务;日志、边界、badcase、对抗;位置、长度、自我、宽松,交换位置、评分标准、换模型、人工校准;Agent 有状态,按请求分流会前后矛盾;完成率 vs 成本延迟投诉。
配套题目
★ 越多越该先背;点题目可看完整答案与深入版。
- ★★★★★ 怎么评估一个 RAG 或 Agent 做得好不好?
- ★★★★☆ 用模型当评委(LLM-as-judge)可靠吗?怎么降低偏差?
- ★★★★☆ 回归集怎么建?线上 badcase 怎么沉淀?
- ★★★☆☆ Agent 上线怎么做灰度与 A/B?
- ★★★★☆ Agent 的多步流程怎么测?
- ★★★☆☆ 答案不止一个时,怎么判分?
提示:读完可以顺手做几道对应题目,检验是否真的理解