我的学习笔记

土猛的员外

【翻译】AI Agents Are All You Need

大语言模型(LLM) 已经存在了几年,它们正在迅速向 AI AgentsAgents Workflow发展。不要误解我的意思,大语言模型(LLM)是很棒的,但他们在自动化方面仍然不够有效。大语言模型与其他工具相结合是利用大语言模型(LLM)所拥有的通用智能的一种非常有效的方式,通过消耗大量的Tokens。大语言模型最大的问题是他们有迷失的倾向(幻觉和自我一致性),我们永远不知道大语言模型(LLM)或代理(Agents)什么时候会失败。在这些失败的周围几乎没有护栏,但我们还远远没有结束利用大语言模型(LLM)通用智能的全部能力。

因此,在今天的博客中,我们将深入探讨:

  • 大语言模型(LLM)的未来是什么样子;
  • 我们如何从RAG管道转向Agents;
  • 以及创建一个可行的基于LLM的AI Agent(工具使用、Memory和规划)有哪些挑战?;
  • 最后,我们研究不同类型的Agents,以及AI Agents和RAG的未来是什么样子.

从RAG到AGENTS

RAG是一种半参数型系统,其中参数部分为大语言模型(LLM),其余部分为非参数部分。把所有不同的部分结合起来就得到了半参数系统。大语言模型(LLM)将所有信息存储在其权重或参数中(以编码形式),而系统的其余部分没有定义该知识的参数。

但为什么这能解决问题呢?

  • 交换索引(大语言模型中的特定信息)为我们提供了定制,这意味着我们不会遭受过时知识,而且我们可以修改索引中的内容
  • 用这些指数为大语言模型提供基础信息意味着我们减少了幻觉,我们可以通过指向来源来引用和归因。

因此,原则上,RAG使我们能够为大语言模型交互创造更好的情境化,使其表现良好.

img

为了更好地理解RAG,不要忘记查看这篇RAG 2.0文章

Agent是一种自动推理和决策引擎。它接受用户输入/查询,并为执行该查询做出内部决策,以便返回正确的结果。关键的agent组件可以包括但不限于:

  • 把一个复杂的问题分解成更小的问题
  • 选择要使用的外部工具 + 提出调用工具的参数
  • 计划出一组任务
  • 存储以前完成的任务在内存模块

img

图:AI Agents的总体概述

我们有不同类型的Agents,从简单的到极其复杂的。根据任务的复杂性,我们设计这些Agents,使它们能够自主地决定选择可用的工具。DevinAI就是这样一个最近被大肆宣传的AI Agents。下图显示了不同类型的Agents及其复杂程度。

img

图:Agents的复杂程度比较

Agent系统概述

在一个由LLM驱动的自主Agents系统中,LLM充当Agents的大脑,利用不同的组件在数字世界中行动。

1. Tool use(工具使用)

  • Agents学习调用外部api或工具来获取模型权重中可能缺失的额外信息/上下文或功能(通常在预训练后很难更改)。这包括当前信息、数学引擎、代码执行能力、对专有信息源的访问等等。

2. Memory(记忆体)

  • 短期记忆: 上下文学习(参见prompt工程)可以被认为是利用模型的短期记忆来处理给定的问题。上下文长度窗口可以被认为是短期记忆。
  • 长期记忆: 提供Agents保留和回忆(无限)信息的能力,通常通过利用外部向量存储和快速检索。RAG中的检索部分可以看作是长时记忆。

3. Planning(规划)

  • 子目标和任务分解: Agents将较大的任务分解为较小的、可管理的子目标,从而能够有效地处理复杂的任务。
  • 反思和改进: Agents可以对过去的行为进行自我批评(尽管在某些方面存在疑问)和自我反思,从错误中吸取教训,并为未来的步骤进行改进,从而改进最终的结果。

img

AI Agents的Tool Usage

能够使用工具是人类与其他生物在很多方面的区别。我们创造、修改和利用外部物体来扩展我们的身体和认知能力。同样,为大语言模型配备外部工具可以显著扩展其功能。

在AI Agents设置中,工具对应于一组工具集合,这些工具集合使LLM Agents能够与外部环境(如谷歌搜索、代码解释器、数学引擎等)进行交互。工具也可以是某种形式的数据库、知识库和外部模型。当Agents与外部工具交互时,它通过工作流执行任务,这些工作流帮助Agents获得观察结果或必要的上下文,以完成给定的子任务并最终完成完整的任务。

