AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


【深度长文】ReAct 、LangChain、RAG中的“自主系统”思想
发布日期:2024-06-02 08:17:24 浏览次数: 2234


上一篇文章中,我将自主系统定义为:“能够感知内部以及外部环境的变化,并自主作出反应实现一系列目标的系统”。这个系统的运行过程往往是以循环的方式出现:

1、感知 (Perception):感知的主要目的是从内部/外部环境中获取信息,转换成某种或多种格式进行输入;
2、认知(Brain):感知到的信息将被传递给认知模块进行状态表示,产出对于当前现状的定义、对于未来状态的预测;
3、决策(decision):基于现状的定义和未来状态的预测生成目标(Goal)并拆解为执行计划;
4、技能(Skill):基于决策对自主系统对环境作出反应的手段。其目的是实现决策模块的策略,从而适应内外环境变化。
5、知识(Knowledge):在循环过程中应对突变所产生的新知识不断扩大影响范围并支撑整个循环。

之后的文章将会介绍几个目前比较主流的自主系统架构。其中首当其冲的是ReAct架构,ReAct具备一个自主系统所需要具备的几乎所有特性。


# ReAct

ReAct(Reasoning + Acting)于 2022 年 10 月在论文《ReAct:协同语言模型中的推理和行动》中首次提出。

ReAct架构将大型语言模型(LLM)的推理能力与采取可操作步骤的能力相结合从而可用于更复杂的任务场景。可以理解和处理信息,评估情况,采取适当的行动,传达响应,并跟踪正在发生的情况。

ReAct中的代理被设计为响应其环境的变化,而不是遵循预定的脚本。虽然思想链(CoT)提示表明LLM可以为算术和常识推理等任务生成推理轨迹,但缺乏与外部世界的接触可能会导致事实幻觉等问题。

ReAct 通过允许LLM为任务生成口头推理轨迹和动作并不断和环境进行交互来解决这个问题,大大增加了基于LLM的AI应用的可靠性和准确性。

当然因为整个架构更加结构化,无形中增加了约束,降低了推理的灵活性,鱼与熊掌不可兼得。

当语言模型需要与其环境交互以收集更多信息或任务需要多个推理步骤时,ReAct 是非常理想的架构选择。

ReAct擅长知识密集型推理任务,例如使用维基百科或事实验证进行多跳问答。它的显著优势之一是它能够将LLM与外部工具集成以用于实际应用。例如,微软已将 OpenAI LLM 与其 Microsoft 365 Copilot 中的 Office 应用程序集成,展示了其实用性。

Coze(国内的扣子)LangChain就是非常典型的基于ReAct思想所设计的AI应用构建平台/框架。


# LangChain

LangChain是一个用于开发由语言模型支持的应用程序的框架,它对于Chain的思考也高度体现了ReAct思想:不断响应环境变化并作出决策以及执行动作。LangChain也是Flow设计思维的忠实跟随者,通过Flow的形式组织上下文以及Memary的输入来增强大模型的推理能力,从而提升决策的可靠性。


# Chain

Chain代表了调用序列,开发人员通过一个个的ReAct单元组合,将复杂的大型任务拆解成一个个小任务单元。

Chain通过简单的表达式(LCEL)完成了一个自主系统的基本单元:PromptTemplate / LLM / OutputParser :

chain = prompt | model | output_parser

Chain构成了LangChain工作流程的支柱,将语言模型(LLM)与其他组件无缝集成,通过执行一系列功能来构建应用程序。一个Chain的执行逻辑如下:

简单来说就是通过Prompt Template和用户输入的Topic构成PromptValue,由LLM或者某一个ChatModel进行推理生成一个ChatMessage,最后由OutputParser进行解析,输出合适的格式返回给用户。


# Agent

通过Chain,开发者可以通过预定义动作序列,从而解决复杂问题,但是整个过程依然高度依赖“程序员智能”,在一些复杂度不一的任务中,过于结构化的动作序列施展不开手脚。

langChain中的Agent模块可是使用语言模型根据用户输入和可用工具生成响应。Agent能够实现更高程度的“自主性”:

Chain是组装,在prompt模版定了以后,这个Chain也就确定了。而Agent是利用LLM针对不同的情况,利用可使用的工具集合和Chain集合去解决问题。Chain是静态的,Agent是动态的。在确定性场景下,使用Chain固定流程;在复杂度高低不一的场景下,使用Agent进行组装和协调。

一个Agent由以下几个部份组成:Prompt(提示词)LLM(语言模型)Output Parser(输出解析器)Tools(工具),分别代表了一个自主系统的“感知”、“认知”、“决策”、“技能”四个部份;

不同的Agent由不同的推理提示风格、不同的编码输入方式、不同的语言模型以及不同的解析输出方式组成,这使得它可以灵活应用于不同的问题场景。

LangChain支持自定义Agent类型,同时也内置了非常多不同类型的Agent,例如能够调用openai的功能和工具的agent、擅长推理/编写XML或者JSON的Agent、能够使用多输入工具的结构化Agent。

其中的“ReAct Agent”是一个多功能代理,它能够利用ReAct框架来根据描述和模型输出的相关性选择合适的工具(下面的部分,我会详细讲解工具)。例如当模型理解并识别为搜索任务就可以调用维基百科这个工具索索相关性比较高的内容。

