rag增强技术汇总
各类 RAG 增强技术
可以通过此GitHub 链接获得本文所列主要方法的简单实现。
我们可以根据 RAG 管道各阶段的作用对不同的 RAG 增强方法进行分类。
- 查询增强:修改和操作 RAG 输入的查询过程,以便更好地表达或处理查询意图。
- 增强索引:使用多分块、分步索引或多向索引等技术优化分块索引的创建。
- 检索器增强:在检索过程中应用优化技术和策略。
- 生成器增强:在为 LLM 生成提示时调整和优化提示,以提供更好的响应。
- 增强 RAG 管道:在整个 RAG 管道中动态切换流程,包括使用 Agents 或工具来优化 RAG 管道中的关键步骤。
接下来,我们将介绍每个类别下的具体方法。
查询增强
共有四种方式:假设问题、假设文档嵌入、子查询和回溯提示。接下来我将选取几个具体说明。
HyDE(假设文档嵌入)
HyDE 是假设文档嵌入的缩写。它利用 LLM 制作一个“假设文档*”或虚假*答案,以回应没有上下文信息的用户查询。然后,这个假答案会被转换成向量嵌入,并用于查询向量数据库中最相关的文档块。随后,向量数据库会检索出 Top-K 最相关的文档块,并将它们传送给 LLM 和原始用户查询,从而生成最终答案。
这种方法在解决向量搜索中的跨域不对称问题方面与假设问题技术类似。不过,它也有缺点,如增加了计算成本和生成虚假答案的不确定性。
创建子查询
当用户查询过于复杂时,我们可以使用 LLM 将其分解为更简单的子查询,然后再将其传递给向量数据库和 LLM。让我们来看一个例子。
想象一下,用户会问*“Milvus 和 Zilliz Cloud 在功能上有什么不同?*”这个问题相当复杂,在我们的知识库中可能没有直接的答案。为了解决这个问题,我们可以将其拆分成两个更简单的子查询:
- 子查询 1:“Milvus 有哪些功能?”
- 子查询 2:“Zilliz Cloud 有哪些功能?”
有了这些子查询后,我们将它们全部转换成向量嵌入后发送给向量数据库。然后,向量数据库会找出与每个子查询最相关的 Top-K 文档块。最后,LLM 利用这些信息生成更好的答案。
增强索引
增强索引是提高 RAG 应用程序性能的另一种策略。让我们来探讨三种索引增强技术:自动合并文档块,构建分层索引,混合检索和重新排名
构建分层索引
在创建文档索引时,我们可以建立两级索引:一级是文档摘要索引,另一级是文档块索引。向量搜索过程包括两个阶段:首先,我们根据摘要过滤相关文档,随后,我们在这些相关文档中专门检索相应的文档块。
在涉及大量数据或数据分层的情况下,例如图书馆 Collections 中的内容检索,这种方法证明是有益的。
混合检索和重新排名
混合检索和重排技术将一种或多种辅助检索方法与向量相似性检索相结合。然后,Reranker会根据检索结果与用户查询的相关性对检索结果重新排序。
常见的补充检索算法包括基于词频的方法(如BM25)或利用稀疏嵌入的大模型(如SPLADE)。重新排序算法包括 RRF 或更复杂的模型,如Cross-Encoder(类似于 BERT 的架构)。
改进检索器
改进 RAG 系统中的检索器组件也能改进 RAG 应用。让我们来探讨一些增强检索器的有效方法:句子窗口检索,元数据过滤
生成器增强
让我们通过改进 RAG 系统中的生成器来探索更多 RAG 优化技术:压缩 LLM 提示,调整提示中的块顺序
调整提示中的块顺序
在论文Lost in the Middle“中,研究人员观察到,LLMs 在推理过程中经常会忽略给定文档中间的信息。相反,他们往往更依赖于文档开头和结尾的信息。
根据这一观察结果,我们可以调整检索知识块的顺序来提高答案质量:在检索多个知识块时,将置信度相对较低的知识块放在中间,而将置信度相对较高的知识块放在两端。
增强 RAG 管道
我们还可以通过增强整个 RAG 管道来提高 RAG 应用程序的性能。
自我反思
这种方法在人工智能 Agents 中融入了自我反思的概念。那么,这种技术是如何工作的呢?
一些最初检索到的 Top-K 文档块是模棱两可的,可能无法直接回答用户的问题。在这种情况下,我们可以进行第二轮反思,以验证这些文档块是否能真正解决查询问题。
我们可以使用高效的反思方法(如自然语言推理(NLI)模型)进行反思,也可以使用互联网搜索等其他工具进行验证。
使用代理进行查询路由选择
有时,我们不必使用 RAG 系统来回答简单的问题,因为它可能会导致更多的误解和对误导信息的推断。在这种情况下,我们可以在查询阶段使用代理作为路由器。这个 Agents 会评估查询是否需要通过 RAG 管道。如果需要,则启动后续的 RAG 管道;否则,LLM 直接处理查询。
Agents 可以有多种形式,包括 LLM、小型分类模型,甚至是一组规则。
通过根据用户意图路由查询,可以重新定向部分查询,从而显著提高响应时间,并明显减少不必要的噪音。
我们可以将查询路由技术扩展到 RAG 系统内的其他流程,例如确定何时利用网络搜索等工具、进行子查询或搜索图片。这种方法可确保 RAG 系统中的每个步骤都能根据查询的具体要求进行优化,从而提高信息检索的效率和准确性。