← 返回闯关手册
ArchSynapse AI · 2026-07-19 · ★★★★☆ 精读(建集三步飞轮)

《Agent 评测实战》09 | 别只会刷榜:为你的业务构建专属评测集

为什么值得读

a03 教你设计第一套评测集的内容(矩阵/配比/模板),这篇教你怎么让它「活」:种子任务 → 失败固化生长 → 回归集守底的三步飞轮,加难度校准(Goldilocks band)、失败三筛子、冒烟/核心/全量三层跑法。与 a03 是「内容设计」与「生命周期」的互补。

核心内容速览

适合谁 · 怎么用

先修:a03(Eval Set 实战)。已读完 a03、准备真正动工建集的人。12 周时间线(6→23 个任务)展示了健康评测集的生长节奏。

闯关自测

先合上原文在心里作答,再点开对照。全对 = 本篇真正通关。

Q1 为什么「别攒大数据集」?

评测集的价值在「准」不在「大」——你一开始不知道 Agent 会犯什么错,凭空设计只会造出一堆它本就不会错的无效用例。让它在真实使用中生长,条条命中要害。

Q2 新失败收进评测集前要过哪三道筛子?

① 去重(同类已有则调权重不新增);② 严重性 × 频率(优先高风险高频);③ 能否写出稳定判定标准(写不出先别收)。

Q3 什么是难度校准(Goldilocks band)?

任务难度要落在「不太易也不太难」的甜区:太易大家满分、太难大家零分,都没有区分力。最有信息量的是「当前 Agent 有时能过、有时过不了」的临界任务。

以下为原文全文

上方为本站原创导读,下方为原文完整收录,便于对照阅读。

前面几讲我们一直在读别人的基准——读懂它们、也拆解了一个好基准是怎么造出来的。但有一句话我们反复念叨:公开基准 ≠ 你的业务。这一讲,我们就来做那件真正拉开团队差距的事——从零,为你自己的业务,建一套专属评测集。

我先把话说重一点:会刷榜的人很多,但有一套贴合自己业务、还在持续生长的评测集的团队,凤毛麟角。后者才是把"凭感觉迭代"变成"靠数据迭代"的分水岭。

为什么公开基准救不了你

先说清楚,为什么再好的公开基准,都替代不了你自己的评测集。三个硬伤:

一是覆盖不到你的业务。GAIA 不懂你的退款 policy,WebArena 里没有你们的后台系统。你最关心的那些场景——你的业务规则、你的工具、你的边界情况——公开基准一个都不测。

二是抓不到你的失败模式。你的 Agent 会怎么翻车,是由你的具体场景决定的。你的真实流量才知道。公开基准照不出你的"专属病症"。

三是公开的会被污染、会饱和。它们的分数越来越不可信、越来越分不出强弱。而你自己的、不公开的评测集,天然没这个问题。

结论很简单:公开基准用来选型和借设计;专属评测集用来做真正的质量决策。打个比方:公开基准像驾照考试的标准科目,证明你"会开车";而专属评测集像你每天实际要走的那条路——有哪个路口爱堵、哪段限速、哪里常有行人。能开车不等于能把"你这条路"走好,后者才决定用户体验。

核心心法:别攒大数据集,要养一个会长大的小集合

不要一上来就想攒一个大而全的评测集——从一个很小的集合起步,让它在使用中持续生长。

很多团队卡在第一步,就是因为把"建评测集"想成了一个浩大的、要先标几百上千条数据的工程,于是迟迟不开工。这是个误区。正确的姿势是反过来的:先用很小的集合跑起来,再让它在真实使用中自己长大。

为什么这样对?因为评测集的价值不在"大",在"准"——准确命中你 Agent 真实会犯的错。而你一开始根本不知道它会犯哪些错,非要凭空设计,只会造出一堆"它本来就不会错"的无效用例。让它在使用中生长,每一条新用例都来自一个真实的失败,条条命中要害。

第一步:收 10–20 个种子任务

起步的目标不是"全面",是"能跑起来、能照出明显问题"。10 到 20 个手工挑选的任务,通常就够发现 Agent 最扎眼的毛病了。

这些种子任务从哪来?三个最好的来源:

关键提醒:每个种子任务都必须带判定标准(没判定标准的不叫 task)。别只写"用户要退款",要写清楚"成功 = 钱真退了 + 邮件状态一致 + 退款前查过订单状态"。

用退款 Agent 举例,一组合格的种子任务大概长这样——注意它怎么覆盖全景图的不同维度:

