评估与进化
Day 22 - Designing Eval Metrics
今日目标
能把「感觉好用」转化为主指标与护栏指标。
学习安排
| 时间 | 模块 | 做什么 |
|---|---|---|
| 0-10 分钟 | 核心概念 | 通读当天术语表,圈出 3 个你最想在工作里用上的概念。 |
| 10-25 分钟 | 阅读输入 | 精读当天章节重点,只抓问题、思路、结论。 |
| 25-45 分钟 | 实践任务 | 动手完成输出模板,必须产出一份可复用产物。 |
| 45-55 分钟 | 追问与反思 | 回答追问练习,标记卡住的概念。 |
| 55-60 分钟 | 复盘与作业 | 整理自检清单,定下明天要复习的一点。 |
核心概念
| 术语 | 中文解释 | 应用场景 |
|---|---|---|
| primary metric | 主指标:衡量 Agent 核心价值达成度的指标,是优化的主要目标 | 测试报告 Agent 的「报告准确率」 |
| guardrail metric | 护栏指标:不优化也不允许恶化的边界指标,超红线即阻塞 | 「编造率超过 2% 不允许自动发送」 |
| hallucination rate | 编造率:输出中出现与输入数据、事实不符内容的比例 | 日报生成 Agent 的数据忠实度检查 |
| false confidence | 虚假信心:模型对错误结论表现出高确定度,误导用户 | P95 分析结论没有数据支撑却写得斩钉截铁 |
| coverage | 覆盖率:关键指标或必报项被覆盖的比例 | 测试日报是否包含全部必报指标 |
| cost | 成本:单次任务的平均 token 消耗或费用 | 评估 prompt 改动的性价比 |
| latency | 耗时:从输入到输出的平均时间 | 分析任务是否在可接受窗口内完成 |
| metric conflict | 指标冲突:优化一个指标导致另一个指标恶化 | 提高覆盖率导致成本上升 |
| verifiability | 结论可验证率:结论能追溯到输入数据或引用来源的比例 | 判断 Agent 结论是否「可查证」 |
| threshold | 阈值:指标的红线或目标值,配套触发动作 | 「编造率 > 2% 阻塞上线」里的 2% |
阅读重点
围绕三个问题读第 6 章:指标怎么定义、怎么采集、冲突怎么取舍。
- 对应章节:第 6 章「Agent 的评估」中指标、统计显著性、评估驱动模型选择的部分。
- 关注点 1:主指标回答「核心价值实现了吗」,护栏指标回答「有没有闯祸」,两者职责不同,缺一不可。
- 关注点 2:每个指标必须能定义、能测量、能解释——谁打的分、怎么算、变化意味着什么。
- 关注点 3:编造率的定义——与输入数据不一致、无法追溯来源、凭空补充数字都算编造,要写成可判定规则。
- 关注点 4:评估驱动模型选择——模型 A 与模型 B 用同一套指标对比,用数据选型而不是用感觉。
- 补充材料:OpenAI Evals 中对打分与指标设计的说明文档。
- 补充材料:Anthropic「Building effective agents」一文中的 eval 与迭代实践。
理解检查
先不看笔记回答下面 4 个问题,卡住的写下来。
- 主指标和护栏指标有什么区别?为什么「提醒模型别编造」不能替代编造率指标?
- 为什么只看用户满意度不够?满意度高但编造率也高的组合说明了什么?
- 如何定义「编造率」?一条日报里哪些内容算编造,哪些算合理推断?
- 如何评估工具调用是否正确?「正确」至少要看哪三个层面?
实践任务
背景:测试报告 Agent 每天自动汇总缺陷、执行结果、性能数据,生成一份测试日报。今天把它从「感觉好用」变成「数字可评估」。
步骤:
- 步骤 1:用一句话写下 Agent 的核心价值,主指标必须对应这句话,例如「让日报准确、完整、可追溯」。
- 步骤 2:定义 3 个主指标——报告准确率、关键指标覆盖率、结论可验证率,写明计算方式和数据来源。
- 步骤 3:列出 Agent 可能闯祸的行为,定义护栏指标——编造率、错误工具调用率、高风险动作未确认率、平均成本、平均耗时。
- 步骤 4:给每个指标定阈值和动作:达到什么数字算好,超过什么红线要阻塞上线或人工复核。
- 步骤 5:写一条指标冲突预案,例如覆盖率与成本冲突时按什么原则取舍。
产出:一份指标设计骨架,包含主指标、护栏指标、阈值、数据来源、冲突预案。
验收提示:每条指标都问自己三遍——谁打分、怎么算、超了怎么办,答不上来就说明定义还不够。
输出模板
先按模板填空,再替换成你的真实 Agent。字段顺序固定,行可以增加。
Agent 核心价值:[一句话]
主指标
- [指标名]:定义 = [怎么算];数据来源 = [打分人 / 程序 / 日志];目标值 = [数字]
- [指标名]:定义 = [怎么算];数据来源 = [打分人 / 程序 / 日志];目标值 = [数字]
- [指标名]:定义 = [怎么算];数据来源 = [打分人 / 程序 / 日志];目标值 = [数字]
护栏指标
- [指标名]:定义 = [怎么算];红线 = [数字];超红线动作 = [阻塞上线 / 人工复核]
- [指标名]:定义 = [怎么算];红线 = [数字];超红线动作 = [阻塞上线 / 人工复核]
- [指标名]:定义 = [怎么算];红线 = [数字];超红线动作 = [阻塞上线 / 人工复核]
指标冲突预案
- [指标 A] vs [指标 B]:[取舍原则,例如主指标优先、护栏指标一票否决]
- [指标 C] vs [指标 D]:[取舍原则]
示范输出
以下是一份已填好的指标设计骨架,直接对应「测试报告 Agent」的真实指标。
Agent 核心价值:让测试日报准确、完整、可追溯,节省人工汇总时间。
主指标
- 报告准确率:定义 = 人工抽查 10 份日报,数据与结论全部正确的比例;数据来源 = 每周人工抽查打分;目标值 = 90% 以上
- 关键指标覆盖率:定义 = 必报指标(缺陷数、通过率、P95 等)被覆盖的比例;数据来源 = 程序对照清单检查;目标值 = 100%
- 结论可验证率:定义 = 结论能追溯到具体输入数据的比例;数据来源 = 程序检查引用标记;目标值 = 95% 以上
护栏指标
- 编造率:定义 = 出现与输入数据不一致内容的日报占比;红线 = 2%;超红线动作 = 阻塞自动发送
- 错误工具调用率:定义 = 工具名或参数错误的调用占比;红线 = 5%;超红线动作 = 人工复核
- 高风险动作未确认率:定义 = 未确认就执行高风险动作的次数;红线 = 0;超红线动作 = 立即下线
- 平均成本:定义 = 单份日报生成的 token 消耗;红线 = 每日预算;超红线动作 = 压缩上下文
- 平均耗时:定义 = 从输入到输出的平均秒数;红线 = SLA 秒数;超红线动作 = 简化流程
指标冲突预案
- 覆盖率 vs 成本:覆盖率优先,超预算时先压缩无关上下文,不降覆盖率。
- 准确率 vs 耗时:准确率优先,必要时用缓存和精简 prompt 压耗时。
追问练习
下面的问题比理解检查深一层,建议边想边写。
- 指标之间冲突时如何取舍?举例:覆盖率 95% 但成本翻倍,你的决策依据是什么?
- 护栏指标由谁统计、多久统计一次,才能保证「上线前知道」而不是「上线后才知道」?
- 如果主指标选错了,什么信号能让你发现它没反映真实质量?你打算怎么验证主指标本身?
- 编造率和虚假信心是什么关系?如果编造率是 0,虚假信心还可能存在吗?
常见误区
- 指标定义模糊:「报告准确率」没说明谁判断、对什么判断,打分全靠感觉。
- 只设主指标没有护栏:准确率很高,但编造了关键数字也照样通过。
- 指标太多无从优化:每个都想优化,结果一个都不动。
- 指标没有阈值和动作:测了数据但不知道什么时候该阻塞、什么时候该放行。
进阶扩展
- 指标需要持续校准:业务变化后定义要更新,多个打分人之间要定期对齐(calibration)。
- 统计显著性:指标差 1% 是真实改进还是噪声,需要样本量和置信度判断。
- 指标用于选型:换模型、换 prompt 策略都跑同一套指标,让数据替你做决定。
今日作业
- 完成测试报告 Agent 的指标设计骨架,至少 3 个主指标加 3 个护栏指标。
- 给每个指标写清计算方式与数据来源,确保别人能照着复算。
- 写一条指标冲突预案并说明取舍原则。
- 选一个指标,设计它的采集方式(打分表或日志字段)。