2AGI.NET | 2AGI 前沿资讯,探索 AI 无限潜力!

2AGI.NET | 探索 AI 无限潜力,2AGI 为您带来最前沿资讯。

欢迎扫码加入 2AGI 社群,参与讨论!

在过去的一年里,我们与数十个团队合作,跨行业构建大型语言模型(LLM)代理。我们发现,最成功的实施并不是使用复杂的框架或专门的库。相反,他们采用的是简单、可组合的模式。

在这篇文章中,我们将分享我们从与客户合作以及自己构建代理中学到的经验,并为开发者提供构建有效代理的实用建议。

上一篇我们讲了 Google AI 智能体白皮书,本文我们将来看看 Anthropic Agent 在理解上有何不同?本报告由 Erik Schluntz 和 Barry Zhang 撰写。该工作借鉴了Anthropic 在构建代理方面的经验,以及客户分享的宝贵见解,2AGI 推荐收藏阅读!

什么是代理?

“代理”可以有多种定义方式。一些客户将代理定义为完全自主的系统,它们可以在长时间内独立运作,使用各种工具来完成复杂的任务。

其他人则用这个词来描述更规范化的实现,这些实现遵循预定义的工作流程。在Anthropic,我们将所有这些变体都归类为代理系统,但在工作流程和代理之间做出了重要的架构区分:

1、Workflows:工作流程是通过预定义的代码路径来协调LLM和工具的系统。

2、Agents:代理则是LLM动态指导自身流程和工具使用的系统,它们掌握着完成任务的方式。

下面,我们将详细探讨这两种类型的代理系统。在附录1(“实践中的代理”)中,我们描述了客户在使用这些系统时发现特别有价值的两个领域。

搞懂使用代理的时机

在使用LLM构建应用程序时,我们建议寻找尽可能简单的解决方案,只有在需要时才增加复杂性。这可能意味着根本不需要构建代理系统。代理系统通常以更高的延迟和成本为代价来换取更好的任务性能,你应该考虑何时这种权衡是合理的。

当需要更多的复杂性时,工作流程为明确定义的任务提供了可预测性和一致性,而当需要大规模的灵活性和模型驱动的决策制定时,代理则是更好的选择。然而,对于许多应用程序来说,通常只需要通过检索和上下文示例来优化单个LLM调用即可。

使用代理的时机

有许多框架可以简化代理系统的实现,包括:

1、LangChain的LangGraph;
2、Amazon Bedrock的AI代理框架;
3、Rivet,一个拖放式GUI LLM工作流构建器;以及
4、Vellum,另一个用于构建和测试复杂工作流的GUI工具。

这些框架通过简化标准的低级任务(如调用LLM、定义和解析工具以及将调用串联起来)使入门变得容易。然而,它们往往会创建额外的抽象层,这可能会掩盖底层的提示和响应,使调试变得困难。它们还可能诱使你在一个简单的设置就足够的情况下增加复杂性。

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

构建模块、工作流程和代理

在这一部分,我们将探讨我们在生产中看到的代理系统的常见模式。我们将从基础构建模块——增强型LLM开始,并逐步增加复杂性,从简单的工作流程到自主代理。

1、构建模块:增强型LLM

代理系统的基石是经过增强的LLM,例如增加了检索、工具和记忆等功能。我们目前的模型可以主动使用这些能力——生成自己的搜索查询,选择合适的工具,并决定保留哪些信息。

我们建议关注实现的两个关键方面:一是将这些能力定制到你的特定用例中,二是确保它们为你的LLM提供一个简单且文档齐全的接口。虽然实现这些增强功能的方法有很多,但一种方法是通过我们最近发布的模型上下文协议,该协议允许开发者通过简单的客户端实现与不断增长的第三方工具生态系统进行集成。

在本文的其余部分,我们将假设每次LLM调用都能访问这些增强功能。

2、工作流程:提示链

提示链将任务分解为一系列步骤,其中每个LLM调用处理前一个的输出。你可以在任何中间步骤添加程序化检查(见下图中的“门控”),以确保流程仍在正确的轨道上。

何时使用此工作流程:当任务可以轻松且清晰地分解为固定的子任务时,这种工作流程是理想的。主要目标是通过使每个LLM调用成为一个更简单的任务,以牺牲延迟为代价换取更高的准确性。

提示链示例:

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

3、工作流程:路由

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

何时使用此工作流程:当任务复杂且存在明确的类别,这些类别可以更好地分别处理,并且分类可以准确地由LLM或更传统的分类模型/算法来处理时,路由工作流程效果很好。

路由示例:

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

4、工作流程:并行化
LLM有时可以同时处理一个任务,并将其输出通过程序进行聚合。这种工作流程,即并行化,主要体现在两种关键变体中:

  • 分段:将任务分解为独立的子任务并同时运行。
  • 投票:多次运行相同任务以获得多样化的输出。

何时使用此工作流程:当分解后的子任务可以并行化以提高速度,或者需要多种视角或尝试以获得更高置信度的结果时,这种并行化工作流程是有效的。对于具有多种考虑因素的复杂任务,LLM通常在每个考虑因素由单独的LLM调用处理时表现更好,这样可以专注于每个具体方面。

并行化示例:

分段:①实施防护措施,其中一个模型实例处理用户查询,而另一个对其进行不当内容或请求的筛选。这通常比让同一个LLM调用同时处理防护措施和核心响应表现得更好。②自动化评估LLM性能,其中每个LLM调用评估模型在给定提示下的不同性能方面。