ReAct Agent 是LangChain中最通用的动作代理,在有多种工具可用且选择合适的工具非常耗时的情况下非常有用。ReAct Agent 允许您为每个工具指定描述,然后根据描述自动选择适当的工具。此功能简化了确定在给定情况下使用哪种工具的过程。

  • Agent 接收来自用户的输入(Input)。

  • 根据输入(Input),Agent决定是否使用工具(Tools),如果使用,该工具的输入应该是什么。

  • 然后使用适当的输入调用该工具,并将该工具的输出记录为观察结果(observation)。

  • 工具的历史记录、工具输入和观察结果会传递回代理,由代理决定下一步。

  • 重复上述步骤,直到代理确定不需要其他工具。此时,它会直接响应用户。

ReAct Agent非常依赖模型底层的推理能力,如果模型本身的推理能不可靠,那么Agent的决策和执行效果也将变得不可靠。

有人希望通过一些开源的 LLM 来实现 ReAct Agent,但实际开发过程中会发现开源低参数(比如一些 6B、7B 的 LLM)的 LLM 对于提示词的理解会非常差,根本不会按照提示词模板的格式来输出,这样就会导致我们的 Agent 无法正常工作。

所以如果想要实现一个好的 Agent,还是需要使用好的 LLM,目前看来使用gpt-3.5模型是最低要求。


# Tools

ReAct Agent的自主性还体现在工具(Tools)使用的“自主”上:通过对工具补全使用场景和描述可以帮助Agent理解在什么情况下该使用这个工具。

这种调用逻辑和Chain中的调用逻辑有着本质区别,在以往常见的automation系统(包括Chain)中,工具的使用时机是开发人员预先设定好的。

而如今Agent会决策何时以及如何使用工具:

langChain中的Agent支持的工具包括:

  • 内置60+工具:包括谷歌、zapier、IFTTT、HuggingFace等等;

  • 自定义工具:自定义一个工具也非常简单,除了最基本的执行函数以外,只需要提供工具的名字(name)以及关于使用相关的描述(description)即可;

你可以将执行同一类型任务的工具整合成一个工具箱(Toolkits),例如你可以将API整合成一个ToolKits,当你发起一个询问时,langChain就会通过识别的目的,调用合适的API完成任务;

LangChain中的ToolKits实现方式是对于ReAct思想的非常好的实践。如今我们的agent不仅拥有了非常强悍的推理能力,也具备了多种实用工具的使用,它的能力得到了史无前例地加强。


# RAG

按照上述的架构,我们看到一个Agent已经能够具备非常不错的推理和复杂任务处理能力,但因为调用的大模型往往基于静态参数,所以我们很多时候会遇到下列问题:

  • 在没有答案的情况下提供虚假信息;

  • 提供过时或过于通用的信息;

  • 从非权威来源创建响应,缺乏专业度;

  • 由于术语混淆,不同的来源使用相同的术语来谈论不同的事情,因此会产生不准确的响应。

RAGRetrieval-Augmented Generation)是一种利用从外部来源获取的事实来提高生成式 AI 模型的准确性和可靠性的技术。RAG技术能够帮助系统具备Memary和Knowledge,从成本以及效果角度都大大优于其他的技术手段。

RAG在一些专业领域,例如法律、医疗将会大有可为,提供专业的知识库作为检索数据库的一部份,大大提升响应结果的专业度和可靠度。事实上,几乎任何企业都可以将其技术或政策手册、视频或日志转化为称为RAG知识库的资源,从而增强LLM的能力。这些来源可以支持客户或现场支持、员工培训和开发范式等用例。

前两天的一篇采访文章里面,Notion CEO提到RAG是知识管理的未来

RAG的运行逻辑:

langChain也提供了一个基于RAG技术的知识增强Flow;通过将历史会话检索以和向量知识检索结合的方式提升LLM的响应准确度。

1、Conversational Retrieval Chain:检索上下文后将聊天历史记录和新问题合并为一个独立问题。在 “收到初始用户输入之后-执行核心逻辑之前” ,链将从其内存系统中读取并增加用户输入。在 “执行核心逻辑之后-返回答案之前” ,链会将当前运行的输入和输出写入内存,以便在将来的运行中引用它们。

2、With Memory and returning source documents:使用已创建的嵌入和向量存储,查找相关文档来寻找答案。LangChain通过以下几个步骤将文档和数据转换为可供检索的向量知识:Document Loader:数据加载——Text Splitting:对数据进行切片;——Text embedding models:创建嵌入嵌入——Vector Stores:存入向量数据库——Retrievers用于用户检索

3、Generate a response:最终通过语言模型生成具有高相关性的响应并附上相关文档;

RAG技术在不断发展和演进,未来有着非常广阔的前景。(值得深入研究中......)


# 总结:

总的来说,目前agent的发展方向,主要集中在两个维度,一个是Flow形式、一个是RAG、信息Retrieval相关的。未来这两种形式也很有机会融合进一个架构中,LangChain就是一个很好的案例。

我非常期待看到越来越多自主系统搭建的可视化平台的出现,从而降低ai应用的开发门槛。

目前的模型基础也还有待提升,例如RAG在多模态的支持上是不完善的,而模型的推理能力也有待进一步提升。在一些板块上由于底层认知的缺失,无法进行有效的上层应用设计,最显著的如自主系统“自我学习”能力的缺失。

虽然我们离所谓真正的AGI中间还缺少非常关键的知识解释。但是与上一代的自动化系统相比,如今基于大语言模型的Agent架构已经在各个环节表现出了很不错的推理和自主决策能力。

这让我对于Agent(自主系统)的未来充满信心。


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询