过去一年,我们与多个行业的团队共同致力于构建大语言模型(LLM)代理。从这些项目的经验中,我们发现,最成功的实现并不依赖于复杂的框架或专业的库,而是采用了简单、可组合的设计模式。因此,我们在本文中将分享我们从客户合作中学到的经验,并为开发者提供一些关于构建高效代理的实用建议。
什么是代理(Agents)?
“代理”这个概念有很多不同的定义。一些客户将代理定义为完全自主的系统,这些系统可以长时间独立运行,并利用各种工具完成复杂任务;而另一些则把代理看作是遵循预定义工作流程的系统。在 Anthropic,我们将这些不同的实现统称为代理系统(Agentic Systems),但在架构上,我们将工作流(Workflows)和代理(Agents)做了一个重要区分:
-
• 工作流(Workflows):是通过预定义的代码路径来协调LLM和工具的系统。 -
• 代理(Agents):是让LLM动态控制其任务执行过程和工具使用的系统,具备自我决策和调整的能力。
我们将在接下来的部分详细探讨这两种类型的代理系统。
何时(以及何时不)使用代理?
在使用LLM构建应用时,我们建议开发者尽量选择最简单的解决方案,只有在必要时才增加复杂性。这意味着,某些情况下可能根本不需要构建代理系统。代理系统往往需要在延迟和成本上做出权衡,以换取更好的任务表现,因此需要根据实际需求进行权衡。
如果任务较为简单且明确,使用工作流能带来更高的可预测性和一致性;而当任务需要灵活性和基于模型的决策时,代理则更为适用。对于许多应用场景,优化单次LLM调用(例如通过检索和上下文示例)通常就足够了。
何时使用框架,如何使用框架?
市面上有许多框架可以帮助实现代理系统的构建,其中一些常见的框架包括:
-
• LangGraph(LangChain) -
• 亚马逊Bedrock的AI代理框架 -
• Rivet,一个拖拽式LLM工作流构建工具 -
• Vellum,另一个用于构建和测试复杂工作流的GUI工具
这些框架简化了诸如调用LLM、定义和解析工具、串联调用等低级任务。然而,它们通常会增加额外的抽象层次,可能使得底层的提示和响应更加难以调试。我们建议开发者从直接使用LLM的API开始,很多模式可以通过几行代码实现。如果必须使用框架,一定要理解其底层代码,因为对框架的错误假设是常见的错误来源。
你可以参考我们的cookbook了解一些示例实现。
代理系统的构建模块、工作流和代理
在这一部分中,我们将探讨一些我们在生产环境中看到的代理系统常见模式。从基础的构建模块——增强型LLM开始,逐步增加复杂度,从简单的组合工作流到完全自主的代理系统。
构建模块:增强型LLM
代理系统的基础构建模块是增强型LLM,它结合了检索、工具和记忆等扩展功能。我们的当前模型能够主动使用这些功能——例如生成自己的搜索查询、选择合适的工具并决定保留哪些信息。

我们建议开发者关注两个关键方面:一是根据具体应用场景定制这些功能,二是为LLM提供一个易于使用且文档完善的接口。为实现这些增强功能,一个可行的方法是通过我们最近发布的模型上下文协议(Model Context Protocol),该协议使开发者可以轻松集成第三方工具。
工作流:提示链式调用(Prompt Chaining)
提示链式调用将任务分解为一系列步骤,每一步的输出成为下一步的输入。在每个中间步骤上,你可以加入程序化的检查(如“gate”)以确保过程顺利进行。

何时使用提示链式工作流:当任务能够被清晰地拆解成多个子任务时,提示链式工作流非常适用。通过将每个LLM调用变得更简单,可以在提高准确度的同时减少延迟。
适用场景示例:
-
• 生成市场营销文案,然后将其翻译成不同语言。 -
• 编写文档大纲,检查大纲是否符合特定标准,然后基于大纲撰写文档。
工作流:路由(Routing)
路由工作流将输入分类并将其引导至专门的后续任务。这种方式有助于处理复杂任务,避免因优化某种类型的输入而影响其他类型的任务表现。

何时使用路由工作流:当任务可以划分为不同的类别,每个类别适合不同的处理方式时,路由工作流非常有效。可以使用LLM或传统的分类模型/算法准确地进行分类。
适用场景示例:
-
• 将不同类型的客户服务问题(如一般问题、退款请求、技术支持)引导到不同的后续流程、提示和工具。 -
• 将简单/常见问题路由到较小的模型(如Claude 3.5 Haiku),而将复杂/特殊问题路由到更强大的模型(如Claude 3.5 Sonnet)以优化成本和速度。
工作流:并行化(Parallelization)
并行化允许LLM在同一任务中同时处理多个子任务,并通过编程方式汇总它们的输出。并行化有两个主要变体:
-
• 分段(Sectioning):将任务拆分为独立的子任务并行处理。 -
• 投票(Voting):对同一任务多次运行,以获得多样化的输出。