以下是大语言模型如何以不同方式利用工具的几个例子:

  • MRKL(模块化推理,知识和语言)是一个框架,将大语言模型与大语言模型或符号(计算器或天气API)的专家模块相结合。
  • HuggingGPT -一个LLM驱动的Agents,利用LLM作为任务规划器连接各种现有的AI模型(基于描述)来解决AI任务。

img

图:Hugging GPT的工具使用

HuggingGPT的整个过程如上图所示,如原文所述可分为四个阶段:

任务规划: 使用ChatGPT分析用户的请求,了解用户的意图,并将其分解为可能可解决的任务。

模型选择: 为了解决计划任务,ChatGPT根据模型描述选择托管在Hugging Face上的专家模型。

任务执行: 调用并执行每个选定的模型,并将结果返回给ChatGPT。

响应生成: 最后,利用ChatGPT整合各模型的预测,为用户生成响应。

请仔细查看下图,以了解HuggingGPT在真实示例中的工作原理。

img

ChatGPT插件和OpenAI API函数调用是大语言模型(LLM)在实践中增强工具使用能力的好例子。工具api的集合可以由其他开发人员提供(如在插件中)或自定义(如在函数调用中)。

解决代理工作流中的Memory问题

Memory可以定义为用于获取、存储、保留和以后检索信息的资源或存储。在任何计算系统中都有几种类型的Memory。

缓冲记忆(感觉记忆):
就像感觉记忆作为感觉信息的短暂保留(任务一完成就会消失)一样,计算机系统中的缓存可以保存瞬时数据,就像指令集一样。对于大语言模型(LLM),这可以指token缓冲区或输入队列。

工作记忆(短时记忆,STM):
大语言模型在处理文本时,采用类似于人类工作记忆的机制。他们使用注意力机制来保持对输入的特定部分的“关注”。在像GPT这样基于Transformer的模型中,注意权值的作用与STM类似,一次保留和处理几条信息。LLM的工作记忆是它的上下文长度

参数记忆(长期记忆,LTM):
大语言模型的参数(或权重)可以看作是长期记忆的一种形式。一旦训练完成,这些参数就会对从训练数据中收集到的大量信息进行编码,并且可以无限期地保留。

  • 显式/陈述性Memory→ 在大语言模型(LLM)中,陈述性Memory的等效物将是用于基于所学事实和概念生成响应的权重。这些可以被访问并用于产生与模型在训练期间“记忆”的知识相关的显式输出。例如,Elon Musk是特斯拉的所有者,这是存储在模型权重中的特定内容。
  • 内隐/程序Memory→这是一种更广义的Memory系统,通过各种任务的重复练习(训练)来捕捉抽象或概念,而不是直接的事实。*例如,什么是美?*没有具体的答案,但系统将能够回答这个问题。

在大语言模型中,“Memory”不是以离散事件的形式存储,而是以模式(抽象的世界模型,虽然不完全)的形式表示,通过相互连接的节点网络,模型通过基于其训练状态动态生成响应来“回忆”信息。

外部记忆可以解决注意力持续时间有限的问题。标准做法是将Embedding向量(文本转换为密集向量)保存到一个向量存储数据库中,该数据库可以支持快速的最大内积搜索(MIPS)。为了优化检索速度,通常的选择是近似最近邻(ANN) 算法,它返回大约前k个最近邻,以牺牲一点精度来换取巨大的加速。

这种检索的一些算法:LSHANNOYHNSWFAISSScaNN

所有这些方法——LSH、ANNOY、HNSW、FAISS和ScaNN——背后的一般原理是在高维空间中有效地近似最近邻搜索。这些方法的设计是为了克服精确搜索的计算强度,通过使用策略,以一种允许更快检索的方式将相似的数据点分组在一起。

规划:当前AI Agents的最大问题

Agents有时可以进行大量调用来回答单个/简单的问题,为每个向LLM发出的查询积累tokens。这不仅代价高昂,而且还会带来延迟。token生成仍然是一个相对缓慢的过程,基于LLM的应用程序中的大多数(不是全部)延迟来自生成输出tokens。反复调用LLM并要求它提供想法/观察,我们最终会生成大量输出tokens(成本),导致高延迟(降低用户体验)。

