
本篇是系列第 2 篇。上一篇确定了评 Agent 要评轨迹和端到端,本篇解决「拿什么评」,也就是任务集从哪来。
第一版 Agent 评测集,大多数团队的做法是下载一个公开基准,跑一遍,截图发群。这步很省事,也很容易给出错误的安全感。
三个问题:
所以任务集得自己建。这篇讲怎么建,5 类来源怎么挑,以及每条任务必须写清的三件事。
任务从哪来,决定了集子能覆盖什么、漏掉什么。5 类来源对比:
表里一条主线索:真实性越高的来源越依赖你自己的业务数据,覆盖长尾越高的来源越依赖人为定向。没有一行能同时满足这两条,所以真实做法是组合,不是单选。
任务集的核心不在条数,在每条任务是否可复现、可判定。 一条任务如果每次跑的初始状态不同、或者验收标准要人来判断,它产生的分数就没有可比性。
这是本篇最该记住的部分。一条 Agent 任务不是一句"帮我退款",它由三块组成:
1. 初始状态:环境长什么样。用户是谁、订单什么状态、知识库哪篇文章、可用工具清单。没有初始状态,两次运行根本不可比。
2. 目标:用户要什么。要具体到可判定,比如"把这笔 89 元的订单按原支付方式退款并告知到账时间",而不是"处理这个退款问题"。
3. 验收标准(success criteria):怎么算成。最可靠的是可程序化判定的断言,比如数据库里订单状态变成已退款、最终消息包含退款金额与到账时间、工具调用序列包含退款接口。
一条任务的验收标准如果是"回答让人满意",那它就是人工评测任务,不能进自动集。
一个踩过的坑:我们第一版有 30 条任务,验收标准全写自然语言描述,跑出来 82% 通过率。后来把标准改成可判定的断言,同一批任务只剩 61%。多出来的 21 个点全是"看着像做成了",实际状态没改。验收标准松,分数会虚高,而且松在哪你不知道。
Agent 会调外部工具,工具会返回真实数据,真实数据会变。这是评测不稳定的头号来源。
三条对策:
业界基准也在做同样的事。比如 GAIA 提供 466 条真实任务并按难度分层,SWE-bench Verified 请 93 名工程师对抽样出的 1699 条逐条复核,剔掉了 68.3%(说明含糊、测试不公平、harness 有问题),只留 500 条人工校验过的。连公开基准都要靠"剔除坏任务"来保证可信度,自建集子更没有理由跳过这一步。
把不同难度的任务混在一起算平均分,会同时掩盖两类问题:简单任务的高分掩盖困难任务的崩塌,困难任务的低分掩盖简单任务的退化。
建议按三层分(可沿用公开基准的思路,比如按工具步数分):
报告必须分三层给分,不要只报总平均。一个版本 L1 从 95% 掉到 80%,是发布事故;L3 从 40% 掉到 35%,可能是噪声。混在一起你只看到"平均分掉了 5 个点",两边都判断不了。
不建议只用一类。按阶段配:
两个必须守的规则:
配比之外还有两条决定集子寿命的规则。
第一条,比例由风险决定,不按频率决定。高频主链路保证日常水位,但高风险样本一旦出问题,代价远大于一百条常规问题,所以边界样本和安全样本在回归集里的权重必须高于它们在真实流量里的占比,不能靠线上捕获了多少来决定建多少。
第二条,集子要持续保鲜。prompt 迭代、工具返回结构变化、业务目标调整,都会让旧样本失效:输入不再真实,结论自然不再可信。所以要按版本管理集子,定期剔除失效样本并重跑基线。07 篇讲的基准腐化,根子就在这里。
坑一,验收标准写太松。 现象是分数虚高,上线就露馅。对抗:每条任务的验收标准必须含至少一条可程序化判定的断言;纯语义判断的任务单独标出来,走人工或裁判,不计入自动集。
坑二,环境不稳定导致 flaky。 现象是同一版本两次跑分差 10 个点以上。对抗:先跑一遍环境自测,同一版本连跑 3 次,分差超过阈值就判定为环境不稳定,先修环境再谈评测(后续讲如何用方差识别)。
坑三,任务泄漏进 prompt。 现象是分数很好但一换说法就崩。对抗:每条任务准备 2 到 3 种等价表述(术语不同、顺序不同、加礼貌语),跑分时全部覆盖,取最低分而不是平均分。
Agent评测集的保质期取决于它离真实有多近,以及它有多可复现。你现在那批任务,每条都能说清"初始状态是什么、怎么算做成了"吗?