第十四章:Agent 评估与 Benchmark¶
14.1 为什么 Agent 评估是独立问题¶
“最终回答看起来正确”,能说明 Agent 完成任务了吗?不能。它可能声称已经退款,实际只提交了申请;也可能退款成功,却重复发送通知或跳过必要审批。
与常见的单轮文本评估相比,Agent 评估要从目标和初始环境出发,检查一整条执行轨迹:调用了哪些 Tool、传了什么参数、读到了什么结果、中途改了几次方向、最后改动了哪些外部状态。这里不是说所有 LLM 评估都只比较文本,而是强调工具执行带来的额外验收对象。
这让单轮文本评估中的一些困难更突出,并增加外部状态与副作用的验收问题。
第一,往往没有唯一正确路径。 同一个任务可以先搜索再读文件,也可以先读文件再搜索,两条路径都对。因此不应只用「轨迹是否匹配参考轨迹」来打分;只有任务明确要求的顺序,例如审批先于付款,才应作为硬约束。
第二,结果不只是文本。 Agent 可能改了数据库、提交了代码、发了邮件。正确性必须在环境状态上验证,而不是在输出文本上验证。
第三,行为不确定。 同一个任务跑两次可能走不同路径、得到不同结果。单次运行可以发现失败,但无法估计同一任务的重复可靠性;重复试验与任务覆盖是两个不同维度。
第四,失败有多种形态。 任务失败、工具调用格式错误、无限循环、超预算、越权操作,这些是不同的失败,不能合并成一个「错误率」。
%%{init: {"flowchart": {"nodeSpacing": 16, "rankSpacing": 16, "padding": 10}}}%%
flowchart LR
LLM["单轮文本评估"] --> L1["输入: Prompt"]
LLM --> L2["输出: 文本"]
LLM --> L3["比较: 与参考答案"]
AG["Agent 评估"] --> A1["输入: 目标 + 环境"]
AG --> A2["输出: 轨迹 + 环境状态变<br/>化"]
AG --> A3["比较: 状态断言 + 多次采<br/>样"]
14.2 评估的四个层次¶
一个完整的 Agent 评估体系应该覆盖四层,从下到上分别是:
flowchart BT
L1[L1 组件层<br/>单个 Tool / Prompt / 检索] --> L2[L2 轨迹层<br/>决策序列是否合理]
L2 --> L3[L3 任务层<br/>端到端是否达成目标]
L3 --> L4[L4 系统层<br/>成本 / 延迟 / 稳定性 / 安全]
| 层次 | 评估对象 | 典型指标 | 何时用 |
|---|---|---|---|
| L1 组件层 | 单个 Tool、单条 Prompt、检索模块 | 参数正确率、召回率、Schema 合规率 | 改动某个组件时的回归 |
| L2 轨迹层 | 决策序列 | 步数、冗余调用比例、路径合理性 | 定位「结果对但过程差」的问题 |
| L3 任务层 | 端到端结果 | 任务成功率、pass@k、pass^k | 版本发布前的主指标 |
| L4 系统层 | 整体运行特性 | Token 成本、P95 延迟、越权率、循环率 | 上线后的持续监控 |
工程里很容易只盯 L3 端到端成功率。这样做的问题是:成功时说不清为什么成功,失败时也难定位卡在哪一步。L1 和 L2 的价值就在于归因,能把一个「任务失败」继续拆到「第 3 步检索没召回」或「第 5 步工具参数填错」。
14.3 主流 Agent Benchmark 全景¶
理解学术基准的价值不在于刷分,而在于它们各自定义了一类能力,可以借鉴其评测设计思路来构造自己的业务评测集。
%%{init: {"flowchart": {"nodeSpacing": 10, "rankSpacing": 16, "padding": 6}}}%%
flowchart LR
B["Agent Benchmark"] --> CODE["代码工程"]
B --> WEB["网页与检索"]
B --> GUI["操作系统与 GUI"]
B --> TOOL["工具与对话"]
B --> GEN["通用助手"]
各类别的示例包括:代码工程的 SWE-bench、SWE-Lancer 与 Terminal-Bench;网页与检索的 WebArena、BrowseComp;操作系统与 GUI 的 OSWorld;工具与对话的 tau-bench、tau2-bench;通用助手的 GAIA、AgentBench。HLE 可以补充知识评测,但不是 Agent 专用基准。
14.3.1 代码工程类¶
SWE-bench 从真实 GitHub 仓库抽取 Issue 与修复,要求在指定基线仓库中提交补丁。评测使用测试补丁和既有测试,检查应从失败转成功的测试(FAIL_TO_PASS)及应保持通过的测试(PASS_TO_PASS),不是只运行 Agent 修改后恰好已有的测试。
它的设计有两个关键点值得借鉴:
- 用可执行测试而非文本相似度做判定,减少主观评分,但测试仍可能遗漏需求、脆弱或被投机满足;
- 提供完整仓库而非孤立文件,迫使 Agent 具备检索与导航能力。
由于原始数据集中存在部分描述不充分或测试不可靠的样例,后续出现了人工筛选过的 SWE-bench Verified 子集(500 题)。OpenAI 指出该基准存在测试设计缺陷和训练数据污染问题,已停止报告其分数,并建议改报 SWE-bench Pro,见 Why SWE-bench Verified no longer measures frontier coding capabilities【155】。引用分数时必须说明是哪个子集,Full、Lite、Verified 的分数不可直接比较;引用 Verified 成绩时应注意这些局限。
SWE-Lancer 使用真实自由职业市场的软件任务,包含独立贡献者任务与管理者选择方案任务。按任务历史报酬聚合的金额是该基准下的价值代理,不是 Agent 实际收入,也不能直接推算生产 ROI。
Terminal-Bench 关注纯终端环境中的任务完成能力,覆盖编译、调试、系统配置等场景。
14.3.2 网页与检索类¶
WebArena 构建了可复现的自托管网站环境(电商、论坛、代码托管等)。官方评估器【529】 按任务检查答案、URL 或页面内容;信息查询任务可以采用答案精确匹配、必要词句检查或模型裁判的模糊匹配。最终答案本身可以是需要评分的任务产物,但 Agent 自称“操作完成”不能证明网站状态确实发生了所要求的变化。
BrowseComp 走向另一个方向:题目答案简短且易于验证,但需要在网络上进行深度、多跳的检索才能找到,专门用来测量「持续搜索并交叉验证」的能力。
14.3.3 操作系统与 GUI 类¶
OSWorld 在真实操作系统中评测多模态 Agent,任务涉及跨应用操作,判定基于最终文件与系统状态。它增加了视觉定位、动作执行和异步界面的困难,但不能跨不同模型与任务集断言一定比所有纯文本基准难。
14.3.4 工具与对话类¶
tau-bench 让 Agent 与用户模拟器、业务 API 交互,并要求遵守领域政策。政策是任务约束,不是第三个对话参与者。任务要求覆盖工具调用、信息澄清和拒绝不合规请求;原版主要通过最终数据库状态与目标状态比较来计分,这不能穷尽检查整个对话中的政策遵守情况。
tau²-bench 是其后继,引入「双向控制」:用户侧也能执行动作,Agent 需要指导用户完成操作,更贴近真实的技术支持场景。
14.3.5 通用助手类¶
GAIA 的设计理念是「对人类简单、对 AI 困难」。题目需要组合网页浏览、多模态理解、文件处理与推理,采用有明确参考答案的简短回答,便于按规定的标准化规则自动判定。
AgentBench 覆盖操作系统、数据库、知识图谱、游戏等八类环境,用于横向比较不同模型的 Agent 能力。
Humanity's Last Exam (HLE) 不是 Agent 基准,而是极高难度的学科知识基准,常被用来配合工具使用能力做联合评测。
14.3.6 基准对比表¶
| 基准 | 领域 | 判定方式 | 主要考察 |
|---|---|---|---|
| SWE-bench | 代码修复 | 单元测试 | 仓库导航 + 代码修改 |
| SWE-Lancer | 软件任务 | 实现任务用测试、管理任务检查方案选择;报酬用于价值加权 | 软件交付与方案判断 |
| Terminal-Bench | 终端操作 | 状态断言 | 命令行与系统能力 |
| WebArena | 网页操作 | 按任务检查答案、URL 或页面内容 | 多步网页交互 |
| BrowseComp | 深度检索 | 依据参考短答案判分,官方实现使用模型裁判 | 难检索信息定位与证据核实 |
| OSWorld | 桌面 GUI | 文件/系统状态 | 跨应用长程操作 |
| tau-bench | 客服对话 | 主要比较最终数据库状态 | 工具 + 澄清 + 政策约束下的处理 |
| tau²-bench | 双向对话 | 状态断言 | 指导用户执行动作 |
| GAIA | 通用助手 | 精确答案匹配 | 多模态 + 多工具组合 |
| AgentDojo | 安全 | 任务成功 + 攻击成功 | 抗 Prompt Injection |
14.3.7 学术基准的局限¶
必须清楚学术基准不能替代业务评测集,原因有四个:
- 数据污染:公开基准的题目和答案可能已进入模型训练语料,分数被高估;
- 分布不匹配:你的业务任务分布与基准分布几乎必然不同;
- 过拟合风险:针对某个基准做的 Scaffold 优化不一定能迁移;
- 口径混乱:不同报告使用不同子集、不同尝试次数、不同工具集,分数不可比。
正确的用法是:用学术基准的评测设计思路,构造自己的业务评测集。 具体借鉴点包括「用可执行断言代替主观打分」「在真实环境状态上验证」「把安全违规单独计分」。
14.4 核心指标定义¶
14.4.1 任务成功率¶
最基础的指标。设评测集有 \(N\) 个任务,第 \(i\) 个任务的判定函数为 \(s_i \in \lbrace 0, 1 \rbrace\),则:
关键是预先定义可复现的判分标准。数据库状态和代码任务优先用可执行断言;报告质量等开放任务可用经校准的模型或人工 Rubric。程序断言覆盖不全时,也不能把“测试通过”直接等同于用户目标完成。
14.4.2 pass@k:至少一次做对的机会¶
固定模型、Agent 配置与单次运行预算,对每个任务各做 \(n\) 次独立同分布运行。若任务 \(i\) 有 \(c_i\) 次成功,则从其中无放回选取 \(k\) 次时,“至少一次成功”的无偏估计为:
它估计的是允许多次尝试并任选一个成功结果时的成功概率,衡量能力上界。适用于有人工审核或可安全挑选候选的场景,例如工程师从多个补丁中选择一个。
14.4.3 pass^k:连续运行的一致性¶
令 \(p_i\) 为任务 \(i\) 的单次成功概率, \(\mathrm{pass}^{k}\) 的定义是同一任务独立运行 \(k\) 次都成功的平均概率:
用同一任务的 \(n\) 次观测估计时, \(c_i\) 次成功给出的无偏有限样本估计为:
这不是 \(\mathrm{pass@}k\)。tau-bench 原论文称它为 “pass hat k”。引用 pass^k 时应说明“k 次都成功”的定义,不要只靠口头简称与 pass@k 区分。对于无人值守生产 Agent, \(\mathrm{pass}^{k}\) 补充衡量重复执行的可靠性。tau-bench 的实验揭示: \(\mathrm{pass@}1\) 看起来不错时, \(k\) 增大, \(\mathrm{pass}^{k}\) 仍可能急剧下降,不能把单次平均成绩当成连续运行承诺。
两个估计式都约定:组合数中可选元素少于 k 时,分子取零。若跨次共享反思记忆、改变策略或不重置环境,就不再满足上述独立同分布假设;应另行评估这种有状态运行方式,不能直接套用该估计。
%%{init: {"flowchart": {"nodeSpacing": 16, "rankSpacing": 16, "padding": 10}}}%%
flowchart TB
P1["pass@k<br/>k 次中至少一次成功"] --> U1["衡量能力上界"]
U1 --> S1["适用: 有人工审核的<br/>场景"]
P2["pass^k<br/>k 次全部成功"] --> U2["衡量行为一致性"]
U2 --> S2["适用: 无人值守自动<br/>化"]
长链路为何脆弱?在“每步独立、正确率相同、任一步失败都不可恢复”的教学假设下, \(m\) 步成功率为 \(p^m\); \(p = 0.95\)、 \(m = 20\) 时约为 \(0.36\)。真实 Agent 存在相关错误、重试和验证,不能直接套用此式,更不能由它推出“降低方差一定比提高能力重要”。此外,即便只有单步任务, \(p_i^k\) 也会随重复次数衰减。
报告 pass@k 时还要说明怎样从候选中选出成功结果;若生产没有可靠验收器,离线“至少有一个成功”不代表实际能交付它。比较 pass^k 时应重置环境、固定预算,并区分重复同一任务与连续执行不同任务的可靠性。
14.4.4 轨迹层指标¶
| 指标 | 定义 | 诊断什么 |
|---|---|---|
| 平均步数 | 完成任务的平均循环轮次 | 是否绕路 |
| 冗余调用率 | 重复或无效的 Tool 调用占比 | 是否在原地打转 |
| 工具选择准确率 | 选对工具的步数占比 | Tool 描述是否清晰 |
| 参数合规率 | 参数通过 Schema 校验的比例 | Schema 设计与模型能力 |
| 循环终止率 | 因触达最大轮次而终止的比例 | 停止条件是否失效 |
| 恢复率 | 出错后成功自我纠正的比例 | 错误处理是否有效 |
14.4.5 Agentic trajectory:正确、合规且可恢复¶
最终状态通过不代表轨迹一定可接受。对有副作用的 Agent,评估用例还应断言:
| 维度 | 例子 |
|---|---|
| 证据与授权链 | 每次高风险调用能关联用户目标、允许来源和审批记录 |
| 策略合规 | 未越权、未调用禁用工具,审批发生在执行前 |
| 状态转移正确性 | 中间写入满足不变量;失败后没有留下半完成或重复副作用 |
| 恢复与幂等 | 超时/重试后能恢复,重复执行不重复扣款、发信或删除 |
| 最小充分性 | 在完成任务前提下避免冗余调用、无关数据读取和多余权限 |
轨迹不应与单一“黄金步骤序列”逐字比对;应通过这些可执行约束判断不同合法路径。含检索与引用的 Agent 还应复用 RAG 评估 的 Citation、时效和鲁棒性用例。
14.4.6 成本与延迟¶
这里假设所有调用采用同一模型和计费档位; \(c_{\mathrm{in}}\)、 \(c_{\mathrm{out}}\) 是每 Token 的输入输出单价, \(T^{(i)}\) 是任务 \(i\) 所有调用累计的 Token 消耗。若报价以百万 Token 为单位,先换算单价;多模型、缓存及其他计费项目应按实际用量分项汇总。
成本必须和成功率一起报告。 只报成功率会鼓励无限增加反思轮次和搜索宽度。实践中常用的联合指标是「单位成功任务的成本」:
即把总成本摊到成功任务上,成功率为零时该比值没有有限定义。教学示例中,90%/0.5 美元方案约为每成功任务 0.56 美元,95%/2 美元方案约为 2.11 美元;前者只在此成本口径上更低,若失败损失或 SLA 不同,不能直接宣布更优。完整成本还要计入失败尝试、工具、计算与人工处理。延迟至少同时报告 P50、P95 和超时率。
14.5 判定方式:如何决定一次运行算不算成功¶
这是构建评测集时最关键的设计决策。
%%{init: {"flowchart": {"nodeSpacing": 10, "rankSpacing": 16, "padding": 6}}}%%
flowchart LR
J["判定方式"] --> E["程序化断言"]
J --> L["LLM-as-Judge"]
J --> H["人工评估"]
E --> E1["可重复 依赖断言<br/>覆盖"]
L --> L1["覆盖主观任务 需<br/>校准"]
H --> H1["领域判断 需一致<br/>性校准"]
14.5.1 程序化断言(首选)¶
用代码检查最终状态是否满足条件:
- 单元测试是否通过;
- 数据库中是否存在预期记录;
- 生成的文件是否包含指定字段;
- 是否没有调用禁止的工具。
对能形式化的要求,优先用程序化断言,而不是让模型猜测是否满足。它通常更可重复,也不直接依赖 Judge 的模型版本;但断言可能写错、覆盖不足,测试环境和依赖变化也可能让结果漂移。报告质量等难以形式化的维度仍可补充人工或模型评价。
一个实用技巧是同时写正向断言和负向断言:正向检查「做到了什么」,负向检查「没有做不该做的事」(如没有删除其他数据、没有越权调用)。
14.5.2 LLM-as-Judge(次选)¶
对于报告质量、回答有用性等任务,可以结合人工与模型评分。模型裁判需处理以下偏差,换成另一家模型也不保证偏差消失:
| 偏差 | 表现 | 缓解手段 |
|---|---|---|
| 位置偏差 | 偏好排在前面的候选 | 交换顺序各评一次取平均 |
| 长度偏差 | 偏好更长的回答 | 在 Rubric 中显式声明长度不加分 |
| 自我偏好 | 偏好同族模型的输出 | 用与被测模型不同的裁判模型 |
| 尺度漂移 | 不同批次分数不可比 | 用固定锚点样例校准 |
先在覆盖主要类别与边界的样本上校准,样本量由误差容忍度、类别稀疏程度和标注预算决定,没有通用的“100 条足够”。除总体一致率与适用时的 Cohen's Kappa,还要检查各类误判、裁判间分歧和标签基率。固定 Rubric、模型版本与锚点样例,防止优化成讨好裁判。
对于可拆成明确标准的任务,优先试用逐项二元判定或少档位判定,比没有刻度解释的 1–10 分更容易校准。如果确实需要细粒度评分,先定义各档含义,再用人工标注检验一致性,不能仅凭评分形式断言更可靠。
14.5.3 人工评估¶
领域专家可以建立参考标签、校准 Judge、抽查线上样本,并处理争议样例,但也需要统一标注规则和分歧裁决。可自动验收的任务不宜每次全量人工回归;尚无可靠自动评分、又必须做细致领域判断的任务,则可能仍需人工承担主要验收。
14.6 评测集的构建¶
14.6.1 分层设计¶
评测集可以分层。下面数量与频率是教学示例,不是行业标准;实际按风险覆盖、统计精度与运行成本调整:
%%{init: {"flowchart": {"nodeSpacing": 16, "rankSpacing": 16, "padding": 10}}}%%
flowchart TB
S["Smoke 10-20 条"] --> R["Regression 100-300 条"]
R --> F["Full 1000+ 条"]
S --> S1["每次提交"]
R --> R1["每次发布"]
F --> F1["每周 / 重大变更"]
| 层次 | 规模 | 频率 | 用途 |
|---|---|---|---|
| Smoke | 10–20 | 每次代码提交 | 快速发现明显崩溃 |
| Regression | 100–300 | 每次发布 | 防止已修复问题回归 |
| Full | 1000+ | 每周或重大变更 | 全面评估与横向对比 |
14.6.2 样例来源¶
优先级从高到低:
- 线上真实失败样例(优先补齐已暴露的薄弱环节);
- 线上真实成功样例(用于防回归);
- 领域专家构造的边界样例;
- 模型合成的样例(用于扩充覆盖,需人工抽检)。
每修复一个线上 Bug,就把对应场景固化成一条回归用例。 这是评测集最健康的增长方式。
失败回归集会刻意富集难题,不等于完整的生产分布。估计线上成功率时,还需按业务分布抽样或明确分层权重;安全边界样例可以单独计分,避免被常见简单任务稀释。
如果完整任务太长,可以另存第一次错误之前的上下文和环境状态,检查下一步允许做什么、不能做什么。这种“轨迹前缀回归”与端到端回归互补,构造方法见第二十五章:从失败轨迹到可靠策略;前缀判断正确仍不代表后续任务一定完成。
14.6.3 每条用例应包含什么¶
{
"id": "refund-001",
"goal": "为订单 A123 办理退款并通知用户",
"initial_state": {
"orders": [ { "id": "A123", "status": "shipped", "return_confirmed": true } ]
},
"assertions": [
{ "type": "db", "check": "orders.A123.status == 'refunded'" },
{ "type": "event_count", "event": "refund_committed", "order_id": "A123", "equals": 1 },
{ "type": "event_order", "before": "return_confirmed", "after": "refund_committed" },
{ "type": "event_order", "before": "refund_committed", "after": "email_sent" },
{ "type": "email", "order_id": "A123", "recipient": "order_owner", "delivered": true },
{ "type": "tool_not_called", "name": "delete_order" }
],
"policy": ["已发货订单退款需先确认用户已退货"],
"budget": { "max_steps": 15, "max_tokens": 60000 },
"tags": ["refund", "policy-check"]
}
这是示意用例格式,断言需由评测器实现。关键字段是初始状态、正负向断言及预算;return_confirmed 事件须由环境夹具提供,而不能凭 Agent 声明。若未确认退货,应另设“先澄清、不得退款”的用例,不能同时要求无条件退款成功。
14.6.4 环境隔离与可复现¶
涉及写入的评测环境必须与生产隔离,每次试验前恢复约定的初始状态。容器快照可以恢复受控文件系统,数据库事务回滚可以撤销该事务内的写入,但都不会自动撤销已发送邮件或外部付款;这类工具应接入隔离环境或受控替身。
如果要测试不同初始状态或随机故障,应预先定义采样分布并记录配置,而不是让上一次运行的残留影响下一次。版本比较尽量使用配对任务与相同环境条件,同时记录外部数据、工具和依赖版本。
14.7 在线评估与可观测性¶
离线评测集覆盖不了所有真实情况,必须配合线上监控。
14.7.1 必须落库的字段¶
每次 Agent 运行应记录足以还原控制流的轨迹;这不等于原样保存所有敏感内容:
| 字段 | 用途 |
|---|---|
| trace_id / span_id | 关联完整调用链 |
| 每步的 Action、Observation、结构化决策理由/状态摘要 | 复盘可审计决策过程;理由必须是显式生成且允许记录的摘要 |
| Tool 名称、参数、返回、耗时、是否报错 | 定位组件级问题;按敏感级别脱敏与访问控制 |
| 输入输出 Token 数与模型版本 | 成本归因与版本对比 |
| 终止原因 | 区分正常完成 / 超轮次 / 超时 / 报错 |
| 用户反馈信号 | 隐式(是否重问、是否采纳)与显式(点赞点踩) |
不得保存或要求模型暴露隐藏 Thought / 私有 CoT。 它既不是可靠解释,也可能包含敏感上下文;用工具调用、可见观察、状态变化和专门生成的简短理由摘要完成审计。终止原因同样不能遗漏,否则「失败率 8%」无法进一步拆解。
14.7.2 线上核心监控指标¶
- 任务完成率与用户重问率;
- P50 / P95 延迟;
- 单任务成本;
- 循环终止率(触达最大轮次的比例);
- 工具错误率(按工具分组);
- 安全拦截率与越权尝试次数。
14.7.3 灰度与 A/B¶
Agent 的改动(换模型、改 Prompt、加工具)应通过灰度发布验证。样本量取决于基线成功率、希望检出的差异、方差和统计功效,不能笼统断言比传统功能一定更大。按用户或任务分组随机化,避免同一用户的多轮交互跨实验组;分析时也不能把相关的步骤当成独立样本。改动前先估算所需样本量,否则容易被噪声误导。
14.7.4 追踪标准¶
OpenTelemetry 的 GenAI 语义约定覆盖模型与 Agent 的 Span 等信息,并与工具调用相关约定配合使用;截至 2026-09-15,GenAI 约定仍标记 Development。采用时固定约定与 SDK 版本,验证后端字段映射,并对内容脱敏;不能假定所有平台无需适配即可完整消费。
14.8 评估驱动开发¶
把评估放在开发流程的前面,而不是后面。
%%{init: {"flowchart": {"nodeSpacing": 16, "rankSpacing": 16, "padding": 10}}}%%
flowchart TB
A["发现问题场景"] --> B["写成评测用例"]
B --> C["确认当前失败"]
C --> D["修改 Prompt/Tool/流程"]
D --> E["跑评测集"]
E --> F["通过且无回归?"]
F -->|否| D
F -->|是| G["灰度发布"]
G --> H["线上监控"]
H --> A
对于修复用例,先确认它能复现目标失败,再比较修复前后;随机失败可能需要多次试验。已经通过的用例仍可保护现有能力和安全不变量,不能因为“初始通过”就拒绝加入回归集。
14.9 常见错误¶
14.9.1 只报单次运行结果¶
单次运行能发现具体失败,但不足以估计重复可靠性。运行次数应由目标误差和成本决定;3–5 次可作初筛,不能当作统计充分的固定门槛。版本比较尽量对同一批任务做配对分析,报告任务数、每题尝试数、置信区间及失败分布;重复同一题不能替代新增业务覆盖。
14.9.2 只看端到端成功率¶
无法归因。需要同时看轨迹层指标才能知道问题出在哪一步。
14.9.3 只报成功率不报成本¶
会导致不断增加反思轮次和搜索宽度来刷分,上线后成本失控。
14.9.4 用 LLM-as-Judge 但不做校准¶
未经校准的 Judge 分数可能与人工判断严重不一致,此时优化的是「讨好裁判」而非真实质量。
14.9.5 评测集被污染¶
用同一批数据既做 Prompt 调优又做最终评估,等于用训练集测分数。必须保留一个从不用于调优的 Holdout 集。
14.9.6 直接引用学术基准分数作为业务能力承诺¶
基准分数与业务表现之间没有可靠的映射关系。
14.9.7 忽略安全指标¶
即使成功率达到 95%,一次越权删除也不能用其他成功任务抵消。应预先定义越权、泄露等硬性发布门槛,独立统计违规种类与影响;一次确认的违规可能直接阻止发布。测试中“未观察到越权”也不等于证明永不越权,仍需说明样本量、覆盖范围和威胁模型。
14.10 本章总结¶
Agent 评估不能停留在最终文本,还要检查整条轨迹和环境状态,确认目标完成且过程没有违反约束。
工程上更实用的做法,是把评估拆成四层:组件层负责归因,轨迹层看过程质量,任务层给端到端结论,系统层持续盯成本、延迟和安全。判定顺序也尽量固定:能用程序化断言就别交给模型打分,必须用 LLM-as-Judge 时先做校准;人工评估更适合做抽查和校准基线。
无人值守场景别只看 \(\mathrm{pass@}k\),还要看 \(\mathrm{pass}^{k}\)、单位成功成本、P95 延迟,以及轨迹里的授权、状态转移和恢复是否站得住。评测集也要分层运行:Smoke、Regression、Full 各跑各的频率,线上失败样例持续回流。上线后还要保存经过脱敏、可审计的轨迹和终止原因,并把越权、违规这类安全问题单独计分,不和成功率平均。
学术基准更适合借鉴评测设计,真正做版本决策还得靠自己的业务评测集。
参考资料¶
本章的参考资料、阅读建议与来源说明见集中参考资料章节。