image-20250306125220010

在过去一年中,我们与数十个团队合作,构建了跨行业的大语言模型 (LLM) AI 智能体。我们发现,最成功的案例并非依赖复杂的框架或专门的库,而是采用简单且可组合的模式。 在这篇文章中,我们将分享我们与客户合作以及自身构建 AI 智能体的经验,并为开发者提供构建高效 AI 智能体的实用建议。

“Agent”(AI 智能体)可以用几种方式来定义。一些客户将智能体定义为完全自主的系统,这些系统在较长时间内独立运行,并使用各种工具来完成复杂的任务。另一些人则使用该术语来描述更具规范性的实现,这些实现遵循预定义的workflow(工作流程)。在Anthropic,我们将所有这些变体归类为agentic systems(智能体系统),但在架构上对workflows(工作流程)和agents(智能体)进行了重要的区分:

  • Workflows(工作流程)是指大语言模型(LLM)和工具通过预定义的代码路径进行编排的系统。
  • Agents(智能体)是指大语言模型(LLM)动态地指导其自身流程和工具使用的系统,保持对其如何完成任务的控制。

下面,我们将详细探讨这两种类型的智能体系统。在附录1(“实践中的智能体”)中,我们描述了客户发现使用这些系统具有特殊价值的两个领域。 在使用大语言模型构建应用程序时,我们建议尽可能采用最简单的解决方案,仅在必要时才增加复杂性。 这可能意味着完全不构建 AI 智能体系统。AI 智能体系统通常会牺牲延迟和成本来换取更好的任务性能,因此您应该仔细衡量这种权衡是否值得。 当需要更高的复杂性时,对于定义明确的任务,工作流程能够提供可预测性和一致性;而当需要在更大规模上实现灵活性和模型驱动的决策时,AI 智能体则是更优的选择。 然而,对于许多应用而言,通过检索和上下文示例来优化单个大语言模型的调用通常就已足够。

何时以及如何使用框架?

有许多框架可以更轻松地实现 AI 智能体系统,包括:

  • LangChain 的 LangGraph
  • Amazon Bedrock 的 AI 智能体框架
  • Rivet,一个拖放式 GUI LLM 工作流程构建器
  • Vellum,另一个用于构建和测试复杂工作流程的 GUI 工具。

这些框架通过简化标准底层任务(如调用 LLM、定义和解析工具以及将调用链接在一起)来简化入门。但是,它们通常会创建额外的抽象层,从而模糊底层提示词和响应,从而使其更难调试。当更简单的设置就足够时,它们也可能使添加复杂性变得很诱人。

我们建议开发人员首先直接使用 LLM API:许多模式可以用几行代码实现。如果您确实使用框架,请确保您了解底层代码。关于底层代码的不正确假设是客户错误的常见来源。

构建模块、工作流程和 AI 智能体

在本节中,我们将探讨我们在生产环境中观察到的 AI 智能体系统的常见模式。我们将从我们的基础构建模块——增强型大语言模型——开始,并逐步增加复杂性,从简单的组合工作流程到自主 AI 智能体。 构建模块:增强型大语言模型 Agentic 系统 的基本构建模块是一个大语言模型,它通过检索、工具和记忆等增强功能得到加强。我们目前的模型可以主动使用这些能力——生成自己的搜索查询,选择合适的工具,并确定要保留哪些信息。 Image 1

我们建议重点关注实现的两个关键方面:根据您的特定用例定制这些功能,并确保它们为您的 大语言模型 提供一个简单、有据可查的接口。虽然有很多方法可以实现这些增强功能,但一种方法是通过我们最近发布的Model Context Protocol,该协议允许开发人员通过一个简单的客户端实现与不断增长的第三方工具生态系统集成。 在本帖的剩余部分,我们将假设每个 大语言模型 调用都可以访问这些增强功能。 工作流:提示链 提示链将一个任务分解成一系列步骤,其中每个大语言模型(LLM)调用处理前一个调用的输出。 您可以在任何中间步骤中添加程序化检查(参见下图中的“门控”),以确保该过程仍在正轨上。 Image 2

提示链工作流

何时使用此工作流: 此工作流非常适合可以轻松且干净地分解为固定子任务的情况。 主要目标是通过使每个大语言模型(LLM)调用成为一项更简单的任务,以牺牲延迟为代价来换取更高的准确性。

提示链有用的示例:

  • 生成营销文案,然后将其翻译成不同的语言。
  • 编写文档大纲,检查大纲是否符合某些标准,然后根据大纲编写文档。

工作流程:路由

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

何时使用此工作流程: 对于存在不同类别且最好单独处理的复杂任务,以及可以通过大语言模型 (LLM) 或更传统的分类模型/算法准确处理分类的情况,路由效果良好。

路由有用的示例:

  • 将不同类型的客户服务查询(一般问题、退款请求、技术支持)定向到不同的下游流程、提示词和工具。
  • 将简单/常见的问题路由到像 Claude 3.5 Haiku 这样的小型模型,将困难/不常见的问题路由到像 Claude 3.5 Sonnet 这样更强大的模型,以优化成本和速度。

工作流程:并行化

大语言模型有时可以同时处理一个任务,并通过编程方式聚合它们的输出。 这种工作流程,即并行化,主要体现在两种关键变体中:

  • Sectioning:将一个任务分解为可以并行运行的独立子任务。
  • Voting:多次运行同一任务以获得不同的输出,从而获得多样化的结果。 Image 4

