初级 RAG vs高级 RAG,到底有什么区别?

103 阅读11分钟

如今,LLM 的内容生成能力早已改变了世界。这些模型在创造新内容和给出智能回复这类任务上表现出色,推动了生成式 AI 领域的发展。不过,虽然模型被喂了大量的数据进行训练,但受限于难以获取实时最新的信息,LLM 无可避免地会给出过时的答案或错误的信息,即所谓的信息幻觉。 为了解决这些问题,检索增强生成(RAG)的动态框架出现了。它结合了传统大模型的优势和检索系统,扩展了这些模型的用例。

RAG 简单来说是一种旨在提升 LLMs 性能的策略性增强技术。通过在内容生成过程中加入检索信息的步骤,RAG 增强了模型回复的准确性和实时性。 近两年,RAG 已经有了显著的发展,形成了两种主要模式:

  1. 初级RAG (Naive RAG):这一阶段的 RAG 系统只是从知识库中检索相关信息,并直接提供给 LLM 生成回复。
  2. 高级RAG (Advanced RAG):高级 RAG 在检索之前和之后添加了额外的处理步骤,以优化检索到的信息。这些步骤提高了生成回复的质量和准确性,确保它与模型的输出无缝集成。

下面我们来一起深入探究下这两种 RAG 方法。

一 、初级 RAG 探究

初级 RAG 是 RAG 系统最基础的版本。它是一种将检索数据和 LLM 简单组合来为用户提供高效回复的方法。

img

1、文档切分

在 RAG 系统中,文档切分(Text Chunking)是数据预处理的核心步骤,直接影响检索效果和生成质量。一般来说,将文档切分为短片段(如按句子、段落或固定长度),一方面适应嵌入模型和检索器的输入限制;另一方面合理分段帮助 LLM 减少处理长上下文的成本,提高生成效率。常用的切分方法包括:

  • 根据固定长度切分
  • 按语义切分
  • 高级切分技术

2、 嵌入模型

嵌入模型(Embedding Model)是 RAG 系统的关键部分。它将切分后的文档块和用户查询都转换为数值形式,即为嵌入。这种转换的必要性在于,计算机更容易理解数值数据,而嵌入模型使用先进的机器学习技术以数学方式表示文本的含义,也就让计算机“理解”了文本含义。例如,当用户提出问题时,模型将该问题转换为一组数字串,以捕捉查询的语义。

img

3、向量数据库

一旦文档块转换为嵌入,它们就会存储在类似于向量数据库(VecotorDB)的系统中。向量数据库是一种专门用于高效存储、检索高维向量(即嵌入向量/Embeddings)的数据库系统。向量数据库的核心能力包括:

  • 近似最近邻搜索:快速在高维空间中找到相似向量。
  • 大规模向量管理:支持百万到十亿级向量的存储和检索。
  • 低延迟****查询:优化索引结构,实现毫秒级响应。

4、检索

当用户提交查询时,系统在向量数据库中将查询的嵌入与数据库中存储的嵌入进行比较,检索 Top-K 相似片段。这个检索过程非常重要,因为它缩小了将用于生成最终回复的信息范围。它实际上充当了一个过滤器,确保只有最相关的数据传递到下一个阶段。

5、大语言模型

接下来,LLM 接收检索到的上下文和用户查询,生成自然语言回答。在这个过程中,LLM 会对文档片段进行整合,并根据检索内容调整回答风格。当检索结果不完整时,LLM 可补充常识性知识(需要注意幻觉)。最终,以用户易于理解的自然语言形式构建回复,比如生成列表、表格或分步说明等。

通过理解从用户查询到最终回复的 RAG 工作流,我们可以了解到初级 RAG 系统的每个组件在确保用户获得准确和相关信息方面发挥的关键作用。

优点

  1. 实施简单: RAG 的设置非常简单,因为它直接将检索与生成相结合,无需复杂的修改或额外的组件,降低了增强语言模型的复杂性。
  2. 无需微调: RAG 的一个重要优势是它不需要对 LLM 进行微调。这不仅可以更快地部署 RAG 系统,还节省了时间和运营成本。
  3. 提高准确性: 通过利用外部的最新信息,初级 RAG 显著提高了生成回复的准确性。这确保输出不仅相关,而且体现了最新的可用数据,较大程度地减少了 LLM 幻觉。
  4. 可扩展性和灵活性: 初级 RAG 的简单性使其更容易在不同应用程序中进行扩展,因为它可以在不对现有检索或生成组件进行重大更改的情况下进行集成。这种灵活性使其可以在各个领域中进行部署,而只需进行最少的定制。

缺点

  1. 处理能力有限: 直接使用检索到的信息,没有进一步的处理或改进,可能导致生成回复的连贯性差。
  2. 依赖于检索质量: 最终输出的质量很大程度上取决于检索模块找到最相关信息的能力。检索质量差可能导致不准确或不相关的回复。
  3. 可扩展性问题: 随着数据集的增长,检索过程可能变得更慢,影响整体性能和响应时间。
  4. 上下文限制: 初级 RAG 可能难以理解查询的更广泛的上下文,导致回复准确但可能不完全符合用户意图。

二、 高级 RAG 探究

在初级 RAG 的基础上,高级 RAG 为整个过程引入了一层较为复杂的处理层,以优化回复的相关性和整体质量。

img

1、 检索前优化

