什么是智能体(Agents)?
智能体(Agent)可以从多个角度进行定义。一些客户将智能体定义为完全自主的系统,这些系统能够在较长时间内独立运行,并使用各种工具来完成复杂任务。另一些客户则用这一术语来描述遵循预定义工作流程的规范性实现。Anthropic 将所有这些变体归类为智能体系统(agentic systems),但在架构上对工作流程(workflows)和智能体(agents)进行了重要区分:
- 工作流程(Workflows):这类系统中,大语言模型(LLMs)和工具通过预定义的代码路径进行编排。
- 智能体(Agents):这类系统中,大语言模型(LLMs)动态地指导自身的流程和工具使用,保持对任务完成方式的控制。
接下来,我们将详细探讨这两种类型的智能体系统。
何时使用(以及何时不使用)智能体
在构建基于大语言模型(LLMs)的应用程序时,我们建议尽可能寻找最简单的解决方案,只有在需要时才增加复杂性。这可能意味着根本不需要构建智能体系统。智能体系统通常以延迟和成本为代价换取更好的任务性能,因此您需要权衡这种取舍是否合理。
当确实需要更高的复杂性时,工作流程(workflows)为定义明确的任务提供了可预测性和一致性,而智能体(agents)则是在需要灵活性和模型驱动的决策时更好的选择。然而,对于许多应用场景来说,通过检索和上下文示例优化单个大语言模型(LLM)调用通常已经足够。
何时以及如何使用框架
有许多框架可以简化智能体系统的实现,包括:
- LangChain的LangGraph;
- Amazon Bedrock 的AI Agent框架;
- Rivet,一个拖放式图形用户界面(GUI)大语言模型(LLM)工作流程构建工具;
- Vellum,另一个用于构建和测试复杂工作流程的GUI工具。
这些框架通过简化标准的底层任务(如调用大语言模型、定义和解析工具、以及链式调用)使入门变得容易。然而,它们通常会引入额外的抽象层,可能会掩盖底层的提示(prompts)和响应,从而增加调试难度。此外,它们可能会诱使开发者在简单设置足够的情况下增加不必要的复杂性。
我们建议开发者首先直接使用大语言模型API:许多模式只需几行代码即可实现。如果你确实需要使用框架,请确保你理解底层的代码。对底层机制的错误假设是客户常见错误的来源。
查看官方手册以获取一些示例实现。
构建模块、工作流与智能体(blocks, workflows and agents)
接下来我们将探讨在生产环境中常见的智能体系统(agentic systems)模式。我们将从基础构建模块——增强型大语言模型(augmented LLM)开始,逐步增加复杂性,从简单的组合工作流(compositional workflows)到自主智能体(autonomous agents)。
构建模块:增强型大语言模型(The augmented LLM)
智能体系统的基本构建模块是一个通过增强功能(如检索、工具和记忆)优化的大语言模型(LLM)。我们当前的模型能够主动利用这些能力——生成自己的搜索查询、选择合适的工具,并决定保留哪些信息。
我们建议在实现过程中重点关注两个关键方面:
-
根据您的具体用例定制这些功能,确保它们为大语言模型(LLM)提供易于使用且文档完善的接口。
-
虽然实现这些增强功能的方法有很多,但其中一种方式是通过Anthropic最近发布的模型上下文协议(Model Context Protocol)。该协议允许开发者通过简单的客户端实现与不断增长的第三方工具生态系统集成。
后续我们将假设每次大语言模型(LLM)调用都能访问这些增强功能。
工作流程(Workflows
)
提示链
(Prompt Chaining)
提示链(Prompt Chaining)是一种将任务分解为一系列步骤的方法,其中每个大语言模型(LLM)调用都处理前一个步骤的输出。你可以在任何中间步骤中添加程序化检查(如下图所示中的“gate”),以确保整个流程仍在正确的轨道上。
适用场景:
此工作流程非常适合那些可以轻松且清晰地将任务分解为固定子任务的情况。其主要目标是通过让每个LLM调用处理更简单的任务,以牺牲一定的延迟(latency)来换取更高的准确性(accuracy)。
适用示例:
-
生成营销文案(Marketing Copy),然后将其翻译成另一种语言。
-
编写文档大纲(Outline),检查大纲是否符合特定标准,然后根据大纲撰写文档。
通过这种方式,提示链(Prompt Chaining)能够有效地将复杂任务分解为可管理的步骤,从而提高整体输出的质量和准确性。
路由(Routing)
路由(Routing)是一种对输入进行分类并将其引导至专门的后续任务的工作流程。这种方法实现了关注点分离(Separation of Concerns),并允许构建更专业化的提示(Specialized Prompts)。如果没有这种工作流程,针对某一种输入的优化可能会损害其他输入的性能。
适用场景:
路由(Routing)非常适合处理复杂任务,尤其是当任务可以明确分为不同类别且这些类别更适合单独处理时。此外,分类(Classification)需要能够被准确执行,无论是通过大语言模型(LLM)还是更传统的分类模型/算法(Classification Model/Algorithm)。
适用示例:
-
将不同类型的客户服务查询(如一般问题、退款请求、技术支持)引导至不同的下游流程、提示(Prompts)和工具中。
-
将简单/常见的问题路由到较小的模型(如Claude 3.5 Haiku),而将困难/不常见的问题路由到更强大的模型(如Claude 3.7 Sonnet),以优化成本(Cost)和速度(Speed)。
通过路由(Routing),可以更高效地处理多样化任务,同时确保每种输入都能得到最合适的处理方式,从而提升整体性能和资源利用率。
并行化(Parallelization)
大语言模型(LLMs)有时可以同时处理任务,并通过程序化方式聚合它们的输出。这种工作流程,即并行化(Parallelization),主要体现在两种关键形式中:
-
分段(Sectioning):将任务分解为独立的子任务并并行运行。
-
投票(Voting):多次运行同一任务以获得多样化的输出。
适用场景:
并行化(Parallelization)在以下情况下非常有效:
-
当分解后的子任务可以并行执行以提高速度时;
-
当需要多种视角或多次尝试以获得更高置信度的结果时。
对于涉及多方面考虑的复杂任务,通常每个方面由单独的大语言模型(LLM)调用处理会表现更好,因为这样可以集中注意力于每个具体方面。
适用示例:
分段(Sectioning):
-
实施防护措施(Guardrails),其中一个模型实例处理用户查询,而另一个模型实例筛查不适当的内容或请求。这种方式通常比让同一个大语言模型(LLM)调用同时处理防护措施和核心响应效果更好。
-
自动化评估(Automating Evals)以评估大语言模型(LLM)性能,其中每个大语言模型(LLM)调用评估模型在给定提示(Prompt)下的不同方面表现。
投票(Voting):
-
审查一段代码是否存在漏洞,其中多个不同的提示(Prompts)对代码进行审查并在发现问题时标记。
-
评估某段内容是否不适当,多个提示(Prompts)评估不同方面或要求不同的投票阈值(Vote Thresholds)以平衡误报(False Positives)和漏报(False Negatives)。
通过并行化(Parallelization),可以显著提升任务处理效率和结果的可靠性,尤其是在需要多角度或多层次分析的场景中。
协调器-工作者(Orchestrator-Workers)
在协调器-工作者(Orchestrator-Workers)工作流程中,一个中央大语言模型(LLM)动态地分解任务,将其分配给工作者大语言模型(Worker LLMs),并综合它们的结果。
适用场景:
这种工作流程非常适合复杂任务,尤其是在无法预先确定所需子任务的情况下(例如,在编码任务中,需要更改的文件数量以及每个文件中的更改性质可能取决于具体任务)。尽管在拓扑结构上与并行化(Parallelization)相似,但其关键区别在于灵活性——子任务并非预先定义,而是由协调器(Orchestrator)根据具体输入动态决定。
适用示例:
-
编码产品,每次需要对多个文件进行复杂更改。
-
搜索任务,涉及从多个来源收集和分析信息以寻找可能的相关内容。
通过协调器-工作者(Orchestrator-Workers)工作流程,可以高效处理动态性强、复杂度高的任务,同时确保任务分解和结果合成的灵活性。
评估器-优化器(Evaluator-Optimizer)
在评估器-优化器(Evaluator-Optimizer)工作流程中,一个大语言模型(LLM)调用生成响应,而另一个大语言模型(LLM)在循环中提供评估和反馈。
适用场景:
这种工作流程在以下情况下特别有效:
-
当有明确的评估标准(Evaluation Criteria)时;
-
当迭代优化(Iterative Refinement)能够提供可衡量的价值时。
适合使用此工作流程的两个标志是:
-
当人类明确表达反馈时,大语言模型(LLM)的响应能够显著改进;
-
大语言模型(LLM)能够提供类似的反馈。 这与人类作家在撰写一篇精炼文档时可能经历的迭代写作过程(Iterative Writing Process)类似。
适用示例:
-
文学翻译(Literary Translation),其中可能存在一些细微差别,翻译大语言模型(Translator LLM)可能最初无法捕捉,但评估大语言模型(Evaluator LLM)可以提供有用的批评和改进建议。
-
复杂搜索任务,需要多轮搜索和分析以收集全面信息,其中评估器(Evaluator)决定是否需要进行进一步的搜索。
通过评估器-优化器(Evaluator-Optimizer)工作流程,可以显著提升任务输出的质量,尤其是在需要精细调整和多轮优化的场景中。
智能体(Agents)
随着大语言模型(LLMs)在关键能力上的成熟——理解复杂输入(Understanding Complex Inputs)、进行推理和规划(Reasoning and Planning)、可靠地使用工具(Using Tools Reliably)以及从错误中恢复(Recovering from Errors)——智能体(Agents)正在生产中逐渐崭露头角。
智能体(Agents)通常从人类用户的命令或交互式讨论开始工作。一旦任务明确,智能体会独立规划和操作,并可能返回向人类用户请求更多信息或判断。在执行过程中,智能体必须在每一步从环境中获取“真实数据”(Ground Truth)(例如工具调用结果或代码执行结果)以评估其进展。智能体可以在检查点(Checkpoints)或遇到阻碍时暂停以获取人类反馈。任务通常在完成后终止,但也常见设置停止条件(Stopping Conditions)(例如最大迭代次数)以保持控制。
智能体(Agents)能够处理复杂的任务,但其实现通常较为直接。它们通常只是大语言模型(LLMs)在循环中基于环境反馈使用工具。因此,清晰且深思熟虑地设计工具集及其文档至关重要。
适用场景:
智能体(Agents)适用于开放式问题(Open-Ended Problems),其中难以或无法预测所需的步骤数量,也无法硬编码固定路径。大语言模型(LLM)可能会运行多个回合,因此必须对其决策能力有一定程度的信任。智能体(Agents)的自主性使其成为在受信任环境中扩展任务的理想选择。智能体(Agents)的自主性意味着更高的成本以及错误累积的可能性。我们建议在沙盒环境(Sandboxed Environments)中进行广泛测试,并设置适当的防护措施(Guardrails)。
适用示例:

