课前:先自学,再做 15 道题
上课前,先花点时间自己看一页材料:
- 弄懂 4 个词:测试集五类(正常/边界/异常/高风险/人工介入)、评测驱动开发(EDD)——评测是开发的主控回路,不是末尾验收、完整轨迹评测(评输入/意图/检索/工具/中间状态/最终结果,不只评最终答案)、回归(改完同套题重跑)。
- 记住 1 个比方:用同一套题,把"我觉得"变成"数据说";Agent 是黑盒 + 随机 + 耦合,一次通过只证明"这次采样通过"。
- 记住 1 条红线:不要自己出题自己答,至少让另一组盲测;失败样例不许删(删掉失败用例,测试集就变成"庆祝集"了)。
看完做 15 道自测题。哪几道大家错得多,直播时老师就重点讲哪几道。
直播 0–30|把核心快速过一遍
- 评测是开发的主控回路(EDD),不是末尾验收。 循环是:最小契约 → MVP → 建评测集 → 批量运行定位失败 → 修改 → 全量回归 → 更新评测集。成熟的 Agent 项目,大部分时间花在评测和迭代上,而不是一次实现功能。
- 一套合格测试集五类都要有。 正常 40% / 边界 20% / 异常缺失 15% / 高风险 15% / 人工介入 10%。
- 红线指标必须 100%,不能平均。 20 条里 19 对 1 高风险错,平均 95%,可这一条就足以让你下线——高风险要单独看,只有 0 或 1。
- 失败要分六类,别把环境当模型。 任务通过 / 任务失败 / 环境失败(接口/网络/权限异常)/ 评估器失败 / 标准未定义 / 取舍变化。接口超时是"环境失败",重跑就行,不能算模型能力差——修错地方,越修越差。
直播 30–75|挑大家做错的题讲
- 只测好例子,测试集就成了你"最不敢给人看"的那部分。
- 用平均分掩盖红线,高风险要单独看。
- 改完不回归,修一个坏三个,还以为自己进步了。
直播 75–120|拆一个真实案例:报销复核 17 条用例,红线必须 100%
还是第 8 讲那家 150 人公司的报销预审。测试集 17 条(正常 2 / 边界 4 / 异常 4 / 越权 2 / 高风险 3 / 审计 2),含"500 元整""第 16 个工作日""自审批""关联交易""供应商黑名单"这些。指标三条:自动化判定准确率 ≥ 90%;红线召回(越权/高风险类)= 100%;证据完整率 = 100%。
这里埋了 3 个坑:"500 元整"最容易判成"超 500";金额为 0 是"复核"不是"通过";"自审批"很多流程都没防。课上给两版提示词(v1 没"刚好卡线"规则,v2 有)跑同一套 17 条对比:v1 准确率 82% 红线 80%,v2 准确率 94% 红线 100%。
课后再让另一组在你们不知情时,往测试集里注入 2 条"该拒绝却可能被放行"的陷阱题(比如伪造的"供应商黑名单命中"),看你们的评测流程能不能自己发现——评测真正要证明的不是"全对",而是"失明区在哪"。
这一讲想让你记住的就一句:测试集的质量决定你敢不敢上线;红线指标只有 0 或 1,没有 95%。
当堂练一个(8 分钟):拿你最近常用的一个 AI 助手(帮你写周报、查制度、回消息的那个),列 10 个"你最常问它的问题",每条写一句"怎样算答对"。再故意加 1 条"最危险"的——比如"孕妇能不能吃这个药""这个供应商能不能打款"这种答错会出事的。然后回答:你这 10 条里,最危险的是哪一条?为什么它必须"一条都不能错"?
判断标准:你能一口说出"最危险的是哪一条",就算过关;说不出,说明你只测了"好例子",还没测到点子上。记住:红线题只有"对/错",没有"95%"。
课后:答疑 + 陪跑,交一份作业
从过去 11 讲整理补齐五类凑够 20 条,每条写"预期 + 判据",定义 2–4 个指标(至少 1 个必须 100%),改一处重跑做对比;找另一组盲测 5 条(失败题不许删)。
这节课你该会的:
- 能说清一套合格测试集的五类(正常/边界/异常/高风险/人工介入);
- 能说清"红线指标必须 100%、只有 0 或 1,不能用平均分掩盖";
- 能说清"改完要用同一套题回归,看哪条从失败变通过、有没有让别的变失败"。
三个翻车:
- 只测好例子——测试集成了你最不敢给人看的那部分;
- 用平均分掩盖红线——高风险要单独看,只有 0 或 1;
- 改完不回归——修一个坏三个,还以为自己进步了。
第四部分:交付与答辩(第 13–16 讲)
最后四讲面对三个真实问题:它会坏、它要花钱、它得交给别人。 这三件事决定了你做的是一个作业,还是一个能拿得出手的东西。
延伸自读:《原理讲义》§12
展开查看
一句话定义
评测不是"开发完验一下",而是把"这个 Agent 变好了吗"这种主观感觉,转成"在写死的判据下、用同一套测试集、跑出可比较的数字"的客观过程——它是开发的主控回路(EDD),不是末尾的验收环节。
核心原理
1. 判据先行:先定"对错",再谈"好坏"。 模型输出是一次概率采样,同一输入跑两次,答案可能不一样;没有写死的判据,"对"和"错"都判不出来,评测就退化成凭感觉。判据要把"什么算对、什么算错、什么算不确定"落成可判定的规则,而不是"答得挺合理"这种没法复核的描述。举个例子:某零售企业的报销复核,一张"500 元整"的单据该不该批,取决于规则写的是"≥500 拦截"还是">500 拦截"——不写清临界值,同一张单两次判得不一样,整份评测数据都是噪声。
2. 指标要分叉,红线要召回:平均分是危险的安慰剂。 指标至少分两类:总体准确率衡量一般水平,红线召回率衡量"绝对不能错的那一类"——越权、关联交易、黑名单命中这些"该拦却放行"的反例。为什么不能只看平均分?20 条里 19 条对、1 条高风险错,平均分 95%,但那条高风险错足以让你下线。红线指标只有 0 或 1,没有 95%:它问的是"该拒绝的是不是全都被拒绝了",漏一条就是事故,所以召回必须 100%。普通题可以容忍错几条,红线题一条都不能漏——这是两类完全不同的质量标准,混在一个平均分里就等于没有标准。
3. 盲测与回归:对抗"自欺"和"退化"。 自己出题自己答,会不自觉只测自己有把握的场景,出题的人和评分的人共用同一套思维盲区;所以要换一组人盲测,更狠的是往测试集里偷偷注入"该拒绝却可能被放行"的陷阱题,看流程能不能自己发现失明区——评测真正要证明的不是"全对",而是"失明区在哪"。回归是"改完同套题重跑":Agent 是黑盒 + 随机 + 耦合,改一处可能坏三处,不回归,你连"是进步还是退步"都说不清。一次通过只证明"这一次采样通过了",不证明"改对了"。
4. EDD 主循环与成本-质量:评测是主控,不是旁路。 EDD 循环是"定义最小契约 → 快速 MVP → 建评测集 → 批量运行定位失败 → 修改 → 全量回归 → 更新评测集"。评测要前置,因为生成式应用的修改往往不是"修一个 bug",而是"改一个采样分布",不量化就无从判断改没改对;成熟项目的多数时间都花在评测与迭代,而非一次实现功能。成本和质量是同一件事的两面:更强的模型、更长的上下文、更细的检索会抬高质量,也同步抬高每次任务的成本——正确目标是"在达到质量门槛的前提下把成本压下来",而不是单向追高分。
常见误区 / 边界
- 失败样例不许删:删掉失败用例,测试集就退化成"庆祝集",通过率再高也没意义——你最该留的,恰恰是那些"最不敢给人看"的题。
- 别把环境失败当模型失败:接口超时、权限异常是"环境失败",重跑就行,不能算模型能力差。失败要分六类(任务通过 / 任务失败 / 环境失败 / 评估器失败 / 标准未定义 / 取舍变化),修错地方只会越修越差。
- 别只评最终答案:要评完整轨迹(输入 / 意图 / 检索 / 工具 / 中间状态 / 最终结果),否则"答案对但过程错"会被放过。
- 别用平均分掩盖红线:高风险单独看,只有 0 或 1。
- 别自己出题自己答、别把"一次全对"当终点:评测的价值是暴露失明区,不是生产一张满分报表。
一句可带走的话
测试集的质量决定你敢不敢上线——把感觉变成数字,让数字成为下一次修改的依据;红线指标只有 0 或 1,没有 95%。
案例包 · 15 题自测
展开查看
15 道题,每题都有解析,容易错的地方标了出来。大家错得多的题,就是直播时要重点讲的。
- (单选)一套合格测试集,五类都要有,其中高风险的占比建议是?
- A. 0%
- B. 约 15%
- C. 50%
- D. 80%
答案:B | 解析:正常 40% / 边界 20% / 异常 15% / 高风险 15% / 人工介入 10%。
- (单选)红线指标(高风险)的正确要求是?
- A. 和准确率一起平均
- B. 必须 100%,单独看
- C. 95% 就行
- D. 不用测
答案:B | 解析:1 条高风险答错就足以下线。 容易错:很多人用平均分把红线藏起来,以为 95% 就能上线。
- (单选)"回归"是什么?
- A. 重新部署
- B. 用同一套题跑新旧两版,看有没有退化
- C. 删掉旧代码
- D. 换模型
答案:B。
- (单选)EDD 主循环的正确顺序是?
- A. 改代码 → 上线 → 测
- B. 最小契约 → MVP → 建评测集 → 批量运行定位失败 → 修改 → 全量回归 → 更新评测集
- C. 测 → 上线 → 改
- D. MVP → 上线 → 补测试
答案:B。
- (判断)评测只要看最终答案对不对。
答案:错 | 解析:要评完整轨迹——输入/意图/检索/工具/中间状态/最终结果/环境。 容易错:很多人只盯最终答案,忘了评中间过程。
- (单选)接口超时导致任务失败,应该判为?
- A. 模型失败
- B. 环境失败(修环境重跑,不计入模型能力)
- C. 任务失败
- D. 标准未定义
答案:B | 解析:失败分六类,别把环境当模型。 容易错:很多人把环境问题当成模型问题,白折腾半天。
- (单选)"盲注入"的目的是?
- A. 让模型更准
- B. 在团队不知情时注入受控异常,检验评测流程能否自己发现问题
- C. 加快测试
- D. 隐藏 bug
答案:B。
- (单选)"盲测"是?
- A. 自己出题自己答
- B. 另一组出你不知道的题来测
- C. 闭眼测
- D. 不测
答案:B。
- (判断)失败样例可以删掉,让报告更好看。
答案:错 | 解析:删掉失败用例,测试集变成"庆祝集",只骗自己。 容易错:删失败样例等于自己骗自己,测试集就成"庆祝集"了。
- (单选)确定性规则(格式/字段/数值范围)应该用谁评?
- A. 代码断言
- B. LLM Judge
- C. 人工
- D. 不评
答案:A | 解析:确定性规则用代码,开放质量用 Judge,高风险用专家。
- (单选)评测集本身要不要版本化?
- A. 不用
- B. 要,支持新增/升级/转回归/重新加权/修订/退役归档
- C. 看情况
- D. 只在结课做
答案:B。
- (判断)评测只看"准不准",不用看"贵不贵"。
答案:错 | 解析:准确率 95% 但每条调 8 次模型,上不了线;要看质量/成本比。
- (单选)20 条里 19 对 1 高风险错,平均分 95%。能上线吗?
- A. 能,95% 很高
- B. 不能,那条高风险足以让你下线
- C. 看情况
- D. 再测一次
答案:B | 解析:红线单独看,只有 0 或 1。
- (判断)改完一个提示,不用跑回归。
答案:错 | 解析:可能修好一题弄坏三题,不跑回归不知道。 容易错:改完不跑回归,可能修好一题、弄坏三题。
- (单选)"500 元整"的报销单,标准是"不超过 500 可报",正确判定是?
- A. 超了
- B. 通过(500 包含在"不超过 500"里)
- C. 复核
- D. 拒绝
答案:B | 解析:"不超过 500"包含 500;这是"刚好卡线"的边界题,最容易判错。
案例包 · 案例拆解素材
对应:第 12 讲「评测体系与回归」
课堂用时:12 分钟案例 + 24 分钟项目迁移
材料:
data/test_cases.csv、data/policy.md结果:
data/v1_results.csv、data/v2_results.csv指标:
data/metrics.md
1. 客户与场景
还是第 8 讲那家 150 人的贸易公司,财务每月处理 300 单报销。
上一版报销预审助手,团队自己觉得"效果挺好":随手测了十几条,大部分都过了。但没人测过"自审批""关联交易""500 元整"这些边界。
这次要把"我觉得"变成"数据说"。
2. 为什么这个案例值得教
- 它是整门课的分水岭:从"能演示"到"敢上线";
- 它教一个反直觉的结论:平均分高,不代表能上线;
- 它让学生亲手体验"改一个地方,修好两题、弄坏一题";
- 它可以直接迁移到任何项目:客服、RAG、抽取、Agent。
3. 测试集
17 条,覆盖六类:
| 类型 | 条数 | 用例 |
|---|---|---|
| 正常 | 2 | C01、C02 |
| 边界 | 4 | C03(500 整)、C04(501)、C05(第 15 天)、C06(第 16 天) |
| 异常 | 4 | C07(缺发票号)、C08(重复发票)、C09(金额 0)、C10(未来日期) |
| 越权 | 2 | C11(非本人提交)、C12(自审批) |
| 高风险 | 3 | C13(关联交易)、C14(大额)、C15(黑名单) |
| 审计 | 2 | C16(规则依据)、C17(输入快照) |
红线 5 条:C08、C11、C12、C13、C15。
4. 期望结果与指标
- 准确率 = 判定正确数 ÷ 17,目标 ≥ 90%;
- 红线召回 = 红线判定正确数 ÷ 5,必须 100%;
- 误判数 ≤ 1;
- 证据完整率、快照完整率 = 100%。
v1:14/17 = 82.4%,红线 4/5 = 80%,误判 3。 v2:16/17 = 94.1%,红线 5/5 = 100%,误判 1。
5. 故意埋的四个坑
坑 1:500 元整被判超 500
C03 金额 500,上海。规则是"不超过 500",等于 500 应 PASS。
v1 写成"金额 ≥ 500 就超",把 C03 判成 REVIEW。差一错误,最典型。
坑 2:金额 0 被判通过
C09 金额 0。不是"通过",是"需复核"——0 元报销本身就是异常。
v1 有些版本会直接放过,因为"金额没超标"。
坑 3:自审批没拦
C12 申请人 = 审批人 = 李经理。v1 判了 PASS。
这是最危险的一条:流程漏洞,不是模型能力问题。红线召回因此只有 80%。
坑 4:v2 修好了红线,却误伤成都
v2 把红线做到 100%,但 C02(成都,320 元)被判 REVIEW——因为提示词里的"其他城市"没覆盖成都。
这说明:修一个地方,可能弄坏另一个地方;不跑回归,你根本不知道。
6. 两版提示词
prompts/v1_naive.txt:只写"根据制度判断,尽量让正常单通过"。prompts/v2_rules.txt:逐条写死规则,含"等于上限不算超""15 天不算逾期""自审批驳回"。
7. 验收样例(3 条)
| # | 用例 | 期望 | 判定 |
|---|---|---|---|
| 1 | C03(500 元整) | PASS | 通过 |
| 2 | C12(自审批) | REJECT | 通过 |
| 3 | C02(成都 320) | PASS | 通过(v2 仍错,算失败) |
8. 12 分钟课堂流程
| 分钟 | 做什么 |
|---|---|
| 0–2 | 先给一份"95% 准确率"的漂亮报告,问:"能上线吗?" |
| 2–5 | 翻到红线:5 条漏了 1 条(C12),问:"95% 还成立吗?" |
| 5–8 | 让学生自己算 v1 的三个错误:C03、C05、C12 |
| 8–11 | 看 v2:红线 100%,但 C02 误伤;问:"这算进步吗?" |
| 11–12 | 收口:红线单独看;改完必须回归。 |
9. 一句话总结
"我觉得挺好"不是证据。红线 100%,其余看误判;改完必须用同一套题重跑。
案例包 · 课后操作单
目标:用 17 条测试,把"我觉得挺好"变成一份能拿给财务看的报告。
时间:课后 60 分钟。
你要交的东西
- 一份 17 条测试结果表(预期、实际、判定、失败原因);
- 三个指标:准确率、红线召回、误判数;
- 一份 1 页 Eval 报告(用
data/report_template.md); - 一句"v2 修好了什么、弄坏了什么"。
步骤
第 1 步:导入测试集(5 分钟)
把 data/test_cases.csv 导入智能表格,expected 列隐藏。
第 2 步:跑 v1(8 分钟)
用 prompts/v1_naive.txt 建技能,逐条跑,记录 predicted,填表。
第 3 步:算指标(5 分钟)
准确率 = 正确数÷17;红线召回 = 红线正确数÷5(C08/C11/C12/C13/C15);误判数。红线召回单独算。
第 4 步:改 v2(5 分钟)
用 prompts/v2_rules.txt 改三处:①"不超过 500"含 500;②第 15 个工作日不算逾期;③申请人=审批人 → REJECT。
第 5 步:回归(5 分钟)
用同一套 17 条重跑,回答:哪几条从错变对?哪几条从对变错?红线召回现在是多少?
课后作业
- 补 3 条自己的场景用例(正常/边界/高风险各 1)。
- 找另一组盲测:他们出 5 条你不知道的题。
- 写 150 字:v2 的 94% 和 v1 的 82%,哪个更"能用"?为什么?
达标标准(这节课你该会的)
- 能说清一套合格测试集的五类(正常/边界/异常/高风险/人工介入);
- 能说清"红线指标必须 100%、只有 0 或 1,不能用平均分掩盖";
- 能说清"改完要用同一套题回归,看哪条从失败变通过、有没有让别的变失败"。
常见错误
- 只算准确率不算红线召回 → 漏掉最危险的问题。
- 改完不跑回归 → 修一个坏三个。
- 失败原因写"模型不行" → 太粗,要分模型/规则/资料/流程。
- 把审计两项当模型能力 → 它们是流程检查。
- 删失败样例 → 测试集失效。
案例包 · 教师脚本(教师用)
展开查看
课前准备
- 把
data/test_cases.csv导入智能表格,expected列隐藏。 - 自己先跑 v1,记录准确率和红线召回,作为课堂对照基线。
- 开课前看一眼 quiz 的错误率,圈出错得最多的 3–5 题。
0–30|把核心快速过一遍(3 个点)
- 评测是开发的主控回路(EDD)(10 分钟)— 循环:最小契约→MVP→评测集→批量运行定位失败→修改→全量回归→更新评测集。
- 一套测试集五类都要有(10 分钟)— 正常 40/边界 20/异常 15/高风险 15/人工介入 10。
- 红线必须 100%,失败分六类(10 分钟)— 红线单独看;失败分任务/环境/评估器/标准未定义/取舍,别把环境当模型。
30–75|挑大家做错的题讲
按 quiz 里错得多的题(Q2 / Q5 / Q6 / Q9 / Q14),每道讲清"错在哪 + 正确做法":
- Q2:平均分掩盖红线 → 红线单独看,只有 0 或 1。
- Q5:只评最终答案 → 评完整轨迹。
- Q6:环境失败当模型失败 → 修环境重跑,不计入模型能力。
- Q9:删失败样例 → 测试集变"庆祝集",只骗自己。
- Q14:改完不回归 → 修一个坏三个。
75–120|拆一个真实案例:报销复核 17 条用例
导入测试集(5 分钟):发 data/test_cases.csv,字段 case_id/type/expected/amount/city/invoice_no/approver/applicant,expected 先隐藏。
跑 v1(15 分钟):用 prompts/v1_naive.txt 逐条跑,记录 predicted,填表。特别盯三类:"500 元整"(最易判成"超 500")、金额 0(是"复核"不是"通过")、自审批(很多流程没防)。
算指标(8 分钟):准确率 = 正确数÷17;红线召回 = 红线正确数÷5(C08/C11/C12/C13/C15);误判数。红线召回单独算,不用准确率代替。
改 v2 + 回归(12 分钟):用 prompts/v2_rules.txt,改三处:①"不超过 500"包含 500;②第 15 个工作日不算逾期;③申请人=审批人 → REJECT。用同一套 17 条重跑,对比 v1 82%/红线 80% vs v2 94%/红线 100%。
盲注入(5 分钟):课后让另一组在你们不知情时注入 2 条"该拒绝却可能放行"的陷阱题,看评测流程能否自己发现——真正产出不是 14/14,是找到系统的失明区。
学生会错在哪
- 只算准确率,不算红线召回 → 漏掉最危险的。
- 改完不跑回归 → 修一个坏三个。
- 失败原因写"模型不行" → 太粗,要分模型/规则/资料/流程。
- 把审计两项当模型能力 → 它们是流程检查。
- 删失败样例让报告好看 → 测试集失效。
评分点(每条 1 分,共 5 分)
- [ ] 17 条测试记录完整,判定清晰;
- [ ] 三个指标算对(准确率/红线召回/误判数);
- [ ] 红线召回单独列出且 =100%;
- [ ] 有 v1→v2 回归对比,能说清"修好了什么、弄坏了什么";
- [ ] 1 页 Eval 报告用
report_template.md写完。
如果学生问"能不能只测好例子"
回答:不能。 测试集是你"最不敢给人看"的那部分;只测好例子,上线第二天就出事。失败样例不许删。