如下图所示。为了获得正确的答案或动作,大语言模型(LLM)会发出多个请求,由于树或图形式的Agents工作流的固有结构,通常会引入很多延迟。

有很多这样的论文,即思想链思想树思想算法

img

图:不同类型的提示技巧

在这些高级提示策略中,最新的是“思想算法”:这篇新论文背后的思想与“思想树”论文相同,但主要区别在于如何保存上下文。在思想树中,我们使用基于树的数据结构,但在这里,我们使用基于图的结构,从而为我们提供了一种比使用简单的BFS或DFS更好的导航所有知识图谱的方法。

另一个优点是,思想算法使用的LLMprompts要少得多,以达到类似的结果。这些提示策略背后的整个想法是用最少的LLM电话获得最多的上下文。

阅读一个关于所有这些不同策略的好博客:赋予大语言模型自我反思能力PromptBreeder.)

AI代理的另一个问题是大语言模型是不确定的。虽然有利于创意的产生,但这在需要可预测性的场景中提出了严重的挑战。例如,如果我们正在编写一个llm支持的聊天应用程序来进行Postgres查询(Text2SQL),我们需要高可预测性。

自我反省

上述规划模块不涉及任何反馈,这使得很难实现长期规划,特别是解决复杂任务所必需的。为了应对这一挑战,我们可以创建一个过程,以迭代地反映和改进基于过去的行动和观察的执行计划。目标是纠正和改进过去的错误,这有助于提高最终结果的质量。这在复杂的现实环境和任务中尤其重要,因为反复试验是完成任务的关键。

ReAct

ReAct结合了推理和行动,旨在使LLM能够通过在一系列步骤(重复N次)之间交错来解决复杂的任务:ThoughtActionObservation。ReActprompts大语言模型为任务生成口头推理痕迹和操作。这允许系统执行动态推理来创建、维护和调整行动计划,同时还支持与外部环境(例如,Wikipedia)的交互,以将附加信息合并到推理中。

img

下图显示了ReAct的一个示例以及执行问题回答所涉及的不同步骤。

img

Reflexion

这是一个为智能体提供动态记忆和自我反思能力以提高推理能力的框架。反射有一个标准的强化学习设置,其中奖励模型提供一个简单的二元奖励,操作空间遵循ReAct中的设置,其中特定于任务的操作空间用语言增强,以支持复杂的推理步骤。在每个动作𝑎𝑡之后,智能体计算一个启发式<e:1>𝑡,并根据自我反思的结果选择性地决定重置环境以开始新的尝试。

img

启发式函数确定轨迹何时无效或包含幻觉并应停止。低效的计划指的是花费太长时间却没有成功的轨迹。幻觉被定义为在环境中遇到一系列连续的相同动作,导致相同的观察结果。

关于创造更好的自我反思能力,还有两篇更有趣的论文后见之明链(Chain of Hindsight) (CoH;Liu et . 2023)和算法蒸馏 (Algorithm Distillation)((AD;Laskin et al. 2023)。

CoH中,模型被要求通过查看自己过去的工作来改进自己,进行评分,并附上关于下次如何做得更好的笔记。该模型通过使用其自身尝试和反馈的历史,尝试产生一个将获得更好评级的新输出来进行实践。为了防止模型只记住答案,在训练过程中隐藏了历史的某些部分。

AD将类似的想法应用于机器人或代理学习任务(如电子游戏中的强化学习代理)。代理回顾它在过去几次尝试中的表现,并试图找出改进的模式。然后,它预测下一步应该比之前的动作更好,学习变得更好的策略,而不仅仅是解决特定问题的方法。

人工智能侧重于从智能体自身与环境相互作用的历史中学习。通过观察过去的一系列行为及其结果,智能体试图将成功的策略提炼成它的策略。

另一方面,反射使代理能够记住过去的行为并反思其有效性,特别是专注于发现和避免重复或无效的策略(如幻觉)。

Agents的类型

Routing Agents(路由Agents)

最简单的主观推理形式。给定用户查询和选择集,输出要将查询路由到的选择子集。

img

在上面的问题“作者在艺术学校期间做了什么?” 被传递给路由器。路由器的工作是确定查询通过系统检索最相关信息的最佳路径。

路由器可以选择两种可能的路径:

向量查询引擎: 该引擎根据查询向量和文档向量之间的语义相似性从一个较大的集合中检索top-k相关文档。它使用向量空间模型来理解和检索语义上最接近查询的文档。

摘要查询引擎: 该引擎检索所有文档并提供其内容的摘要。它允许系统广泛地理解一个主题,而无需单独浏览每个文档。

根据路由器做出的决定,返回文档的特定子集(来自矢量查询引擎)或所有相关文档的摘要(来自摘要查询引擎)来回答用户的查询。这从根本上改变了LLM最终返回的Output类型。有些问题可能需要详细的答案,有些问题可能需要更广泛的答案。这些路由器代理帮助我们修改大语言模型的行为。

Query Planning Agents(查询规划代理)

Query Planning Agents背后的思想是,首先将复杂的查询分解为每个相关数据源的子问题,然后收集所有中间响应并合成最终响应。

img

查看查询计划代理如何通过子查询获得更好的响应。查看Llama索引子查询.)

