前言
LLM(大型语言模型)已经存在了几年,它们正迅速发展成为AI Agent和Agent工作流。不要误会,LLM确实很棒,但它们仍然不足以自动化处理所有事务。将LLM与其他工具结合使用是充分利用LLM所具备的通用智能的高效方式,通过消耗大量的语言数据。LLM的最大问题在于它们容易在某些地方迷失(产生幻觉和自一致性),我们永远不知道LLM或Agent何时会失败。虽然在这些失败周围有一些防范措施,但我们远未充分利用LLM的通用智能能力。
因此,在今天的博客中,我们将深入探讨LLM的未来,我们如何从RAG(Retrieval-Augmented Generation)管道转向Agent,以及创建可行的基于LLM的AI Agent(工具使用、内存和规划)面临的挑战。最后,我们还将探讨不同类型的Agent以及AI Agent和RAG的未来。
Image Generated by GPT’s DALLE-2
从RAG到Agent
RAG是一种半参数化系统,其中参数化部分是大型语言模型(Large Language Model,LLM),其余部分是非参数化部分。将所有不同的部分结合在一起,就构成了半参数化系统。LLM的所有信息都以编码形式存储在其权重或参数中,而系统的其余部分则没有定义这些知识的参数。
那么,为什么这种方法能解决问题呢?
•通过在LLM中插入和替换索引(特定信息),我们实现了定制化,这意味着我们可以避免信息过时,并能够修订索引中的内容。
•通过将LLM与这些索引关联起来,意味着我们能够减少虚假生成,并且可以通过指向源来实现引用和归属。
因此,原则上,RAG赋予了我们为LLM创造更好的上下文环境的能力,从而使其表现更出色。
注:RAG pipeline (Img Src)
“Agent”是一种自动化推理和决策引擎。它接收用户的输入/查询,并能做出内部决策,以便执行该查询并返回正确结果。关键的Agent组件可能包括但不限于以下几个方面:
1.将复杂问题分解为较小的子问题
2.选择合适的外部工具使用,并确定调用该工具所需的参数
3.规划一系列任务操作
4.在记忆模块中存储先前已完成的任务及其结果
A general overview of an AI agent
我们拥有不同类型、从简单到极其复杂的Agent。根据任务的复杂程度,我们会设计这些Agent,使它们能够自主决定选择可利用的工具。Devin AI就是一个近期备受关注的人工智能Agent示例。下图展示了不同类型的Agen及其复杂程度的不同层级。
注:Agents compared on their level of complexity (Img Src)
智能Agent系统概述
在由LLM驱动的自主智能Agent系统中,LLM充当Agent的大脑,利用不同的组件在数字世界中进行行动。
工具使用
Agent学会调用外部API或其他工具以获取模型权重中可能缺失的额外信息或功能(通常在预训练后难以更改)。这包括当前信息、数学计算引擎、代码执行能力、对专有信息源的访问权限以及其他更多内容。
记忆
短期记忆:情境学习(参见提示工程)可以被认为是利用模型的短期记忆来处理给定问题。上下文窗口长度可以视为短期记忆。
长期记忆:赋予Agent保持并回忆(无限)信息的能力,能够在长时间内持续存储和快速检索信息,通常是通过利用外部向量存储实现的。在RAG中的检索部分可以被视为长期记忆。
规划
子目标与任务分解:Agent能够将大任务分解成更小、更易管理的子目标,使得复杂任务能够高效处理。
反思与改进:Agent能够对过去的动作进行自我批评(尽管在某些方面可能存在疑虑)、自我反思,从错误中学习并在未来步骤中改进,从而提高最终结果的质量。
注:Overview of an LLM-powered autonomous agent system (Img Src)
AI Agent的工具使用能力
能够使用工具是人类在很多方面区别于其他生物的一个显著特征。我们创造、改造并利用外部对象来扩展我们的物理能力和认知能力。同样地,为LLM(大型语言模型)配备外部工具能极大地扩展其功能。
在AI Agent设置中,工具对应于一组能够让LLM Agent与外部环境(如谷歌搜索、代码解释器、数学引擎等)互动的工具集合。这些工具也可以是某种形式的数据库、知识库以及外部模型。当Agent与外部工具互动时,它会通过工作流程执行任务,这些流程有助于Agent获取完成给定子任务乃至整个任务所需的观察数据或上下文信息。
LLMs以不同方式利用工具的一些示例:
•MRKL(模块化推理、知识和语言)是一个框架,它将LLM与专家模块相结合,这些模块可以是LLM,也可以是符号式的(如计算器或天气API)。
•HuggingGPT——一个基于LLM的智能Agent,利用LLM作为任务规划器来连接各种现有的AI模型(基于描述),以解决AI任务。
注:Hugging GPT using tools (Img Src)
上图所示的HuggingGPT整个过程,根据原论文所述,可以分为四个阶段:
1.任务规划:利用ChatGPT分析用户请求以理解其意图,并将请求拆解为可解决的任务。
2.模型选择:为了解决所规划的任务,ChatGPT基于模型描述从Hugging Face上选取相应的专家模型。
3.任务执行:调用并执行每个选定的模型,将结果返回给ChatGPT。
4.响应生成:最后,利用ChatGPT整合所有模型的预测结果,生成对用户的回复。
请仔细查看下图,以便深入理解HuggingGPT在实际例子中的工作原理。
注:Hugging GPT working for a real case (Img Src)
ChatGPT插件和OpenAI API函数调用是具有工具使用能力的大规模语言模型(LLMs)在实践中发挥作用的良好示例。工具API集合可以由其他开发者提供(如插件形式),也可以自定义(如函数调用形式)。
解决智能流程中的记忆问题
记忆可以被定义为用于获取、存储、保留并随后检索信息的资源或存储器。任何计算系统中都有多种类型的内存。
缓冲内存(感觉记忆):正如感觉记忆作为感觉信息的短暂暂存区(完成任务后即消失),计算机系统的缓冲内存可以存储临时数据,例如指令集。对于LLMs而言,这可能指的是令牌缓冲区或输入队列。
工作内存(短期记忆,STM):LLMs在处理文本时采用类似于人类工作记忆的机制。它们通过注意力机制来保持对输入部分的“焦点”。在诸如GPT这样的基于转换器的模型中,注意力权重起到与STM类似的作用,同时保持并处理多条信息。LLMs的工作内存就是其上下文长度。
参数内存(长期记忆,LTM):LLMs的参数(或权重)可以被视为一种长期记忆形式。一旦训练完成,这些参数会编码从训练数据中获得的大量信息,并且可以无限期地保留下来。
•显性/陈述性记忆 → 在LLMs中,相当于陈述性记忆的是基于学习到的事实和概念生成响应的权重。这些权重可以被访问和用来产生与模型在训练期间“记忆”的知识相关的明确输出。例如,“埃隆·马斯克是特斯拉的拥有者”,这是储存在模型权重中的一个特定事实。
•隐性/程序性记忆 → 这是一种更一般的记忆系统,通过在各种任务上的重复训练(训练),捕获抽象概念而非直接的事实。例如,“什么是美?”对此没有具体答案,但系统仍能给出回答。
在LLMs中,“记忆”并非以离散事件的形式存储,而是作为网络中相互连接节点上的模式(抽象世界模型,但并非完全如此)来表示,模型通过根据其训练状态动态生成响应来“回忆”信息。
外部内存可以解决有限注意力跨度的问题。标准做法是将文本转换成密集向量后的嵌入向量保存到能够支持快速最大内积搜索(MIPS)的矢量存储数据库中。为了优化检索速度,通常的选择是近似最近邻(ANN)算法,以牺牲一点点准确性为代价换取巨大的速度提升。
几种用于检索的算法:LSH、ANNOY、HNSW、FAISS和ScaNN
上述所有方法——LSH、ANNOY、HNSW、FAISS和ScaNN背后的通用原则是在高维空间中高效地近似最近邻搜索。这些方法设计用于通过采用将相似数据点分组在一起以便更快检索的策略,克服精确搜索的计算强度。
规划:当前AI Agent面临的最大问题之一
当前AI Agent在执行任务时面临的一个重大问题是,在回答单个或简单问题时可能会发起大量的调用请求,每次查询LLM都会积累一定数量的令牌(tokens)。这种做法不仅成本高昂,还会引入显著的延迟。尽管技术不断进步,但令牌生成仍然是相对缓慢的过程,大多数基于LLM的应用程序中的延迟(不是所有情况)主要来自于生成输出令牌的过程。如果反复调用LLM并要求它提供思考结果或观察见解,将会生成大量输出令牌,从而导致高昂的成本以及用户体验下降的高延迟现象。
这种情况可以通过以下示例形象说明:为了得出正确的答案或采取正确行动,LLMs往往需要经过一系列推理步骤,形成树状或图状的Agent工作流结构。在这个过程中,为了达到目标,LLMs会进行多次查询,而这往往会因为这种内在结构而引入较多的延迟。
近期有许多研究论文探讨了这一问题,比如“Chain of Thought”(思维链)、“Tree of Thoughts”(思想树)、“Algorithm of Thoughts”(思维算法)等。
注:Different types of prompting techniques (Img Src)
在这些高级别提示策略的最新发展是“思维算法”:这篇新论文背后的理念与“思想树”论文相同,但主要区别在于上下文保存的方式。在“思想树”中,我们使用基于树的数据结构,而在“思维算法”中,则采用基于图的数据结构,这为我们提供了一种远优于简单广度优先搜索(BFS)或深度优先搜索(DFS)的方式来遍历整个知识图谱。
另一个优势是,“思维算法”能够使用更少的提示向LLM获取相似的结果。这些提示策略背后的整个想法是通过最少次数的LLM调用来获取最多的上下文信息。
有一篇很好的博客涵盖了所有这些不同的策略:“赋予LLM自我反思能力”和“PromptBreeder”。
AI Agent面临的另一个问题是LLM具有非确定性。虽然这对于创意生成是有益的,但在需要可预测性的场景中却构成了一个严峻挑战。例如,如果我们正在开发一个由LLM支持的聊天应用来进行PostgreSQL查询(Text2SQL),那么我们需要高度的可预测性。
自我反思
上述规划模块并未涉及任何反馈机制,这使得实现长时段规划变得相当困难,特别是在解决复杂任务时尤为必要。为应对这一挑战,我们可以创建一个过程,通过迭代地反思和细化执行计划,基于过去的行为和观察结果进行调整。目标是纠正和改进过去的错误,从而提高最终结果的质量。这一点在复杂的真实世界环境和任务中尤为重要,因为在这些情境下,试错往往是完成任务的关键。
ReAct
ReAct结合了推理和行动,旨在通过交替执行一系列步骤(重复N次)——思考、行动和观察,使LLM能够解决复杂的任务。ReAct促使LLM生成任务相关的口头推理痕迹和行动方案。这样,系统能够在执行动态推理以创建、维护和调整行动计划的同时,也能够与外部环境(如维基百科)互动,将额外信息融入到推理过程中。
注:Img Src
下图展示了ReAct的一个示例以及执行问答所涉及的不同步骤。
注:ReAct in action (Img Src)
Reflexion
这是一个框架,旨在为智能体配备动态内存和自我反思能力,以提高推理技能。Reflexion采用了标准的强化学习(RL)设置,其中奖励模型提供了简单的二元奖励,动作空间则遵循ReAct的设置方式,通过增加语言元素扩展特定任务的动作空间,以支持复杂的推理步骤。在执行每个动作𝑎𝑡之后,智能体会计算一个启发式评估ℎ𝑡,并根据自我反思的结果,可以选择重置环境以开始新的试验。
注:Illustration of the Reflexion framework. (Img Src)
该启发式函数用于判断轨迹是否低效或包含臆想,并决定是否应该终止。低效规划是指那些耗时过长但仍未能成功解决问题的轨迹。臆想则是指连续执行同一序列的动作导致在环境中得到相同的观察结果。
另外还有两篇关于提升自我反思能力的有趣论文,分别是《事后洞察链》(CoH,Liu等人于2023年发表)和《算法蒸馏》(AD,Laskin等人于2023年发表)。
在CoH的研究中,模型被要求通过审视自身过往的工作表现、评级以及改进意见来自我提升。模型通过利用自身尝试的历史记录和反馈信息,练习生成能得到更好评级的新输出。为了防止模型仅凭记忆答案,训练过程中会隐藏历史记录的部分内容。
AD将类似的想法应用于机器人或智能体学习任务(如视频游戏中RL智能体的学习)。智能体回顾自己在若干次尝试中的表现,试图找出改进的规律。然后,智能体预测下一个比之前更好的行动,学习如何变得更好的策略,而不仅仅是针对具体问题的答案。
AD专注于从智能体与环境交互的历史中学习这一理念。通过查看过去行动及其结果的序列,智能体尝试将成功的策略提炼到自己的策略中。
另一方面,Reflexion赋予智能体记住过去行动并反思其有效性的能力,特别关注检测和避免重复或无效的策略(如臆想行为)。
Agent类型
路由Agent
这是Agent推理的最简单形式。给定用户查询及一系列选项后,输出一个选项子集,用于指导查询的转向。
注:Routing Agents in Action (Semantic Search plus Summarization system, Img Src)
在上述查询中,“作者在艺术学校期间做了什么?”这一问题被传递给一个路由器。路由器的工作是确定查询通过系统查找最相关信息的最佳路径。
路由器可以选择两种可能的路径:
向量查询引擎:该引擎根据查询向量与文档向量之间的语义相似性,从大型集合中检索出前k个相关文档。它利用向量空间模型来理解和检索与查询语句语义最接近的文档。
摘要查询引擎:该引擎检索所有文档,并提供其内容的概要总结。这让系统无需逐个查看每个文档就能广泛理解主题。
根据路由器做出的决策,系统将返回通过向量查询引擎找到的特定文档子集,或者通过摘要查询引擎提供的所有相关文档的概要总结,来回答用户的问题。这从根本上改变了LLM最终返回的输出类型。有些查询可能需要详细的答案,而有些查询可能只需要一个较为宽泛的答案。这些路由Agent有助于我们修改LLM的行为。
Query Planning Agents
查询规划Agent背后的理念是首先将复杂查询分解为针对每个相关数据源的子问题,接着收集所有中间响应,并综合生成最终响应。
注:Querry planning example (Img Src)
瞧瞧查询规划Agent如何通过子查询获取更优的回答,不妨了解一下用于子查询的Llama索引(技术)。
工具使用型Agent
这类Agent能够使用工具或API,推断运行该工具所需的参数,并将其结果返回至LLM上下文中,以便提供更准确的答案。
注:Tool usage (Img Src)
这一切都很酷,但是Agent 如何处理连续的多部分问题呢?又如何在一段时间内维持状态?
这就需要用到更先进的Agent,比如上面提到的HuggingGPT和ChemCrow。在这样的多Agent环境下,系统可以使用多种工具,并常常集成动态内存。这些系统通常采用诸如ReAct和Reflexion等方法,在Agent的环境和行动中实现微妙且一致的自我处理方式。
ChemCrow Agent被设计用于完成涵盖有机合成、药物发现和材料设计等多个领域的任务。(图片来源)
注:The ChemCrow agent is designed to complete tasks across organic synthesis, drug discovery, and materials design. (Img Src)
以下是用于构建LLM Agent的一些著名工具和框架示例:
1.LangChain(新标签页打开):一个用于开发由语言模型驱动的应用程序和Agent的框架。
2.AutoGPT(新标签页打开):提供构建AI Agent的工具。
3.AutoGen(新标签页打开):一个框架,允许通过多个能相互对话以解决任务的Agent开发LLM应用程序。
4.LlamaIndex(新标签页打开):连接自定义数据源与大型语言模型的框架。
5.GPT Engineer(新标签页打开):自动化代码生成以完成开发任务。
6.DemoGPT(新标签页打开):自主AI Agent,用于创建交互式的Streamlit应用程序。
7.更多其他工具和框架。
最后,无论RAG/AI Agent的发展状况如何,这些框架都具有重要价值。最近发展的某些概念可能会消失,但其他概念会留存并不断发展。这只是探讨这个庞大主题的开始,未来还会有更多内容,请保持关注。
结论
LLM Agent仍处于起步阶段,在构建过程中面临着许多挑战和局限性,例如基于LLM的Agent需要适应角色以有效地在特定领域完成任务,具备长期规划能力,普遍的人工智能对齐,可靠性,知识限制等等。
最后的最后
感谢你们的阅读和喜欢,我收藏了很多技术干货,可以共享给喜欢我文章的朋友们,如果你肯花时间沉下心去学习,它们一定能帮到你。
因为这个行业不同于其他行业,知识体系实在是过于庞大,知识更新也非常快。作为一个普通人,无法全部学完,所以我们在提升技术的时候,首先需要明确一个目标,然后制定好完整的计划,同时找到好的学习方法,这样才能更快的提升自己。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
![](https://img-blog.csdnimg.cn/img_convert/46d553586f758d684529eaa79ddef25c.jpeg)
大模型知识脑图
为了成为更好的 AI大模型 开发者,这里为大家提供了总的路线图。它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
经典书籍阅读
阅读AI大模型经典书籍可以帮助读者提高技术水平,开拓视野,掌握核心技术,提高解决问题的能力,同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说,阅读经典书籍是非常有必要的。
实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
面试资料
我们学习AI大模型必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下
640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
![](https://img-blog.csdnimg.cn/img_convert/46d553586f758d684529eaa79ddef25c.jpeg)