评估驱动的 Agent 开发


评估驱动的 Agent 开发

本节摘要:Anthropic 的指引一针见血:「从简单提示开始,用全面评估来优化它们,只在需要时才加多步智能体系统。」评估不是最后一步——它是驱动第 15 章(Agent 工程)其他所有选择的外层循环。Agent 能过 demo,却以 demo 预测不到的方式在生产失败;基准回答的是「这个模型整体有多强」,而非「我的产品里这个 Agent 在交付对的补丁吗」。答案是三层评估,持续运行,且每条护栏、每条学到的规则都映射到一个评估用例。静态基准层:SWE-bench Verified(代码,第 19 节)、WebArena/OSWorld(浏览/桌面,第 20 节)、GAIA(通才)、BFCL V4(工具,第 06 节)——用于跨模型比较与回归门控,污染真实(SWE-bench+ 查出 32.67% 泄露,必须报 Verified/+ 审计分)。自定义离线层:你产品的形状——LLM-as-judge(第 24 节)、基于执行(跑补丁查测试)、基于轨迹(对比金轨迹,OSWorld-Human 显示顶尖 Agent 1.4~2.7 倍)。在线层:会话回放、护栏告警(第 16/21 节)、每步成本/延迟追踪(第 23 节)。评估器-优化器是 Self-Refine(第 05 节)的泛化——提案、判断、精炼直到通过。2026 最佳实践:评估与代码同仓、每次 PR 在 CI 跑、门控合并(如「相对 main 回归>5% 即拒」)、每条护栏映射到用例、每条学到的规则(Reflexion、pro-workflow learn-rule)映射到失败用例。本节用一张表把全章每节连到它生成的评估用例,并用标准库实现一个带评估器-优化器循环与 CI 门的评估装置。读完本节,你应能避免「无基线、LLM-judge 无锚定、过拟合评估、评估抖动」四种失败。

对应原课程:Phase 14 · Lesson 30 · eval-driven-agent-development(原英文 phases/14-agent-engineering/30-eval-driven-agent-development/docs/en.md)。前置:第 15 章全部。

学习目标

阅读完本节,你应当能够:

  1. 说出三层评估——静态基准、自定义离线、在线生产——以及各自用途。
  2. 解释评估器-优化器紧循环,以及它如何泛化 Self-Refine。
  3. 描述 2026 最佳实践:评估与代码同仓、CI 跑、门控 PR。
  4. 把第 15 章的每一节连到它生成的评估用例。
  5. 识别四种失败:无基线、LLM-judge 无锚定、过拟合评估、评估抖动。

一、问题与直觉

Agent 能过 demo,却以 demo 预测不到的方式在生产失败。基准回答「这个模型整体强吗」,不回答「我的产品里这个 Agent 在交付对的补丁吗」。这两者的鸿沟,只有评估能填——而且不是最后一次跑一下的评估,而是持续运行、驱动每个决策的外层循环。

三层评估

  1. 静态基准(Static benchmarks) —— SWE-bench Verified 用于代码(第 19 节),WebArena/OSWorld 用于浏览/桌面(第 20 节),GAIA 用于通才(第 19 节),BFCL V4 用于工具使用(第 06 节)。用于跨模型比较与回归门控。污染真实:SWE-bench+ 查出 32.67% 解法泄露。永远报 Verified/+ 审计分。
  2. 自定义离线评估(Custom offline evals) —— 你产品的形状:
    • LLM-as-judge(Langfuse、Phoenix、Opik——第 24 节)。
    • 基于执行(跑补丁,查测试)。
    • 基于轨迹(对比金动作序列;OSWorld-Human 显示顶尖 Agent 1.4~2.7 倍)。
  3. 在线评估(Online evals) —— 生产:
    • 会话回放(Langfuse)。
    • 护栏触发告警(第 16、21 节)。
    • 每步成本/延迟追踪(第 23 节 OTel span)。

评估器-优化器(Anthropic)

紧循环:

  1. 提案者生成输出。
  2. 评估器判断。
  3. 精炼直到评估器通过。

这是 Self-Refine(第 05 节)的泛化。任何你在乎的 Agent 流,都可以包一层评估器-优化器来提可靠性。

2026 最佳实践

  • 评估与代码同仓。
  • 每次 PR 在 CI 跑。
  • 门控合并(如「相对 main 回归>5% 即拒」)。
  • 每条护栏映射到一个评估用例。
  • 每条学到的规则(Reflexion、pro-workflow learn-rule)映射到一个失败用例。

把第 15 章串起来

第 15 章每一节都生成评估用例:

节 生成的评估用例
01 Agent 循环 预算耗尽、无限循环守卫
02 ReWOO 工具失败时规划器正确重规划
03 Reflexion 重试时学到的反思被应用
05 Self-Refine/CRITIC 精炼后输出通过 judge
06 工具使用 参数强制生效;未知工具被拒
07-10 记忆 检索引用匹配来源;过期事实失效
12 工作流模式 每种模式产出正确输出
13 LangGraph 续跑精确复现状态
14 AutoGen Actor DLQ 抓住崩溃的处理器
16 OpenAI Agents SDK 护栏在对的输入上绊倒
17 Claude Agent SDK 子智能体结果回到编排者
19-20 基准 SWE-bench Verified 分、WebArena 成功率、OSWorld 效率
21 Computer Use 每步安全抓住注入的 DOM
23 OTel span 发射必需属性
26 失败模式 检测器给已知失败打标
27 提示注入 PVE 拒绝投毒检索
28 编排 监督者路由到对的专家
29 运行时形态 DLQ 处理 N% 失败

如果你的评估套件为每一节都有用例,你就覆盖了第 15 章。

