赞
踩
RAG的压缩和高级总结。
在第一部分中,我们将重点介绍模块化RAG的概念和组成部分,包括6种模块类型,14个模块和40多个运算符。
在过去的一年里,检索增强生成(RAG)作为实现LLM应用的方法的概念引起了相当大的关注。我们撰写了一份关于RAG的综合调查报告,深入探讨了从天真的RAG到先进的RAG和模块化RAG的转变。然而,该调查主要通过增强的视角(例如增强源/阶段/过程)来审视RAG技术。
本文将重点介绍模块化RAG范式。我们进一步定义了一个三层的模块化RAG范式,包括模块类型、模块和操作符。在这个范式下,我们详细阐述了当前RAG系统中的核心技术,包括6种主要的模块类型、14个模块和40多个操作符,旨在提供对RAG的全面理解。
通过组织不同的运营商,我们可以得出各种RAG流程,这是我们在本文中要阐明的一个概念。根据广泛的研究,我们已经提炼和总结了典型的模式、几个具体的实施案例和最佳行业案例。(由于空间限制,这部分将在第二部分中讨论。)
本文的目标是提供对RAG发展现状的更深入理解,并为未来的进展铺平道路。
模块化RAG提供了许多机会,方便定义新的运算符、模块和配置新的流程。
我们RAG调查中的数据
RAG的进展带来了更多样化和灵活的过程,如下关键方面所示:
模块化RAG的定义
以上,我们可以看到RAG的快速发展已经超越了链式高级RAG范式,展示了模块化的特点。为了解决当前的组织和抽象不足,我们提出了一种模块化的RAG方法,无缝地集成了天真RAG和高级RAG的开发范式。
模块化RAG呈现出一种高度可扩展的范式,将RAG系统划分为模块类型、模块和运算符的三层结构。每个模块类型代表RAG系统中的核心流程,包含多个功能模块。每个功能模块又包含多个具体的运算符。
整个RAG系统成为多个模块和相应操作符的排列组合,形成我们所称的RAG流程。
在Flow中,可以在每个模块类型中选择不同的功能模块,并且在每个功能模块中可以选择一个或多个运算符。
与之前的范式的关系
模块化的RAG以多层次的模块形式组织RAG系统。高级RAG是RAG的一种模块化形式,而天真的RAG是高级RAG的一个特例。这三种范式之间的关系是继承和发展的关系。
模块化RAG的机会
模块化RAG的好处是显而易见的,为现有的与RAG相关的工作提供了新鲜而全面的视角。通过模块化组织,相关技术和方法得到了清晰的总结。
模块化RAG的框架
在本章中,我们将深入探讨三层结构,并为RAG构建一个技术路线图。由于空间限制,我们将避免深入讨论技术细节;然而,我们将提供全面的参考资料供进一步阅读。
索引化是将文本分解为可管理的块的过程,在组织系统中是一个关键步骤,面临着三个主要挑战:
较大的块可以捕捉更多的上下文,但也会产生更多的噪音,需要更长的处理时间和更高的成本。而较小的块可能无法完全传达必要的上下文,但它们的噪音较少。
使用重叠的块是平衡这些需求的一种简单方法。通过使用滑动窗口,语义转换得到增强。
然而,存在一些限制,包括对上下文大小的控制不精确,截断单词或句子的风险,以及缺乏语义考虑。
关键思想是将用于检索的块与用于合成的块分开。使用较小的块可以提高检索的准确性,而较大的块可以提供更多的上下文信息。
具体而言,一种方法可以是检索较小的块,然后引用父ID来返回较大的块。或者,可以检索单个句子,并返回该句子周围的文本窗口。
详细信息和LlamaIndex实施。
这类似于小到大的概念,首先生成较大块的摘要,然后在摘要上进行检索。随后,可以对较大块进行二次检索。
块可以通过元数据信息进行丰富,例如页码、文件名、作者、时间戳、摘要或块可以回答的问题。随后,可以根据这些元数据进行检索过滤,限制搜索范围。请参阅LlamaIndex中的实现。
提升信息检索效果的一种有效方法是为文档建立层次结构。通过构建块状结构,RAG系统可以加快相关数据的检索和处理。
在文档的层次结构中,节点以父子关系排列,与它们链接的是块。每个节点存储数据摘要,帮助快速遍历数据,并协助RAG系统确定要提取的块。
这种方法还可以减轻由块提取问题引起的错觉。
构建结构化索引的方法主要包括:
检查Arcus在大规模下的分层索引。
在构建文档的层次结构中利用知识图谱(KGs)有助于保持一致性。它勾勒了不同概念和实体之间的连接,显著减少了产生错觉的可能性。
另一个优势是将信息检索过程转化为LLM能够理解的指令,从而提高知识检索的准确性,并使LLM能够生成上下文连贯的回答,从而提高RAG系统的整体效率。
检查Neo4j的实现和LllmaIndex Neo4j查询引擎。
使用知识图谱来组织多个文档,您可以参考这篇研究论文《KGP:用于多文档问答的知识图谱提示》。
Naive RAG的主要挑战之一是直接依赖用户的原始查询作为检索的基础。准确清晰地提出问题是困难的,不明智的查询会导致检索效果不佳。
这个阶段的主要挑战包括:
将单个查询扩展为多个查询可以丰富查询的内容,提供进一步的上下文以解决特定细微差别的缺失,从而确保生成的答案的最佳相关性。
通过使用LLMs来扩展查询,可以通过及时工程来并行执行这些查询。查询的扩展不是随机的,而是经过精心设计的。这个设计的两个关键标准是查询的多样性和覆盖范围。
使用多个查询的一个挑战是可能会削弱用户最初的意图。为了减轻这个问题,我们可以指示模型在提示工程中给予原始查询更大的权重。
子问题规划的过程代表了在组合时生成必要的子问题,以对原始问题进行情境化和完全回答。这个添加相关背景的过程,原则上类似于查询扩展。
具体来说,可以使用从最少到最多提示的方法将复杂问题分解为一系列更简单的子问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。