投票:①审查代码漏洞,其中几个不同的提示审查代码并在发现问题时标记它。②评估给定内容是否不当,多个提示评估不同方面或需要不同的投票阈值以平衡误报和漏报。

5、工作流程:协调者-工作者

在协调者-工作者工作流程中,一个中心LLM动态地分解任务,将其委派给工作者LLM,并综合它们的结果。

何时使用此工作流程:当任务复杂且无法预测所需子任务时(例如在编码中,需要更改的文件数量以及每个文件中更改的性质很可能取决于任务),这种工作流程非常适用。尽管它在拓扑结构上与并行化相似,但关键区别在于其灵活性——子任务不是预先定义的,而是由协调者根据具体输入来确定。

协调者-工作者示例:

  • 编码产品,每次对多个文件进行复杂更改。
  • 搜索任务,涉及从多个来源收集和分析可能的相关信息。

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

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

何时使用此工作流程:当我们可以明确评估标准,并且迭代改进可以提供可衡量的价值时,这种工作流程特别有效。适合使用此工作流程的两个迹象是:

首先,当人类明确表达他们的反馈时,LLM的响应可以明显得到改进;

其次,LLM能够提供这样的反馈。这类似于人类作家在制作一份精炼文档时所经历的迭代写作过程。

7、评估器-优化器示例:

  • 文学翻译:在文学翻译中,翻译LLM最初可能无法捕捉到一些细微之处,但评估器LLM可以提供有用的批评。
  • 复杂搜索任务:在需要多轮搜索和分析以收集全面信息的复杂搜索任务中,评估器LLM可以决定是否需要进一步搜索。

8、代理(Agent)

随着大型语言模型(LLMs)在理解复杂输入、参与推理和规划、可靠使用工具以及从错误中恢复等关键能力上的成熟,代理开始在生产中出现。代理的工作始于人类用户的命令或与人类用户的互动讨论。一旦任务明确,代理便独立进行规划和操作,可能会返回向人类寻求更多信息或判断。

在执行过程中,代理在每一步都必须从环境中获取“真实情况”(例如工具调用结果或代码执行),以评估其进展。然后,代理可以在检查点或遇到阻碍时暂停以获取人类反馈。任务通常在完成后终止,但通常也会包含停止条件(例如最大迭代次数)以保持控制。

代理能够处理复杂的任务,但它们的实现通常很直接。它们通常只是LLM根据环境反馈在循环中使用工具。因此,设计清晰且深思熟虑的工具集及其文档至关重要。我们在附录2(“提示工程你的工具”)中进一步阐述了工具开发的最佳实践。

何时使用代理:当面对难以或无法预测所需步骤数量的开放式问题时,以及无法硬编码固定路径时,可以使用代理。LLM可能会运行很多轮次,你必须对其决策有一定的信任。代理的自主性使它们非常适合在受信任的环境中扩展任务。

代理的自主性意味着更高的成本,以及潜在的错误累积风险。我们建议在沙盒环境中进行广泛的测试,并设置适当的防护措施。

代理示例:

  • 编码代理:用于解决SWE-bench任务,这些任务涉及根据任务描述对多个文件进行编辑;
  • “计算机使用”参考实现:Claude使用计算机来完成任务。

总结:结合和定制这些模式

这些构建模块并不是规定性的。它们是开发者可以根据不同用例进行塑造和组合的常见模式。成功的关键,就像任何LLM功能一样,是衡量性能并对实现进行迭代。重复一下:只有当复杂性明显改善结果时,你才应该考虑增加复杂性。

在LLM领域取得成功并不是关于构建最复杂的系统。而是要构建适合你需求的系统。从简单的提示开始,通过全面评估进行优化,并且只有在更简单的解决方案不足时才增加多步骤的代理系统。

在实现代理时,我们尽量遵循三个核心原则:

1、保持代理设计的简洁性。

2、优先考虑透明度,明确展示代理的规划步骤。

3、通过彻底的工具文档和测试,精心设计你的代理-计算机接口(ACI)。

框架可以帮助你快速开始,但在进入生产阶段时,不要犹豫减少抽象层并使用基本组件构建。遵循这些原则,你可以创建不仅功能强大,而且可靠、可维护并受到用户信任的代理。

原文链接:https://www.anthropic.com/research/building-effective-agents

🔥 热门文章推荐(2AGI.NET)

扫码加入社群,参与讨论

2AGI 技术社区,欢迎扫码加入

AGI (80) AI Agent (3) AI App (1) AI Celebrity (9) AIGC (94) AI 产品工具 (1) AI 名人堂 (9) AI 搜索 (1) AI教程 (3) AI 教程 (2) AI生产力平台 (1) AI领域热词 (1) Claude (1) claude 3.5 sonnet (1) GAN (1) GraphRAG (1) ima (1) kimi.ai (2) kimi ai (4) kimi app (4) Kimi app AI (6) LLM (1) LoRA (1) Michael I. Jordan (1) NotebookLM (1) OTA AI (1) Transformer (1) 一站式解决方案 (1) 人工智能 (2) 优化算法 (1) 内容创作 (1) 天天AI (2) 天天 AI (34) 技术原理 (15) 机器学习 (2) 李飞飞 (2) 梯度下降 (1) 模型微调 (2) 热点资讯 (43) 百度 (1) 秒刷 (1) 行业资讯 (1) 贝叶斯网络 (1) 迁移学习 (1) 酒旅AI产品对比 (1) 领域热词 (28)

By 2AGI

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注