Skip to content
Go back

构建高效的 AI Agent(翻译自 Anthropic 工程博客)

Edit page

📄 原文信息

本文为中文翻译版本,由 Claude Code 翻译。所有图片均已下载至本地并重新引用。


在过去的一年里,我们与数十个团队合作,在多个行业构建大语言模型(LLM)Agent。我们发现,最成功的实现始终使用简单、可组合的模式,而非复杂的框架或专门的代码库。在这篇文章中,我们将分享与客户合作以及自行构建 Agent 的经验,为开发者提供构建高效 Agent 的实用建议。


什么是 Agent?

“Agent” 一词有多种定义。部分客户将 Agent 定义为完全自主的系统,能够在较长时间内独立运行,使用各种工具完成复杂任务。另一些客户则将其描述为遵循预定义工作流、更具规范性的实现。在 Anthropic,我们将所有这些变体归类为 Agent 系统(agentic system),但在**工作流(workflow)**和 Agent 之间划出了重要的架构分界线:

下面我们将详细探讨这两种类型的 Agent 系统。在附录 1(“实践中的 Agent”)中,我们描述了客户认为使用这些系统特别有价值的两个领域。


何时(以及何时不)使用 Agent

在使用 LLM 构建应用时,我们建议找到最简单的解决方案,仅在必要时增加复杂性。这可能意味着根本不构建 Agent 系统。Agent 系统通常以延迟和成本换取更好的任务性能,你需要权衡这种取舍何时值得。

当对复杂性有更多需求时,工作流为明确定义的任务提供可预测性和一致性;而 Agent 则是在规模上需要灵活性和模型驱动的决策时的更好选择。不过,对于许多应用而言,通过检索和内上下文示例优化单个 LLM 调用通常就足够了。


何时以及如何使用框架

存在许多框架可以让构建 Agent 系统更容易,包括:

但这些框架往往会创建额外的抽象层,可能使底层提示词和响应变得不透明,使调试变得更困难。它们还可能诱使开发者在更简单的设置就足够时增加复杂性。

我们的建议是:首先直接使用 LLM API。许多模式可以在几行代码中实现。如果你确实使用框架,请确保你理解底层代码——对内部机制的错误假设是客户错误的常见来源。

请参阅我们的示例手册获取一些示例实现。


构建块、工作流和 Agent

构建块:增强型 LLM

Agent 系统的基本构建块是通过检索、工具和记忆能力增强的 LLM。我们当前的模型可以主动使用这些功能——生成自己的搜索查询、选择合适的工具,并确定保留什么信息。

增强型 LLM

我们建议重点关注两个方面:根据具体用例定制这些功能,并确保为 LLM 提供简单、文档化良好的接口。虽然实现它们的方法有很多,但近期发布的模型上下文协议(Model Context Protocol)是一个值得一提的方向:它通过通用的客户端实现,让开发者可以轻松集成不断增长的第三方工具生态系统。

在本文的其余部分,我们假设每次 LLM 调用都可以访问这些增强功能。


工作流:提示链(Prompt Chaining)

提示链将任务分解为一系列步骤,每次 LLM 调用处理前一次调用的输出。在任何中间步骤之间,你可以添加程序化检查(gate),以确保流程仍在正确轨道上。

提示链

何时使用此工作流: 当任务可以轻松且清晰地分解为固定的子任务时,此工作流最为理想。主要目标是通过让每次 LLM 调用承担更简单的任务,以延迟换取更高的准确性

提示链的适用示例:


工作流:路由(Routing)

路由将输入分类并将其定向到专门的后续任务。此工作流允许关注点分离和构建更专业的提示词。如果没有此工作流,优化某种输入可能会损害其他输入的性能。

路由

何时使用此工作流: 当复杂任务具有可以准确分类的不同类别,且每个类别可以由专门的提示词更好地处理时。对于分类,LLM 或传统的分类模型/算法都适用。

路由的适用示例:


工作流:并行化(Parallelization)

LLM 有时可以同时处理一个任务,并将输出以编程方式聚合。此工作流有两种关键形式:

并行化

何时使用此工作流: 并行化在以下情况下有效:子任务可以并行化以提高速度,或者需要多个视角/尝试以获得更高置信度的结果。对于涉及多个考虑因素的复杂任务,当每个考虑因素由单独的 LLM 调用处理时,LLM 通常表现得更好,从而允许对每个具体方面进行专注的思考。

并行化的适用示例:


工作流:编排器-工作者(Orchestrator-Workers)

在此工作流中,中央 LLM 动态地分解任务,将它们委托给工作者 LLM,并综合其结果

编排器-工作者

何时使用此工作流: 此工作流非常适合无法预测所需子任务的复杂任务(例如,在编程中,需要更改的文件数量和每个文件中的更改性质可能取决于具体任务)。虽然它在拓扑上类似于并行化,但其关键区别在于其灵活性——子任务不是预定义的,而是由编排器根据特定输入确定的。

