🚀 免费试用 Zilliz Cloud,完全托管的 Milvus,体验 10 倍的性能提升!立即试用>

milvus-logo
LFAI
首页
  • 教程

如何提高 RAG 管道的性能

随着检索增强生成(RAG) 应用程序的日益普及,人们越来越关注如何提高其性能。本文介绍了优化 RAG 管道的所有可能方法,并提供了相应的图解,帮助您快速了解主流的 RAG 优化策略。

值得注意的是,我们将仅对这些策略和技术进行高层次的探讨,重点关注它们如何集成到 RAG 系统中。但是,我们不会深入探讨复杂的细节,也不会指导您逐步实施。

标准 RAG 管道

下图显示了最简单的 RAG 流水线。首先,文档块被载入向量存储(如MilvusZilliz Cloud)。然后,向量存储检索与查询最相关的前 K 个文档块。然后,将这些相关块注入LLM 的上下文提示中,最后,LLM 返回最终答案。

各类 RAG 增强技术

我们可以根据 RAG 管道各阶段的作用对不同的 RAG 增强方法进行分类。

  • 查询增强:修改和处理 RAG 输入的查询过程,以便更好地表达或处理查询意图。
  • 增强索引:使用多分块、分步索引或多向索引等技术优化分块索引的创建。
  • 检索器增强:在检索过程中应用优化技术和策略。
  • 生成器增强:在为 LLM 生成提示时调整和优化提示,以提供更好的响应。
  • 增强 RAG 管道:在整个 RAG 管道中动态切换流程,包括使用 Agents 或工具来优化 RAG 管道中的关键步骤。

接下来,我们将介绍每个类别下的具体方法。

查询增强

让我们探索四种有效的方法来增强您的查询体验:假设问题、假设文档嵌入、子查询和回溯提示。

创建假设问题

创建假设问题涉及利用 LLM 生成用户可能会就每个文档块中的内容提出的多个问题。在用户的实际查询到达 LLM 之前,向量存储会检索与实际查询最相关的假设问题及其相应的文档块,并将其转发给 LLM。

这种方法通过直接参与查询到查询的搜索,绕过了向量搜索过程中的跨域不对称问题,减轻了向量搜索的负担。不过,它在生成假设问题时引入了额外的开销和不确定性。

HyDE(假设文档嵌入)

HyDE 是假设文档嵌入的缩写。它利用 LLM 制作一个"假设文档"或答案,以回应没有上下文信息的用户查询。然后,这个假答案会被转换成向量嵌入,并用于查询向量数据库中最相关的文档块。随后,向量数据库会检索出 Top-K 最相关的文档块,并将它们传送给 LLM 和原始用户查询,从而生成最终答案。

这种方法在解决向量搜索中的跨域不对称问题方面与假设问题技术类似。不过,它也有缺点,如增加了计算成本和生成虚假答案的不确定性。

更多信息,请参阅HyDE论文。

创建子查询

当用户查询过于复杂时,我们可以使用 LLM 将其分解为更简单的子查询,然后再将其传递给向量数据库和 LLM。让我们来看一个例子。

设想有用户问:"Milvus 和 Zilliz Cloud 在功能上有什么不同?" 这个问题相当复杂,在我们的知识库中可能没有直接的答案。为了解决这个问题,我们可以将其拆分成两个更简单的子查询:

  • 子查询 1:"Milvus 有哪些功能?"
  • 子查询 2:"Zilliz Cloud 有哪些功能?"

有了这些子查询后,我们将它们全部转换成向量嵌入后发送给向量数据库。然后,向量数据库会找出与每个子查询最相关的 Top-K 文档块。最后,LLM 利用这些信息生成更好的答案。

通过将用户查询分解为子查询,我们可以让系统更容易地找到相关信息并提供准确的答案,即使是复杂的问题也不例外。

创建回退提示

简化复杂用户查询的另一种方法是创建回溯提示。这种技术包括使用 LLM 将复杂的用户查询抽象为"回溯问题"**。然后,向量数据库利用这些回溯问题来检索最相关的文档块。最后,LLM 根据这些检索到的文档块生成更准确的答案。

让我们用一个例子来说明这种技术。请看下面这个查询,它相当复杂,无法直接回答:

原始用户查询:"我有一个包含 100 亿条记录的数据集,想把它存储到 Milvus 中进行查询。可以吗?

为了简化这个用户查询,我们可以使用 LLM 生成一个更直接的回溯问题:

回退问题:"Milvus 可以处理的数据集大小限制是多少?"

这种方法可以帮助我们更好、更准确地回答复杂的查询。它将原始问题分解为更简单的形式,使我们的系统更容易找到相关信息并提供准确的回复。

增强索引

增强索引是提高 RAG 应用程序性能的另一种策略。让我们来探讨三种索引增强技术。

自动合并文档块

在建立索引时,我们可以采用两种粒度:子块及其对应的父块。起初,我们以更细的粒度搜索子块。然后,我们采用一种合并策略:如果前k 个子块中有特定数量(n)的子块属于同一个父块,我们就把这个父块作为上下文信息提供给 LLM。