⚠️ 四种失败:① 无基线——没有「上次已知良好」的评估读不懂;存基线。② LLM-judge 无锚定——judge 也会幻觉;用 CRITIC 模式(第 05 节),judge 锚外部工具。③ 过拟合评估——为评估优化会偏离生产有用性(goodhart);轮换用例。④ 抖动评估——非确定性用例引起误报;钉种子、快照状态。

二、从零实现

原课程 code/main.py 是一个标准库评估装置:

  • 用例注册表,带类别(基准、自定义、在线)。
  • 一个被测的脚本化 Agent。
  • 评估器-优化器循环:提案、判断、精炼直到通过或达最大轮数。
  • CI 门:聚合通过率 + 相对基线的回归。

Step 1:用例注册表 + 基线

@dataclass class Case: name: str; category: str; inputs: dict; expected: Any BASELINE = load_json("eval_baseline.json") # 上次已知良好 def regression(case, current_score): return current_score < BASELINE[case.name] * 0.95 # 回归>5% 即标 ​

Step 2:评估器-优化器循环

def evaluator_optimizer(agent, case, max_rounds=3): output = agent.run(case.inputs) for r in range(max_rounds): verdict = judge(output, case.expected) if verdict.passed: return output, r output = agent.refine(output, verdict.feedback) # Self-Refine 泛化 return output, max_rounds # 未通过 ​

Step 3:CI 门

def ci_gate(cases, agent): results = {c.name: evaluator_optimizer(agent, c) for c in cases} pass_rate = sum(r.passed for r in results.values()) / len(results) regressions = [n for n, r in results.items() if regression(n, r.score)] if pass_rate < THRESHOLD or regressions: return f"FAIL: pass_rate={pass_rate}, regressions={regressions}" return "PASS" ​

运行 python3 code/main.py 会输出每用例通过/失败、回归标志、CI 门裁决。

💡 设计要点:评估驱动开发的本质是把「好」从主观变成可量化、可回归检测。没有评估,你改提示是在黑暗里摸索——不知道改好了还是改坏了;有评估,每次改动都被客观度量。Anthropic 的「先简单、用评估优化、再上复杂」正是此理:评估让你敢于简化,因为你能立刻知道简化有没有伤到质量。

三、框架对比

评估层 工具/基准 回答的问题
静态基准 SWE-bench/GAIA/AgentBench/WebArena/OSWorld/BFCL 这个模型整体强吗?跨模型比较
自定义离线 Langfuse/Phoenix/Opik 的 LLM-judge + 执行 + 轨迹 我产品的 Agent 在交付对的输出吗?
在线 会话回放、护栏告警、OTel 成本/延迟 生产里真实流量下表现如何?
评估器-优化器 Self-Refine 泛化 能否迭代到通过?

四、可复用产物

原课程 outputs/skill-eval-suite.md:为一个 Agent 产品建三层评估套件,带 CI 门、回归追踪、基线管理、用例轮换策略。

五、练习

  1. (Easy) 拿你的一次生产失败,写一个复现它的评估用例。你的 Agent 现在能过它吗?
  2. (Medium) 为你的领域建一个三维(事实、语气、范围)的 LLM-judge 量表,给 50 个 session 打分。
  3. (Medium) 把评估套件接进 CI,回归≥5% 即 fail build。
  4. (Hard) 加一个轨迹效率指标:Agent 走了多少步 vs 金轨迹?
  5. (Hard) 把第 15 章每节映射到你套件里的一个评估用例。有缺的吗?那就是要补的洞。

本节要点回顾

  1. 评估是外层循环:不是最后一步,而是驱动第 15 章所有选择的核心;Anthropic「先简单、用评估优化、再上复杂」。
  2. 三层评估:静态基准(跨模型/回归门)、自定义离线(产品形状)、在线(真实流量)。
  3. 静态基准污染真实:SWE-bench+ 查出 32.67% 泄露;永远报 Verified/+ 审计分。
  4. 自定义离线三法:LLM-as-judge、基于执行、基于轨迹(OSWorld-Human 1.4~2.7 倍)。
  5. 在线评估:会话回放、护栏告警、OTel 每步成本/延迟。
  6. 评估器-优化器:Self-Refine 泛化——提案、判断、精炼直到通过;任何在乎的 Agent 流都可包一层。
  7. 2026 最佳实践:评估与代码同仓、CI 每次 PR 跑、门控合并(回归>5% 拒)、护栏→用例、学到规则→失败用例。
  8. 全章映射表:每节生成评估用例,套件全覆盖即覆盖第 15 章。
  9. 四种失败:无基线(读不懂)、LLM-judge 无锚定(judge 也幻觉,用 CRITIC)、过拟合(goodhart,轮换用例)、抖动(钉种子快照状态)。
  10. 评估让你敢于简化:有评估,简化是否伤质量能立刻知道——这正是 Anthropic 心法的工程支撑。

接下来的第 31~42 节,我们进入本章的压轴主题——Agent 工作台(workbench)工程:为什么通用编码 Agent 在真实代码仓库上会失败,以及如何用最小工作台、指令约束、仓库记忆、初始化脚本、范围契约、运行时反馈循环、验证门、审查者 Agent、多会话交接,把一个能改真实仓库的工程级 Agent 从理想变成现实。下一节先诊断:模型在工作台上为何失败。

作者与出处
原作者:Rohit Gupta
来源:rohitg00
许可证:MIT
整理人: 灏天文库整理
由灏天文库结构化整理,提供目录导航、全文检索与在线阅读,便于系统化学习
发布者: 作者: Rohit Gupta 转发
评论区 (0)
U