组合和定制
这些范式不是严格规定好的。而是开发者可以根据不同应用场景进行塑造和组合的常见模式。和任何LLM功能一样,成功的关键,是衡量性能并迭代落地。重复一遍:只有当增加复杂度能够明显改善结果时,才应考虑增加复杂性。
智能体示例
1. 客户支持(Customer Support)
客户支持(Customer Support)将熟悉的聊天机器人界面与通过工具集成增强的能力相结合。这种方法非常适合开放式智能体(Open-Ended Agents),因为:
- 支持交互自然遵循对话流程,同时需要访问外部信息和操作;
- 可以集成工具以提取客户数据(Customer Data)、订单历史(Order History)和知识库文章(Knowledge Base Articles);
- 诸如发放退款(Issuing Refunds)或更新工单(Updating Tickets)等操作可以通过程序化方式处理;
- 成功可以通过用户定义的解决方案(User-Defined Resolutions)清晰衡量。
多家公司已经通过基于使用量的定价模型(Usage-Based Pricing Models)证明了这种方法的可行性,这些模型仅对成功解决的案例收费,显示出对其代理(Agents)有效性的信心。
2. 编码代理(Coding Agents)
软件开发领域展示了大语言模型(LLMs)功能的显著潜力,其能力从代码补全(Code Completion)发展到自主问题解决(Autonomous Problem-Solving)。智能体(Agents)在这一领域特别有效,因为:
- 代码解决方案可以通过自动化测试(Automated Tests)验证;
- 智能体(Agents)可以使用测试结果作为反馈迭代解决方案;
- 问题空间(Problem Space)定义明确且结构化;
- 输出质量可以客观衡量。
在Anthropic的项目实现中,智能体现在可以仅基于拉取请求描述(Pull Request Description)解决SWE-bench Verified基准测试中的真实GitHub问题。然而,尽管自动化测试有助于验证功能,人工审查(Human Review)对于确保解决方案符合更广泛的系统要求仍然至关重要。
通过客户支持(Customer Support)和编码代理(Coding Agents), 智能体系统(Agentic Systems) 展示了其在处理复杂任务和提升效率方面的巨大潜力。
总结(Summary)
在大语言模型(LLMs)领域取得成功,并不是要构建最复杂的系统,而是要构建适合需求的系统。从简单的提示(Simple Prompts)开始,通过全面评估(Comprehensive Evaluation)进行优化,只有在简单解决方案不足时,才考虑添加多步骤的智能体系统(Multi-Step Agentic Systems)。
在实现智能体(Agents)时,我们遵循以下三个核心原则:
-
保持设计的简洁性(Maintain Simplicity in Your Agent's Design):避免不必要的复杂性,确保系统易于理解和维护。
-
优先考虑透明度(Prioritize Transparency):明确展示代理的规划步骤(Planning Steps),使用户能够理解其决策过程。
-
精心设计智能体-计算机接口(Agent-Computer Interface, ACI):通过详细的工具文档(Tool Documentation)和测试(Testing)确保接口的可靠性和易用性。
框架可以帮助您快速入门,但在进入生产环境时,不要犹豫减少抽象层(Abstraction Layers)并使用基本组件(Basic Components)进行构建。通过遵循这些原则,可以创建不仅功能强大,而且可靠、可维护并赢得用户信任的智能体(Agents)。
通过灵活结合与定制这些模式(Combining and Customizing These Patterns),开发者能够构建出高效、透明且用户友好的智能体系统(Agentic Systems),从而满足多样化的需求。