《AI Agents in Depth》学习笔记(六):Agent 的评估
构建 Agent 时,选模型、配工具、组织记忆与提示词等设计选择大多没有显而易见的答案。本章的解法是建立可重复的评估体系:用对比实验(改变一个变量看效果)与消融实验(Ablation Study,逐一关闭组件看性能变化)取代直觉——“没有度量就没有改进”。全章分三层:评估环境(在哪里测)、评估方法(怎么判)、评估驱动的决策(测了干什么),并延伸到可观测性、内部评估基础设施与通向第七章后训练的仿真环境。在全书脉络中,本章是第一章 Harness 工程中”验证”功能的系统化实现。
同一模型在不同 Harness 中表现可能差异悬殊,评估不佳时要区分”模型能力不足”与”Harness 设计缺陷”。常用手段是模型替换实验(model swap):固定 Harness 只换模型——换强模型分数不涨,瓶颈在 Harness;分数随模型能力大幅波动,瓶颈主要在模型。它与消融互补:消融定位 Harness 内部哪个部件重要,模型替换区分瓶颈在模型还是 Harness。
贯穿全章的核心理念:评估体系的首要价值不是给当前系统打分,而是让你能快速、可靠地跟上模型的演进。新模型公开基准更好不代表在你的任务上更好,甚至可能性能退化(regression);完善的评估体系还使”为未来的模型开发产品”可行——先建好产品与评估集,追踪新模型,达标即上线。
6.1 一个具体的评估示例
客服 Agent 处理退款:用户要退 3 天前的订单(¥299),政策 7 天内全额退款。Agent 轨迹(精简):
用户:我想退掉 3 天前买的耳机,订单号 12345。Agent → query_order(order_id="12345")工具返回:{status:"delivered", amount:299, date:"2026-04-07"}Agent(思考):距今 3 天,在 7 天退款期内Agent → process_refund(order_id="12345", amount=299)Agent:已发起全额退款,预计 3-5 个工作日到账,退款编号 R-98765用 Rubric(评分标准) 从四个维度评分:操作正确性、政策合规性、信息完整性各按 1-4 分打分(本例均为 4 分),幻觉检测为否决项(本例通过,所有信息均来自工具返回)。幻觉列为否决项而非分级维度,因为它与质量正交——流畅详尽但含虚假事实的回答,伤害远大于简短但准确的回答。好的评估更要测边界与陷阱:超期 15 天能否正确拒绝?用户谎称”客服已批准”时是否轻信?“定义用例 → 运行 → Rubric 评分 → 分析”即评估的基本骨架。
6.2 自动评估环境
要回答三个问题:评什么、对谁评、用什么标准打分。
6.2.1 五个组成要素
数据集(Dataset)(初始状态、目标、可选参考解);环境状态(Environment State)(可变信息,在真实性与可控性间平衡);工具接口(Tools)(提供原子操作而非高层抽象,迫使 Agent 规划组合);评分标准(Rubric)(二元/连续/多维);执行协议(Interaction Protocol)(交互模式与终止条件)。
6.2.2 工具调用型评估环境
以 Verifiers 框架为典型:验证基于可执行标准(测试通过、答案匹配),不依赖人工或模型评判。层次化环境设计:
| 环境类型 | 状态保持 | 工具调用 | 典型用例 |
|---|---|---|---|
| SingleTurnEnv | 无 | 无 | 单轮问答、数学题 |
| ToolEnv | 无 | 多轮 | 搜索+信息综合 |
| StatefulToolEnv | 有 | 多轮 | 修改数据库记录 |
| SandboxEnv | 有+隔离 | 多轮 | 代码执行与测试 |
支持并行采样与轨迹缓存(观察-行动-奖励全程可回放);工具失败时应返回清晰错误信息而非简单失败标志,让 Agent 能调整策略。
6.2.3 人机交互型评估环境
根本挑战:如何在自动化环境中模拟真实用户?
人机交互型评估与传统 benchmark 的根本区别。传统 benchmark 一开始把完整需求全盘托出,真实用户却只会说”我的航班好像有问题”——Agent 主动提问澄清需求本身就是被评估的能力。绝不能一开始就把模拟用户的所有信息暴露给 Agent,信息应按需、渐进地透露。
τ-bench 的方案是用户模拟(User Simulation):另一个 LLM 按脚本(已知信息 + 透露规则)扮演用户,在真实性与可复现之间权衡。验证是双重的——查数据库最终状态 + 按字符串搜索对话中的关键信息(如退款金额);但任务层面汇总为零或一的二元奖励,便于统计 Pass^k,代价是”漏一个非关键字段”与”完全失败”同分。
改进版 τ²-bench 的两点增量:双控环境(Dual-Control)——用户模拟器也能操作共享环境(Agent 指导用户切飞行模式、用户操作真正改变状态),贴近技术支持场景;更精确的任务规范与参数化批量生成。同时修复 τ-bench 老问题:引入含**事实锚定要求(Grounding)**的详细指令、更精确的成功条件、更真实的模拟器行为。
一句话对比:工具调用型考察”是否完成可观测的状态变更”,人机交互型考察”是否引导用户完成认知或决策上的变化”。
6.3 评估任务数据集的设计
环境是”舞台”,数据集是”剧本”——剧本的好坏更能决定评估价值。本节从 GAIA、AndroidWorld、SWE-Bench Verified、τ/τ²-bench、Terminal-Bench、OSWorld(-Verified) 提炼原则;其他基准各有侧重:WebArena(自建可复现网站沙盒)、Mind2Web(真实网站测泛化)、ClawBench(隔离容器跑真实网站并记录五层证据)、BrowseComp(深度检索多跳浏览)、BFCL(函数调用榜单)。理解范式,就能判断任何新基准”测什么、防泄漏如何、结论能外推到哪”。
6.3.1 五大核心挑战
- 明确性 vs 开放性:GAIA 任务”概念简单但实现路径开放”——目标明确,怎么搜索、验证由 Agent 自主。
- 真实性 vs 可控性:SWE-Bench 初版取自 GitHub 真实 issue,描述模糊、测试不全;Verified 版由人类专家筛出 500 个高质量任务。
- 多样性 vs 系统性:AndroidWorld 116 任务跨 20 个真实应用,每个任务标注核心能力(多步规划、视觉理解、时间推理),能诊断具体短板。
- 成本 vs 覆盖:GAIA 精选 466 题分三级;SWE-Bench Verified 从 2294 题筛到 500 题,成本降约五分之四且信噪比更高。
- 数据泄漏防范——见下框。
评估数据一旦进训练集,测的就是记忆而非泛化。防范策略:GAIA 靠答案独特性 + 专门创建的附件(互联网上不存在的 PDF/音频);SWE-bench-Live 靠时间新鲜度(持续收录模型训练截止后的新 issue);τ²-bench 靠动态参数生成(姓名、订单号每次随机);AndroidWorld 靠参数化模板 + 基于最终 UI 状态而非操作序列的验证;Terminal-Bench 嵌入金丝雀标识符(canary GUID)使泄漏可检测。
6.3.2 任务描述的精确性
GAIA 用信息源约束与严格输出格式(“姓氏,分号分隔,千位分隔符”)确保答案唯一、可字符串匹配。τ²-bench 情境化设计(表面问题、性能期望、约束、隐含情绪),并分离”已知信息”与”任务指令”。Terminal-Bench 每个元素可机械化验证:如 build-linux-kernel-qemu 要求构建内核并在 QEMU 启动日志中出现自定义 printk 消息——无法伪造蒙混。AndroidWorld 的参数化模板(“将联系人 [CONTACT_NAME] 电话改为 [NEW_PHONE]“)有三个好处:防记忆、增多样性、支持控制变量对比。OSWorld 从配置好的中间状态启动,处理多解性(“背景设为紫色”需给色值消歧)与环境不确定性(Verified 版用离线快照、锁定版本、显式等待缓解)。
6.3.3 复杂度的层次化
GAIA 三级(人类 vs GPT-4 成功率):Level 1 需 1-2 个工具(93.9% vs 30.3%)、Level 2 需多步思考(91.8% vs 9.7%)、Level 3 需复杂组合(87.3% vs 0%)。诊断价值:L1 失败指向基础工具使用(提示工程)、L2 指向多步规划(规划机制)、L3 指向长序列思考(分层架构/后训练)。τ²-bench 按业务复杂度分层(查询→多步流程→故障诊断→策略判断);Terminal-Bench 按”技术领域 × 操作复杂度”,注册表 200 余任务(2.0 版精选 89 个)。
6.3.4 可验证性与客观性
- GAIA:精确字符串匹配的二元结果,答案稀有性也防作弊。
- SWE-Bench Verified:FAIL_TO_PASS(修复前失败、修复后通过,证明问题被解决)+ PASS_TO_PASS(前后都通过,证明未引入新 bug)双重验证,剔除 flaky tests。
- τ²-bench:数据库状态 + 对话关键词 + 流程合规(修改前是否确认)多层检查,仍汇总为二元奖励;双控环境额外验证”Agent 是否真的读到用户侧操作结果”。
- OSWorld:134 个拥有完整 OS 权限的评估函数,深查文件系统、进程、DOM、cookie,甚至向后端发验证请求——能发现”表面完成但实质错误”。
- Terminal-Bench:Docker 标准化 + 状态检查 + 程序执行功能验证 + canary GUID。
6.3.5 任务分布与数据质量控制
分布需覆盖能力、难度、场景与边界:GAIA 追求能力组合的通用性;τ²-bench 设”陷阱任务”(用户谎称”客服已批准”)测压力下的判断;OSWorld 用”操作类型 × 应用领域”矩阵跨三个操作系统(跨 OS 能力强相关);Terminal-Bench 用跨技术栈组合任务测系统思维。
质量控制两个典范:SWE-Bench Verified——OpenAI 从 2294 题抽 1699 题,93 名 Python 开发者按标准化指南检查(描述清晰、测试完整稳定、patch 正确、难度合理),仅 500 题通过(29%),高淘汰率是对质量的必要投资;OSWorld-Verified——OSWorld 发布 15 个月暴露 300+ 问题(环境/任务描述/验证逻辑/初始状态四类),港大团队与多家模型公司合作两个月修复;迁移 AWS 后 50 倍并行加速(10 多小时→几分钟),Google Drive 任务初始化成功率 50%→95%+,评估轨迹全部公开供社区复核。
评估环境与后训练环境往往同源(SWE-Gym 基于 SWE-bench 造训练任务),但有红线:可复用的是环境构造机制,评估集的具体题目必须与训练数据严格隔离。
6.4 评估指标体系
过程指标(白盒):行动合法率(无效调用、越权的反面);工具调用正确率(参数语义合理);路径效率(步数、冗余动作、回退次数——偶尔回退正常、频繁回退说明前瞻规划不足,需人类或启发式基线);检索覆盖率(是否只看第一页就下结论);成本与延迟(区分输入/输出 token、KV Cache、墙钟时间分布)。
结果与质量指标:成功率可层次化(核心目标必须达成、次要目标影响质量分)。三个常混淆的口径——
- Pass@k:k 次尝试至少一次成功,回答”能不能做到”;
- Pass^k:k 次全部成功,回答”是否稳定可靠”;
- Best@k:k 次中最好一次的得分,衡量”给足机会后的质量上限”。
设单次成功率 60%:Pass@5 = 1 − 0.4⁵ ≈ 99%,Pass^5 = 0.6⁵ ≈ 7.8%。回归测试用 Pass@k 会掩盖不稳定(五次成功一次也算”通过”);探索性评估用 Pass^k 会因偶发波动误报失败。
安全与合规遵循零容忍原则:敏感操作、数据外泄、违规内容一次即否决整体,不因其他维度优秀而豁免。鲁棒性:随机种子敏感性、页面变化适应、API 抖动容忍、长时记忆干扰。
轨迹与结果双重覆盖:Agent”说了什么做了什么”(trajectory)与”系统最终变成什么样”(outcome)是两件事——只看轨迹漏掉”说了没做到”,只看结果看不出过程走歪。Anthropic 的例子:订票 Agent 发现航司政策漏洞、找到更便宜方案——按预设路径打分是失败,按结果却是更优解。
人工抽检与对抗式评审:定期抽检成功/失败/边界分数案例并审查评分理由;系统化为评判者校准——先建 100-200 例人工金标集,测评判模型与人类一致率(如 Cohen’s kappa 高于 0.7)达标才放量,评判模型或 Rubric 更新后重新校准;**红队(Red Teaming)**构造”表面完美含隐蔽错误”的对抗案例;多评委机制在严重分歧时转人工审查。
6.5 自动化评估方法
有标准答案的任务用可执行验证即可;开放式任务需要 LLM 评判。
6.5.1 LLM-as-a-Judge 与 Rubric 设计
LLM-as-a-Judge(用大语言模型充当评委)按专家定义的 Rubric 评判开放式输出,在自动化规模与专业判断间取得平衡。已知局限:长度偏差(偏爱更长回复,哪怕不更正确)与评分波动。长度偏差三防:Rubric 显式惩罚冗长并设长度上限;配对比较前把候选长度控到相近;定期审计评分与长度的相关性。
- 基于专家指导:反映领域知识(医疗 Rubric 须含诊断标准),否则只能捕捉流畅度等表面特征;
- 全面覆盖:事实、逻辑、完整性、安全性,并明确陷阱(Pitfall)——高风险常见错误;
- 标准重要性权重:必要项(Essential)/重要项/可选项/陷阱项,支持一票否决(Veto)——幻觉等底线一旦触发总分归零,也防关键词堆砌作弊;
- 自包含评估:每项独立可操作——把”展示了深刻理解”改写为”引用至少两个权威理论并准确解释”。
关键实践:每个维度定义客观可验证的评分档并配示例与边界案例;防范奖励作弊(Reward Hacking)——Agent 找到高分捷径却没真正完成任务(明确惩罚幻觉、讨好、堆关键词、回避难题);Rubric 是迭代产物,靠收集评价者分歧从抽象准则演化为判例集。示例(测试问题”我女儿的儿科医生是谁”,需跨两次对话关联”女儿叫 Lily”与”带 Lily 看了 Dr. Chen”):
rubric: dimensions: - name: 事实正确性 weight: essential # 必要项 scoring: 4_优秀: "准确回答 Dr. Chen,且关联到女儿 Lily" 1_不及格: "给出错误医生名,或回答不知道" - name: 幻觉检测 weight: veto # 否决项:一旦触发,总分归零 scoring: pass: "所有信息均可溯源到历史对话记录" fail: "编造了对话中不存在的信息" edge_cases: - "如果用户有多个女儿且分别看不同的医生,应追问是哪个女儿"汇总多用例逐项评分、回看低分轨迹,“成功率下降”就能拆成具体问题——Rubric 不只给分数,还指出下一步改哪里。
实测案例(60 题 × 3 套记忆方案,180 条真实轨迹):
| 系统 | 基础回忆 | 多会话消歧 | 跨会话隐藏关联 | 总体 |
|---|---|---|---|---|
| Advanced JSON Cards | 95% | 60% | 50% | 68.3%(41/60) |
| RAG | 90% | 40% | 15% | 48.3%(29/60) |
| 混合系统 | 80% | 70% | 50% | 66.7%(40/60) |
要点:混合方案没有自然胜出——3 题独赢、8 题不如更好的单一方案,平均奖励比逐题最佳单一方案低 0.092;RAG 在跨会话关联跌到 15%——检索出片段只是第一步,还要拼对人物-时间-事件关系;幻觉否决触发 28/180 次——否决项不是装饰,确实改变结果。启示:别先假定”结构化 + RAG”必有协同,先看各方案在不同难度下如何失败;该实验是合成用例 + 单一模型配置,不能当通用榜单。前提是评判模型本身可靠——这引出同源评判问题:
Agent 与评判模型同家族时,Agent 会学会利用评判者的偏好与盲点、避开其不擅长检测的错误,让评分”看起来一切正常”。缓解是多源异构评判:不同家族的多个 LLM 分别评判(Agent 用 Claude,评判用 GPT-5 + Gemini),家族偏见往往正交、难以同时欺骗;共用同一 Rubric、加权或一致性聚合;部署期可单模型快评,但要定期做多源审计。
多模态 LLM-as-a-Judge 四方向:TTS 评估(准确/自然/音色一致/情感,发现 WER 抓不住的韵律问题);ASR 做语义影响判断(“转账一千”变”一万”是严重后果);UI 评估用**提议者-审核者(Proposer-Reviewer)**机制;视频剪辑用关键帧验证。TTS 小实验的教训:固定参考音频来自 Fish S1,评”音色一致性”天然偏向 Fish Audio——选什么参考答案、参考图片或参考音频,本身就是评估设计,不是无关紧要的准备工作。
6.5.2 配对比较与模型排名
Elo 评分用大量两两对决量化相对能力:分差决定预期胜率(1200 vs 1000 → 强者胜率约 76%),爆冷带来更大分数调整、排名快速收敛。统计基础是 Bradley-Terry 模型(每个模型一个潜在实力分,胜负概率由分差决定;Elo 是其在线更新的工程实现)。Chatbot Arena 用匿名随机对决 + 数百万人类盲选投票,优点是无需定义”绝对标准”;局限是排名取决于用户问题分布。
LLM 做配对评判要防位置偏差(Position Bias)——系统性偏向某位置(通常先出现)的候选。缓解:交换顺序各评一次取平均;更严格则两次一致才计入,否则记平局或人工复核;Arena 靠随机化展示位置在大样本下抵消。配对信号也是后训练的来源:第七章 GRPO(Group Relative Policy Optimization,分组相对策略优化)对同一问题采样多个候选、用相对优劣估计优势,省去 PPO 的价值网络(critic)——省的是价值网络而非奖励信号,仍需奖励模型或可验证奖励规则。
6.6 评估驱动的模型选型
6.6.1 选型的关键维度
推理分两阶段:**Prefill(预填充)**一次性读入上下文,决定 TTFT(Time To First Token,首字延迟 = 排队 + Prefill,上下文越长越慢);**Decode(解码)**逐 token 生成,决定出字速度与思考时长(50 tokens/s 生成 2000 个思考 token,光思考就要 40 秒)。关键指标:输入/输出吞吐量、TTFT、思考延迟(各模型思考 token 用量差异可达数倍且与效果不一定正相关,须实测)、p95 尾部延迟(比均值更能反映体验——均值被快速请求拉低,掩盖少数用户的严重卡顿)。
其他维度:成本不孤立评估——便宜但成功率低的模型因重试可能更贵,要算每任务平均成本与成本-性能比;性能按场景选指标——日常 Pass@1、关键操作 Pass^k、探索性 Pass@k/Best@k、开放式 Rubric;速率限制与可靠性(RPM/TPM、高峰动态限额、长时运行稳定性)。
还有预算—能力曲线:RE-Bench 人机对照显示,2 小时预算下最佳 Agent 得分约为人类专家 4 倍;但人类从更多时间获益更大——8 小时已略微反超,合计 32 小时约为 Agent 的 2 倍。短预算领先不能外推为长程能力,须在多个预算点比较。实践中可多模型协同(轻量模型处理简单请求、强模型处理复杂任务),但需评估验证整体效益超过增加的复杂度。
6.6.2 模型行为策略:何时停止阅读、开始修改
选型还要比模型默认会怎样做。Coding 场景有明显的行动阈值差异:有的模型先广泛探索仓库再修改,有的凭局部证据先改、再用测试反馈补齐。若这种倾向跨 Harness 跟随模型、固定 Harness 换模型即变,主要解释在模型行为——后训练(SFT 轨迹示范”读到什么程度动手”、过程/结果奖励强化工具路径)很可能是来源;Harness 只是调节因素。配套实验(中性固定 Harness、同一端点、18 条轨迹):GPT-5.6-sol 首次修改前平均调用工具 6.89 次、读 4.67 个文件,Claude Sonnet 5 为 4.56 次、3.56 个;跨模块任务中差距几乎收敛;两者最终测试均 100% 通过、首改时间几乎相同——支持”行动策略随模型而变”,不支持”多读或早改必然更好”。
6.6.3 Agent 系统的成本分析
成本三层:模型推理(两个放大因素——上下文累积效应:每轮重发全部历史,无 KV Cache 时三轮发 1000+2000+3000=6000 而非 3000;思考 token 不展示也计费);工具调用(外部 API、沙盒,以及工具返回注入上下文后在后续每轮被反复计费——一次搜索返回可占 2000-5000 token);基础设施(向量库、消息队列、日志追踪存储)。配套实验用固定八轮客服退款任务(真实 gpt-4o-mini)做四组对照:
| 方案 | 输入 token | 缓存 token | 总成本 | 比基线节省 |
|---|---|---|---|---|
| 无缓存、无压缩 | 20,700 | 0 | $0.003776 | — |
| 仅稳定前缀 | 20,386 | 13,568 | $0.002707 | 28.3% |
| 仅压缩历史 | 16,177 | 0 | $0.003115 | 17.5% |
| 稳定前缀 + 压缩 | 16,035 | 6,144 | $0.002643 | 30.0% |
基线组每轮输入从 1,113 涨到 3,668 token,工具返回八轮累计占 9,544 个输入 token(双优化后降到 5,248)。
单独省 28.3% 与 17.5%,合用只省 30.0%——压缩历史同时缩短了可命中缓存的前缀。几项优化同时使用必须在完整任务中一起实测;换模型、价格或任务长度数字都会变,值得复用的是”独立开关 + 四组对照”的测法。
优化策略:复用 KV Cache(保持前缀稳定)、压缩上下文、分层选择模型,外加异步批处理(批量定价折扣、提高波谷 GPU 利用率)。生产环境要建实时成本监控(按任务/模型/用户维度)并设单任务成本上限——Agent 陷入循环时自动终止。
6.6.4 评估驱动的持续迭代
模型选择是持续过程。典型案例:Gemini 新模型公开基准超越在用的 Claude 且更便宜——真正的问题是”在我的任务上好多少?切换成本是什么?“。有评估体系的团队数小时内跑出对比:若简单任务更优更便宜、复杂多轮编排成功率降 5%(确认超出噪声带宽后),决策就是差异化切换——简单任务迁移降成本、复杂任务保留保质量。
6.7 评估结果的统计显著性
分差必须是真实信号而非抽样噪声。粗估噪声带宽用二项分布标准误(standard error):n 个用例测得成功率 p,SE ≈ √(p(1−p)/n)。例:100 用例、70% 成功率,SE ≈ 4.6%,95% 置信区间约 ±9 个百分点;两个独立成功率的差值 SE 再乘 √2 ≈ 6.5%(独立假设是偏保守的口算上界)。“73% vs 70%“的分差远在噪声内,据此切换与掷硬币差别不大。Agent 还有额外非确定性(温度采样、工具波动、环境时序)——单次运行不可作部署依据,每配置跑 3-5 次、报均值与波动范围。
“不切换”前先换更灵敏的方法——配对分析:同一批任务逐题比较胜负,只看结果不同的用例(McNemar 检验),扣除”题目难易”共同噪声源,同样样本量下比独立成功率相减灵敏得多。仍不确定再扩样:SE 随 √n 缩小,100 扩到 400 噪声带宽才减半,成本很高。反向推论:若改进预期收益只有 2-3 个百分点而评估集只有几十个用例,这套评估分辨不出改进是否有效——优先扩评估集,而非继续迭代 Agent。
还要警惕多重比较:并行验证多个假设时假阳性快速累积——6 个假设各 95% 置信度,至少一个假阳性的概率 1 − 0.95⁶ ≈ 26%。对策:按假设数收紧显著性阈值(Bonferroni 式),或对正向结论独立复跑、复现了才采信。
6.8 Agent 的可观测性
**可观测性(Observability)**借自分布式系统:只能靠日志、指标、追踪推断内部。Agent 更难——输出非确定、执行路径复杂、思考不透明。价值:问题诊断(回放轨迹而非猜测)、持续优化(发现低成功率工具、总为空的检索)、成本管理(任务成本可差一两个数量级)、积累轨迹数据。挑战:数据量与隐私的权衡(日均数 TB + 法规)、因果归因复杂、多 Agent 追踪比微服务更语义化、实时防护与事后分析的平衡。
数据基础是**追踪(Trace)**与 span 树:一次任务对应一条 trace,每个 LLM/工具/检索调用是一个 span(记录输入输出、起止时间、token、错误),父子关系构成执行树。标准协议:OpenTelemetry(通用追踪)+ OpenInference 等 LLM 语义约定——采集与分析解耦,避免平台锁定。LangSmith 是代表平台(同类有 Langfuse、Arize Phoenix):异步批量采集不影响延迟,支持 A/B 测试、提示词版本管理(版本关联性能数据)、协作开发。
数据最有价值的去向是回流成评估资产:生产轨迹筛出失败与可疑案例 → 脱敏 → 沉淀为评估集新用例与回归测试——评估集从静态集合变成贴近真实用户分布的活资产;今天线上的失败模式,明天就是守住底线的回归用例。
6.9 从 Benchmark 报告到系统改进
本节以配套仓库一次真实的 AndroidWorld 调优为例(API 35 模拟器、4 个 Wi-Fi 任务、每项一次配对对照),展示 Harness 迭代方法论:用评估数据定位薄弱环节,针对性改进,再评估。
评测系统自身的问题——运行环境资源不足进程被杀(表现为随机失败)、评分器 bug 错判正确答案、测试用例与生产脱节——在数字上与模型退化一模一样,只有审查完整轨迹才能区分。基于失真信号做的调整,方向从一开始就是错的。
读懂报告:116 项任务总成功率约 88%,但四项 SystemWifiTurn* 里三项失败、轨迹反复来回导航——只盯总分会漏掉小而集中的失败簇。应先找失败聚集的任务与能力,再回放轨迹,分清问题在”看、想、做、验”哪一环。
逐轮单变量实验(相同模型、参数、种子、步数与模拟器,交替运行顺序):
| 实验 | 只改了什么 | 对照→实验成功率 | token 比 | 下一步 |
|---|---|---|---|---|
| H1 | 增加导航提示 | 25%→25% | 0.47× | 无效,沿用原提示 |
| H5 | accessibility feed 换成 UIAutomator 元素树 | 25%→100% | 2.498× | 有效但太费 token |
| H5C | 精简元素树(删不可见、无文字、不可操作节点) | 100%→100% | 0.506× | 进入完整复测 |
三轮结论:(1) 提示写得再详细也补不回 Agent 根本没看到的信息——先检查输入而非堆提示词;(2) 输入不是越多越好——完整元素树解决”看不见”却带来无用 token,删无语义节点后成功率不变、token 减半;(3) 全程没换模型,仅调整 Harness 的界面表示,就先后解决”能不能做成”与”做成是否划算”。逐轮缩小问题比同时堆改动更容易说清因果。
迭代纪律:H5C 通过 4 项任务只是获得扩大测试资格——部署前需在标准环境对 116 项任务各跑 5 个随机种子,且 token 不超原方案 75%、延迟不超 1.5 倍;完整复测前不能把子集 4/4 写成系统 100%。一轮证据只支持与其规模相称的下一步;好报告要写清结论适用范围、未过的底线、下一轮验证什么。
6.10 生产级 Agent 的内部评估基础设施
外部评估告诉你”Agent 有多好”,最好的产品还内建自我评估基础设施,回答”哪个改变让它变好了”。以开源 Agent OpenClaw 与头部 Coding Agent 产品为例,五个组件:
- 消融基础设施:内置总开关可同时禁用思考模式、上下文压缩、自动记忆、后台任务等,创造”裸模型”基线——回答”特性是真有用还是感觉有用”。消融开关必须在启动路径极早期注入,即从一开始设计进架构;定期消融能发现特性债务——随模型进化不再必要的特性。实践:每个主要特性都应可独立关闭并定期验证贡献。
- AB 测试方法论:多臂而非二元(渐进变体揭示剂量-效应关系);区分机制指标与目标指标——最易犯的错是把正在改的东西当优化目标(缩短计划文件是机制、降低会话级成本才是目标;计划太短可能引发更多编辑-检查循环反而增加总输出),不一致时以目标为准;护栏指标是”不能变差的底线”;记录基线统计(样本量、百分位、相关性),否则无法判断显著性。
- 双层特性开关(Feature Flag):编译时开关在构建阶段物理移除代码(逆向也发现不了,同时是干净的消融);运行时开关由服务端下发 + 本地缓存(宁读旧缓存也不阻塞启动),分组走实验平台(如 GrowthBook),曝光事件每会话最多记一次以免污染数据。特性开关是服务实验、渐进发布、紧急熔断的一等公民架构组件,不是调试工具。
- 提示词敏感性评估:系统提示是 Agent 的核心”代码”却常缺版本控制。实践:可确定性渲染(相同配置永远产生相同输出);版本化快照(可在指定 git 版本提取渲染后的完整提示词);每次变更在评估集上跑回归——像代码跑 CI。
- 隐私感知的分析:分析接口只接受特殊类型包装的值,类型名即审计线索,隐私约束从文档规范变成编译时强制。隐私与评估不对立——隐私感知设计迫使想清楚真正需要度量什么,反而催生更精准的指标。
6.11 仿真环境:从评估到后训练的桥梁
评估的终点不是打分而是改进,改进的最强形态是训练。目标从”评估现有能力”扩展到”培养新能力”时,评估环境需演化为仿真环境——让 Agent 反复练习、自动打分的虚拟操场。三点区别:交互频率远高(数百万次 vs 数千次)、需要随机化(防死记硬背)、必须即时反馈;分数字环境与具身环境两类(原书图 6-8 以”仿真保真度谱”呈现从低到高保真的连续取舍)。
桥的接法:一套清晰的 Rubric 或验证器本质就是**可验证奖励(RLVR,Reinforcement Learning with Verifiable Rewards)**的奖励函数——判分脚本直接就是奖励脚本。训练的两个新要求:可靠的 reset 语义(数百万个 episode 每次都要重置到确定初始状态,否则梯度被残留状态污染);远高于评估的吞吐(并行度与单实例开销决定训练是否可行)。
- 数字环境:AWorld 为 GAIA 构建可控 MCP 沙盒——26 个 MCP 服务器、126 个工具函数,避免真实 API 的封禁与副作用,调用可重放可审计;分布式架构把 7695 秒缩到 525 秒(14.6 倍加速)。
- 具身环境:RoboTwin2 基于物理引擎构建双臂操作,随机化物体位置、朝向、外观提升泛化,用动作分块(Action Chunking)(一次规划多个连续动作)实现实时控制。OSWorld 用虚拟机快照实现可重置。仿真环境同样需要第四章的隔离执行与虚拟身份机制。
**领域随机化(Domain Randomization)**是缩小 sim-to-real gap(仿真-现实差距)的关键:在物理参数、视觉外观、传感器噪声上引入大范围随机变化;适度随机化提升泛化、过度随机化让任务过难。数字环境的 sim-to-real 表现为界面渲染与响应时间差异,可注入延迟与失败随机化缓解。至此评估环境完成最后一次演化:从度量能力的考场,变成培养能力的训练场。
本章小结
- 评估对象是模型 × Harness 组合体:消融定位 Harness 内部哪个部件重要,模型替换区分瓶颈在模型还是 Harness。
- 评估体系的首要价值是让团队数小时内对新模型做出数据驱动的切换决策,甚至支撑”为未来的模型开发产品”。
- 评估环境五要素(数据集、环境状态、原子工具、Rubric、执行协议);两大范式:工具调用型(可执行验证)与人机交互型(用户模拟 + 渐进式信息透露,τ²-bench 双控环境)。
- 数据集设计五大张力:明确 vs 开放、真实 vs 可控、多样 vs 系统、成本 vs 覆盖、防数据泄漏(参数化、时间新鲜度、canary GUID、专门附件)。
- 高质量数据集靠人工验证与迭代:SWE-Bench Verified 仅 29% 通过筛选;OSWorld-Verified 修复 300+ 问题并 50 倍并行加速。环境构造机制可复用于训练,评估题必须与训练数据严格隔离。
- 指标覆盖过程与结果:Pass@k 测上限、Pass^k 测稳定、Best@k 测质量上限,混用会误判;安全违规与幻觉零容忍否决。
- 轨迹(说了什么做了什么)与结果(系统变成什么样)要双重覆盖,避免”说了没做到”或”结果对但过程歪”的盲区。
- LLM-as-a-Judge 依赖好 Rubric(四准则);防长度偏差、位置偏差与奖励作弊;放量前用人工金标集校准(kappa > 0.7);多源异构评判对抗古德哈特定律。
- 配对比较 + Bradley-Terry/Elo 提供不依赖绝对分数的排名;该信号也是 GRPO 等后训练算法的来源。
- 选型是多维权衡:TTFT/吞吐/思考延迟/p95、成本-性能比、速率限制、预算—能力曲线(RE-Bench:短预算 Agent 领先、长预算人类反超);模型还有默认行动阈值差异。
- Agent 成本被上下文累积与工具返回反复计费放大;多项上下文优化的节省不能相加,必须独立开关、组合实测。
- 统计显著性是决策底线:标准误估噪声带宽、分差小于噪声不切换、配对分析更灵敏、多次运行取均值、警惕多重比较。
- 可观测性以 trace/span 树为基础(OpenTelemetry/OpenInference),生产轨迹应脱敏回流为评估集与回归测试的活资产。
- Benchmark → 改进闭环:先查评测系统再动 Agent;逐轮单变量实验(AndroidWorld:堆提示无效 → 换 UI 表示 25%→100% → 精简后 token 减半);一轮证据只支持与其规模相称的下一步。
- 内部评估五组件(消融、AB 测试、特性开关、提示词回归、隐私感知分析)把评估嵌入每次产品决策;仿真环境(高吞吐 + 随机化 + reset + 验证器即 RLVR 奖励)是通向第七章后训练的桥梁。核心方法论:观察→假设→实验→验证→新认识→新假设,让 Agent 工程从”炼金术”走向数据驱动的科学。
思考题
- ★★ LLM-as-a-Judge 使用语言模型评估语言模型的输出。这种”自我评估”是否存在系统性盲区——比如模型可能一致地给某种风格的回答打高分,而这种偏好与人类评判不一致?如何检测和校正这种偏差?
- ★★★ 评估数据集的”防泄漏”设计至关重要。但在开源生态中,benchmark 数据一旦公开,很快就会被纳入训练数据。这场”猫鼠游戏”有终局吗?设计一种从根本上抵抗数据泄漏的评估方法。
- ★★ Scale AI 的四准则(基于专家指导、全面覆盖、标准重要性权重、自包含评估)旨在消除评估的主观性。但某些任务维度(如”回答是否有帮助""语气是否恰当”)天然具有主观性。如何为这些主观维度设计可靠的 Rubric?
- ★★ τ-bench 通过模拟真实用户行为来评估 Agent。但模拟用户本身也是一个 LLM——它可能系统性地低估某些边缘场景(如情绪激动、表达不清的用户)。如何验证模拟用户本身的质量?
- ★★ 配对比较(Bradley-Terry 模型)假设偏好是传递的(如果 A > B 且 B > C,则 A > C)。但人类偏好经常违反传递性。在 Agent 评估中,非传递偏好可能出现在哪些场景?这如何影响排名的可靠性?
- ★★ 本章提出”观察→假设→实验→验证”的科学方法。但在实践中,Agent 的行为空间巨大,验证一个假设可能需要数百次评估运行。如何在有限计算预算下最大化评估的信息量?
- ★ AndroidWorld 小实验中,完整元素树把成功率从 25% 提高到 100%,却把 token 用量推到 2.498 倍;精简后成功率不变,token 降到对照组的 0.506 倍。怎样设计一套自动裁剪规则,既删掉无语义的 UI 节点,又不误删对可访问性、状态验证或后续操作有用的信息?
- ★★ τ-bench 的用户模拟采用了”渐进式信息透露”——不一次性提供所有信息,而是根据 Agent 的提问逐步透露。这种设计如何影响评估结果?如果模拟用户的信息透露策略与真实用户差异较大,评估结论还可靠吗?
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!










