研究背景
由于大多数大型语言模型(LLMs)通常只针对大量公共数据进行周期性训练,它们往往缺少最新信息或不能接触到无法用于训练的私有数据。检索增强生成(RAG)模式恰好解决了这个问题,它通过将大型语言模型连接到外部数据源上(我们有相关的[视频系列]
自省式 RAG
实际操作中,实现 RAG 需要对上述步骤进行逻辑分析:比如,我们需要知道什么时候进行检索(基于问题和索引的构成)、何时改写问题以提升检索效率,或者何时抛弃无关的检索结果并重新检索。因此提出了自省式 RAG(详见[论文])这一概念,自省式 RAG 利用大型语言模型自我校正检索质量不佳或生成内容不够优质的问题。
如上所展示的基础 RAG 流程,实质上是一种链式过程:大型语言模型根据检索到的文档来决定生成的内容。有些 RAG 运作模式采用的是路由机制,大型语言模型会根据提出的问题选择不同的检索器。但是自省式 RAG 通常需要某种反馈机制,比如重新生成问题或重新检索文档。这时候,状态机制作为第三种认知架构(详见[认知架构博客]),因其能够支持循环操作而非常适用:状态机可定义一系列步骤(例如检索、评估文档、改写问题)并设置它们的转换逻辑;比如,如果我们检索到的文档无关,我们可以重新改写问题再进行检索。
利用 LangGraph 实现自省式 RAG
我们最近发布了 [LangGraph],这是一个简单的大型语言模型状态机实现工具。这为设计各种不同的[RAG 流程]提供了极大的灵活性,并支持在 RAG 中进行所谓“流程工程”,即在具体的决策点(如:评估文档)和循环(比如:重新检索)中进行特定操作。
为了展现 LangGraph 的灵活性,我们利用它来实现了两篇引人入胜、前沿的自省式 RAG 论文,CRAG 和 Self-RAG 中提出的思想。
纠正式 RAG (CRAG)
纠正式 RAG(CRAG)在其论文中提出了以下鲜明的理念:
- 引入一种轻量级检索评估工具,用以对查询返回的文档进行整体质量评估,并为每项文档打分。
- 当检索的结果不明确或与用户的查询不够相关时,启用基于网络的文档检索来补充上下文。
- 执行知识细化:把检索的文档分成“知识条”,对每条进行评分,过滤出无关的内容。
在描述流程时,我们对一些步骤进行了简化和调整,方便理解(实际应用时可以进行相应的定制和扩展):
- 我们省略了知识细化这一环节,尽管它代表了一个颇具价值的数据后处理方法,但在本文的流程示例中并不是必要的。
- 如果发现任意一个检索的文档不相关,我们将通过网络搜索来补充检索内容。在这里我们使用 [Tavily Search]API来进行网络搜索,这既快速又方便。
- 我们还将改写查询语句,以便于网络搜索能提供更优的结果。
- 对于二选一的决策节点,我们用 Pydantic 来确定输出模型,并作为每一次执行大型语言模型的调用过程中运行的 OpenAI 工具[函数]。这让我们能够根据二选一逻辑确定何种逻辑路径。
相比之下,当我们提出不在博客文章讨论范围内的问题时,流程便会有所不同。在[这里])您可以看到,系统从网络搜索中检索了补充的文档,用以生成最终的答复。
自 RAG
自 RAG 是一个与之相望的解决方案,论文中提出了许多独到的 RAG 理念。框架中训练大型语言模型生成自我反思的提示符号,用以控制 RAG 流程的各个阶段。下面是提示符号的一览:
Retrieve
符号决定是否需要根据x(问题)
或x(问题)
、y(回答)
检索D
数据块。可能的输出结果有yes, no, continue
。ISREL
符号针对x
问题,判断数据块D
是否相关。输入为 (x(问题)
,d(数据块)
)。结果为relevant(相关), irrelevant(不相关)
。
ISSUP
符号判断 D 中每个数据块生成的答复是否与之相关。输入包括x
,d
,y
。这个标记也是验证d
是否支持y(生成)
中的所有需要证实的陈述。可输出fully supported(完全支持), partially supported(部分支持), no support(不支持)
。ISUSE
符号评估 D 中每个数据块生成的答复是否对x
有用。输入x
,y
对于d
在D
里。输出是{5, 4, 3, 2, 1}
。
论文中的下表为上述信息提供了进一步细节:
以下简图帮助我们理解信息流的运转机制:
我们可以在 LangGraph 中对其进行实现,为了说明需要进行了一些简化和调整(在实际需求中可以进行相应的定制和扩展):
- 如上文所述,我们对每个检索到的文档进行评分。如果发现任何文档相关,我们就进行下一步的生成工作。如果全部文档都不相关,那我们就会改写查询来提出一个更加精确的问题,然后重新进行检索。这一环节可以很容易地结合上述 CRAG 所述的网络搜索补充节点。
- 论文中会针对每一个数据块进行生成,并进行双重评估。但在我们的实现中,只从所有相关文档生成一次内容。然后,我们根据文档检查这次生成的内容(例如,以保护免受错误印象的影响)并根据答案进行评估。这减少了调用大型语言模型的次数,提高了响应速度,并允许在生成答案时综合更多的上下文信息。
[这里]展示的示例轨迹强调了主动 RAG 的自我纠正能力。查询的问题是 解释不同类型代理记忆是如何工作的?
。在此示例中,所有四个文档都被认为相关,对照文档检查生成答案的环节顺利通过,但生成的答案未被认定完全有用。
之后,如[这里]所示,循环重新开始,问题稍微改写为:不同类型代理记忆的运作方式如何?
。此时,四份文档中有一份因为无关而被筛选出去。之后的生成答案成功通过了所有检查:
不同类型的代理记忆包含感官记忆、短期记忆和长期记忆。感官记忆能够保留短暂的感觉信息。短期记忆则被用于实时学习和构建提示。而长期记忆则让代理人可以在很长的时间里保存和回忆信息,并常常依赖外部的向量存储来实现。
整体流程轨迹清晰可见,可以容易地进行审核:
结语
自省机制可以显著提升 RAG 的功能,允许改正检索和生成过程中的质量问题。几篇最新的 RAG 论文都着重讨论了这一主题,但要将这些理念实际应用起来有着不小的难度。本文展示了如何利用 LangGraph 进行“流程工程化”地实施自反式 RAG。
如何学习AI大模型?
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