理解 AI Agent 评估:方法与实践
Anthropic 系统介绍 AI Agent 评估的组成、评分器、不同类型 Agent 的评估方法,以及从零搭建和长期维护评估体系的实践。
Hex4C59 28 分钟阅读 更新于 2026-10-17
AI 与 Agent·译文
译文信息
- 原文:Demystifying evals for AI agents
- 作者:Mikaela Grace、Jeremy Hadfield、Rodrigo Olivares、Jiri De Jonghe
- 原文发布:2026-01-09
- 中文翻译:Hex4C59
- 翻译整理:2026-10-10
本文为非官方中文译文。正文中的「我们」指原文作者及其团队;模型版本、产品能力和评估结果均保留原文记录,译者未独立复现实验。文中的「今年」「如今」等时间表述,均以原文发布日期为参照。
Agent 能自主调用工具、修改环境,并根据中间结果调整行动。这些能力让 Agent 变得有用,也让它们更难评估。要评估不同部署场景中的复杂系统,需要结合多种方法。
引言 #
良好的评估能帮助团队更有信心地交付 AI Agent。如果没有评估,团队很容易陷入被动应对的循环:只有到了生产环境才发现问题,修复一个故障又引发其他故障。评估让问题和行为变化在影响用户之前就显现出来,其价值也会在 Agent 的整个生命周期中不断累积。
正如我们在 Building effective agents 中所描述的,Agent 会在多个交互轮次中运行:调用工具、修改状态,并根据中间结果调整行动。让 AI Agent 有用的这些能力——自主性、智能和灵活性——也让它们更难评估。
通过内部实践,以及与处于 Agent 开发前沿的客户合作,我们逐渐掌握了如何为 Agent 设计更严谨、更有用的评估。以下介绍的是,在实际部署的多种 Agent 架构和应用场景中行之有效的方法。
一项评估的组成 #
评估(evaluation,简称 eval)是对 AI 系统的一项测试:给 AI 一个输入,再通过评分逻辑评价它的输出,衡量它是否成功。本文重点讨论那些可以在开发过程中运行、不需要真实用户参与的自动化评估。
单轮评估很直接:一个提示、一个回答,以及一套评分逻辑。对于早期的大语言模型,单轮、非 Agent 式的评估是主要方法。随着 AI 能力发展,多轮评估变得越来越常见。
原文图注:在简单评估中,Agent 处理一个提示,评分器检查输出是否符合预期。在更复杂的多轮评估中,编程 Agent 会获得工具、任务和环境;此处的任务是构建一个 MCP 服务器。Agent 执行由工具调用和推理组成的「Agent 循环」,将实现写入环境。之后,评分阶段使用单元测试,验证 MCP 服务器能否正常工作。
Agent 评估更加复杂。Agent 在多个轮次中使用工具,修改环境中的状态,并在执行过程中调整策略,这意味着错误可能传播并不断累积。前沿模型还能找到富有创造性的解决方案,超出静态评估所能覆盖的范围。例如,Opus 4.5 在解决 τ2-Bench 中的一道机票预订问题时,发现了政策中的一个漏洞。按照原有评估规则,它「失败」了,但实际上却为用户找到了更好的解决方案。
在构建 Agent 评估时,我们采用以下定义:
- 任务(task):也称问题(problem)或测试用例(test case),指一项具有明确输入和成功标准的独立测试。
- 试验(trial):对一项任务的一次尝试。由于模型每次运行的输出可能不同,我们会进行多次试验,以获得更稳定的结果。
- 评分器(grader):对 Agent 表现的某个方面进行评分的逻辑。一项任务可以使用多个评分器,每个评分器又可以包含多条断言(assertions),有时也称检查项(checks)。
- 执行记录(transcript):也称追踪记录(trace)或轨迹(trajectory),指一次试验的完整记录,包括输出、工具调用、推理、中间结果及其他交互。对于 Anthropic API,它是评估运行结束时完整的
messages数组,包含评估期间对 API 的所有调用,以及返回的所有响应。 - 最终结果(outcome):试验结束时,环境中的最终状态。一个机票预订 Agent 可能会在执行记录末尾说「您的机票已经预订」,但最终结果要看环境中的 SQL 数据库里是否真的存在预订记录。
- 评估 Harness(evaluation harness):端到端运行评估的基础设施。它提供指令和工具,并发运行任务,记录全部步骤,对输出评分,并汇总结果。
- Agent Harness:也称支撑框架(scaffold),指让模型能够作为 Agent 行动的系统:处理输入、编排工具调用并返回结果。当我们评估「一个 Agent」时,实际评估的是 Harness 与模型共同工作的表现。例如,Claude Code 是一个灵活的 Agent Harness;我们通过 Agent SDK 使用它的核心基础能力,构建了面向长期运行任务的 Agent Harness。
- 评估套件(evaluation suite):为了衡量特定能力或行为而设计的一组任务。套件中的任务通常具有一个共同的总体目标。例如,客服评估套件可能测试退款、取消和升级处理等场景。
原文图注:Agent 评估的组成部分。
为什么要构建评估 #
团队刚开始开发 Agent 时,结合人工测试、内部试用和直觉,就可能取得出乎意料的进展。更严谨的评估甚至看起来像是拖慢交付的额外负担。但在早期原型阶段之后,一旦 Agent 上线并开始扩大使用规模,没有评估的开发方式就开始失灵。
转折点往往出现在用户反馈「改动后 Agent 感觉变差了」的时候:团队仿佛在盲飞,除了猜测和试错,没有办法验证。缺少评估时,调试只能被动进行:等待投诉、手动复现、修复缺陷,然后希望其他地方没有退步。团队无法区分能力确实退步和运行中的偶然波动,无法在交付前自动测试数百种场景,也无法衡量改进幅度。
我们多次见过这样的发展过程。例如,Claude Code 最初依靠 Anthropic 员工和外部用户的反馈快速迭代。后来,我们加入了评估:先覆盖简洁性、文件编辑等范围较窄的方面,再扩展到过度设计等更复杂的行为。这些评估帮助我们发现问题、指导改进,并让研究与产品团队的合作更有重点。结合生产监控、A/B 测试、用户研究等方法,评估为 Claude Code 在扩大规模的过程中持续改进提供了信号。
在 Agent 生命周期的任何阶段,编写评估都有用。早期,评估迫使产品团队明确 Agent 的成功究竟意味着什么;后期,评估帮助维持一致的质量标准。
Descript 的 Agent 帮助用户编辑视频,因此他们围绕成功编辑工作流的三个维度构建评估:别把东西弄坏、完成我要求的事情,并且把它做好。他们从人工评分逐步发展为大语言模型评分器,由产品团队定义标准,并定期用人工判断校准;如今,他们会定期运行两套独立的评估套件,分别用于质量基准测试和回归测试。Bolt AI 团队则较晚才开始构建评估,当时他们已经拥有一个广泛使用的 Agent。在三个月内,他们建立了一套评估系统:运行 Agent,通过静态分析为输出评分,使用浏览器 Agent 测试应用,并用大语言模型裁判评价指令遵循等行为。
有些团队从开发之初就创建评估;另一些团队则在规模扩大、评估成为改进 Agent 的瓶颈后才补上。评估在 Agent 开发早期尤其有用,可以把预期行为明确地写下来。两位工程师阅读同一份初始规格,可能会对 AI 应当如何处理边界情况得出不同理解。评估套件能够消除这种歧义。无论何时建立,评估都有助于加快开发。
评估还会影响你采用新模型的速度。当更强的模型发布时,没有评估的团队可能需要数周测试;而具备评估的竞争对手,可以快速判断模型的优势、调整提示,并在几天内完成升级。
一旦有了评估,你就顺带获得了基线与回归测试:可以在一组固定任务上追踪延迟、token 用量、单任务成本和错误率。评估也能成为产品与研究团队之间传递信息最有效的渠道,帮助研究人员明确可以优化的指标。评估的好处远不止追踪回归和改进。由于成本一开始就看得见,而收益会在之后逐步积累,人们很容易忽视它不断累积的价值。
如何评估 AI Agent #
我们如今看到几类常见 Agent 已被大规模部署,包括编程 Agent、研究 Agent、计算机操作 Agent 和对话 Agent。每一类都可能应用于多种行业,但可以使用相似的技术来评估。你不必从零发明一套评估方法。下面介绍几类 Agent 已经验证有效的方法,你可以以此为基础,再扩展到自己的领域。
Agent 评分器的类型 #
Agent 评估通常结合三类评分器:基于代码的、基于模型的,以及人工评分器。每个评分器评价执行记录或最终结果中的某一部分。有效评估设计的重要一环,就是为任务选择合适的评分器。
基于代码的评分器
| 方法 | 优点 | 局限 |
|---|---|---|
| 字符串匹配检查:精确匹配、正则表达式、模糊匹配等。 二元测试:从失败变为通过、保持原有通过状态。 静态分析:lint、类型、安全检查。 最终结果验证。 工具调用验证:使用的工具及参数。 执行记录分析:交互轮数、token 用量。 | 快。 便宜。 客观。 可复现。 易于调试。 可验证具体条件。 | 同样有效的答案,只要不符合预设模式,就可能被误判。 难以处理细微差别。 对某些较主观的任务,评估能力有限。 |
基于模型的评分器
| 方法 | 优点 | 局限 |
|---|---|---|
| 基于评分标准的打分。 自然语言断言。 成对比较。 基于参考答案的评估。 多个裁判形成共识。 | 灵活。 可扩展。 能捕捉细微差别。 能处理开放式任务。 能处理自由形式的输出。 | 结果具有非确定性。 比代码评分更昂贵。 需要通过人工评分校准,以保证准确性。 |
人工评分器
| 方法 | 优点 | 局限 |
|---|---|---|
| 领域专家审查。 众包判断。 抽样检查。 A/B 测试。 标注者间一致性分析。 | 达到金标准级别的质量。 符合专家用户的判断。 可用于校准基于模型的评分器。 | 昂贵。 缓慢。 大规模评估时,往往需要组织大量人类专家参与。 |
对每项任务,可以采用加权评分:组合后的评分器分数必须达到阈值;也可以采用二元判定:所有评分器都必须通过;或者混合使用两者。
能力评估与回归评估 #
能力评估,也称「质量」评估,问的是:「这个 Agent 能把什么做好?」这类评估的初始通过率应该较低,针对 Agent 尚且吃力的任务,为团队提供明确的改进目标。
回归评估问的是:「Agent 还能处理过去能处理的所有任务吗?」其通过率应该接近 100%。它们用于防止倒退,因为分数下降意味着某处出了问题,需要改进。在团队努力提高能力评估成绩时,也必须同时运行回归评估,确保改动不会在其他地方引发问题。
Agent 上线并经过优化后,通过率较高的能力评估就可以「毕业」,转化为持续运行的回归套件,用来捕捉任何偏移。那些曾经衡量「我们究竟能不能做到」的任务,此时转而衡量「我们是否仍然能可靠地做到」。
评估编程 Agent #
编程 Agent 编写、测试和调试代码,像人类开发者一样浏览代码库、运行命令。针对现代编程 Agent 的有效评估,通常依赖明确的任务、稳定的测试环境,以及针对生成代码的充分测试。
确定性评分器很适合编程 Agent,因为软件通常比较容易评价:代码能否运行,测试能否通过?两个广泛使用的编程 Agent 基准测试——SWE-bench Verified 和 Terminal-Bench——就采用了这种方式。SWE-bench Verified 向 Agent 提供流行 Python 仓库中的 GitHub issue,再通过运行测试套件对解决方案评分;只有修复了失败测试、同时没有破坏原有测试,解决方案才算通过。在短短一年内,大语言模型在这项评估上的成绩就从 40% 提升到超过 80%。Terminal-Bench 则采用另一条路线:测试端到端的技术任务,例如从源码构建 Linux 内核,或者训练一个机器学习模型。
一旦有了一组用于验证编程任务关键结果的通过/失败测试,通常还值得对执行记录进行评分。例如,基于启发式规则的代码质量检查,可以从「是否通过测试」之外的角度评价生成代码;具有明确评分标准的模型评分器,则可以评价 Agent 如何调用工具、如何与用户交互等行为。
示例:一个假想的编程 Agent 评估
考虑这样一项编程任务:Agent 必须修复一个身份验证绕过漏洞。下面的示意 YAML 展示了如何同时使用评分器和指标来评价它。示例保留原文内容,属于评估配置示意,不是本博客的可运行配置。
task:
id: "fix-auth-bypass_1"
desc: "Fix authentication bypass when password field is empty and ..."
graders:
- type: deterministic_tests
required: [test_empty_pw_rejected.py, test_null_pw_rejected.py]
- type: llm_rubric
rubric: prompts/code_quality.md
- type: static_analysis
commands: [ruff, mypy, bandit]
- type: state_check
expect:
security_logs: {event_type: "auth_blocked"}
- type: tool_calls
required:
- {tool: read_file, params: {path: "src/auth/*"}}
- {tool: edit_file}
- {tool: run_tests}
tracked_metrics:
- type: transcript
metrics:
- n_turns
- n_toolcalls
- n_total_tokens
- type: latency
metrics:
- time_to_first_token
- output_tokens_per_sec
- time_to_last_token这个例子为了说明问题,展示了各类可用的评分器。在实践中,编程评估通常依靠单元测试验证正确性,再用大语言模型评分标准评价整体代码质量;只有在需要时,才加入额外的评分器和指标。
评估对话 Agent #
对话 Agent 在客服、销售或辅导等领域与用户交互。与传统聊天机器人不同,它们会维护状态、使用工具,并在对话过程中采取行动。虽然编程和研究 Agent 也可能与用户进行多轮交互,但对话 Agent 面临一个独特挑战:交互本身的质量,也是评估对象的一部分。有效的对话 Agent 评估,通常依赖可验证的最终状态,以及同时涵盖任务完成情况和交互质量的评分标准。与大多数其他评估不同,它们往往需要第二个大语言模型模拟用户。我们在对齐审计 Agent 中使用这种方法,通过长时间的对抗性对话对模型进行压力测试。
对话 Agent 的成功可以有多个维度:工单是否解决,通过状态检查判断;是否在少于 10 轮交互内完成,通过执行记录约束判断;语气是否恰当,通过大语言模型评分标准判断。τ-Bench 及其后续版本 τ2-Bench,就是包含多个维度的两项基准测试。它们模拟零售客服、机票预订等领域的多轮交互:一个模型扮演特定用户角色,Agent 则在贴近现实的场景中处理问题。
示例:一个假想的对话 Agent 评估
考虑这样一项客服任务:Agent 必须为一位感到沮丧的客户处理退款。以下同样是原文保留的示意 YAML。
graders:
- type: llm_rubric
rubric: prompts/support_quality.md
assertions:
- "Agent showed empathy for customer's frustration"
- "Resolution was clearly explained"
- "Agent's response grounded in fetch_policy tool results"
- type: state_check
expect:
tickets: {status: resolved}
refunds: {status: processed}
- type: tool_calls
required:
- {tool: verify_identity}
- {tool: process_refund, params: {amount: "<=100"}}
- {tool: send_confirmation}
- type: transcript
max_turns: 10
tracked_metrics:
- type: transcript
metrics:
- n_turns
- n_toolcalls
- n_total_tokens
- type: latency
metrics:
- time_to_first_token
- output_tokens_per_sec
- time_to_last_token与编程 Agent 的示例一样,这项任务为了说明问题,展示了多种评分器。在实践中,对话 Agent 评估通常使用基于模型的评分器,同时评价沟通质量与目标完成情况,因为许多任务,例如回答问题,可能存在多个「正确」方案。
评估研究 Agent #
研究 Agent 收集、综合和分析信息,然后产出答案或报告等内容。编程 Agent 可以依靠单元测试获得二元的通过/失败信号,而研究质量只能结合任务来判断。什么算「全面」「来源充分」,甚至什么算「正确」,都取决于具体背景:市场概览、收购尽职调查和科学报告,需要不同的标准。
研究评估面临独特挑战:专家可能对一份综合分析是否全面持不同意见;参考内容不断变化,标准答案也会随之改变;更长、更开放的输出,又给错误留下了更多空间。例如,BrowseComp 这样的基准测试,会检验 AI Agent 能否在开放网络中大海捞针:题目被设计为容易验证,却很难解决。
构建研究 Agent 评估的一种策略,是组合不同类型的评分器。依据检查用于验证论断是否得到检索来源的支持;覆盖度检查规定一个好答案必须包含哪些关键事实;来源质量检查确认所参考的资料具有权威性,而不只是检索到的第一批结果。对于具有客观正确答案的任务,例如「X 公司第三季度的营收是多少」,精确匹配就能发挥作用。大语言模型既可以标记缺乏依据的论断、找出答案遗漏的关键内容,也可以检查开放式综合分析是否连贯、完整。
由于研究质量具有主观性,为了有效评价这类 Agent,基于大语言模型的评分标准应该经常根据人类专家判断进行校准。
计算机操作 Agent #
计算机操作 Agent 通过与人类相同的界面操作软件,包括屏幕截图、鼠标点击、键盘输入和滚动,而不是通过 API 或代码执行。它们可以使用任何具有图形用户界面(Graphical User Interface,GUI)的应用,从设计工具到传统企业软件。评估需要在真实环境或沙箱中运行 Agent,让它能够使用软件应用,再检查是否达到了预期结果。例如,WebArena 测试基于浏览器的任务,使用 URL 和页面状态检查确认 Agent 是否正确导航;对于修改数据的任务,还会验证后端状态,确认订单确实已提交,而不只是出现了确认页面。OSWorld 将这种方式扩展到整个操作系统的控制:任务完成后,由评估脚本检查多种产物,包括文件系统状态、应用配置、数据库内容和界面元素属性。
浏览器操作 Agent 需要在 token 效率与延迟之间取得平衡。基于文档对象模型(Document Object Model,DOM)的交互执行很快,但会消耗大量 token;基于截图的交互较慢,却更节省 token。例如,让 Claude 总结维基百科内容时,从 DOM 中提取文本更高效;在亚马逊上寻找新的笔记本电脑保护套时,截图更高效,因为提取整个 DOM 会消耗大量 token。在 Claude for Chrome 产品中,我们开发了评估,检查 Agent 是否为不同场景选择了正确的工具。这让我们能够更快、更准确地完成浏览器任务。
如何理解 Agent 评估中的非确定性 #
无论是哪种 Agent,其行为在不同运行之间都会变化,因此评估结果比乍看之下更难解读。每项任务都有自己的成功率:一项可能是 90%,另一项可能是 50%;某项任务在一次评估中通过,下一次却可能失败。有时,我们希望衡量的是 Agent 在一项任务上成功的频率,也就是试验中成功的比例。
两个指标可以帮助表达这种差异:
pass@k 衡量 Agent 在 k 次尝试中至少得到一个正确解决方案的概率。随着 k 增大,pass@k 会提高:尝试机会越多,至少成功一次的概率就越高。pass@1 为 50%,意味着模型在评估中有一半任务能够首次尝试就成功。在编程场景中,我们通常最关心 Agent 能否第一次就找到解决方案,也就是 pass@1。在其他场景中,只要有一个方案可用,提出多个方案也是合理的。
pass^k 衡量 k 次试验全部成功的概率。随着 k 增大,pass^k 会下降,因为要求在更多次试验中都保持成功,是更高的门槛。如果 Agent 每次试验的成功率是 75%,运行 3 次试验时,全部通过的概率就是 (0.75)³ ≈ 42%。(译者注:此处计算假设各次试验相互独立,而且每次的成功率相同。)这个指标对面向客户的 Agent 尤其重要,因为用户期待每次都能得到可靠的表现。
原文图注:随着试验次数增加,pass@k 与 pass^k 会逐渐分离。在 k = 1 时,两者相同,都等于单次试验的成功率。到 k = 10 时,它们呈现截然相反的走势:pass@k 接近 100%,而 pass^k 接近 0%。
两个指标都有用,具体选择取决于产品要求:只要成功一次就有价值的工具,适合使用 pass@k;必须保持一致性的 Agent,适合使用 pass^k。
从零到一:构建优秀 Agent 评估的路线图 #
本节介绍我们经过实际检验的建议,帮助你从完全没有评估,走到拥有可信赖的评估。可以把它看作评估驱动的 Agent 开发路线图:尽早定义成功、清晰衡量,并持续迭代。
收集初始评估数据集中的任务 #
步骤 0:尽早开始 #
我们看到一些团队因为觉得必须拥有数百项任务,而推迟构建评估。实际上,从真实失败案例中提炼 20 到 50 项简单任务,就是很好的起点。毕竟,在 Agent 开发早期,每次系统改动往往都会产生清晰、明显的影响;改动带来的差异较大,因此用小样本也能看出来。更成熟的 Agent 可能需要规模更大、难度更高的评估,才能检测较小的变化,但起步阶段最好遵循 80/20 原则。等待越久,评估就越难构建。早期,产品要求可以自然转化为测试用例;如果等得太久,就只能从已经上线的系统中反向推导成功标准。
步骤 1:从已经手动测试的内容开始 #
从开发过程中运行的人工检查开始:每次发布前验证的行为,以及最终用户会尝试的常见任务。如果已经上线,就查看缺陷追踪系统和客服待处理队列。把用户报告的失败转化为测试用例,能够确保套件反映真实使用情况;按用户影响确定优先级,则能让你把精力投入到最重要的地方。
步骤 2:编写没有歧义的任务,并提供参考解法 #
把任务质量做好,比看起来更难。一项好任务应该让两位领域专家独立评估时,得出相同的通过/失败结论。他们自己能通过这项任务吗?如果不能,任务就还需要完善。任务描述有歧义时,分数的变化就可能来自对题意的不同理解,而非 Agent 的能力变化。基于模型的评分器也一样:模糊的评分标准会产生不一致的判断。
每项任务都应该能被正确遵循指令的 Agent 完成。这一点可能相当微妙。例如,对 Terminal-Bench 的审计发现:如果任务要求 Agent 编写脚本,却没有指定文件路径,而测试又假定脚本位于某个特定路径,Agent 就可能在自己没有犯错的情况下失败。评分器检查的所有内容,都应该能从任务描述中明确得知;Agent 不应该因规格含糊而失败。对于前沿模型,如果在大量试验中通过率始终为 0%,也就是 pass@100 为 0%,通常更可能意味着任务有问题,而不是 Agent 没有能力,这时应该重新检查任务描述和评分器。为每项任务创建参考解法也很有用:提供一份已知可用、能够通过所有评分器的输出。这既证明任务可解,也能验证评分器配置正确。
步骤 3:构建均衡的题目集合 #
既要测试某种行为应该发生的情况,也要测试它不应该发生的情况。单方面的评估,会带来单方面的优化。例如,如果你只测试 Agent 是否在应该搜索时进行搜索,最后可能会得到一个几乎什么都搜索的 Agent。尽量避免评估中的类别失衡。我们在为 Claude.ai 的网络搜索构建评估时,亲自体会到了这一点。挑战在于:既要防止模型在不该搜索时搜索,又要保留它在合适情况下深入研究的能力。团队为两个方向都构建了评估:模型应该搜索的查询,例如查询天气;以及应该凭已有知识回答的查询,例如「谁创立了苹果公司」。在触发不足,也就是该搜索时没有搜索,与过度触发,也就是不该搜索时却搜索之间找到平衡并不容易,需要对提示和评估进行多轮改进。随着更多示例问题出现,我们也继续把它们加入评估,扩大覆盖范围。
设计评估 Harness 与评分器 #
步骤 4:构建稳健的评估 Harness,提供稳定的环境 #
评估中的 Agent 应当与生产环境中的 Agent 以大致相同的方式运行,而且环境本身不能引入额外噪声,这一点至关重要。每次试验都应该从干净环境开始,彼此隔离。运行之间不必要的共享状态,例如残留文件、缓存数据或资源耗尽,可能因基础设施不稳定而导致相关联的失败,而不是反映 Agent 本身的表现。共享状态也可能人为抬高成绩。例如,在一些内部评估中,我们观察到 Claude 会查看此前试验留下的 Git 历史,从而在某些任务上获得不公平的优势。如果多个不同试验都因同一个环境限制而失败,例如 CPU 或内存资源有限,那么这些试验就不独立,因为它们受到了同一个因素的影响;评估结果也就无法可靠地衡量 Agent 表现。
步骤 5:审慎设计评分器 #
如前所述,优秀的评估设计,需要为 Agent 和任务选择最合适的评分器。我们建议:能用确定性评分器时就用;必要时,或需要额外灵活性时,使用大语言模型评分器;再审慎地使用人工评分器做进一步验证。
一种常见直觉,是检查 Agent 是否遵循了非常具体的步骤,例如是否按正确顺序调用了一串工具。我们发现,这种方式过于僵硬,会产生非常脆弱的测试,因为 Agent 经常找到评估设计者没有预料到的有效路径。为了避免无谓地惩罚创造性,通常最好评价 Agent 产出了什么,而不是它走了哪条路。
对于由多个部分组成的任务,要允许部分得分。一个能够正确识别问题、验证客户身份,却没能处理退款的客服 Agent,显然比一开始就失败的 Agent 更好。评估结果需要体现任务完成了多少,而不只是区分完全成功和彻底失败。
模型评分往往需要认真迭代,才能验证准确性。「大语言模型即裁判」(LLM-as-judge)评分器应该与人类专家的判断紧密校准,让你有信心认为人工评分与模型评分之间没有太大偏差。为了避免幻觉,要给大语言模型留一条退路,例如要求它在信息不足时返回「Unknown」。创建清晰、结构化的评分标准,分别评价任务的各个维度,也会有帮助;然后为每个维度使用独立的大语言模型裁判,而不是让同一个裁判评价全部维度。系统足够稳健后,只需偶尔进行人工审查即可。
一些评估存在隐蔽的失败模式:即使 Agent 表现很好,也会得到低分,因为评分缺陷、Agent Harness 的约束或歧义,阻止了它完成任务。即便是经验丰富的团队,也可能漏掉这些问题。例如,Opus 4.5 最初在 CORE-Bench 上只得到 42%,直到一位 Anthropic 研究员发现了多项问题:僵硬的评分逻辑会在预期答案为「96.124991…」时,惩罚「96.12」这样的答案;任务描述存在歧义;还有一些随机性任务根本无法精确复现。修复缺陷,并换用约束更少的支撑框架后,Opus 4.5 的成绩跃升至 95%。类似地,METR 在其时间跨度基准测试中发现了几项配置错误的任务:任务要求 Agent 优化到一个明确的分数阈值,但评分却要求超过这个阈值。这惩罚了 Claude 这类遵循指令的模型,反而让忽视规定目标的模型获得更高分。认真复查任务与评分器,可以帮助避免这些问题。
要让评分器能够抵抗绕过或投机行为。Agent 不应该轻易「作弊」通过评估。任务和评分器应该设计成:只有真正解决问题才能通过,而不是利用意料之外的漏洞。
长期维护并使用评估 #
步骤 6:检查执行记录 #
除非阅读大量试验的执行记录和评分,否则你不会知道评分器是否工作正常。在 Anthropic,我们投入资源构建查看评估执行记录的工具,也经常专门花时间阅读它们。任务失败时,执行记录能告诉你:究竟是 Agent 真正犯了错,还是评分器拒绝了一个有效方案。它也经常揭示 Agent 和评估行为中的关键细节。
失败应该显得公平:Agent 做错了什么、为什么错,都应清楚明确。当分数没有提高时,我们需要确信原因在于 Agent 表现,而不是评估本身。阅读执行记录,才能验证评估衡量的是否是真正重要的东西;这是 Agent 开发的一项关键技能。
步骤 7:监控能力评估是否饱和 #
通过率达到 100% 的评估,可以追踪回归,却无法提供改进信号。当 Agent 通过了所有可解任务,没有剩余提升空间时,就发生了评估饱和。例如,SWE-bench Verified 的成绩在原文所述的这一年从 30% 起步,而前沿模型如今已超过 80%,正接近饱和。评估接近饱和时,进步速度也会放缓,因为剩下的只有最困难的任务。这会让结果产生误导:巨大的能力提升,可能只表现为分数的小幅增长。例如,代码审查初创公司 Qodo 起初对 Opus 4.5 印象平平,因为他们的单次编程评估没有捕捉到模型在更长、更复杂任务上的进步。为此,他们开发了一套新的 Agent 式评估框架,才更清晰地看到了进展。
译者注:原文在前面的“编程 Agent 评估”一节与此处给出了不同的起始分数,却没有说明两处对比的条件是否一致。译文保留原数字;这两处不能直接当作同一组前后对比。
我们的一项原则是:在有人深入查看评估细节,并阅读部分执行记录之前,不会直接按表面分数下结论。如果评分不公平、任务含糊、有效方案受到惩罚,或者 Harness 限制了模型,就应该修订评估。
步骤 8:通过开放贡献与持续维护,让评估套件长期保持健康 #
评估套件是一份持续演进的产物,需要不断关注,并明确由谁负责,才能持续发挥作用。
在 Anthropic,我们尝试过多种评估维护方式。最有效的方法,是建立专门的评估团队,负责核心基础设施;同时由领域专家和产品团队贡献大多数评估任务,并自行运行评估。
对 AI 产品团队而言,负责并迭代评估,应该像维护单元测试一样日常。团队可能花上数周开发某项 AI 功能,它在早期测试中「能用」,却未能满足那些没有明说的预期;设计良好的评估,本来可以早早揭示这些预期。定义评估任务,是对产品要求进行压力测试、判断其是否足够具体、能否开始开发的最佳方式之一。
我们建议践行评估驱动开发:在 Agent 还无法实现计划中的能力之前,先构建评估来定义这些能力,再持续迭代,直到 Agent 表现良好。在内部,我们经常开发一些今天只能做到「足够好」的功能,押注模型在几个月后的能力。初始通过率较低的能力评估,会具体呈现我们期待模型今后获得的能力。新模型发布时,运行套件就能快速看出哪些押注得到了回报。
最接近产品要求和用户的人,最适合定义成功。以目前的模型能力,产品经理、客户成功经理或销售人员,都可以使用 Claude Code,通过拉取请求(PR)贡献一项评估任务。让他们参与吧!更好的做法,是主动帮助他们做到这一点。
原文图注:创建有效评估的过程。
结合其他方法,全面理解 Agent #
自动化评估可以在不部署到生产环境、不影响真实用户的情况下,对 Agent 运行数千项任务。但这只是理解 Agent 表现的多种方法之一。完整的图景还包括生产监控、用户反馈、A/B 测试、人工执行记录审查,以及系统化的人工评估。
理解 AI Agent 表现的主要方法
| 方法及说明 | 优点 | 局限 |
|---|---|---|
| 自动化评估:通过程序运行测试,不需要真实用户。 | 迭代更快。 完全可复现。 不影响用户。 每次提交都可以运行。 无需部署到生产环境,就能大规模测试场景。 | 前期构建投入较大。 需要随产品和模型演进持续维护,避免偏移。 如果与真实使用模式不符,可能产生虚假的信心。 |
| 生产监控:追踪线上系统中的指标与错误。 | 大规模揭示真实用户行为。 捕捉合成评估遗漏的问题。 为 Agent 的实际表现提供真实依据。 | 属于被动响应:你知道问题之前,用户已经受到影响。 信号可能充满噪声。 需要投入监测与数据采集建设。 缺少可用于评分的标准答案。 |
| A/B 测试:通过真实用户流量比较不同版本。 | 衡量真实用户结果,例如留存与任务完成情况。 控制混杂因素。 可扩展,并具有系统性。 | 缓慢:需要数天或数周才能达到统计显著性,而且需要足够的流量。 只能测试已经部署的改动。 如果无法充分审查执行记录,就较难理解指标变化背后的原因。 |
| 用户反馈:点踩、缺陷报告等明确信号。 | 揭示事先没有想到的问题。 附带来自真实用户的实际案例。 反馈往往与产品目标相关。 | 稀疏,而且由用户自行选择是否反馈。 偏向严重问题。 用户很少解释为什么失败。 无法自动化。 主要依赖用户发现问题,可能给用户带来负面影响。 |
| 人工执行记录审查:由人阅读 Agent 对话。 | 建立对失败模式的直觉。 捕捉自动检查遗漏的细微质量问题。 帮助校准什么算「好」,并理解细节。 | 耗时。 难以规模化。 覆盖不一致。 审查者疲劳或不同审查者的差异,会影响信号质量。 通常只能提供定性信号,无法给出清晰的定量评分。 |
| 系统化人工研究:由受过训练的评分者,对 Agent 输出进行结构化评分。 | 多位人工评分者提供金标准级别的质量判断。 能够处理主观或含糊的任务。 为改进基于模型的评分器提供信号。 | 相对昂贵,反馈周期较长。 难以频繁开展。 评分者间的分歧需要协调。 法律、金融、医疗等复杂领域,需要人类专家参与研究。 |
这些方法对应 Agent 开发的不同阶段。自动化评估在上线前,以及持续集成/持续交付(CI/CD)中尤其有用,可以在每次 Agent 改动和模型升级时运行,作为抵御质量问题的第一道防线。生产监控在上线后发挥作用,用来检测分布漂移和意料之外的真实场景故障。有了足够流量后,A/B 测试可以验证重大改动。用户反馈与执行记录审查,则是持续填补空白的日常工作:不断分流处理反馈,每周抽样阅读执行记录,并按需深入调查。系统化人工研究应留给校准大语言模型评分器,或者评估那些需要以人类共识作为参考标准的主观输出。
译者注:分布漂移在这里指真实使用中的输入或场景发生变化,不再与原先评估所覆盖的情况相同。
原文图注:与安全工程中的「瑞士奶酪模型」类似,没有任何单一评估层能够捕捉所有问题。结合多种方法,可以让穿过某一层的问题,被另一层拦住。
最有效的团队会组合这些方法:用自动化评估快速迭代,用生产监控了解真实情况,再定期通过人工审查进行校准。
结语 #
没有评估的团队,会陷入被动应对的循环:修复一个故障,又引发另一个,还无法区分真正的回归与噪声。尽早投入评估的团队,则会看到相反的结果:失败被转化为测试用例,测试用例防止回归,指标取代猜测,从而加快开发。评估为整个团队提供清晰的改进目标,把「Agent 感觉变差了」转化为可采取行动的问题。它的价值会不断累积,但前提是你把评估当作核心组成部分,而不是事后才补上的东西。
不同类型的 Agent,具体模式有所不同,但本文介绍的基本原则始终适用。尽早开始,不要等待完美套件。从观察到的失败中提炼真实任务。定义没有歧义、足够稳健的成功标准。认真设计评分器,并组合使用多种类型。确保题目对模型来说足够难。不断迭代评估,提高信噪比。阅读执行记录!
AI Agent 评估仍然是一个新兴、快速发展的领域。随着 Agent 承担更长的任务、在多 Agent 系统中协作,并处理越来越主观的工作,我们也需要调整技术方法。随着认识加深,我们会继续分享最佳实践。
致谢 #
本文由 Mikaela Grace、Jeremy Hadfield、Rodrigo Olivares 和 Jiri De Jonghe 撰写。我们也感谢 David Hershey、Gian Segato、Mike Merrill、Alex Shaw、Nicholas Carlini、Ethan Dixon、Pedram Navid、Jake Eaton、Alyssa Baum、Lina Tawfik、Karen Zhou、Alexander Bricken、Sam Kennedy、Robert Ying 等人的贡献。
特别感谢那些通过评估合作让我们获益良多的客户与合作伙伴,包括 iGent、Cognition、Bolt、Sierra、Vals.ai、Macroscope、PromptLayer、Stripe、Shopify、Terminal Bench 团队等。这项工作凝聚了多个团队的共同努力,他们帮助发展了 Anthropic 的评估实践。
附录:评估框架 #
一些开源和商业框架,可以帮助团队实现 Agent 评估,而不必从零构建基础设施。选择哪种框架,取决于 Agent 类型、现有技术栈,以及你需要离线评估、生产可观测性,还是两者都需要。
Harbor 面向在容器化环境中运行 Agent 的场景,提供跨云服务商大规模运行试验的基础设施,以及定义任务和评分器的标准格式。Terminal-Bench 2.0 等流行基准测试通过 Harbor 注册表提供,方便你将既有基准与自定义评估套件一起运行。
Braintrust 是一个结合离线评估、生产可观测性和实验追踪的平台,适合既需要在开发过程中迭代,又需要监控生产质量的团队。它的 autoevals 库提供预先构建好的评分器,覆盖事实性、相关性和其他常见维度。
LangSmith 提供追踪、离线与在线评估,以及数据集管理,并与 LangChain 生态紧密集成。Langfuse 提供类似能力,是一个可自行托管的开源替代方案,适合具有数据驻留要求的团队。
Arize 提供 Phoenix,一个用于大语言模型追踪、调试以及离线或在线评估的开源平台;还提供 AX,一项在 Phoenix 基础上扩展规模化运行、优化和监控能力的软件即服务(SaaS)产品。
许多团队会组合多种工具,自行构建评估框架,或者仅以简单评估脚本作为起点。我们发现,虽然框架有助于加快进展、建立标准,但最终效果仍然取决于你放进去的评估任务。通常最好的做法,是快速选择一个适合工作流的框架,然后把精力投入评估本身,持续迭代高质量的测试用例与评分器。
译注 #
- Eval:evaluation 的简称,本文统一译为「评估」。Agent 与 Harness 保留英文。
- Task、trial、grader、transcript、outcome:分别译为「任务」「试验」「评分器」「执行记录」「最终结果」。执行记录描述过程;最终结果描述环境中实际留下的状态,两者不能相互替代。
- Rubric:译为「评分标准」,指用于判断输出质量的一组明确维度与规则。Ground truth 根据语境译为「标准答案」「真实依据」或「真实情况」。
- pass@k 与 pass^k:前者关注 k 次尝试中至少成功一次,后者关注 k 次全部成功。若假设各次试验独立、每次成功概率均为 p,两者分别为
1 - (1 - p)^k和p^k。原文图注中接近 100% 和 0% 的描述用于说明走势,具体数值取决于成功率和试验次数。 - 两段 YAML 沿用原文字段、路径和英文断言,均为说明评估设计的示意配置,未作为可运行系统进行验证。
- 所提供文本不含原文配图,本文翻译并保留了图注;图示及原文中的外部资料链接,请参阅原文页面。
原文著作权归原作者及 Anthropic 所有。本文为非官方中文译文;如需核对技术细节或措辞,请以原文为准。
一起讨论
选中正文中的文字,可以针对这段内容发起讨论。
正在读取讨论…
在 GitHub 查看与管理讨论 ↗