何时使用此工作流程: 当划分的子任务可以并行化以提高速度,或者当需要多个视角或多次尝试以获得更高置信度的结果时,并行化是有效的。 对于具有多个考虑因素的复杂任务,通常情况下,如果每个考虑因素都由单独的大语言模型调用来处理,大语言模型通常表现更好,从而可以将注意力集中在每个特定方面。

并行化有用的示例:

  • 分段处理
    • 实施防护栏机制,其中一个模型实例处理用户查询,而另一个模型实例筛选不适当的内容或请求。 这种方法通常比让同一个大语言模型同时处理防护栏和核心响应效果更好。
    • 自动化评估流程,用于评估大语言模型的性能,其中每次大语言模型调用都会评估模型在给定提示词下性能的不同方面。
  • 投票机制
  • 审查一段代码是否存在漏洞,使用多个不同的提示词审查代码,如果发现问题则标记该代码。
  • 评估给定的内容是否不适当,使用多个提示词评估不同的方面,或者设置不同的投票阈值来平衡误报和漏报。

工作流:协调器-工作者

在协调器-工作者工作流中,一个中央大语言模型动态地分解任务,将其委派给工作者大语言模型,并综合它们的结果。 Image 5

何时使用此工作流: 此工作流非常适合复杂的任务,在这些任务中,您无法预测所需的子任务(例如,在编码中,需要更改的文件数量以及每个文件中更改的性质可能取决于任务)。 虽然它在拓扑结构上相似,但与并行化的关键区别在于其灵活性——子任务不是预先定义的,而是由协调器决定的。

以下是 orchestrator-workers 发挥作用的示例:

coding产品:每次迭代都会对多个文件进行复杂的修改。

搜索任务:需要从多个来源收集和分析信息,以寻找潜在的相关信息。

工作流程:评估器-优化器

在评估器-优化器工作流程中,一个大语言模型调用生成响应,而另一个大语言模型调用在一个循环中提供评估和反馈。

img

何时使用此工作流程: 当我们有明确的评估标准,并且迭代改进能提供可衡量的价值时,此工作流程特别有效。 两个适合的标志是:第一,当人类清晰地表达他们的反馈时,大语言模型的响应可以被显著改进;第二,大语言模型能够提供这样的反馈。 这类似于人类作家在撰写一篇润色过的文档时可能经历的迭代写作过程。

评估器-优化器有用的例子:

文学翻译,其中存在翻译器 LLM 最初可能无法捕捉到的细微差别,但评估器 LLM 可以提供有用的评论。

复杂的搜索任务,需要多轮搜索和分析才能收集全面的信息,评估器决定是否需要进一步搜索。

AI 智能体

随着大语言模型在关键能力上的成熟,AI 智能体正在生产中涌现——理解复杂输入、进行推理和规划、可靠地使用工具以及从错误中恢复。AI 智能体从人类用户的命令或互动讨论开始其工作。一旦任务明确,AI 智能体就会独立计划和运作,可能会返回给人类以获取更多信息或判断。在执行过程中,对于 AI 智能体来说,在每个步骤中从环境中获得“实际情况”(例如工具调用结果或代码执行)以评估其进展至关重要。然后,AI 智能体可以在检查点或遇到障碍时暂停以获取人工反馈。任务通常在完成后终止,但通常也包括停止条件(例如最大迭代次数)以保持控制。 AI 智能体可以处理复杂的任务,但它们的实现方式通常非常直接。它们本质上就是大语言模型,通过循环利用基于环境反馈的工具来完成任务。因此,清晰且周到地设计工具集及其文档至关重要。关于工具开发的最佳实践,我们将在附录 2(“工具的提示词工程”)中进行更详细的阐述。

img

何时使用智能体:当面临开放式问题,难以或无法预测所需的步骤数量,并且无法硬编码固定路径时,可以使用智能体。 大语言模型可能会经过多次迭代才能完成任务,因此您必须对其决策过程有一定的信任。 智能体的自主性使其成为在可信环境中扩展任务的理想选择。 智能体的自主性意味着更高的成本以及累积错误的风险。 我们建议在沙盒环境中进行广泛的测试,并采取适当的保护措施。

智能体适用场景示例: 以下示例来自我们自己的实际应用:

一个用于解决 SWE-bench 任务的编码 AI 智能体,它根据任务描述对多个文件进行编辑;

我们的“计算机使用”参考实现,其中 Claude 使用计算机来完成任务。

img

结合和定制这些模式

这些构建块并非规定性的。它们是开发者可以塑造和结合以适应不同用例的常见模式。与任何大语言模型功能一样,成功的关键在于衡量性能并迭代实现。重申一遍:只有在能够证明复杂性能够显著改善结果时,才应考虑增加复杂性。

总结

在大语言模型领域的成功不在于构建最复杂的系统,而在于构建适合您需求的系统。从简单的提示词开始,通过全面的评估来优化它们,并且仅在更简单的解决方案不足时才添加多步骤的 AI 智能体系统。 在实施 AI 智能体时,我们尝试遵循三个核心原则: 保持 AI 智能体设计的简洁性。 通过明确展示 AI 智能体的规划步骤来优先考虑透明度。 通过全面的工具文档和测试,精心设计您的 AI 智能体-计算机接口 (ACI)。 框架可以帮助您快速入门,但当您转向生产时,请毫不犹豫地减少抽象层并使用基本组件进行构建。通过遵循这些原则,您可以创建不仅强大而且可靠、可维护且受用户信任的 AI 智能体。