本文主要讲述Anthropic公司在构建大型语言模型(LLM)和智能体(Agents)方面的年度总结和设计原则,内容包括智能体的定义、何时使用智能体、框架的使用、构建模块与工作流、工作流模式、智能体的应用场景。
在过去一年中,与数十个跨行业构建大型语言模型(LLM)智能体的团队展开合作。结果发现,最为成功的实施方案并非依赖复杂的框架或专门的库,而是采用简单且可组合的模式。在本文中,将分享与客户合作以及自身构建智能体过程中所积累的经验,并为开发者提供构建高效智能体的实用建议。
一、什么是智能体
“智能体”的定义方式多种多样。部分客户将其定义为能够长时间独立运行、借助各种工具完成复杂任务的全自动系统;而其他客户则用该术语描述遵循预定义工作流程的规定性实现方式。在 Anthropic,将所有这些变体归类为智能体系统,但在架构上对工作流Workflows和智能体Agents进行了重要区分:
Workflows是通过预定义代码路径编排大语言模型和工具的系统。
Agents则是大语言模型能够动态指导自身流程和工具使用,从而掌控任务完成方式的系统。
接下来,将详细探讨这两种智能体系统。
二、何时使用(及不使用)智能体
在使用大语言模型构建应用程序时,建议尽可能寻找最简单的解决方案,仅在必要时增加复杂性。这可能意味着根本无需构建智能体系统,因为智能体系统通常会在延迟和成本上进行权衡以取得更好的任务表现,所以需要考虑这种权衡是否合理。
当确实需要增加复杂性时,对于定义明确的任务,工作流能够提供可预测性和一致性;而在大规模应用中需要灵活性和模型驱动决策时,智能体则是更好的选择。然而,对于许多应用程序而言,通过检索和上下文示例优化单个大语言模型调用通常就已足够。
三、When & How使用框架
有许多框架可以简化智能体系统的实现,其中包括:
LangChain 的 LangGraph;
Amazon Bedrock 的 AI Agent 框架;
Rivet,一个可拖放的图形用户界面大语言模型工作流构建器;
Vellum,另一个用于构建和测试复杂工作流的图形用户界面工具。
这些框架通过简化诸如调用大语言模型、定义和解析工具以及将调用链接在一起等标准底层任务,使开发者能够轻松上手。但是,它们往往会创建额外的抽象层,这可能会掩盖底层的提示和响应,从而增加调试难度。此外,它们还可能使开发者在简单设置就能满足需求的情况下增加不必要的复杂性。
建议开发者首先直接使用大语言模型应用程序编程接口(API),因为许多模式仅需几行代码即可实现。如果确实使用框架,请务必理解底层代码,因为对底层机制的错误假设是客户出错的常见原因。
四、构建模块、工作流和智能体
在本节中,将探讨在实际生产中所见到的智能体系统的常见模式。将从基础构建模块——增强型大语言模型开始,并逐步增加复杂性,从简单的组合工作流过渡到自主智能体。
1. 构建模块:增强型大语言模型
智能体系统的基本构建模块是经过增强的大语言模型,其增强功能包括检索、工具和记忆等。当前的模型能够主动利用这些功能——生成自己的搜索查询、选择合适的工具并确定要保留的信息。
The augmented LLM
建议在实施过程中重点关注两个关键方面:根据特定用例定制这些功能,并确保为大语言模型提供一个简单易用且文档完备的接口。虽然实现这些增强功能的方法有很多,但一种途径是通过最近发布的模型上下文协议(Model Context Protocol),该协议允许开发者通过简单的客户端实现与不断发展的第三方工具生态系统进行集成。
在本文的其余部分,将假设每个大语言模型调用都具备这些增强功能。
2. 工作流Workflow
(1)提示链(Prompt chaining)
提示链将一个任务分解为一系列步骤,其中每个大语言模型调用处理前一个调用的输出。您可以在任何中间步骤添加程序化检查(见下图中的“Gate”),以确保流程按计划进行。
The prompt chaining workflow
适用场景:此工作流适用于任务能够轻松且清晰地分解为固定子任务的情况。其主要目的是通过使每个大语言模型调用的任务更简单,来在延迟和更高准确性之间进行权衡。
示例:
在生成营销文案并将其翻译成不同语言;
编写文档大纲、检查大纲是否符合特定标准,然后基于大纲编写文档等场景中,提示链非常有用。
(2)路由(Routing)
路由对输入进行分类,并将其导向专门的后续任务。这种工作流实现了关注点分离,并能够构建更专业的提示。如果没有这种工作流,针对一种输入进行优化可能会损害对其他输入的性能。
The routing workflow
适用场景:当复杂任务中存在明显不同的类别,且这些类别能够被准确分类(无论是通过大语言模型还是更传统的分类模型/算法)时,路由工作流效果良好。
示例:
将不同类型的客户服务查询(一般问题、退款请求、技术支持)导向不同的下游流程、提示和工具;
将简单/常见问题路由到较小的模型(如 Claude 3.5 Haiku),而将困难/不寻常问题路由到更强大的模型(如 Claude 3.5 Sonnet),以优化成本和速度。
(3)并行化(Parallelization)
大语言模型有时可以同时处理一个任务,并通过编程方式聚合它们的输出。这种工作流——并行化,主要有两种变体:
分区:将一个任务分解为并行运行的独立子任务。
投票:多次运行相同任务以获得多样化的输出。
The parallelization workflow
适用场景:当分解后的子任务可以并行处理以提高速度,或者需要多个视角或尝试来获得更高置信度的结果时,并行化工作流非常有效。对于具有多个考虑因素的复杂任务,当每个考虑因素由单独的大语言模型调用处理时,大语言模型通常表现更好,因为这样可以专注于每个特定方面。
示例:
分区:在实现防护栏时,一个模型实例处理用户查询,而另一个实例筛选查询中的不当内容或请求,这种方式通常比让同一个大语言模型调用同时处理防护栏和核心响应效果更好;在自动化评估大语言模型性能时,每个大语言模型调用评估模型在给定提示上的不同方面的性能;
投票:在审查一段代码是否存在漏洞时,多个不同的提示对代码进行审查,如果发现问题则进行标记;在评估给定内容是否不适当,多个提示从不同方面进行评估或需要不同的投票阈值来平衡误报和漏报。
(4)协调器-工作者(Orchestrator-workers)
在协调器-工作者工作流中,一个中央大语言模型动态地分解任务,将其委托给工作者大语言模型,并合成它们的结果。
The orchestrator-workers workflow
适用场景:此工作流适用于复杂任务,在这些任务中您无法预测所需的子任务(例如在编码中,需要更改的文件数量以及每个文件中的更改性质可能取决于任务)。虽然它在拓扑结构上与并行化相似,但关键区别在于其灵活性——子任务不是预先定义的,而是由协调器根据特定输入确定。
示例:
在每次对多个文件进行复杂更改的编码产品;
涉及从多个来源收集和分析信息以获取可能相关信息的搜索任务中,协调器 - 工作者工作流非常有用。
(5)评估器-优化器(Evaluator-optimizer)
在评估器-优化器工作流中,一个大语言模型调用生成响应,而另一个调用在循环中提供评估和反馈。
The evaluator-optimizer workflow
适用场景:当有明确的评估标准,并且迭代改进能够提供可衡量的价值时,此工作流特别有效。良好适配的两个标志是:首先,当人类明确表达反馈时,大语言模型的响应能够明显改进;其次,大语言模型能够提供这样的反馈。这类似于人类作者在撰写一篇精美的文档时可能经历的迭代写作过程。
示例:
在文学翻译中,翻译大语言模型可能最初无法捕捉到一些细微差别,但评估大语言模型可以提供有用的批评意见;
在需要多轮搜索和分析以收集全面信息的复杂搜索任务中,评估器决定是否需要进一步搜索。
3. 智能体Agent
随着大语言模型在理解复杂输入、进行推理和规划、可靠地使用工具以及从错误中恢复等关键能力方面的成熟,智能体在实际生产中逐渐兴起。智能体从人类用户的命令或交互式讨论开始工作。一旦任务明确,智能体就会独立进行规划和操作,可能会返回向人类获取进一步的信息或判断。在执行过程中,智能体在每个步骤中从环境中获取“真实情况”(例如工具调用结果或代码执行结果)以评估其进展至关重要。然后,智能体可以在检查点或遇到阻碍时暂停以获取人类反馈。任务通常在完成时终止,但也常常包含停止条件(例如最大迭代次数)以保持控制。
智能体能够处理复杂的任务,但其实现通常较为直接。它们通常只是大语言模型在循环中根据环境反馈使用工具。因此,清晰且深思熟虑地设计工具集及其文档至关重要。在附录 2(“为您的工具进行提示工程”)中详细阐述了工具开发的最佳实践。
Autonomous agent
适用场景:当存在开放式问题,难以或无法预测所需步骤,并且无法硬编码固定路径时,可以使用智能体。大语言模型可能会进行多次操作,并且您必须对其决策有一定程度的信任。智能体的自主性使其非常适合在可信环境中扩展任务。
智能体的自主性质意味着更高的成本,并且可能会出现错误累积的情况。建议在沙盒环境中进行广泛测试,并设置适当的防护措施。
示例:
自己实现的一个编码智能体能够解决 SWE-bench 任务,该任务涉及根据任务描述对许多文件进行编辑;
还有 “计算机使用”参考实现,其中 Claude 使用计算机来完成任务。
High-level flow of a coding agent
五、组合和定制
这些构建模式并非规定性的。它们是开发者可以塑造和组合以适应不同用例的常见模式。与任何大语言模型功能一样,成功的关键在于衡量性能并对实现进行迭代。再次强调:只有在能够明显改善结果时才应增加复杂性。
六、总结
在大语言模型领域取得成功并非在于构建最复杂的系统,而在于构建满足您需求的正确系统。从简单的提示开始,通过全面的评估对其进行优化,并且仅在简单解决方案无法满足需求时才添加多步智能体系统。
在实现智能体时,尝试遵循三个核心原则:
保持智能体设计的简洁性。
通过明确展示智能体的规划步骤来优先考虑透明度。
通过彻底的工具文档和测试精心打造智能体 - 计算机接口(ACI)。
框架可以帮助您快速上手,但在进入生产阶段时,不要犹豫减少抽象层并使用基本组件进行构建。遵循这些原则,您可以创建不仅功能强大,而且可靠、可维护且受用户信任的智能体。
- End -
往期推荐
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...