凌晨,Anthropic发布了一篇播客,分享了与客户合作以及自己构建Agent的经验,并为开发者提供构建有效Agent的实用建议。Anthropic公司的Claude系列模型,已经在今年市场份额,已经翻倍,达到了40%多。
豆包总结的思维导图如下:
下文为原文译文:
构建大型语言模型Agent的实用建议
过去一年,我们与数十个团队合作,构建了跨行业的大型语言模型 (LLM) Agent。我们发现,最成功的实施方案并没有使用复杂的框架或专门的库,而是使用简单、可组合的模式构建的。
在本文中,我们将分享我们从与客户合作以及自行构建Agent的过程中获得的经验,并为开发人员提供构建有效Agent的实用建议。
什么是Agent?
“Agent”有多种定义方式。一些客户将Agent定义为完全自主的系统,它们可以在较长时间内独立运行,并使用各种工具来完成复杂的任务。其他人则使用该术语来描述遵循预定义工作流程的更规范的实施方案。在 Anthropic,我们将所有这些变体都归类为Agent系统,但在工作流程和Agent之间做出了重要的架构区分:
-
工作流程是指通过预定义的代码路径来协调 LLM 和工具的系统。
-
Agent则是指 LLM 动态地指导自身流程和工具使用的系统,并保持对如何完成任务的控制。
下面,我们将详细探讨这两种类型的Agent系统。在附录 1(“实践中的Agent”)中,我们描述了客户发现使用此类系统特别有价值的两个领域。
何时(以及何时不)使用Agent
在使用 LLM 构建应用程序时,我们建议找到尽可能简单的解决方案,仅在需要时才增加复杂性。这可能意味着根本不构建Agent系统。Agent系统通常会牺牲延迟和成本来换取更好的任务性能,您应该考虑这种权衡何时合理。
当需要更高的复杂性时,工作流程为定义明确的任务提供可预测性和一致性,而当需要大规模的灵活性和模型驱动的决策时,Agent是更好的选择。然而,对于许多应用程序来说,使用检索和上下文示例优化单个 LLM 调用通常就足够了。
何时以及如何使用框架
有许多框架可以简化Agent系统的实施,包括:
-
LangChain 的 LangGraph;
-
Amazon Bedrock 的 AI Agent框架;
-
Rivet,一个拖放式 GUI LLM 工作流程构建器;以及
-
Vellum,另一个用于构建和测试复杂工作流程的 GUI 工具。
这些框架通过简化调用 LLM、定义和解析工具以及将调用链接在一起等标准底层任务,使入门变得容易。但是,它们通常会创建额外的抽象层,这些抽象层可能会掩盖底层的提示和响应,从而使调试更加困难。它们还可能使人们倾向于在简单的设置就足够的情况下增加复杂性。
我们建议开发人员首先直接使用 LLM API:许多模式可以用几行代码实现。如果您确实使用框架,请确保您了解底层代码。对底层代码的错误假设是客户错误的常见来源。
请参阅我们的cookbook以获取一些示例实现。
构建块、工作流程和Agent
在本节中,我们将探讨我们在生产中看到的Agent系统的常见模式。我们将从我们基础的构建块——增强型 LLM 开始,并逐步增加复杂性,从简单的组合工作流程到自主Agent。
构建块:增强型 LLM
Agent系统的基本构建块是使用检索、工具和内存等增强功能增强的 LLM。我们目前的模型可以主动使用这些功能——生成它们自己的搜索查询、选择合适的工具并确定要保留的信息。
增强型 LLM
我们建议关注实施的两个关键方面:针对您的特定用例定制这些功能,并确保它们为您的 LLM 提供简单、文档完善的接口。虽然有很多方法可以实现这些增强功能,但一种方法是通过我们最近发布的模型上下文协议,该协议允许开发人员通过简单的客户端实现与不断增长的第三方工具生态系统集成。
在本博文的剩余部分中,我们将假设每个 LLM 调用都可以访问这些增强功能。
工作流程:prompt chaining
提示链将任务分解为一系列步骤,其中每个 LLM 调用处理前一个调用的输出。您可以在任何中间步骤添加程序化检查(请参阅下图中的“gate”),以确保流程仍在正轨上。
提示链工作流程
**何时使用此工作流程:**此工作流程非常适合可以轻松干净地分解为固定子任务的情况。主要目标是通过使每个 LLM 调用成为更简单的任务来权衡延迟以获得更高的准确性。
提示链接有用的示例:
-
生成营销文案,然后将其翻译成另一种语言。
-
编写文档大纲,检查大纲是否符合某些标准,然后根据大纲编写文档。
工作流程:Routing
路由对输入进行分类,并将其定向到专门的后续任务。此工作流程允许关注点分离,并构建更专业的提示。如果没有此工作流程,针对一种输入进行优化可能会损害其他输入的性能。
路由工作流程
**何时使用此工作流程:**路由适用于存在最好单独处理的不同类别,并且可以通过 LLM 或更传统的分类模型/算法准确处理分类的复杂任务。
路由有用的示例:
-
将不同类型的客户服务查询(一般问题、退款请求、技术支持)定向到不同的下游流程、提示和工具。
-
将简单/常见的问题路由到像 Claude 3.5 Haiku 这样的小型模型,将困难/不寻常的问题路由到像 Claude 3.5 Sonnet 这样功能更强大的模型,以优化成本和速度。
工作流程:Parallelization
LLM 有时可以同时处理一项任务,并以编程方式聚合它们的输出。这种工作流程(并行化)表现为两种主要变体:
-
**分段:**将一项任务分解为并行运行的独立子任务。
-
**投票:**多次运行同一任务以获得不同的输出。
并行化工作流程
**何时使用此工作流程:**当可以并行化分解的子任务以提高速度,或者需要多个视角或尝试以获得更高的置信度结果时,并行化是有效的。对于具有多个考虑因素的复杂任务,当每个考虑因素由单独的 LLM 调用处理时,LLM 通常表现更好,从而可以专注于每个特定方面。
并行化有用的示例:
-
**分段:**实施护栏,其中一个模型实例处理用户查询,而另一个模型实例筛选它们是否包含不适当的内容或请求。这往往比让同一个 LLM 调用同时处理护栏和核心响应表现更好。
-
自动执行评估以评估 LLM 性能,其中每个 LLM 调用评估模型在给定提示下性能的不同方面。
-
**投票:**审查一段代码是否存在漏洞,其中几个不同的提示审查代码并在发现问题时标记代码。
-
评估给定内容是否不适当,多个提示评估不同的方面或需要不同的投票阈值以平衡误报和漏报。
工作流程:Orchestrator-workers
在协调器-工作器工作流程中,中央 LLM 动态地分解任务,将其委托给工作器 LLM,并综合它们的结果。
协调器-工作器工作流程
**何时使用此工作流程:**此工作流程非常适合您无法预测所需子任务的复杂任务(例如,在编码中,需要更改的文件数量以及每个文件中更改的性质可能取决于任务)。虽然在形态上相似,但与并行化的主要区别在于其灵活性——子任务不是预定义的,而是由协调器根据特定输入确定的。
协调器-工作器有用的示例:
-
每次都对多个文件进行复杂更改的编码产品。
-
涉及从多个来源收集和分析信息以查找可能的
工作流程:Evaluator-optimizer
在评估器-优化器工作流程中,一个 LLM 调用生成响应,而另一个 LLM 调用在循环中提供评估和反馈。
评估器-优化器工作流程
何时使用此工作流程:当我们有明确的评估标准,并且迭代改进提供可衡量的价值时,此工作流程尤其有效。良好匹配的两个标志是:首先,当人类清楚地表达他们的反馈时,LLM 响应可以明显改进;其次,LLM 可以提供此类反馈。这类似于人类作家在创作润色后的文档时可能经历的迭代写作过程。
评估器-优化器有用的示例:
-
文学翻译,其中存在翻译 LLM 最初可能无法捕捉到的细微差别,但评估器 LLM 可以提供有用的评论。
-
需要多轮搜索和分析以收集全面信息的复杂搜索任务,其中评估器决定是否需要进一步搜索。
Agent
随着 LLM 在关键功能方面的成熟——理解复杂输入、进行推理和规划、可靠地使用工具以及从错误中恢复,Agent正在生产中涌现。Agent以人类用户的命令或交互式讨论开始其工作。一旦任务明确,Agent就会独立计划和操作,并可能返回给人类以获取更多信息或判断。在执行过程中,Agent必须在每个步骤(例如工具调用结果或代码执行)从环境中获得“真实情况”,以评估其进度。然后,Agent可以在检查点或遇到障碍时暂停以获取人工反馈。任务通常在完成后终止,但通常也包括停止条件(例如最大迭代次数)以保持控制。
Agent可以处理复杂的任务,但它们的实现通常很简单。它们通常只是在循环中基于环境反馈使用工具的 LLM。因此,清晰周到地设计工具集及其文档至关重要。我们在附录 2(“提示工程你的工具”)中扩展了工具开发的最佳实践。
自主Agent
**何时使用Agent:**Agent可用于难以或不可能预测所需步骤数量的开放性问题,并且您无法硬编码固定路径。LLM 可能会运行很多轮,您必须对其决策制定有一定的信任度。Agent的自主性使其非常适合在受信任的环境中扩展任务。
Agent的自主性意味着更高的成本,以及潜在的累积错误。我们建议在沙盒环境中进行广泛的测试,并采取适当的护栏。
Agent有用的示例:
以下示例来自我们自己的实现:
-
用于解决涉及根据任务描述编辑多个文件的SWE-bench 任务的编码Agent;
-
我们的“computer use”参考实现,其中 Claude 使用计算机来完成任务。
编码Agent的高级流程
组合和自定义这些模式
这些构建块不是规定性的。它们是开发人员可以塑造和组合以适应不同用例的常见模式。与任何 LLM 功能一样,成功的关键是衡量性能并迭代实施。再次重申:您应该仅在它能明显改善结果时才考虑增加复杂性。
总结
在 LLM 领域的成功不在于构建最复杂的系统。而在于构建适合您需求的系统。从简单的提示开始,通过全面的评估对其进行优化,并且仅在更简单的解决方案不足时才添加多步骤Agent系统。
在实施Agent时,我们尝试遵循三个核心原则:
-
保持Agent设计的简单性。
-
通过明确显示Agent的计划步骤来优先考虑透明度。
-
通过全面的工具文档和测试精心设计您的Agent-计算机接口 (ACI)。
框架可以帮助您快速入门,但当您转向生产时,请毫不犹豫地减少抽象层并使用基本组件进行构建。通过遵循这些原则,您可以创建不仅功能强大,而且可靠、可维护并受到用户信任的Agent。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。