这种方法已在LlamaIndex 中实现。

构建分层索引

在创建文档索引时,我们可以建立两级索引:一级是文档摘要索引,另一级是文档块索引。向量搜索过程包括两个阶段:首先,我们根据摘要过滤相关文档,随后,我们在这些相关文档中专门检索相应的文档块。

在涉及大量数据或数据分层的情况下,例如图书馆 Collections 中的内容检索,这种方法证明是有益的。

混合检索和重新排名

混合检索和重排技术将一种或多种辅助检索方法与向量相似性检索相结合。然后,Reranker会根据检索结果与用户查询的相关性对检索结果重新排序。

常见的补充检索算法包括基于词频的方法(如BM25)或利用稀疏嵌入的大模型(如SPLADE)。重新排序算法包括 RRF 或更复杂的模型,如Cross-Encoder(类似于 BERT 的架构)。

这种方法利用不同的检索方法来提高检索质量,并解决向量召回中的潜在差距。

改进检索器

改进 RAG 系统中的检索器组件也能改进 RAG 应用。让我们来探讨一些增强检索器的有效方法。

句子窗口检索

在基本的 RAG 系统中,提供给 LLM 的文档块是一个包含检索到的 embedding 块的较大窗口。这样可以确保提供给 LLM 的信息包含更广泛的上下文细节,从而最大限度地减少信息丢失。句子窗口检索技术将用于嵌入检索的文档块与提供给 LLM 的块分离开来。

不过,扩大窗口大小可能会引入额外的干扰信息。我们可以根据具体的业务需求调整窗口扩展的大小。

元数据过滤

为了确保更精确的答案,我们可以在将文档传递给 LLM 之前,通过过滤时间和类别等元数据来完善检索到的文档。例如,如果检索到的财务报告跨越多个年份,那么根据所需的年份进行过滤就能完善信息,满足特定要求。事实证明,这种方法在需要大量数据和详细元数据的情况下非常有效,例如图书馆 Collections 中的内容检索。

生成器增强

让我们通过改进 RAG 系统中的生成器来探索更多 RAG 优化技术。

压缩 LLM 提示

检索文档块中的噪声信息会严重影响 RAG 最终答案的准确性。LLMs 中有限的提示窗口也是获得更准确答案的障碍。为了应对这一挑战,我们可以压缩无关细节,强调关键段落,并减少检索文档块的整体上下文长度。

这种方法类似于之前讨论过的混合检索和重排方法,即利用 Rerankers 筛选出不相关的文档块。

调整提示中的块顺序

在论文"迷失在中间"中,研究人员观察到,LLMs 在推理过程中经常会忽略给定文档中间的信息。相反,他们往往更依赖于文档开头和结尾的信息。

根据这一观察结果,我们可以调整检索知识块的顺序来提高答案质量:在检索多个知识块时,将置信度相对较低的知识块放在中间,而将置信度相对较高的知识块放在两端。

增强 RAG 管道

我们还可以通过增强整个 RAG 管道来提高 RAG 应用程序的性能。

自我反思

这种方法在人工智能 Agents 中融入了自我反思的概念。那么,这种技术是如何工作的呢?

一些最初检索到的 Top-K 文档块是模棱两可的,可能无法直接回答用户的问题。在这种情况下,我们可以进行第二轮反思,以验证这些文档块是否能真正解决查询问题。

我们可以使用高效的反思方法(如自然语言推理(NLI)模型)进行反思,也可以使用互联网搜索等其他工具进行验证。

自我反思的概念已在多篇论文或多个项目中进行了探讨,包括Self-RAGCorrective RAGLangGraph 等。

使用代理进行查询路由选择

有时,我们不必使用 RAG 系统来回答简单的问题,因为它可能会导致更多的误解和对误导信息的推断。在这种情况下,我们可以在查询阶段使用代理作为路由器。这个 Agents 会评估查询是否需要通过 RAG 管道。如果需要,则启动后续的 RAG 管道;否则,LLM 直接处理查询。

Agents 可以有多种形式,包括 LLM、小型分类模型,甚至是一组规则。

通过根据用户意图路由查询,可以重新定向部分查询,从而显著提高响应时间,并明显减少不必要的噪音。

我们可以将查询路由技术扩展到 RAG 系统内的其他流程,例如确定何时利用网络搜索等工具、进行子查询或搜索图片。这种方法可确保 RAG 系统中的每个步骤都能根据查询的具体要求进行优化,从而提高信息检索的效率和准确性。

总结

普通的 RAG 管道看似简单,但要实现最佳的业务性能,往往需要更复杂的优化技术。

本文总结了提高 RAG 应用程序性能的各种常用方法。我们还提供了清晰的插图,帮助您快速理解这些概念和技术,并加快其实施和优化。

您可以通过此GitHub 链接获得本文所列主要方法的简单实现。

想要更快、更简单、更好用的 Milvus SaaS服务 ?

Zilliz Cloud是基于Milvus的全托管向量数据库,拥有更高性能,更易扩展,以及卓越性价比

免费试用 Zilliz Cloud
反馈

此页对您是否有帮助?