何时使用并行化工作流:当任务能够并行处理以提高速度,或需要多角度尝试以确保高置信度结果时,并行化非常有效。
适用场景示例:
-
• 分段: -
• 实现“防护”措施,其中一个模型实例处理用户查询,另一个筛选不当内容或请求。 -
• 自动化评估LLM性能的任务,每个LLM调用评估模型在特定提示下的不同表现。 -
• 投票: -
• 审查代码漏洞,多次运行不同的提示来评估和标记问题。 -
• 评估一段内容是否不当,多个提示从不同角度进行评估,以平衡假阳性和假阴性的概率。
工作流:协调者-工作者(Orchestrator-Workers)
在协调者-工作者工作流中,一个中心LLM动态拆解任务,委派给多个工作者LLM,并将它们的结果汇总。

何时使用协调者-工作者工作流:对于任务的子任务无法预先定义的复杂任务,协调者-工作者工作流非常适用。
适用场景示例:
-
• 在编码任务中,处理每次需要更改多个文件的复杂更改。 -
• 搜索任务,需要从多个来源收集和分析信息以寻找相关内容。
工作流:评估者-优化器(Evaluator-Optimizer)
在评估者-优化器工作流中,一个LLM生成响应,另一个LLM提供评估和反馈,并在循环中不断改进。

何时使用评估者-优化器工作流:当任务有明确的评估标准,并且通过反复修正可以获得显著的价值时,评估者-优化器工作流非常有效。
适用场景示例:
-
• 文学翻译,初始翻译可能无法完全捕捉细微差别,评估者LLM提供改进建议。 -
• 复杂的搜索任务,需要多轮搜索和分析以收集全面信息,评估者决定是否继续进一步搜索。
代理的实际应用
随着LLM在理解复杂输入、推理与规划、可靠使用工具以及从错误中恢复等能力上不断成熟,代理系统开始在生产中崭露头角。代理系统从人类用户的命令或互动讨论开始任务,任务明确后,代理可以独立工作,并在需要时返回人类进行反馈和判断。

代理系统的实现通常比较简单,通常只需通过工具与环境反馈进行循环执行。因此,设计清晰且思路明确的工具集和文档至关重要。在不同的生产环境中,代理能够提高效率和执行的精确度,尤其是在需要处理大量且复杂的数据时。
代理与工具的集成
代理的核心优势之一在于它们能够智能地选择、组合和控制各种工具,完成特定任务。在实际应用中,这些工具通常包括:
-
• 外部API接口:如数据库查询、网络搜索、用户行为分析等。 -
• 系统命令与文件操作:如文件读取、写入、程序执行等。 -
• 多轮对话与用户交互:帮助代理理解上下文,做出更符合人类意图的决策。
例如,在一个客户服务场景中,代理可以与CRM系统集成,获取客户的历史数据,在客户提问时提供个性化的回答;或者在需要处理多个步骤的任务时,代理能够根据当前的情境自动选择合适的工具或API进行调用。代理与工具的灵活集成,不仅提升了任务执行的准确性,还可以显著减少开发时间。
代理的多轮推理与自我修正
代理系统的另一个关键优势是它们可以在任务过程中进行多轮推理和自我修正。传统的任务执行模式往往依赖于固定的流程,错误或不理想的输出往往无法得到及时调整。而代理则能够根据每一步的反馈,调整下一步的执行策略。
-
• 推理过程:代理会根据输入的数据,评估当前的状态并决定最佳的行动方案。如果某一步的执行结果不符合预期,代理可以根据预设的规则或反馈调整后续步骤。 -
• 自我修正:如果代理在执行过程中发现某些错误或误解,它可以调用调试工具或询问人类进行更正。此外,代理还可以基于历史反馈来调整自身的策略,使得每次执行的结果越来越精确。
例如,在一个财务报告生成任务中,代理首先根据初始输入生成报告草稿。若草稿不符合要求,代理会根据客户反馈进行调整,修改报告的某些部分,然后进行下一轮的改进。通过多轮迭代,最终生成符合要求的报告。
结语
代理系统的构建无疑是AI领域中一个令人兴奋的进展。通过有效的设计和合理的工具集成,代理不仅能够提升任务执行的效率,还能在动态环境中作出智能决策。然而,随着复杂性的增加,我们需要不断优化代理系统,确保其在各种应用场景中都能高效、精准地工作。
对于开发者来说,理解代理系统的构建模块、工作流设计和工具集成的最佳实践,将是实现高效代理的关键。通过实践和不断优化,你将能够打造出既高效又灵活的AI代理系统,为各类任务提供强有力的支持。