#种子任务在考什么(全景图维度)
1正常可退订单的退款任务完成(happy path)
2已发货、按 policy 不可退的订单任务完成 + 守规矩(该拒绝)
3退款接口超时错误处理 / 自恢复
4请求人身份与订单不符安全(越权)
5同一订单重复发起退款一致性 / 防重复执行
6模糊请求"我要退钱"(没给订单号)该不该向用户澄清

你看,光是 6 个用心设计的种子任务,就已经把"happy path、policy、错误、安全、一致性、澄清"全扫到了。这比 100 个全是"正常退款"的用例有用得多。

这 6 个任务,是拿全景图"扫"出来的。它们不是拍脑袋来的——拿三层 × 四维当清单逐格扫:挨个维度问自己一句"这一维,我有没有一个任务在测它"。再叠上三层:这些任务里,有没有几个是专门看轨迹(过程对不对),而不只看端到端(成没成)的?很多评测集不是做得不够多,而是做得不够"全维"——一股脑全堆在"端到端 × 任务完成"那一个格子里。用全景图扫,能逼着你往别的格子也放上种子。

第二步:让评测集"长大"——失败是最好的素材

每发现一个新的失败,就把它变成一个新任务,加进评测集。

无论这个失败来自哪——线上用户的投诉、内部试用时的翻车、你 review 轨迹时发现的"它这次蒙对了但其实很危险"——都把它固化成一个带判定标准的 task,存进评测集。这样做有三个好处:

  1. 每条新用例都命中真实要害,不是凭空想象的。
  2. 评测集越长越难、越长越贴合业务——因为它顺着你 Agent 的"软肋"长。
  3. 同一个错不会犯第二次:一旦进了评测集,以后每次迭代都会被检查到。

随着 Agent 变强,你还要主动加更难的任务去挑战它——评测集要始终"压着" Agent 一点点,它才有持续改进的方向。一个停止生长的评测集,很快就会被 Agent 追平,然后失去区分能力(又是"饱和")。

这背后是一个叫难度校准(difficulty calibration)的概念:评测任务的难度要落在一个"不太易、也不太难"的甜区(有人叫它 Goldilocks band)——太易了大家都满分、区分不出好坏;太难了大家都零分、也看不出进步。最有信息量的任务,恰恰是那些"当前 Agent 有时能过、有时过不了"的。评测集正是靠不断补进这种"临界难度"的任务,来保持它的区分力。

但不是每个失败都值得变成任务。生产里失败成百上千,无脑全收会让评测集迅速臃肿、还塞满重复。收之前过三道筛子:① 去重——它是不是已有任务的同类?是就只调整权重、不新增。② 看严重性——后果大不大、出现频率高不高?优先收"高风险 + 高频"的。③ 能不能写出稳定的判定标准?写不出清晰判定的,先别收,否则它只会变成噪声。一句话:评测集要长,但要长肌肉,不要长脂肪。

一个真实的生长时间线(示意)

第 0 周:拿全景图扫出 6 个种子任务,跑起来——发现"退款接口超时"那条直接崩,记一笔。第 2 周:内部试用,有人发现 Agent 对"部分退款"(只退一件)处理错了 → 加任务 #7、#8。第 4 周:上线小流量,冒出一个谁也没想到的场景——用户用了优惠券,退款金额该不该含券值?争论半天 → 加任务 #9,并顺手补了 oracle。第 8 周:一次 prompt 优化后,#2(已发货拒退)悄悄退步了,幸好它在回归集里、CI 当场拦住 → 没出事故。第 12 周:评测集 6 → 23 个任务,每一个都来自真实失败或真实争论,全维覆盖、条条命中要害。

你看,它从来不是"一次设计好的",而是一周周"长出来的"。一年后,这套集合会成为新人理解"我们的 Agent 会怎么错"的最佳教材。

第三步:把老用例沉淀成"回归集"

生长不等于喜新厌旧。那些 Agent 已经搞定的老任务,不要扔,要永久留在一个"回归集"里。

回归集的作用,是防止退步。Agent 的改动经常是"按下葫芦浮起瓢"——你修好了 A 场景,却悄悄弄坏了三个月前早就搞定的 B 场景。如果没有回归集,这种隐性退化神不知鬼不觉,直到用户投诉。有了回归集,每次改动都让它跑一遍,退步当场就会被逮住。

这也是为什么评测集最终要接进 CI、当成上线门禁的一部分。这里你先记住:新用例驱动进步,回归集守住底线,两者缺一不可。

把三步连成一个飞轮

这三步不是一次性的,而是一个持续转动的飞轮:真实使用/试用 → 发现失败 → 固化成带判定标准的新 task → 加入评测集 → 修复 Agent / 跑评测 → 通过的老 task 沉淀进回归集守住不退步 → 继续真实使用(飞轮再转)。