在高级RAG中,检索过程甚至在实际检索之前就进行了优化。

索引改进

在数据库中,索引方法在高效组织和检索数据方面起着重要作用。广泛采用的传统的索引方法有 B tree 和 Hash 索引等。然而,这些算法的搜索速度随着数据规模的增加而降低。因此,我们需要更高效的索引方法来处理更大规模的数据集,比如我们自研的 MSTG 多尺度树图向量索引算法。该算法在速度和性能方面优于其他索引方法。

img

与 HNSW 等流行算法仅依赖于分层图和倒排文件索引(IVF)的两级树结构不同,MSTG 在设计中结合了分层图和树结构的优点。通常,图算法对于未经过滤的搜索更快,但对于经过过滤的搜索可能不高效。另一方面,树算法在经过过滤的搜索方面表现出色,但对于未经过过滤的搜索速度较慢。通过结合这两种方法,MSTG 确保了未经过滤和经过过滤的搜索的高性能和准确性,使其成为各种搜索场景的强大选择。

查询重写

在检索过程开始之前,原始的用户查询经过多次增强以提高准确性和相关性,通常会采用查询重写、扩展和转换等技术。这一步确保检索系统获取最相关的信息。例如,如果用户的查询过于宽泛,查询重写可以通过添加更多的上下文或特定术语来改进查询,而查询扩展可能会添加同义词或相关术语以涵盖更广泛的相关文档范围。

2、 动态嵌入

在初级 RAG 中,可能会对所有类型的数据使用单个嵌入模型生成固定向量,这可能导致效率低下。然而,高级 RAG 中使用动态嵌入根据上下文或任务需求动态调整向量表示。这意味着嵌入模型经过训练或调整,能更灵活地捕捉语义变化,适应多义性、时效性数据及个性化需求。同时,动态嵌入使大语言模型能够理解细微差别,消除歧义,进而产生更连贯、更相关的回答。

3、混合检索

高级 RAG 还会利用混合搜索,结合不同的搜索策略来提高检索性能,一般包括基于关键字的搜索、语义搜索和神经搜索的不同组合方式。例如,我们的 AI 数据库支持过滤向量搜索和全文搜索,且可以使用复杂的 SQL 查询。这种混合方法通过将不同检索技术结合,能弥补各自的不足,发挥各自优势,适应更广泛的复杂检索场景,提高检索的精准度和语义相关性,提升大模型在复杂检索任务中的表现。

4、检索后处理

在检索过程之后,高级 RAG 将进一步处理检索到的数据,以确保最终输出的质量和相关性最高。

重新排序

在检索过程之后,高级 RAG 采取额外的步骤来优化信息,这一步骤称为重新排序,来确保最相关和有用的数据优先。初始阶段,系统检索到可能与用户查询相关的多个信息,然而,并不是所有这些信息都同样有价值。重新排序有助于根据其他因素(如与查询的匹配程度和上下文的适应性)对这些数据进行排序。

通过重新评估检索到的内容,重新排序将最相关的部分放在前面。这确保生成的回复不仅准确,而且连贯,并直接回答了用户的需求。该过程使用各种标准,如语义相关性和上下文适应性,对信息进行重新排序。这种改进使得最终回复更加专注和精确,提高了输出的整体质量。

img

5、 上下文压缩

在过滤掉相关文档后,即使使用了重新排序算法,仍然可能返回冗余或无关信息对生成阶段造成干扰。通过压缩和精炼检索到的上下文,可以显著提升 LLM 生成答案的准确性、效率和相关性,这个过程我们称为上下文压缩。这一环节应用于将相关文档传递给 LLM 之前,确保 LLM 只接收到最相关的信息,从而能够提供最佳结果。上下文压缩一方面对检索结果“提纯”,让 LLM 聚焦高价值内容;另外一方面突破上下文窗口限制,支持更复杂的任务(如长文档分析)。

三、 对比分析

通过比较初级 RAG 和高级 RAG,我们可以观察到高级 RAG 是如何在初级 RAG 的基础上进行扩展的。它引入了关键的改进,提高了准确性、效率和检索的整体质量。

标准初级 RAG高级 RAG
准确性和相关性通过使用检索到的信息提供基本的准确性。通过高级过滤、重新排序和更好的上下文使用提高准确性和相关性。
数据检索使用基本的相似性检查,可能会错过一些相关数据。通过混合搜索和动态嵌入等技术优化检索,确保高度相关和准确的数据。
查询优化以直接的方式处理查询,没有太多增强。通过查询重写和添加元数据等方法改进查询处理,使检索更精确。
可扩展性随着数据规模的增长,可能变得不太高效,影响检索。为高效处理大型数据集而设计,使用更好的索引和检索方法以保持高性能。
多阶段检索进行一次检索,可能会错过重要数据。使用多阶段过程,通过重新排序和上下文压缩等步骤改进初始结果,确保最终输出准确和相关。

结论

在选择初级 RAG 或高级 RAG 时,需要考虑应用程序的具体需求。初级 RAG 适用于简单的用例,其中速度和简单实施的优先级较高。它在不需要深入的上下文理解的场景中提高了 LLM 的性能。而高级 RAG 则适用于更复杂的应用程序,通过优化检索质量、增强生成控制、引入多模态和复杂推理能力,显著提升系统的准确性、灵活性和适用范围,使其成为处理更大规模数据集和复杂查询的首选。