Agent evaluationAgent 评估
先想清楚再开口
你刚讲完一个 Agent 的设计,面试官接着问:「你说要评估它。跑一次成功算不算过?轨迹很漂亮,却违反了一条业务规则呢?下周要换模型,你凭什么说新版能上线?」
题面为本书自拟的训练题,不代表任何公司的真实面试题或真实系统。场景沿用 A04 的合同审查系统(虚构练习设定)。
约束
| 约束 | 取值(练习设定) |
|---|---|
| 被评对象 | A04 的逐条目判定流水线:每个清单条目输出一个结论(满足 / 不满足 / 缺失 / 不适用 / 无法判断)加引用 |
| 已有标注 | 60 份历史合同 × 40 条目 = 2,400 条条目判定,按清单 v1 由合规专家盲审,高风险条目双人裁决;随机抽取的「满足」项还没有双人裁决,这是现有标注的弱点 |
| 正类 | 「不满足 / 缺失」约占 10%,即约 240 条;漏报最贵 |
| 用途 | 每次改 prompt、换模型、清单改版,都要决定能不能上线 |
| 运行 | 模型输出有随机性:同一合同跑两次,个别条目结论会变 |
| 预算 | 一次发布评测要在一晚(按 8 小时计)内跑完 |
答到一半再点开:面试官补了一句
「上线三个月后,线上的人工推翻率涨了一倍,可你的离线评测分数一点没变。」
先口答,再展开
展开参考回答
该先问的问题
- 「通过」由谁定义?业务方最怕的是漏报还是误报?这决定主指标是哪一个,以及阈值卡在哪里。
- 真值从哪来?标注人是谁、分歧怎么裁决、有没有测过标注人之间的一致率?标签对应哪一版清单?标签不可信或过期,后面所有数字都不可信。
- 这次评估要支撑什么决定——发布门禁、模型选型,还是向业务方证明价值?这决定要多精确,也就决定了样本量。
- 系统能不能在隔离环境里重置、重跑?工具有没有副作用?这决定能不能测一致性。
- 线上能拿到哪些信号(人工推翻、抽查结果、周转时间)?这决定离线分数怎么和线上对账。
一句话框架
评估不是一个分数:用可重置的任务集,把结果、规则遵守、轨迹和一致性分开量;结果由外部检查器或专家标签判,指标带置信区间,离线做门禁,线上盯漂移。
设计取舍表
| 设计点 | 采用 | 否决的备选 | 什么证据会让我改 |
|---|---|---|---|
| 真值来源 | 专家盲审标签,按清单版本(checklist_version)存;高风险条目和随机抽取的「满足」项双人裁决;再加能写成规则的确定性检查(格式、引用是否存在于原文) | 拿旧的人审意见当真值,或让被测模型自己评 | 标注人之间的一致率低于约定阈值时,先修标注规范,再谈模型分数 |
| 主指标 | 以「不满足 / 缺失」为正类,算条目级 recall 和 precision;按条目、扫描件与否、部门分层;每个数都附合同级区间和样本量。五选一结论只为统计才折成二元:正类被判「无法判断」不算召回,另报「含转人工的 recall」和「无法判断」率 | 整体准确率——正类只占 10% 时,全部判「满足」也有 90% | 业务方改口径(见追问 2)时,换成固定 recall 下比较 precision |
| 一致性 | 离线:每个条目重复跑 k 次,报告 pass^k 和结论翻转率,并找出容易翻转的条目类型。线上:新合同没有历史翻转可查,高风险条目本来就全部人审,所以对命中风险规则的其余「满足」条目(扫描页、含例外或否定条件、离线翻转率高的条目类型)当场多跑两次,三次不一致就转人工 | 只跑一次就记分;或者把离线集上的翻转标签直接套到新合同上 | 线上多跑的分歧率长期接近零,改为只对离线学到的高翻转条目类型多跑,省延迟和 token |
| 规则遵守 | 单独计数:硬规则(如高风险条目必须附引用)违反一次就不过门禁,不和质量分折算 | 把违规折算成扣分,混进总分 | 不改;规则违反和答错是两种不同的风险 |
| 轨迹 | 抽样看轨迹,做失败归类(没召回 / 判错 / 引用错 / 格式错),用于诊断;「结论对但引用错页」单独计数,高风险条目按失败计 | 给轨迹打分并纳入门禁 | 某一类失败占比长期稳定、能自动识别时,把它的检测升为门禁 |
| 评委 | LLM-as-judge 只用于规则写不出来的维度。评「引用的证据是否支持结论」时,只给条目要求、原页引用和结论;评「理由是否成立」时才给理由,但去掉执行者的自评与自证话术,并隐去版本和来源。两个维度分别和专家标签校准 | 同一个模型自评,或让评委读带自评的完整输出 | 评委和专家的一致率掉到阈值以下,这个维度退回人工抽评 |
| 离线与线上 | 离线评测做发布门禁;线上盯人工推翻率、抽查结果和各层分布,与离线对账 | 只看离线分数 | 线上指标和离线背离时,从线上抽样补标注,扩充评测集 |
两分钟,先结论后展开
展开 2 分钟英文口述稿
I don't treat evaluation as one number. For the contract reviewer, the unit is a single checklist item on a real contract, labeled blind by compliance experts, with double review on high-risk items.
I measure four things separately. Outcome: recall and precision on the classes that matter — "not met" and "missing" — split by item type, scanned versus digital, and department, each with a confidence interval, because two hundred positives give you roughly plus or minus four points. Rules: hard-rule violations are counted on their own and block release, instead of being averaged away. Trajectory: sampled and bucketed by failure type, so we know what to fix. Consistency: offline, every item runs several times and I report pass-hat-k — the chance that all k runs are right. In production, items that match risk rules run three times, and any disagreement goes to a human.
Where rules can't judge, an LLM judge checks whether the quoted evidence supports the verdict. It never sees the agent's self-assessment, and I calibrate it against expert labels.
To ship a new model, I compare both versions on the same items, contract by contract, and look at where they disagree.
Offline scores are a gate, not the truth. If the online override rate rises while offline stays flat, the data has drifted, so I sample production cases, label them, and grow the set.
一层一层往下问
- 为何不用备选为什么不直接报整体准确率?为什么不干脆让 LLM 当评委,全自动?
先口答,再展开要点
- 正类只占 10%:全部判「满足」的系统准确率也有 90%,却一个漏报都抓不到。所以主指标必须以正类为中心。
- 全自动 LLM 评委便宜,但它本身需要被评估:没和专家标签对过一致率的评委,给出的分数没有根据。
- 评委能用的地方是规则写不出来的维度,而且只看证据;结论对错这类有专家标签的维度,直接用标签。
- 需求变化业务方改口了:「漏报要低,但现在误报太多,审核人被淹没了,也不行。」
先口答,再展开要点
- 从「recall 越高越好」变成两个约束:先把 recall 下限定死(比如不低于人工基线),再在这个下限上比较 precision。
- 报告工作点,而不是一个数:不同阈值或不同规则下的 recall / precision 对照表,让业务方选。
- 误报的代价要换成审核工时来说,和 A04 估算里的人审工时对上,业务方才能判断取舍。
- 失败反证上线三个月,线上人工推翻率涨了一倍,离线分数一点没变。怎么回事?
先口答,再展开要点
- 先查分布漂移:线上新出现的合同类型、部门、扫描件比例,是不是评测集里很少或没有。把线上样本按同样的层切开,和评测集逐层对比。
- 再查过拟合:三个月里反复在同一套评测集上调 prompt,分数会越来越好看,却不代表泛化。要保留一份从不用于调参的隔离集。
- 也可能是推翻本身变了:新来的审核人标准不同。所以推翻率也要抽样复核,不能直接当真值。
- 修法:从线上按层抽样,交专家标注,补进评测集;隔离集定期换新。
- 一致性同一份合同跑两次,有个条目一次判「满足」、一次判「不满足」。temperature 设成 0 不就好了?
先口答,再展开要点
- temperature 0 也不保证每次输出相同,而且即使相同,也只是把随机性藏起来,并没有让答案更对。
- 两个指标别混:pass@k 是 k 次里至少一次对,适合「能自动验证、可以多试几次」的场景;pass^k 是 k 次全部对,衡量的是可靠性。单次正确率 0.95 时,pass@5 约 0.9999997,pass^5 约 0.77。
- 从 n 次试验、c 次正确估计时,pass^k 用 C(c,k)/C(n,k),再对任务取平均(τ-bench 论文的定义)。
- 离线的翻转标签不能直接贴到新合同上,新合同只跑一次就看不到翻转。线上要么当场多跑:对命中风险规则的「满足」条目再跑两次,不一致就转人工;要么只用离线学到的风险规则直接转人工。
- 当场多跑是有代价的。沿用 A04 的量:每月 11,520 个未被标出的普通「满足」条目(400 × 36 × 80%);再假设其中 20% 命中风险规则(这是线上重跑规则的命中率,和 A04 的「20% 被标出」无关,待实测),即 2,304 个条目。每个多跑两次,每月多 4,608 次调用、约 26.7M tokens;并行调用延迟约增加一次调用的时长,串行则是三倍。
- 假设三次结论的分歧率为 5%(待实测),每月约 115.2 条分歧转人工。但 A04 本来就随机抽审普通「满足」项的 10%,若两者独立,其中约 10% 已在抽检里,真正新增的人审约 115.2 × 90% ≈ 103.7 条、约 2.6 小时(按每条 1.5 分钟)。重叠比例也要实测。
- 评委校准你用 LLM 当评委判「理由是否支持结论」,怎么知道评委靠谱?
先口答,再展开要点
- 拿一批专家已标注的样本让评委判,算一致率;类别不平衡时用 Cohen's kappa 这类校正过偶然一致的指标,不只看百分比。
- 评委的任务要和它看到的材料一致:评「证据是否支持结论」,就只给条目要求、原页引用和结论;评「理由是否成立」,就把理由给它,但去掉执行者的自评和自证话术,隐去版本和来源。两类指标分开校准。
- 评委和被测最好不是同一个模型;另外检查位置偏差、长度偏差这类已知偏差。
- 一致率要定期复测:被测系统和评委任一方换版本,都要重新校准。
- 统计新版的 recall 从 90% 涨到 92%,能上线吗?
先口答,再展开要点
- 240 个正类时,单看 90% 这个数,iid 近似下的 95% 置信区间约 ±3.8 个百分点;同一份合同的条目彼此相关,真实区间更宽。两个孤立的数字说明不了什么。
- 判断要基于配对差异:两版跑同一批条目,统计结论不同的那些条目里新版改对了多少、改错了多少,再按合同重抽样(bootstrap)求差值的区间。两个单独区间是否重叠,不能用来下结论。
- 还要看分层:总 recall 涨了,高风险条目或扫描件那一层可能反而跌了。高风险层有任何退步就不上线。
- 版本清单 v2 把审计权条目的适用条件,从「所有合同」改成「仅限外包合同」。v1 的 2,400 个标签还能直接评 v2 吗?
先口答,再展开要点
- 不能整体沿用。标签按清单版本存:语义没变的条目,旧标签继续有效,两版可以在这些条目上配对比较。
- 受影响的条目(这里是审计权在非外包合同上的那部分)要按 v2 重新盲审;原来的「不满足」可能变成「不适用」。新增条目没有历史标签,先全量人审建标注。
- 报告里把「旧条目上的表现」和「新条目 / 受影响条目上的表现」分开写,各自给样本量;新部分样本不够时,门禁先靠人审兜底,不靠分数。
这些地方最容易栽
- 症状:离线分数一路上涨,线上推翻率不降反升;换一批新合同,分数明显回落。
- 根因:每次改 prompt 都在同一套集合上看分数,集合本身变成了训练信号(Goodhart 定律)。
- 防线:留一份从不参与调参的隔离集,只在发布前看;定期从线上抽样补标注、轮换隔离集。
- 症状:LLM 评委给出的分数很高,专家抽查却发现大量「理由不支持结论」的条目被判通过。
- 根因:评委读到了执行者的自评和自证话术,被说服了;或者评委和被测是同一个模型,偏好一致。
- 防线:评委的输入按任务裁剪——评证据只给证据,评理由则给去掉自评、隐去来源的理由;换不同来源的模型当评委;两类指标分别用专家标签校准,一致率低于阈值就退回人工。
- 症状:recall 这周 91%、下周 87%,团队围着波动开会,却找不到原因。
- 根因:正类样本只有几十条时,置信区间宽达十几个百分点,这些波动大多是抽样噪声。
- 防线:每个指标旁边写样本量和置信区间;按估算补足正类;版本比较用配对分析,不看两个孤立的数字。
带着量纲算一遍
问:要把正类 recall 估到多准,需要标多少条目?一次发布评测能不能在一晚内跑完?
假设(练习设定,全部待实测):预期 recall 约 90%;正类占条目的 10%;每份合同 40 个条目,其中 4 个高风险条目;95% 置信水平(z = 1.96);每次条目调用约 5.5k 输入 + 0.3k 输出 tokens(沿用 A04 估算);一晚按 8 小时计。
样本量公式(二项分布正态近似) n = z² × p(1 − p) / E²
要求 ±5 个百分点 1.96² × 0.9 × 0.1 / 0.05² = 138.3 → 139 个正类
要求 ±3 个百分点 1.96² × 0.9 × 0.1 / 0.03² = 384.2 → 385 个正类
换算成要标的条目 139 / 10% = 1,390 条 ≈ 35 份合同
385 / 10% = 3,850 条 ≈ 97 份合同
现有标注的 iid 近似区间 240 个正类
半宽 = 1.96 × √(0.9 × 0.1 / 240) ≈ 0.038 即 90% ± 3.8 个百分点
全量 k = 5 要多大吞吐 2,400 条目 × 5 次 = 12,000 次调用
12,000 次 / 28,800 秒 ≈ 0.417 次/秒
69.6M tokens / 28,800 秒 ≈ 2,417 tokens/秒
分层方案 全量 k = 1 + 240 个高风险条目再跑 4 次
2,400 + 240 × 4 = 3,360 次调用 ≈ 19.5M tokens ≈ 0.117 次/秒
结论:35 份和 97 份是「正类独立同分布、阳性率稳定在 10%」时的算术下限,不是门禁能达到的精度。同一份合同里的条目彼此相关,按条目类型、扫描件、部门分层后每层正类更少,区间只会更宽。门禁精度要用合同级 bootstrap(或分层试测)实际算出来,报告里写每层的实际正类数和区间;现有标注能否做到 ±3.8 个百分点,也要这样验证,不能直接假定。
容量:全量跑 5 次需要持续约 0.417 次调用/秒、约 2,417 tokens/秒,这还没算 OCR、检索、重试和排队。能不能一晚跑完,取决于内部网关给评测的配额、并发上限和实测 p95 延迟,要先测。配额不够时,当晚的发布门禁只跑分层方案(全量 k = 1,高风险条目 k = 5),完整的一致性评估异步完成,报告里写明哪些结论还没跑完,不能声称全部已当晚过门禁。
敏感性:预期 recall 若只有 50%(方差最大的情形),±5 个百分点也要 385 个正类。正态近似要求漏报数不太少(这里 240 × 10% = 24 个,勉强够用);recall 接近 1 时改用 Wilson 区间。
怎么实测:用现有标注按合同 bootstrap 出每层的实际区间宽度,和上面的近似值对照;在评测环境里压测网关,拿到并发上限和 p95 延迟;记录各条目类型的实际翻转率,决定哪些类型需要重复运行。
原理去哪里补
- AI 4.5 结果与轨迹两层评估、pass^k 的推导和 τ-bench 案例,本卡不重讲 · AI 系统工程手册
- AI 6.4 离线评测、线上 A/B 与回归测试的三层体系 · AI 系统工程手册
- AI 3.5 检索指标与生成指标分开评,对应「缺失」类的归因 · AI 系统工程手册
- AR ch14 可靠性工程:什么时候升级、交给人 · CCAR 备考手册
- A01 改代码的 Agent:测试就是现成的外部检查器
- A02 深度研究 Agent:没有标准答案时怎么评
- A03 客服 Agent:规则遵守和多轮一致性
- A04 受监管文档审查:本卡的场景来源
- A06 长任务 goal Agent:检查器判完成、假完成率
只写真实经历
只写真实经历,没有就空着,不编。公开版只有空表;填好的版本存在自己的私用练习记录里。
| 场景 | 当时发生了什么 | 我亲自做了什么(团队 / AI 做了什么) | 怎么发现的,结果和证据 | 之后怎么防 |
|---|---|---|---|---|
| 一个看起来变好了的改动,后来发现其实没变好(或变差了) | ||||
| 评测结果和线上真实体验对不上 |
练习记录
| 日期 | 口述用时 | 脱稿? | 答不上的追问 | 下一轮修正(≤2) |
|---|---|---|---|---|