飞轮转得越久,你的评测集就越贴合业务、越值钱。它会慢慢变成团队最重要的资产之一——一份精确记录着"我们的 Agent 在真实世界里会怎么错"的活档案。

一个能直接套用的任务模板

为了让你今天就能开工,给一个任务(task)的字段模板:

id:退款-006;描述/输入:用户:"我要退钱"(未提供订单号);初始状态:该用户名下有 2 个订单,其中 1 个可退、1 个不可退;判定标准——结果目标:未在信息不全时擅自退款,最终引导用户确认了具体订单;过程目标:主动向用户追问订单号,而不是瞎猜;参考解(oracle):一条已知正确的处理轨迹(证明此任务可解、也用来校验评分器);难度:中(需澄清 + 多轮);来源:2026-06 线上一次误退款事故;评分器:代码查 outcome(无错误退款)+ LLM 判澄清话术。

几个字段值得强调:"判定标准"拆成结果目标和过程目标;"参考解 / oracle"——给每个任务配一条已知正确的处理方式,既证明任务可解、又能用来验证你的评分器对不对;"来源"记下它从哪个真实失败来的,方便日后回溯。建议再给每个任务打上标签(维度、难度、是否回归集),这样你能随时按维度筛、按难度看分布,也能快速跑某个子集。

多大算够、多久跑一次

多大?没有魔法数字。原则是"能稳定区分好坏版本就够,不够就加"。起步 10–20,随业务长到几十上百很正常。比起总量,更该盯的是覆盖是否全维、每个高风险场景有没有被测到——20 个全维任务,胜过 200 个挤在一个格子里的任务。

多久跑?分两档:一个轻量核心子集(几十个最关键任务)每次改动都跑、接进 CI 当门禁;全量 + 回归集定期跑(比如每天、或每次发版前)。别忘了 Agent 不确定,每个任务还得跑多次取分布——这也是为什么评测集不能膨胀到"跑一轮要半天"。

把这两点合起来,一个好用的组织方式是把评测集分三层:冒烟层(smoke,约 10 个):最核心的主流程,几分钟内跑完,每次改动/提交都跑,第一时间挡住低级错误;核心层(core,几十个):覆盖全景图各维度的关键任务,每次 PR / 改动跑,当上线门禁;全量层(full,全部 + 回归集):每日或每次发版前跑,给你最全面的体检。越往上越快越频繁、越往下越全越慢。

常见的反模式

  1. 只收 happy path。全是"正常退款"这种顺利场景,评测集再大也没用——Agent 真正会栽的是边界、异常、对抗场景。刻意去收那些会让它出丑的用例。
  2. 只留能通过的 case。有人为了让报告好看,悄悄把 Agent 老过不了的难题从评测集里删掉。这是自欺欺人——过不了的题,恰恰是最有价值的题。
  3. 任务带歧义。一个 task 如果判定标准模糊、本身就有多种合理理解,那它的结果会飘忽不定,让你分不清是 Agent 不行还是题目不行。任务要清晰到"重复跑结果稳定"。
  4. 评测集泄漏进了 prompt 或训练数据。如果你把评测任务(尤其是答案)写进了 few-shot 例子、或拿去微调,那分数就虚高——它是"背"出来的,不是"做"出来的。评测集必须和开发/训练数据严格隔离。

小结

这一讲讲了怎么从零建一套专属评测集,核心是一条心法、三步走:心法——别攒大数据集,养一个会长大的小集合,价值在"准"不在"大";第一步,收 10–20 个带判定标准的种子任务,刻意覆盖全景图的多个维度;第二步,把真实使用中的每个失败固化成新任务,让评测集顺着软肋生长;第三步,老用例沉淀进回归集,守住不退步。三步连成一个飞轮。还给了一个能直接套用的任务模板,和几个要避开的反模式。

思考题

  1. 现在就动手:用本讲的模板,为你的 Agent 写下 3 个种子任务,刻意让其中至少 1 个是"会让它出丑"的边界/异常场景。
  2. 回想你的 Agent 最近一次线上失败,把它改写成一个带"结果目标 + 过程目标"的 task。它会落在全景图的哪个格子?
  3. 你团队现在有"回归集"吗?如果没有,过去半年有没有发生过"修好一个、弄坏另一个"的退步?
原文出处:公众号「ArchSynapse AI」· 2026-07-19。本文全文仅用于个人学习交流,版权归原作者及发布方所有;如原作者认为不妥,请联系删除。