写的太通透了!大模型自省式 RAG 与 LangGraph 的实践!

本文讲解了自省式 RAG 的基础原理以及基于 LangGraph 的实践演示

图片

自省式 RAG 与 LangGraph

重要链接

  • 关于 Self-RAG 和 CRAG 的教程手册

  • 演示视频

研究背景

由于大多数大型语言模型(LLMs)通常只针对大量公共数据进行周期性训练,它们往往缺少最新信息或不能接触到无法用于训练的私有数据。检索增强生成(RAG)模式恰好解决了这个问题,它通过将大型语言模型连接到外部数据源上(我们有相关的视频系列以及[博客文章](https://blog.langchain.dev/deconstructing-rag/)进行了介绍)。

RAG的基本流程涉及到解析用户查询、检索相关文档,并将这些文档供给大型语言模型,以此产生一个建立在相关上下文之上的答案。

图片

基础 RAG 流程示意图

自省式 RAG

实际操作中,实现 RAG 需要对上述步骤进行逻辑分析:比如,我们需要知道什么时候进行检索(基于问题和索引的构成)、何时改写问题以提升检索效率,或者何时抛弃无关的检索结果并重新检索。因此提出了自省式 RAG(详见论文)这一概念,自省式 RAG 利用大型语言模型自我校正检索质量不佳或生成内容不够优质的问题。

如上所展示的基础 RAG 流程,实质上是一种链式过程:大型语言模型根据检索到的文档来决定生成的内容。有些 RAG 运作模式采用的是路由机制,大型语言模型会根据提出的问题选择不同的检索器。但是自省式 RAG 通常需要某种反馈机制,比如重新生成问题或重新检索文档。

这时候,状态机制作为第三种认知架构(详见认知架构博客),因其能够支持循环操作而非常适用:状态机可定义一系列步骤(例如检索、评估文档、改写问题)并设置它们的转换逻辑;比如,如果我们检索到的文档无关,我们可以重新改写问题再进行检索。

图片

利用认知架构实施 RAG 的示意图

利用 LangGraph 实现自省式 RAG

我们最近发布了 LangGraph,这是一个简单的大型语言模型状态机实现工具。这为设计各种不同的RAG 流程提供了极大的灵活性,并支持在 RAG 中进行所谓“流程工程”,即在具体的决策点(如:评估文档)和循环(比如:重新检索)中进行特定操作。

图片

状态机让我们得以设计出更复杂的 RAG “流”

为了展现 LangGraph 的灵活性,我们利用它来实现了两篇引人入胜、前沿的自省式 RAG 论文,CRAG 和 Self-RAG 中提出的思想。

纠正式 RAG (CRAG)

纠正式 RAG(CRAG)在其论文中提出了以下鲜明的理念:

  • 引入一种轻量级检索评估工具,用以对查询返回的文档进行整体质量评估,并为每项文档打分。

  • 当检索的结果不明确或与用户的查询不够相关时,启用基于网络的文档检索来补充上下文

  • 执行知识细化:把检索的文档分成“知识条”,对每条进行评分,过滤出无关的内容。

图片

CRAG 流程图

在描述流程时,我们对一些步骤进行了简化和调整,方便理解(实际应用时可以进行相应的定制和扩展):

  • 我们省略了知识细化这一环节,尽管它代表了一个颇具价值的数据后处理方法,但在本文的流程示例中并不是必要的。

  • 如果发现任意一个检索的文档不相关,我们将通过网络搜索来补充检索内容。在这里我们使用 Tavily Search API来进行网络搜索,这既快速又方便。

  • 我们还将改写查询语句,以便于网络搜索能提供更优的结果。

  • 对于二选一的决策节点,我们用 Pydantic 来确定输出模型,并作为每一次执行大型语言模型的调用过程中运行的 OpenAI 工具函数。这让我们能够根据二选一逻辑确定何种逻辑路径。

图片

CRAG 流程的 LangGraph 实施示意图

我们在教程笔记本中设计了这个方案,并建立了三篇博客文章的索引。在这里,您可以看到当引用其中一篇博客文章中的信息时,CRAG 是如何工作的:我们的逻辑流清晰可见。

图片

相比之下,当我们提出不在博客文章讨论范围内的问题时,流程便会有所不同。在这里您可以看到,系统从网络搜索中检索了补充的文档,用以生成最终的答复。

图片

自 RAG

自 RAG 是一个与之相望的解决方案,论文中提出了许多独到的 RAG 理念。框架中训练大型语言模型生成自我反思的提示符号,用以控制 RAG 流程的各个阶段。下面是提示符号的一览:

  • Retrieve 符号决定是否需要根据 x(问题)x(问题)y(回答) 检索 D 数据块。可能的输出结果有 yes, no, continue

  • ISREL 符号针对 x 问题,判断数据块 D 是否相关。输入为 (x(问题),d(数据块))。结果为 relevant(相关), irrelevant(不相关)

  1. ISSUP 符号判断 D 中每个数据块生成的答复是否与之相关。输入包括 x, d, y。这个标记也是验证 d 是否支持 y(生成) 中的所有需要证实的陈述。可输出 fully supported(完全支持), partially supported(部分支持), no support(不支持)

  2. ISUSE 符号评估 D 中每个数据块生成的答复是否对 x 有用。输入 x, y 对于 dD 里。输出是 {5, 4, 3, 2, 1}

论文中的下表为上述信息提供了进一步细节:

图片

Self-RAG 中采用的四种提示符号

以下简图帮助我们理解信息流的运转机制:

图片

Self-RAG 使用的流程简图

我们可以在 LangGraph 中对其进行实现,为了说明需要进行了一些简化和调整(在实际需求中可以进行相应的定制和扩展):

  • 如上文所述,我们对每个检索到的文档进行评分。如果发现任何文档相关,我们就进行下一步的生成工作。如果全部文档都不相关,那我们就会改写查询来提出一个更加精确的问题,然后重新进行检索。这一环节可以很容易地结合上述 CRAG 所述的网络搜索补充节点。

  • 论文中会针对每一个数据块进行生成,并进行双重评估。但在我们的实现中,只从所有相关文档生成一次内容。然后,我们根据文档检查这次生成的内容(例如,以保护免受错误印象的影响)并根据答案进行评估。这减少了调用大型语言模型的次数,提高了响应速度,并允许在生成答案时综合更多的上下文信息。

图片

LangGraph 实现 Self-RAG 流程示意图

这里展示的示例轨迹强调了主动 RAG 的自我纠正能力。查询的问题是 解释不同类型代理记忆是如何工作的?。在此示例中,所有四个文档都被认为相关,对照文档检查生成答案的环节顺利通过,但生成的答案未被认定完全有用。

之后,如这里所示,循环重新开始,问题稍微改写为:不同类型代理记忆的运作方式如何?。此时,四份文档中有一份因为无关而被筛选出去。之后的生成答案成功通过了所有检查:

不同类型的代理记忆包含感官记忆、短期记忆和长期记忆。感官记忆能够保留短暂的感觉信息。短期记忆则被用于实时学习和构建提示。而长期记忆则让代理人可以在很长的时间里保存和回忆信息,并常常依赖外部的向量存储来实现。

整体流程轨迹清晰可见,可以容易地进行审核:

图片

结语

自省机制可以显著提升 RAG 的功能,允许改正检索和生成过程中的质量问题。几篇最新的 RAG 论文都着重讨论了这一主题,但要将这些理念实际应用起来有着不小的难度。本文展示了如何利用 LangGraph 进行“流程工程化”地实施自反式 RAG。我们还提供了实施两篇引人注目的论文 —— Self-RAG 和 CRAG 中的理念的详细指导。

今天的内容就到这里,如果老铁觉得还行,可以来一波三连,感谢!

技术交流&资料

技术要学会分享、交流,不建议闭门造车。一个人可以走的很快、一堆人可以走的更远.

成立了大模型技术交流群,本文完整代码、相关资料、技术交流&答疑,均可加我们的交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、微信搜索公众号:机器学习社区,后台回复:加群
方式②、添加微信号:mlc2060,备注:来自CSDN + 技术交流

通俗易懂讲解大模型系列

  • 18
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
模型+RAG(Retrieval-Augmented Generation)是一种结合了检索和生成的方法,用于实现数据采集。具体步骤如下: 1. 数据收集:首先需要收集大量的原始数据,可以是文本、图像、音频等形的数据。这些数据可以从互联网、数据库、文档等多个渠道获取。 2. 数据预处理:对收集到的原始数据进行预处理,包括数据清洗、去重、标注等操作。这一步骤旨在提高数据的质量和准确性,为后续的模型训练做准备。 3. 模型训练:使用大模型进行训练,可以选择使用预训练的语言模型(如GPT)或自定义的模型。在训练过程中,可以采用生成对抗网络(GAN)等方法来增强模型的生成能力。 4. 检索模块构建:为了提高生成结果的准确性和相关性,需要构建一个检索模块。该模块可以使用传统的信息检索技术,如倒排索引、向量检索等,也可以使用深度学习方法,如BERT、Dense Retrieval等。 5. 数据采集:利用构建好的检索模块,对用户提出的问题或需求进行检索,获取与之相关的数据。可以根据检索结果的相关性进行排序,选择最相关的数据进行生成。 6. 数据生成:基于检索到的数据,使用大模型进行生成。可以采用生成模型,根据检索到的数据进行文本、图像等内容的生成。生成的结果可以根据需求进行进一步的处理和优化。 7. 结果评估:对生成的结果进行评估,可以使用人工评估或自动评估的方。评估指标可以包括生成结果的准确性、流畅性、相关性等。 8. 迭代优化:根据评估结果,对模型和检索模块进行优化和调整。可以通过增加训练数据、调整模型参数、改进检索算法等方来提升系统的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值