img

Tool Using Agents(工具使用代理)

这些类型的代理可以使用工具或API,推断运行该工具所需的参数,并将其结果返回给LLM上下文,以获得更准确的答案。

img

所有这些都很酷,但代理如何解决顺序多部分问题?代理如何在一段时间内保持状态?

这就是HuggingGPT(如上所述)ChemCrow等更先进的药物出现的地方。在这些多代理设置中,系统可以使用多个工具,并且通常还集成了动态内存。这些系统通常使用像ReAct和reflection这样的方法来在代理的环境和操作中具有细微的自一致方法。

img

以下是用于构建LLM代理的一些值得注意的工具和框架示例

  • Langchain:一个用于开发由语言模型驱动的应用程序和代理的框架。
  • AutoGPT:提供构建AI代理的工具。
  • AutoGen:一个框架,允许使用多个代理开发LLM应用程序,这些代理可以相互交谈以解决任务。
  • LlamaIndex -一个将自定义数据源连接到大型语言模型的框架。
  • GPT Engineer:自动生成代码以完成开发任务。
  • DemoGPT:自主AI代理创建交互式流光应用程序。

最后,我们应该明白,无论RAG/AI Agents是生是死,框架都是有价值的。来自这些近期发展的某些概念将会消失,但其他概念将会保留和发展。

结论

LLM代理仍然处于起步阶段,在构建它们时仍然存在许多挑战和限制,例如基于LLM的代理需要调整角色以有效地完成领域中的任务,能够进行长期规划,广义的人类一致性,可靠性,知识限制等等。

在未来,我们可能会研究更高级的概念,如KV缓存和LLM编译器和操作系统。

请查看解决现代RAG系统中的生产问题-i 部分-ii代理工作流程 RAG 2.0.)

References

[1] https://medium.com/aiguys/solving-production-issues-in-modern-rag-systems-b7c31802167c

[2] https://medium.com/aiguys/solving-production-issues-in-modern-rag-systems-ii-43c5fb557d27

[3] https://medium.com/aiguys/next-for-llms-and-rag-ai-agentic-workflows-1869ba0a6796

[4] https://medium.com/aiguys/rag-2-0-retrieval-augmented-language-models-3762f3047256

[5] https://www.youtube.com/watch?v=mE7IDf2SmJg&list=PLoROMvodv4rNiJRchCzutFw5ItR_Z27CM&index=26

[6] https://drive.google.com/file/d/1Ckw4kWj-DS27aCAFdmxg8gQFtr2adQAH/view

[7] https://www.promptingguide.ai/research/llm-agents

[8] https://arxiv.org/pdf/2303.17580.pdf

[9] https://arxiv.org/pdf/2308.10379.pdf

[10] https://arxiv.org/pdf/2210.03629.pdf

[11] https://arxiv.org/pdf/2303.11366.pdf

原文:https://medium.com/aiguys/ai-agents-are-all-you-need-0b38e8ee5481

原作者:Vishal Rajput


我们的创业项目已经上线!!!

TorchV AI,帮助企业快速进入AI时代!

具体详情,请点击官网咨询


最新内容,关注“土猛的员外”公众号