编排器-工作者的适用示例:


工作流:评估器-优化器(Evaluator-Optimizer)

在此工作流中,一个 LLM 调用生成响应,而另一个 LLM 调用在循环中提供评估和反馈

评估器-优化器

何时使用此工作流: 当我们有明确的评估标准并且迭代优化能带来可衡量的价值时,此工作流特别有效。适合的两个标志是:首先,当有人清晰阐述反馈时,LLM 响应可以显著改善;其次,LLM 能够提供这种反馈。这类似于人类作家的迭代写作过程,即写出的稿子在审阅后进行改进。

评估器-优化器的适用示例:


Agent

随着 LLM 在理解复杂输入、推理和规划、可靠使用工具以及从错误中恢复等关键能力上的成熟,Agent 开始在产品中出现。Agent 从人类用户的命令或交互讨论开始。一旦任务明确,Agent 就会独立规划和操作,可能返回人类获取更多信息或判断是否完成。在执行过程中,Agent 在每个步骤中都从环境中获取”真实数据”(例如工具调用结果或代码执行结果)来评估其进展。Agent 可以在检查点或遇到阻碍时暂停等待人类反馈。任务通常在完成后终止,但也常见包含停止条件(例如最大迭代次数)以保持控制。

Agent

何时使用 Agent: Agent 可用于开放性问题,其中难以或无法预测所需的步骤数量,并且无法硬编码固定路径。LLM 可能需要许多轮次操作,你必须对其决策保持一定的信任水平。Agent 使其在高信任度任务中大放异彩,同时也意味着更高的构建成本和更大的复合错误可能性。我们建议在沙盒环境中进行大量测试,并设置适当的护栏。

Agent 的适用示例(来自我们自己的实现):

编程 Agent 的高层流程


组合和定制这些模式

这些构建块不是规定性的——它们是开发者可以根据不同用例塑造和组合的常见模式。与任何 LLM 功能一样,成功取决于衡量性能迭代实现。重复一遍:你应该仅在它明显改善结果时才考虑增加复杂性


总结

在 LLM 领域的成功不是关于构建最复杂的系统,而是关于构建适合你需求的系统。从简单的方式开始,通过全面的评估来优化,仅在更简单的方案不足时才添加多步骤的 Agent 系统。

在实现 Agent 时,我们尝试遵循三个核心原则:

  1. 保持 Agent 设计的简单性。
  2. 通过明确展示 Agent 的计划步骤来优先考虑透明度。
  3. 通过全面的工具文档和测试,精心打造 Agent-计算机接口(ACI)。

框架可以帮助你快速入门——但不要犹豫减少抽象层,在转向生产环境时回到基本的提示词和工具。最重要的是,遵循一个核心原则:仅在能够带来明显更好结果时才增加复杂性。


致谢

本文由 Erik S. 和 Barry Zhang 撰写,基于我们在 Anthropic 构建 Agent 的经验以及众多客户与我们分享的宝贵见解。


附录 1:实践中的 Agent

A. 客户支持

客户支持将熟悉的聊天机器人界面与通过工具集成增强的能力相结合。这很自然地适合更多开放式的 Agent 系统,因为:

几家公司已经通过按使用付费的模式成功验证了此用例,该模式仅对成功的解决方案收费。这展示了 Agent 系统如何提供既有价值又可通过现有指标衡量的服务。

B. 编程 Agent

软件开发领域展示了 LLM 功能的巨大潜力——从代码补全发展到自主解决问题。Agent 特别有效,因为:

在我们的实现中,Agent 现在可以仅凭拉取请求描述解决 SWE-bench Verified 基准测试中的真实 GitHub issue。然而,虽然自动化测试有助于验证功能,但人的审查对于确保解决方案符合更广泛的系统要求至关重要


附录 2:工具的提示工程

在 Anthropic,我们允许 Claude 通过 API 中的**工具使用**功能与外部服务交互。虽然提示词是告诉模型要做什么,但工具定义提供了关于如何执行的详细说明。如果你刚开始接触工具使用,请阅读我们的工具使用开发者指南

随着你开始构建 Agent 系统,花在优化工具上的精力不应少于花在整体提示词上的精力。在决定工具定义的格式时,我们有以下几项建议:

这里的指导原则是:投入与创建好的人机界面同样多的精力来创建好的 Agent-计算机界面(ACI)。 以下是更多关于如何做到这一点的建议:

在为 SWE-bench 构建我们的 Agent 时,我们花了更多时间优化工具,而非整体提示词。例如,我们发现 Agent 在使用相对文件路径的工具时会在 Agent 移出根目录后出错。为了解决这个问题,我们切换到要求绝对文件路径——结果模型完美无误地使用了这种方法。


— 翻译完 —


Edit page
Share this post on:

Next Post
OpenClaw 完整安装教程(Windows/Linux/macOS)