本文是对近期刚发布的一篇 RAG 研究论文的翻译,在此之前,笔者也大量了阅读了相关的技术文章和论文,在准备自己总结之际发现了这篇论文。这篇文章发布距今已经有一个月,但是上面所说的 RAG 相关的技术以及优化,依然是现在最先进的,论文中所述的内容基本涵盖了当今的所有相关技术,如果你也在研究 RAG,也在开发大模型应用,那么这篇论文值得你认真阅读,一定会收获满满。由于有些技术笔者还没有深入研究,因此直接使用了Google翻译的结果,有疑问的读者可以直接读原文,也欢迎指正。
摘要
大型语言模型(LLMs)展示了重要的功能,但面临诸如幻觉、过时的知识以及不透明、不可追踪的推理过程等挑战。通过整合外部数据库的知识,Retrieval-Augmented Generation(RAG)已成为一种有前景的解决方案。这提高了模型的准确性和可信度,特别是对于知识密集型任务,并允许持续的知识更新和特定领域信息的集成。 RAG 将LLMs的内在知识与外部数据库的巨大动态存储库协同合并。这篇综合综述论文详细研究了 RAG 范式的进展,包括朴素 RAG、高级 RAG 和模块化 RAG。它仔细研究了 RAG 框架的三方基础,包括检索、生成和增强技术。该论文重点介绍了每个关键组件中嵌入的最先进技术,让人们对 RAG 系统的进步有了深刻的了解。此外,本文还介绍了评估 RAG 模型的指标和基准,以及最新的评估框架。总之,本文描绘了未来的研究途径,包括识别挑战、扩展多模式以及 RAG 基础设施及其生态系统的进展。
1 引言
大型语言模型 (LLMs),例如 GPT 系列 [Brown et al., 2020, OpenAI, 2023] 和 LLama 系列 [Touvron et al., 2023],以及其他模型,例如 Gemini [Google ,2023],在自然语言处理方面取得了显着的成功,在各种 benchmarks 上都表现出色,包括 SuperGLUE [Wang et al., 2019]、MMLU [Hendrycks et al., 2020] 和 BIG-bench [Srivastava et al., 2022]。尽管取得了这些进步,LLMs仍表现出明显的局限性,特别是在处理特定领域或高度专业化的查询方面[Kandpal et al., 2023]。一个常见的问题是生成不正确的信息或"幻觉"[Zhang et al., 2023b],特别是当查询超出模型的训练数据或需要最新信息时。这些缺点强调了在没有额外保护措施的情况下在实际生产环境中将LLMs部署为黑盒解决方案是不切实际的。缓解这些限制的一种有前途的方法是检索增强生成(RAG),它将外部数据检索集成到生成过程中,从而增强模型提供准确且相关响应的能力。
RAG,由 Lewis 等人提出。 [Lewis et al., 2020] 在 2020 年中期,将成为 LLMs 领域的范例,增强生成任务。具体来说,RAG 涉及初始检索步骤,其中 LLMs 查询外部数据源以获取相关信息,然后再继续回答问题或生成文本。这一过程不仅为后续生成阶段提供信息,而且确保响应基于检索到的证据,从而显着提高输出的准确性和相关性。在推理阶段从知识库中动态检索信息使 RAG 能够解决诸如生成实际上不正确的内容(通常称为"幻觉")等问题。 RAG 与 LLMs 的集成得到了迅速采用,并已成为完善聊天机器人功能并使 LLMs 更适合实际应用的关键技术。
RAG 的演化轨迹经历了四个不同的阶段,如图 1 所示。自 2017 年诞生以来,随着 Transformer 架构的出现,主要推动力是通过预训练模型 (PTM) 吸收额外的知识来增强语言模型。这一时期见证了RAG的基础性工作,主要针对优化预训练方法。
在这个初始阶段之后,在 chatGPT 出现之前,接下来是一段相对休眠期,在此期间,RAG 的相关研究进展甚微。

图1:RAG研发技术树及代表性作品
chatGPT 随后的到来标志着一个关键时刻将 LLMs 推到了最前沿。社区的焦点转向利用 LLMs 的功能来实现更高的可控性并满足不断变化的需求。因此,RAG 的大部分工作集中在推理上,少数致力于微调过程。随着LLM功能的不断进步,特别是随着 GPT-4 的引入,RAG 技术的格局发生了重大转变。重点演变成一种混合方法,结合了 RAG 和微调的优势,同时少数专门人员继续关注优化预训练方法。
尽管 RAG 研究迅速发展,但该领域缺乏系统的整合和抽象,这给理解 RAG 进展的全面前景带来了挑战。本次调查旨在通过对 LLMs 中的检索增强进行彻底调研,概述整个 RAG 过程,并涵盖 RAG 当前研究和未来的方向。
2 定义
RAG的定义可以从它的工作流程来概括。图 2 描述了典型的 RAG 应用程序工作流程。在这种情况下,用户向 ChatGPT 询问最近发生的备受瞩目的事件(即 OpenAI 首席执行官的突然解雇和复职),该事件引起了相当多的公众讨论。 ChatGPT 作为最著名和广泛使用的LLM,受其预训练数据的限制,缺乏对最近事件的了解。 RAG 通过从外部知识库检索最新文档摘录来弥补这一差距。在这种情况下,它会获取与调查相关的精选新闻文章。然后,这些文章与最初的问题一起合并为丰富的提示,使 ChatGPT 能够综合明智的响应。此示例说明了 RAG 流程,展示了其通过实时信息检索增强模型响应的能力。

图 2:应用于问答的 RAG 流程的代表性实例
在技术上,RAG 通过各种创新方法得到了丰富,解决了一些关键问题,例如"检索内容"、"何时检索"和"如何使用检索到的信息"。对于"检索什么"的研究已经从简单的token 和实体检索发展到更复杂的结构,如块和知识图 ,研究重点是检索的粒度和数据结构化的水平。粗粒度带来更多信息,但精度较低。检索结构化文本可提供更多信息,但会牺牲效率。 "何时检索"的问题导致了从单一到自适应和多重检索的策略方法。检索频率高,信息量多,效率低。至于"如何使用"检索到的数据,已经在模型架构的各个级别上开发了集成技术,包括输入层、中间层和输出层。虽然"中间层"和"输出层"更有效,但存在需要训练、效率低的问题。
RAG 是一种通过集成外部知识库来增强 LLMs 的范例。它采用协同方法,结合信息检索机制和上下文学习 (ICL) 来增强 LLM 的性能。在这个框架下用户发起的查询提示通过搜索算法检索相关信息。然后,这些信息会被编织到 LLM 的提示中,为生成过程提供额外的上下文。 RAG 的主要优势在于它无需针对特定任务的应用程序重新训练 LLMs。开发人员可以添加外部知识库,丰富输入,从而提高模型的输出精度。 RAG因其高实用性和低进入门槛而成为LLMs系统中最受欢迎的架构之一,许多会话产品几乎完全基于RAG构建。
RAG 工作流程包括三个关键步骤。首先,将语料库划分为离散块,然后利用编码器模型构建向量索引。其次,RAG 根据块与查询和索引块的向量相似性来识别和检索块。最后,该模型根据从检索到的块中收集的上下文信息合成一个响应。这些步骤构成了 RAG 流程的基本框架,支撑着其信息检索和上下文感知生成功能。接下来我们将介绍RAG研究框架。
3 RAG 框架
RAG 研究范式在不断发展,本节主要描述其进展。我们将其分为三种类型:Naive RAG、Advanced RAG 和 Modular RAG。虽然 RAG 具有成本效益并且超越了原生 LLM 的性能,但它们也表现出一些局限性。 Advanced RAG 和 Modular RAG 的开发是针对 Naive RAG 的这些具体缺点的优化。
3.1 基础RAG(Naive RAG)
Naive RAG 研究范式代表了最早的方法,在 ChatGPT 广泛采用后不久就得到了重视。 Naive RAG 遵循传统流程,包括索引、检索和生成。它也被称为"检索-读取"框架。
索引(Indexing)
索引过程是数据准备过程中至关重要的初始步骤,它是离线进行的,涉及多个阶段。它从数据索引开始,清理和提取原始数据,并将 PDF、HTML、Word 和 Markdown 等各种文件格式转换为标准化纯文本。为了适应语言模型的上下文限制,该文本在称为分块的过程中被分割成更小、更易于管理的块。这些块随后通过 embedding 模型转换为向量表示,该模型是根据推理效率和模型大小之间的平衡而选择的。这有利于检索阶段的相似性比较。最后,创建一个索引来将这些文本块及其向量 embeddings 为键值对,从而实现高效且可扩展的搜索功能。
检索(Retrieve)
收到用户查询后,该系统采用与索引阶段相同的 embedding 模型将输入转码为向量表示。然后,它继续计算查询向量与索引语料库中的向量化块之间的相似性分数。系统优先考虑并检索与查询最相似的前 K 个块。这些块随后被用作解决用户请求的扩展上下文基础。
生成(Generation)
提出的查询和选定的文档块被合成一个新的提示信息,随后,大型语言模型的任务根据这个提示信息做出响应。模型的回答方法可能会根据特定任务的标准而有所不同,从而允许它利用其固有的参数知识或限制其对所提供文档中包含的信息的响应。在持续对话的情况下,任何现有的对话历史都可以集成到提示中,使模型能够有效地进行多轮对话交互。
基础RAG的缺点
基础 RAG 在三个关键领域面临重大挑战:"检索"、"生成"和"增强"。
- 检索质量: 检索质量面临多种挑战,包括精度低,即检索到的文档不一定都和查询相关,导致信息错误或不连贯。其次是低召回率问题,即未能检索到所有相关的文档块,使得大模型无法获取到足够的信息来生成答案。此外,过时的信息使问题进一步复杂化,可能会产生不准确的检索结果。
- 响应生成质量: 这方面的问题主要是幻觉,模型在缺乏足够上下文的情况下虚构答案。另个问题是生成的答案和提供的上下文不相关。最后,生成有害或者有偏见的响应也是一个问题。
- 增强过程: 如何有效地将检索到的段落中的上下文与当前生成任务整合到一起也面临着不少挑战,可能导致脱节或不连贯的输出。冗余和重复也是问题,特别是当多个检索到的段落包含相似信息时,导致生成的响应中出现重复内容。辨别多个检索到的段落对生成任务的重要性和相关性是另一个挑战,需要适当平衡每个段落的价值。此外,协调写作风格和语气的差异以确保输出的一致性至关重要。最后,生成模型存在过度依赖增强信息的风险,可能导致输出仅仅重复检索到的内容,而不提供新的价值或综合信息。
3.2 高级RAG(Advance RAG)
高级 RAG 出现的目的旨在解决基础 RAG 的缺点。在检索质量方面,高级 RAG 实施检索前和检索后策略。为了解决基础 RAG 遇到的索引挑战,高级 RAG 使用滑动窗口、细粒度分段和元数据等技术改进了其索引方法。它还引入了各种方法来优化检索过程。
预检索(Pre-Retrieval)
优化数据索引。优化数据索引的目标是提高索引内容的质量。这涉及到五个主要策略:增强数据粒度、优化索引结构、添加元数据、对齐优化和混合检索。
- 增强数据粒度旨在提高文本标准化、一致性、事实准确性和丰富的上下文,以提高 RAG 系统的性能。这包括删除不相关的信息、消除实体和术语中的歧义、确认事实的准确性、维护上下文以及更新过时的文档。
- 优化索引结构涉及调整块的大小以捕获相关上下文、跨多个索引路径进行查询以及合并来自图结构的信息以通过利用图数据索引中的节点之间的关系来捕获相关上下文。
- 添加元数据信息涉及将引用的元数据(例如日期和目的)集成到块中以用于过滤目的,以及合并引用的章节和小节等元数据以提高检索效率。
- 对齐优化通过在文档中引入"假设问题",即创建适合每篇文档适合回答的问题,并将这些问题和文档结合起来。
检索(Retrieval)
在检索阶段,重点是通过计算查询和块之间的相似度来识别适当的上下文。embedding 模型是这个过程的核心。在高级 RAG 中,embedding 模型有优化的潜力。
- Fine-tunning Embedding 模型会显着影响 RAG 系统中检索内容的相关性。此过程涉及定制 embedding 模型以增强特定领域上下文中的检索相关性,特别是对于处理不断发展或罕见术语的专业领域。例如 BAAI 开发的 BGE-large-EN,是高性能嵌入模型的一个例子,可以通过微调来优化检索相关性。可以使用 GPT-3.5-turbo 等语言模型生成用于微调的训练数据,以制定基于文档块的问题,然后将其用作微调对。
- Dynamic Embedding 根据单词使用的上下文进行调整,为每个单词提供不同的向量表示。例如,在像 BERT 这样的 Transformer 模型中,同一个单词可以根据周围的单词有不同的向量表示。 OpenAI 的 embeddings-ada-02 模型基于大语言模型(如GPT)原理开发的,是一种复杂的动态嵌入模型,可以捕获上下文理解。然而,可能还是不如最新的大语言模型(如GPT-4)那样对上下文敏感。
检索后(Post-Retrieval)
从数据库检索有价值的上下文后,必须将其与查询合并作为 LLMs 的输入,同时解决上下文窗口限制。简单地一次性向 LLM 输入所有相关文档可能会超出上下文窗口限制、引入噪音并妨碍对关键信息的关注。为了解决这些问题,需要对检索到的内容进行额外处理。
- 重排(ReRank) 。重新排列检索到的信息以将最相关的内容重新定位到提示的边缘是一个关键策略。这一概念已在 LlamaIndex、LangChain 和 HayStack 等框架中实现。例如,DiversityRanker 根据文档多样性确定重新排序的优先级,而 LostInTheMiddleRanker 交替将最佳文档放置在上下文窗口的开头和结尾。此外,cohereAI rerank、bge-rerank 和 LongLLMLingua 等方法会重新计算相关文本和查询之间的语义相似度,解决了基于向量的语义相似度模拟搜索的挑战。
- 信息压缩。研究表明,检索到的文档中的噪声会对 RAG 性能产生不利影响。在后期处理中,重点在于压缩无关上下文、突出关键段落、减少整体上下文长度。 Selective Context 和 LLMLingua 等方法利用小语言模型来计算提示之间的相互信息或困惑度,估计元素重要性。 Recomp 通过以不同粒度训练压缩器来解决这个问题,而 Long Context 和"Walking in the Memory Maze" 设计总结技术来增强LLM 的关键信息感知,特别是在处理广泛的上下文时。
3.3 模块化RAG(Modular RAG)
模块化 RAG 结构不同于传统的 RAG 框架,提供了更大的通用性和灵活性。它集成了各种方法来增强功能模块,例如合并用于相似性检索的搜索模块以及在检索器中应用微调方法。重构的 RAG 模块和迭代方法已经被开发来解决特定问题。模块化 RAG 范式日益成为 RAG 领域的规范,允许跨多个模块的序列化管道或端到端训练方法。三种RAG范式的比较如图3所示。

图3:RAG三种范式的比较
新模块
- 搜索模块(Search) 。与 基础/高级 RAG 中的相似性检索相比,搜索模块针对特定场景量身定制,并结合了对其他语料库的直接搜索。这种集成是使用 LLM 生成的代码、SQL 或 Cypher 等查询语言以及其他自定义工具来实现的。这些搜索的数据源可以包括搜索引擎、文本数据、表格数据和知识图。
- 内存模块(Memory) 。该模块利用 LLM 的内存功能来指导检索。该方法涉及识别与当前输入最相似的记忆。 Selfmem 利用检索增强生成器迭代创建无界内存池,结合"原始问题"和"双重问题"。通过采用检索增强生成模型,该模型使用自己的输出来改进自身,文本在推理过程中变得更加符合数据分布,而不仅依赖训练数据。
- 融合(Fusion) 。通过多查询方法解决传统搜索系统的局限性,使用 LLM 将用户查询扩展到多个不同的视角,从而增强传统搜索系统。这种方法不仅捕获用户寻求的明确信息,而且还揭示了更深层次的变革性知识。融合过程涉及原始查询和扩展查询的并行向量搜索、智能重新排序以优化结果,以及将最佳结果与新查询配对。这种复杂的方法可确保搜索结果与用户的显式和隐式意图紧密结合,从而发现更有洞察力和相关性的信息。
- 路由(Routing) 。 RAG系统的检索过程利用不同领域、语言和格式的不同来源,可以根据情况进行替换或合并。查询路由决定用户查询的后续操作,选项包括汇总、搜索特定数据库或将不同路径合并为单个响应。查询路由器还为查询选择适当的数据存储,其中可能包括各种源,例如向量存储、图形数据库或关系数据库,或索引层次结构,例如用于多文档存储的摘要索引和文档块向量索引。查询路由器的决策是通过 LLMs 调用预定义和执行的,该调用将查询定向到所选索引。
- 预测(Predict) 。它解决了检索内容中冗余和噪音的常见问题。该模块不是直接从数据源检索,而是利用 LLM 生成必要的上下文。与通过直接检索获得的内容相比,LLM 生成的内容更有可能包含相关信息。
- 任务适配器。该模块侧重于使 RAG 适应各种下游任务。 UPRISE 可自动从预先构建的数据池中检索零样本任务输入的提示,从而增强跨任务和模型的通用性。同时,PROMPTAGATOR 利用 LLM 作为少量查询生成器,并根据生成的数据创建特定于任务的检索器。通过利用 LLMs 的泛化能力,它可以使用最少的示例开发特定于任务的端到端检索器。
新模式
模块化 RAG 的组织结构具有高度适应性,允许在 RAG 流程中替换或重新安排模块,以适应特定的问题环境。
基础 RAG 和高级 RAG 都可以被认为是由一些固定的模块组成。如图 3 所示,基础 RAG 主要由"检索"和"读取"模块组成。高级 RAG 的典型模式通过添加"重写"和"重新排序"模块建立在基础 RAG 的基础上。但总体而言,模块化RAG具有更大的多样性和灵活性。
当前的研究主要探索两种组织范式。第一个涉及添加或替换模块,而第二个则侧重于调整模块之间的组织流程。这种灵活性使得能够定制 RAG 流程以有效地解决各种任务。
- 添加或替换模块。引入或替换模块的策略涉及维护检索-读取过程的核心结构,同时集成附加模块以增强特定功能。 RRR 引入了 Rewrite-RetrieveRead 过程,利用 LLM 性能作为重写模块的强化学习激励。这使得重写器能够微调检索查询,从而提高读取器的下游任务性能。类似地,模块可以在诸如 Generate-Read 之类的方法中选择性地交换,其中LLM的生成模块取代了检索模块。 Recite-Read 将外部检索转变为模型权重检索,要求 LLM 记住最初特定于任务的信息,然后生成能够处理知识密集型自然语言的输出处理任务。
- 调整模块之间的流程。在模块流程调整领域,重点是增强语言模型和检索模型之间的交互。 DSP 引入了 DemonstrateSearch-Predict 框架,将上下文学习系统视为显式程序而不是最终任务提示,从而更有效地处理知识密集型任务。 ITER-RETGEN 方法利用生成的内容来指导检索,在检索-读取-检索-读取流程中迭代地实现"检索增强生成"和"生成增强检索"。该方法展示了一种使用一个模块的输出来改进另一个模块的功能的创新方法。
RAG 管道优化
检索过程的优化旨在提高 RAG 系统中信息的效率和质量。当前的研究重点是集成不同的搜索技术、细化检索步骤、结合认知回溯、实施多功能查询策略以及利用 embedding 相似性。这些努力共同努力在 RAG 系统中实现检索效率和上下文信息深度之间的平衡。
- 混合搜索探索。 RAG系统通过智能集成各种技术(包括基于关键字的搜索、语义搜索和向量搜索)来优化其性能。这种方法利用每种方法的独特优势来适应不同的查询类型和信息需求,确保高度相关和上下文丰富的信息的一致检索。混合搜索的使用可以作为检索策略的有力补充,从而提高 RAG 管道的整体效率。
- 递归检索和查询引擎。递归检索涉及在初始检索阶段获取较小的块以捕获关键语义。随后,在该过程的后期阶段,包含更多上下文信息的更大块被提供给 LLM。这种两步检索方法有助于在效率和提供上下文丰富的响应之间取得平衡。
- StepBack-prompt 方法鼓励 LLM 摆脱特定实例并围绕更广泛的概念和原则进行推理。实验结果表明,当使用 StepBack-prompt 时,各种具有挑战性的基于推理的任务的性能显着提高,突出了它们对 RAG 过程的自然适应性。这些检索增强步骤既可以应用于生成对 StepBack-prompt 的响应,也可以应用于最终的问答过程。
- 子查询。根据场景的不同,可以采用各种查询策略,例如使用 LlamaIndex 等框架提供的查询引擎、利用树查询、利用向量查询或执行简单的块顺序查询。
- HyDE(Hypothetical Document Embeddings) 。 HyDE 基于一个假设:相较于直接查询,通过 LLM 生成的答案在 Embedding 空间中可能更为接近。使用 LLM,HyDE 创建一个假设文档(答案)来响应查询,Embedding 该文档,并使用生成的 Embedding 来检索与假设文档类似的真实文档。这种方法不是根据查询寻求 Embedding 相似性,而是关注一个答案到另一个答案的 Embedding 相似性。然而,它可能不会始终产生理想的结果,特别是当语言模型不熟悉主题时,可能会导致更多错误实例。
4 检索(Retrieval)
在 RAG 的背景下,从数据源中高效检索相关文档至关重要。然而,培养一只熟练的猎犬面临着巨大的挑战。本节探讨了三个基本问题:1)我们如何实现准确的语义表示? 2)什么方法可以对齐查询和文档的语义空间? 3)检索器的输出如何与大语言模型的偏好保持一致?
4.1 增强语义标识
在 RAG 中,语义空间至关重要,因为它涉及查询和文档的多维映射。该语义空间中的检索准确性会显着影响 RAG 结果。本节将介绍两种构建准确语义空间的方法。
块优化
管理外部文档时,第一步涉及将它们分解成更小的块以提取细粒度的特征,然后 embedding 这些特征以表示其语义。然而,embedding 过大或过小的文本块可能会导致次优结果。因此,确定语料库中文档的最佳块大小对于确保检索结果的准确性和相关性至关重要。
选择合适的分块策略需要仔细考虑几个重要因素,例如索引内容的性质、embedding 模型及其最佳块大小、用户查询的预期长度和复杂性以及特定应用程序对检索结果的利用。例如,分块模型的选择应该基于内容的长度------无论是长还是短。此外,不同的 embedding 模型在不同的块大小下表现出不同的性能特征。例如,sentence-transformer 对于单个句子表现更好,而 text-embedding-ada-002 对于包含 256 或 512 个标记的块表现更好。
此外,用户输入问题的长度和复杂性以及应用程序的特定需求(例如语义搜索或问答)等因素也会影响分块策略的选择。此选择可能会直接受到所选 LLMs 的 token 限制的影响,需要调整块大小。实际上,获得精确的查询结果需要灵活应用不同的分块策略。不存在放之四海而皆准的"最佳"策略,只有最适合特定情况的策略。
RAG 当前的研究探索了各种旨在提高检索效率和准确性的块优化技术。其中一种方法涉及使用滑动窗口技术,通过跨多个检索过程合并全局相关信息来实现分层检索。另一种策略称为"small2big"方法,在初始搜索阶段利用小文本块,然后向语言模型提供较大的相关文本块进行处理。
摘要嵌入技术根据文档摘要优先考虑前 K 个检索,提供对整个文档上下文的全面理解。此外,元数据过滤技术利用文档元数据来增强过滤过程。图索引技术是一种创新方法,可将实体和关系转换为节点和连接,显著提高相关性,特别是在多跳问题的情况下。
这些不同方法的结合带来了显着的进步,从而增强了检索结果并提高了 RAG 的性能。
微调 Embedding 模型
一旦确定了适当的块大小,下一个关键步骤就是使用 embedding 模型将这些块和查询 embedding 到语义空间中。embedding 的有效性至关重要,因为它会影响模型表示语料库的能力。最近的研究引入了著名的 embedding 模型,如 AngIE、Voyage、BGE 等。这些模型已经在广泛的语料库上进行了预训练。然而,当应用于专门领域时,它们准确捕获特定领域信息的能力可能会受到限制。
此外,Embedding 模型的特定于任务的微调对于确保模型在内容相关性方面理解用户查询至关重要。未经微调的模型可能无法充分满足特定任务的要求。因此,微调 Embedding 模型对于下游应用程序至关重要。Embedding 微调方法有两种主要方式。
- 领域知识微调。为了确保Embedding模型准确地捕获了特定领域的信息,因此必须利用特定领域的数据集进行微调。此过程与标准语言模型微调不同,主要在于所涉及数据集的性质。通常,用于 Embedding 模型微调的数据集包含三个主要元素:查询、语料库和相关文档。该模型使用这些查询来识别语料库中的相关文档。然后根据模型响应查询检索这些相关文档的能力来衡量模型的有效性。数据集构建、模型微调和评估阶段都面临着不同的挑战。 LlamaIndex 引入了一套关键类和函数,旨在增强 Embedding 模型微调工作流程,从而简化这些复杂的过程。通过策划一个充满领域知识的语料库并利用所提供的方法,人们可以熟练地微调 Embedding 模型,以紧密地符合目标领域的特定要求。
- 下游任务的微调。根据下游任务的微调 Embedding 模型是提高模型性能的关键步骤。在利用 RAG 完成这些任务的领域中,已经出现了通过利用 LLMs 的功能来微调 Embedding 模型的创新方法。例如,PROMPTAGATOR 利用 LLM 作为几次查询生成器来创建特定于任务的检索器,解决监督微调中的挑战,特别是在数据稀缺领域。另一种方法,LLM-Embedder,利用 LLMs 为跨多个下游任务的数据生成奖励信号。检索器使用两种类型的监督信号进行微调:数据集的硬标签和来自 LLMs 的软奖励。这种双信号方法促进了更有效的微调过程,根据不同的下游应用定制 Embedding 模型。
虽然这些方法通过结合领域知识和特定于任务的微调来改进语义表示,但检索器可能并不总是表现出与某些 LLMs的最佳兼容性。为了解决这个问题,一些研究人员探索了利用 LLMs 的反馈来直接监督微调过程。这种直接监督旨在使检索器与 LLM 更紧密地保持一致,从而提高下游任务的性能。第 4.3 节对此主题进行了更全面的讨论。
4.2 对齐查询和文档
在 RAG 应用程序的上下文中,检索器可以利用单个 Embedding 模型来编码查询和文档,或者为每个模型使用单独的模型。此外,用户的原始a查询可能会受到措辞不精确和缺乏语义信息的影响。因此,将用户查询的语义空间与文档的语义空间保持一致至关重要。本节介绍旨在实现这种对齐的两种基本技术。
查询重写
查询重写是对齐查询和文档语义的基本方法。 Query2Doc 和 ITER-RETGEN 等方法利用 LLMs 将原始查询与附加指导相结合来创建伪文档。 HyDE 使用文本提示构建查询向量,以生成捕获基本模式的"假设"文档 。 RRR 引入了一个反转传统检索和阅读顺序的框架,重点关注查询重写。 STEP-BACKPROMPTING 使 LLMs 能够基于高级概念执行抽象推理和检索。此外,多查询检索方法利用 LLMs 同时生成和执行多个搜索查询,有利于解决具有多个子问题的复杂问题。
Embedding 变换
除了查询重写等广泛策略之外,还存在专门为 Embedding 转换而设计的更细粒度的技术。LlamIndex 通过在查询编码器后加入一个特殊的适配器,并对其进行微调,从而优化查询的 Embedding 表示,使之更适合特定的任务。
SANTA 解决了将查询与结构化外部文档对齐的问题,特别是在处理结构化数据和非结构化数据之间的差异时。这种方法通过两种预训练策略提高了检索器识别结构化信息的能力:首先,利用结构化和非结构化数据之间的自然对应关系进行对比学习;其次,通过采用掩码实体预测。后者采用以实体为中心的掩码策略,促使语言模型预测和补全掩码实体,从而促进对结构化数据更深刻的理解。
4.3 对齐检索器和 LLM
在RAG管道中,通过各种技术提高检索命中率不一定会改善最终结果,因为检索到的文档可能不符合 LLMs 的具体要求。因此,本节介绍两种旨在使检索器输出与 LLMs 的偏好保持一致的方法。
微调检索器
一些研究利用来自 LLMs 的反馈信号来完善检索模型。例如,AAR 使用编码器-解码器架构为预训练的检索器引入了监督信号。这是通过 FiD 交叉注意力分数识别 LM 的首选文档来实现的。随后,检索器通过硬负采样和标准交叉熵损失进行微调。最终,改进后的检索器可以直接应用于增强未见过的目标语言模型,从而提高目标任务的性能。此外,建议 LLMs 可能更倾向于关注可读的文档而不是信息丰富的文档。
REPLUG 利用检索器和 LLM 来计算检索到的文档的概率分布,然后通过计算 KL 散度来执行监督训练。这种简单有效的训练方法通过使用 LM 作为监督信号来增强检索模型的性能,从而消除了对特定交叉注意机制的需要。
UPRISE 还使用冻结的 LLMs 来微调提示检索器。 LLM 和检索器都将提示输入对作为输入,并利用 LLM 提供的分数来监督检索器的训练,有效地将 LLM 视为数据集标记器。此外,Atlas 提出了四种监督微调嵌入模型的方法:
- 注意蒸馏。这种方法利用输出期间 LLM 生成的交叉注意力分数来提取模型的知识。
- EMDR2。通过使用期望最大化算法,该方法以检索到的文档作为潜在变量来训练模型。
- 困惑度蒸馏。使用生成令牌的困惑度作为指标直接训练模型。
- Loop。该方法根据文档删除对 LLM 预测的影响提出了一种新颖的损失函数,提供了一种有效的训练策略,使模型更好地适应特定任务。
这些方法旨在提高检索器和 LLM 之间的协同作用,从而提高检索性能并更准确地响应用户查询。
适配器
微调模型可能会遇到挑战,例如通过 API 集成功能或解决因有限的本地计算资源而产生的约束。因此,一些研究选择结合外部适配器来帮助对齐。
PRCA 通过上下文提取阶段和奖励驱动阶段来训练适配器。然后使用基于 token 的自回归策略优化检索器的输出。
TokenFiltering 方法采用交叉注意力分数来有效过滤 token,仅选择得分最高的输入 token。
RECOMP 引入了提取式和生成式压缩器来生成摘要。这些压缩器要么选择相关句子,要么合成文档信息,创建适合多文档查询的摘要。
此外,PKG 引入了一种创新方法,通过指令微调将知识集成到白盒模型中。并直接替换检索器模块,以便根据查询生成相关文档。该方法有助于解决微调过程中遇到的困难并提高模型性能。
5 生成(Generation)
RAG 的一个重要组成部分是它的生成器,它负责将检索到的信息转换为连贯且流畅的文本。与传统语言模型不同,RAG 的生成器通过合并检索到的数据来提高准确性和相关性,从而脱颖而出。在 RAG 中,生成器的输入不仅包含典型的上下文信息,还包含通过检索器获得的相关文本片段。这种全面的输入使生成器能够深入了解问题的上下文,从而产生信息更丰富且与上下文相关的响应。
此外,生成器以检索到的文本为指导,以确保生成的内容和获得的信息之间的连贯性。多样化的输入数据导致了在生成阶段的有针对性的工作,所有这些都旨在改进大型模型对从查询和文档导出的输入数据的适应。在下面的小节中,我们将通过深入研究检索后处理和微调方面来适应生成器的输入。
5.1 后检索如何增强RAG
在不可调节的领域,许多研究依赖于 GPT-4等完善的模型来利用其全面的内部知识来系统地综合从各种文档中检索到的信息。
然而,这些大型模型仍然存在挑战,包括上下文长度的限制和对冗余信息的敏感性。为了解决这些问题,某些研究工作已将重点转向检索后处理。
检索后处理涉及处理、过滤或优化检索器从大型文档数据库中检索到的相关信息。其主要目标是提高检索结果的质量,使其与用户需求或后续任务更紧密地结合。它可以被视为对检索阶段获得的文档的再处理。检索后处理中的常见操作通常包括信息压缩和结果重新排序。
信息压缩
检索器擅长从庞大的知识库中检索相关信息,但管理检索文档中的大量信息是一个挑战。正在进行的研究旨在扩展大型语言模型的上下文长度来解决这个问题。然而,当前的大型模型仍然面临上下文限制。因此,有些情况下需要压缩信息。信息压缩对于降低噪声、解决上下文长度限制和增强生成效果具有重要意义。
PRCA 通过训练信息提取器解决了这个问题。在上下文提取阶段,当提供输入文本S时,它能够产生表示来自输入文档的压缩上下文的输出序列Cextracted。训练过程旨在最小化 Cextracted 和实际上下文 C 之间的差异。
类似地,RECOMP 采用了一种类似的方法,通过对比学习来训练信息冷凝器。每个训练数据点由一个正样本和五个负样本组成,编码器在整个过程中使用对比损失进行训练。
另一项研究采取了不同的方法,旨在减少文档数量,以提高模型答案的准确性。在[Ma et al., 2023b]的研究中,他们提出了"Filter-Reranker"范式,它结合了LLMs和小语言模型(SLM)的优点。在此范例中,SLM 充当过滤器,而 LLMs 充当重新排序代理。研究表明,指示 LLMs 重新排列 SLM 识别的挑战性样本可以显着改进各种信息提取 (IE) 任务。
重新排名
重新排序模型对于优化从检索器检索的文档集至关重要。当引入额外的上下文时,语言模型通常会面临性能下降,而重新排序可以有效地解决这个问题。核心概念涉及重新排列文档记录,以优先考虑顶部最相关的项目,从而限制文档的总数。这不仅解决了检索过程中上下文窗口扩展的挑战,而且还提高了检索效率和响应能力。
重排序模型在整个信息检索过程中扮演着双重角色,既充当优化器和精炼器。为后续语言模型处理提供更有效、更准确的输入。
上下文压缩被纳入重新排序过程中,以提供更精确的检索信息。这种方法需要减少单个文档的内容并过滤整个文档,最终目标是在搜索结果中呈现最相关的信息,以便更集中、更准确地显示相关内容。
5.2 微调 RAG 的 LLM
优化 RAG 模型中的生成器是其架构的一个关键方面。生成器的作用是获取检索到的信息并生成相关文本,形成模型的最终输出。生成器的优化旨在确保生成的文本既自然又有效地利用检索到的文档更好地满足用户的查询需求。
在标准 LLMs 生成任务中,输入通常由查询组成。 RAG 的突出之处在于不仅将查询,而且将检索器检索到的各种文档(结构化/非结构化)合并到输入中。这些附加信息可以显着影响模型的理解,特别是对于较小的模型。在这种情况下,微调模型以适应查询和检索文档的输入变得至关重要。在将输入呈现给微调模型之前,通常会对检索器检索到的文档进行检索后处理。值得注意的是,RAG 中生成器的微调方法与 LLMs 的一般微调方法一致。下面,我们将简要描述一些涉及数据(格式化/未格式化)和优化函数的代表性工作。
一般优化流程
作为一般优化过程的一部分,训练数据通常由输入输出对组成,旨在训练模型在给定输入 x 的情况下产生输出 y。在 Self-Mem [Cheng et al., 2023b] 的工作中,采用了传统的训练过程,其中给定输入 x,检索相关文档 z(选择文档中的 Top-1),然后结合(x,z),模型生成输出 y。该论文利用两种常见的方式进行微调,即联合编码器和双编码器。
在联合编码器下,使用基于编码器-解码器的标准模型。这里,编码器最初对输入进行编码,解码器通过注意力机制结合编码结果以自回归方式生成 token。
在双编码器系统中,构建了两个独立的编码器,每个编码器分别对输入(query、context)和文档进行编码。由此产生的输出由解码器按顺序进行双向交叉注意处理。两种架构都利用 Transformer 作为基础模块,并通过负对数似然(NLL)损失进行优化。
利用对比学习
在为语言模型准备训练数据的阶段,通常会创建输入和输出的交互对。这种传统方法可能会导致"暴露偏差",即模型仅针对单独的正确输出示例进行训练,从而限制了其对一系列可能的输出引用序列的暴露。这种限制可能会导致模型过度拟合训练集中的特定示例,从而降低其在各种上下文中泛化的能力,从而阻碍模型的实际性能。
为了减轻暴露偏差,SURGE [Kang et al., 2023] 提出使用图文对比学习。该方法包括对比学习目标,该目标促使模型产生一系列合理且连贯的响应,扩展到训练数据中遇到的实例之外。这种方法对于减少过度拟合和增强模型的泛化能力至关重要。
对于涉及结构化数据的检索任务,SANTA 框架 [Li et al., 2023d] 采用了三个阶段的训练过程,以有效封装结构和语义的细微差别。初始阶段侧重于检索器,其中利用对比学习来细化查询和文档 Embedding。
随后,生成器的初步训练阶段采用对比学习来将结构化数据与其非结构化文档描述对齐。在生成器训练的进一步阶段,该模型承认实体语义在用于检索的文本数据的表示学习中的关键作用。该过程首先识别结构化数据中的实体,然后对生成器的输入数据中的这些实体应用掩码,从而为模型预测和预测这些掩码元素奠定基础。
训练方案随着模型学习利用上下文信息重建掩码实体而进展。此练习培养模型对文本数据结构语义的理解,并促进结构化数据中相关实体的对齐。总体优化目标是训练语言模型以准确地填补这些被掩盖的信息,从而丰富其对实体语义的理解。
6 RAG 技术的增强手段
本节围绕三个关键方面构建:增强阶段、增强数据源和增强过程。这些方面阐明了对 RAG 开发至关重要的关键技术。图 4 展示了 RAG 核心组件的分类。

图 4:RAG 核心组件的分类
6.1 RAG 在各个增强阶段的应用
RAG 是一项知识密集型工作,在语言模型训练的预训练、微调和推理阶段融合了多种技术方法。
预训练阶段
在预训练阶段,研究人员研究了通过基于检索的策略来加强预训练在开放领域问答中的应用。
基于检索的策略。 REALM 模型采用结构化、可解释的方法进行知识嵌入、框架预训练和微调,作为掩码语言模型 (MLM) 框架内的检索然后预测工作流程。
RETRO [Borgeaud et al., 2022] 利用检索增强从头开始进行大规模预训练,实现了模型参数的减少,同时在困惑度方面超越了标准 GPT 模型。 RETRO 的独特之处在于,它在 GPT 模型的基础结构上添加了一个额外的编码器,旨在处理从外部知识库检索到的实体的特征。
Atlas[Izacard et al., 2022] 还在预训练和微调阶段将检索机制纳入 T5 架构 [Raffel et al., 2020]。它使用预训练的 T5 来初始化编码器-解码器语言模型,并使用预训练的密集检索器 Contriever,提高其复杂语言建模任务的效率。
在预训练的过程中,相较于传统的预训练模型,这种方法通过减少参数的使用,提高了效率。它特别擅长处理需要大量知识的任务,并可以通过在特定领域的语料库上训练来构建专门的模型。但这种方法也有其不足之处,如需要大量预训练数据、更多的训练资源,以及更新速度较慢。特别是当模型尺寸增大时,基于检索的训练成本会相对增高。尽管存在这些限制,这种方法在增强模型的鲁棒性方面表现出色。一旦训练完成,基于纯预训练的检索增强模型就不再需要外部库的依赖,从而提高了生成速度和操作效率。
微调阶段
RAG 和 Fine-tuning 是增强 LLMs 的有力工具,两者结合可以满足更具体场景的需求。一方面,微调允许检索具有独特风格的文档,实现更好的语义表达并对齐查询和文档之间的差异。这确保了检索器的输出更适合当前的场景。另一方面,微调可以满足风格化、针对性调整的生成需求。此外,微调还可以用于对齐检索器和生成器,以提高模型协同作用。
微调检索器的主要目标是提高语义表示的质量,这是通过使用语料库直接微调 Embedding 模型来实现的。通过反馈信号将检索器的能力与 LLMs 的偏好结合起来,两者可以更好地协调。针对特定的下游任务微调检索器可以提高适应性。引入与任务无关的微调旨在增强检索器在多任务场景中的多功能性。
微调生成器可以产生更加风格化和定制化的输出。一方面,它允许专门适应不同的输入数据格式。例如,微调LLMs 以适应知识图的结构、文本对的结构,和其他特定结构。另一方面,通过构建指令数据集,可以要求 LLMs生成特定格式的内容。例如,在自适应或迭代检索场景中,LLMs 经过微调以生成有助于确定下一步操作时间的内容。
通过协同微调检索器和生成器,我们可以增强模型的泛化能力并避免单独训练可能出现的过度拟合。然而,联合微调也会导致资源消耗增加。 RA-DIT [Lin et al., 2023] 提出了一种轻量级、双指令调优框架,可以有效地为任何 LLMs 添加检索功能。检索增强指令微调更新了 LLM,指导其更有效地利用检索到的信息并忽略分散注意力的内容。
尽管有其优点,微调也有其局限性,包括需要专门的数据集进行 RAG 微调以及需要大量的计算资源。然而,此阶段允许根据特定需求和数据格式自定义模型,与预训练阶段相比,可能会减少资源使用,同时仍然能够微调模型的输出样式。
总之,微调阶段对于 RAG 模型适应特定任务至关重要,从而能够细化检索器和生成器。尽管存在资源和数据集要求带来的挑战,但此阶段增强了模型的多功能性和对各种任务的适应性。因此,RAG 模型的战略微调是开发高效且有效的检索增强系统的关键组成部分。
推理阶段
RAG 模型中的推理阶段至关重要,因为它涉及与 LLMs 的广泛集成。传统的 RAG 方法(也称为 Naive RAG)涉及在此阶段合并检索内容以指导生成过程。
为了克服 Naive RAG 的局限性,先进的技术在推理过程中引入了更多上下文丰富的信息。 DSP 框架 [Khattab 等人,2022] 利用 fronzen LM 和检索模型 (RM) 之间复杂的自然语言文本交换,丰富了上下文,从而改善了生成结果。 PKG [Luo et al., 2023] 方法为 LLMs 配备了一个知识引导模块,允许在不修改 LM 参数的情况下检索相关信息,从而实现更复杂的任务执行。 CREAICL [Li et al., 2023b] 采用跨语言知识的同步检索来增强上下文,而 RECITE [Sun et al., 2022] 通过直接从 LLMs 中采样段落来生成上下文。
在满足需要多步骤推理的任务的方法中可以看到推理过程中 RAG 过程的进一步细化。 ITRG [Feng et al., 2023] 迭代检索信息以识别正确的推理路径,从而提高任务适应性。 ITERRETGEN [Shao et al., 2023] 遵循迭代策略,将检索和生成合并在一个循环过程中,在"检索增强生成"和"生成增强检索"之间交替。对于非知识密集型 (NKI) 任务,PGRA [Guo et al., 2023] 提出了一个两阶段框架,首先是任务不可知的检索器,然后是提示引导的重新排序器来选择证据并确定证据的优先级。相比之下,IRCOT [Trivedi et al., 2022] 将 RAG 与思想链 (CoT) 方法相结合,将 CoT 引导的检索与检索通知的 CoT 过程交替使用,显著提升了 GPT-3 在各种问答任务中的性能。
从本质上讲,这些推理阶段的增强功能提供了轻量级、经济高效的替代方案,可以利用预训练模型的功能,而无需进一步训练。主要优点是维护静态 LLM 参数,同时提供上下文相关信息以满足特定任务需求。然而,这种方法并非没有局限性,因为它需要细致的数据处理和优化,并且受到基础模型内在能力的约束。为了有效地解决不同的任务要求,该方法通常与过程优化技术结合使用,例如逐步推理、迭代检索和自适应检索策略。
6.2 增强源
RAG 模型的有效性很大程度上受到增强数据源选择的影响。不同层次的知识和维度需要不同的处理技术。它们分为非结构化数据、结构化数据和LLMs生成的内容。图 5 描绘了具有不同增强方面的代表性 RAG 研究的技术树。叶子以三种不同的色调着色,代表使用各种类型数据的增强:非结构化数据、结构化数据以及 LLMs 本身生成的内容进行检索和增强的研究趋势日益明显。

图 5:具有不同增强方面的代表性 RAG 研究的技术树
非结构化数据
非结构化文本是从语料库中收集的,例如用于微调大型模型的提示数据和跨语言数据。
检索单位从标记(例如,kNN-LM [Khandelwal et al., 2019])到短语(例如,NPM、COG [Lee et al., 2020, Lan et al., 2022])和文档段落不等,并且具有更精细的特征粒度,但代价是增加了检索复杂性。
FLARE [Jiang et al., 2023b] 引入了一种主动检索方法,由 LM 生成低概率单词时触发。它创建一个用于文档检索的临时句子,然后使用检索到的上下文重新生成该句子以预测后续句子。
RETRO使用前一个块来检索与之距离最近的块,结合前一个块的上下文,指导下一个块的生成。
结构化数据
结构化数据,例如知识图(KG),提供高质量的上下文并减轻模型幻觉。
RET-LLMs [Modarressi et al., 2023] 根据过去的对话构建知识图记忆以供将来参考。
SUGRE [Kang et al., 2023] 采用图神经网络(GNN)对相关 KG 子图进行编码,通过多模态对比学习确保检索到的事实和生成的文本之间的一致性。
KnowledGPT [Wang et al., 2023d] 生成知识库搜索查询并将知识存储在个性化库中,从而增强了 RAG 模型的知识丰富性和上下文性。
LLMs-RAG 中生成的内容
针对 RAG 中外部辅助信息的局限性,一些研究集中于利用 LLMs 的内部知识。
SKR [Wang et al., 2023e] 将问题分类为已知或未知,有选择地应用检索增强。
GenRead [Yu et al., 2022] 用 LLM 生成器替换检索器,发现 LLM 生成的上下文通常包含更准确的答案,因为与预训练目标更好地保持一致因果语言建模。
Selfmem [Cheng et al., 2023b] 迭代地创建一个带有检索增强生成器的无界内存池,使用内存选择器来选择作为原始问题的对偶问题的输出,从而自我增强生成模型。
这些方法强调了 RAG 中创新数据源利用的广度,努力提高模型性能和任务效率。
6.3 增强过程
在 RAG 领域,标准实践通常涉及单个检索步骤,然后是生成,这可能导致效率低下。当单次检索产生冗余内容时,就会出现一个值得注意的问题,称为"中间丢失"现象,这些冗余内容可能会稀释或和关键信息相矛盾,从而降低生成质量[Liu et al., 2023a]。此外,这种单一检索通常不足以解决需要多步骤推理的复杂问题,因为它提供的信息范围有限[Yoran et al., 2023]。
如图 5 所示,为了规避这些挑战,当代研究提出了改进检索过程的方法:迭代检索、递归检索和自适应检索。
迭代检索允许模型参与多个检索周期,从而增强所获取信息的深度和相关性。
递归检索过程,其中一次检索操作的结果用作后续检索的输入。它有助于更深入地研究相关信息,特别是在处理复杂或多步骤查询时。递归检索通常用于需要循序渐进的方法来收敛最终答案的场景,例如学术研究、法律案例分析或某些类型的数据挖掘任务。
另一方面,自适应检索提供了动态调整机制,可以根据不同任务和上下文的特定需求定制检索过程。
迭代检索
RAG模型中的迭代检索是一个根据初始查询和迄今为止生成的文本重复收集文档的过程,为LLMs提供更全面的知识库。这种方法已被证明可以通过多次检索迭代提供额外的上下文参考来增强后续答案生成的稳健性。然而,它可能会导致语义不连续性和不相关信息的积累,因为它通常依赖于 n 个 token 序列来划分生成的文本和检索到的文档之间的边界。
为了解决特定的数据场景,利用了递归检索和多跳检索技术。递归检索首先通过结构化索引处理数据,再逐层进行检索。在检索层次丰富的文档时,可以为每个部分制作摘要,无论是正片文档还是长篇PDF。在基于摘要进行检索后,一旦确定了文档,就对其内部的各个部分进行二次检索,实现递归检索。多跳检索则常用于深入挖掘图结构数据源中的信息。
此外,一些方法集成了检索和生成的步骤。 ITER-RETGEN [Shao et al., 2023] 采用一种协同方法,利用"检索增强生成"和"生成增强检索"来执行需要再现特定信息的任务。该模型利用处理输入任务所需的内容作为检索相关知识的上下文基础,这反过来又有助于在后续迭代中生成改进的响应。
递归检索
递归检索常用于信息检索和自然语言处理中,以提高搜索结果的深度和相关性。
该过程涉及根据先前搜索获得的结果迭代地细化搜索查询。递归检索旨在通过反馈循环逐渐收敛最相关的信息来增强搜索体验。
IRCoT [Trivedi et al., 2022] 使用思考链来指导检索过程,并利用获得的检索结果细化 CoT。
ToC [Kim et al., 2023] 创建一个澄清树,系统地优化查询中不明确的部分。它在复杂的搜索场景中特别有用,在这些场景中,用户的需求从一开始就不完全清楚,或者所寻求的信息高度专业化或细致入微。该过程的递归性质允许持续学习和适应用户的需求,通常会提高对搜索结果的满意度。
自适应检索
自适应检索方法,例如 Flare 和 SelfRAG [Jiang et al., 2023b, Asai et al., 2023],通过使LLMs主动确定检索的最佳时机和内容来完善 RAG 框架,从而提高所获取信息的效率和相关性。
这些方法是更广泛趋势的一部分,其中 LLMs 在其操作中采用主动判断,如 AutoGPT、Toolformer 和 Graph-Toolformer 等模型代理中所见。例如,Graph-Toolformer 将其检索过程分为不同的步骤,其中 LLMs 主动使用检索器,应用自助询问技术,并采用少量提示来启动搜索查询。这种主动的立场允许LLMs决定何时搜索必要的信息,类似于代理如何使用工具。
WebGPT 集成了强化学习框架来训练 GPT-3 模型在文本生成过程中自主使用搜索引擎。它使用特殊 token 来引导此过程,这些 token 有助于搜索引擎查询、浏览结果和引用参考文献等操作,从而通过使用外部搜索引擎扩展 GPT-3 的功能。
Flare 通过监控生成过程的置信度(如生成术语的概率所示)来自动化定时检索。当概率低于某个阈值时就会激活检索系统来收集相关信息,从而优化检索周期。
Self-RAG 引入了"反射 token",允许模型内省其输出。这些 token 有两种类型:"检索"和"批评"。模型自主决定何时激活检索,或者,预定义的阈值可以触发该过程。在检索过程中,生成器在多个段落中进行 "片段级 beam search",以得出最连贯的序列。批评分数用于更新细分分数,可以在推理过程中灵活调整这些权重,从而定制模型的行为。 Self-RAG 的设计不需要额外的分类器或对自然语言推理 (NLI) 模型的依赖,从而简化了何时使用检索机制的决策过程,并提高了模型生成准确响应的自主判断能力。

图6:RAG与其他模型优化方法的比较
6.4 RAG vs 微调
RAG 就像为模型提供了一本用于定制信息检索的教科书,非常适合指定查询。另一方面,FT 就像学生随着时间的推移内化知识,更适合复制特定的结构、风格或格式。 FT 可以通过强化基础模型知识、调整输出和教授复杂指令来提高模型性能和效率。然而,它不太适合集成新知识或快速迭代新用例。
RAG 和 FT 这两种方法并不相互排斥,而是可以互补,在不同层面上增强模型的能力。在某些情况下,它们的组合使用可能会产生最佳性能。
RAG 和 FT 的优化过程可能需要多次迭代才能获得满意的结果。
表 1:RAG 与微调的比较
特性比较 | RAG | 微调 |
---|---|---|
知识更新 | 直接更新检索知识库可确保信息保持最新状态,无需频繁重新训练,非常适合动态数据环境。 | 存储静态数据,需要重新训练知识和数据更新。 |
外部知识 | 擅长利用外部资源,特别适合访问文档或其他结构化/非结构化数据库。 | 可用于将预训练中外部获取的知识与大型语言模型结合起来,但对于频繁更改的数据源可能不太实用。 |
数据处理 | 涉及最少的数据处理和处理。 | 取决于高质量数据集的创建,有限的数据集可能不会带来显着的性能提升。 |
自定义模型 | 专注于信息检索和整合外部知识,但可能无法完全定制模型行为或写作风格。 | 允许根据特定语气或术语调整LLM行为、写作风格或特定领域知识。 |
可解释性 | 响应可以追溯到特定的数据源,提供更高的可解释性和可追溯性。 | 黑盒,模型以某种方式做出反应的原因并不总是清楚,导致可解释性相对较低。 |
计算资源 | 依赖于计算资源来支持与数据库相关的检索策略和技术。此外,它还需要维护外部数据源集成和更新。 | 高质量训练数据集的准备和管理、定义微调目标并提供相应的计算资源是必要的。 |
时延 | 涉及到数据检索,可能会导致较高的延迟。 | LLM微调后可以响应而无需检索,从而导致较低的延迟。 |
减少幻觉 | 本质上不太容易产生幻觉,因为每个答案都基于检索到的证据。 | 通过基于特定领域数据训练模型可以帮助减少幻觉,但在面对不熟悉的输入时仍可能表现出幻觉。 |
道德和隐私问题 | 从外部数据库存储和检索文本会引起道德和隐私问题。 | 训练数据中的敏感内容可能会引起道德和隐私问题。 |
7 RAG 评估
RAG 在自然语言处理 (NLP) 领域的快速发展和日益广泛的采用,将 RAG 模型的评估推向了LLMs社区研究的前沿。此评估的主要目标是了解和优化 RAG 模型在不同应用场景中的性能。
从历史上看,RAG 模型评估主要集中在特定下游任务中的执行情况。这些评估采用适合当前任务的既定指标。例如,问答评估可能依赖于 EM 和 F1 分数,而事实检查任务通常取决于将准确性作为主要指标。 RALLE 等工具专为自动评估 RAG 应用程序而设计,同样基于这些特定于任务的指标进行评估。尽管如此,致力于评估 RAG 模型独特特征的研究仍然非常缺乏,相关研究也屈指可数。
以下部分将重点从特定于任务的评估方法和指标转移到基于其独特属性的现有文献的综合。这一探索涵盖了 RAG 评估的目标、评估这些模型的方面以及可用于此类评估的基准和工具。目的是提供 RAG 模型评估的全面概述,概述专门解决这些先进生成系统独特方面的方法。
7.1 评估目标
RAG模型的评估主要围绕两个关键组件:检索和生成模块。这种划分确保了对所提供的上下文的质量和所生成的内容的质量进行彻底的评估。
检索质量
评估检索质量对于确定检索器组件所提供的上下文的有效性至关重要。采用搜索引擎、推荐系统和信息检索系统领域的标准指标来衡量 RAG 检索模块的性能。通常使用命中率、MRR 和 NDCG 等指标。
生成质量
生成质量的评估集中于生成器从检索到的上下文中合成连贯且相关的答案的能力。该评估可以根据内容的目标进行分类:未标记的内容和标记的内容。对于未标记的内容,评估包括生成答案的真实性、相关性和无害性。相反,对于带标签的内容,重点是由标签产生的信息的准确性。此外,检索和生成质量评估都可以通过手动或自动评估方法进行。
7.2 评估指标
RAG 模型的评估实践强调三个主要质量分数和四个基本能力,它们共同指导 RAG 模型的两个主要目标的评估:检索和生成。
质量分数
质量得分包括上下文相关性、答案忠实度和答案相关性。这些质量分数从不同角度评估了RAG模型在信息检索和生成过程中的效率。
- 上下文相关性(Context Relevance) 评估检索到的上下文的精度和针对性,确保相关性并最大限度地减少与无关内容相关的处理成本。
- 答案忠实性(Answer Faithfulness) 确保生成的答案与检索到的上下文保持一致并避免幻觉。
- 答案相关性(Answer Relevance) 要求生成的答案与提出的问题直接相关,有效解决核心问题。
所需能力
RAG评估还包含四种表明其适应性和效率的能力:抗噪声能力、拒绝无效回答、信息综合能力和反事实稳健性。这些能力对于模型在各种挑战和复杂场景下的性能至关重要,影响质量得分。
- 抗噪声能力: 评估模型管理与问题相关但缺乏实质性信息的噪声文档的能力。
- 拒绝无效回答: 评估模型在检索到的文档不包含回答问题所需的知识时避免做出响应的辨别能力。
- 信息综合能力: 评估模型从多个文档合成信息以解决复杂问题的能力。
- 反事实稳健性: 测试模型识别和忽略文档中已知错误的能力,即使在被指示潜在的错误信息时也是如此。
表 2 总结了每个评估方面的具体指标。必须认识到,这些源自相关工作的指标是传统的衡量标准,尚未代表量化 RAG 评估方面的成熟或标准化方法。针对 RAG 模型的细微差别量身定制的自定义指标虽然未包含在此处,但也已在一些评估研究中开发出来。
表 2:适用于 RAG 评估方面的指标汇总
Context Relevance | Faithfulness | Answer Relevance | Noise Robustness | Negative Rejection | Information Integration | Counterfactual Robustness | |
---|---|---|---|---|---|---|---|
Accuracy | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
EM | ✓ | ||||||
Recall | ✓ | ||||||
Precision | ✓ | ✓ | |||||
R-Rate | ✓ | ||||||
Cosine Similarity | ✓ | ||||||
Hit Rate | ✓ | ||||||
MRR | ✓ | ||||||
NDCG | ✓ |
表 3:评估框架总结
评价框架 | 评价目标 | 评价方面 | 指标 |
---|---|---|---|
RGB† | 检索质量 生成质量 | Noise RobustnessNegative RejectionInformation IntegrationCounterfactual Robustness | Accuracy EMAccuracy Accuracy |
RECALL† | 生成质量 | Counterfactual Robustness | R-Rate (Reappearance Rate) |
RAGAS‡ | 检索质量 生成质量 | Context Relevance Faithfulness Answer Relevance | * * Cosine Similarity |
ARES‡ | 检索质量 生成质量 | Context Relevance Faithfulness Answer Relevance | Accuracy Accuracy Accuracy |
TruLens‡ | 检索质量 生成质量 | Context Relevance Faithfulness Answer Relevance | * * * |
8 未来展望
本节探讨了 RAG 的三个未来前景:未来挑战、模式扩展和 RAG 生态系统。
8.1 RAG 未来的挑战
尽管 RAG 技术取得了长足的进步,但仍存在一些需要深入研究的挑战:
- 上下文长度。 RAG 的效果受到大型语言模型 (LLMs) 上下文窗口大小的限制。平衡窗口太短(可能导致信息不足的风险)和太长(可能导致信息稀释的风险)之间的权衡至关重要。随着不断努力将 LLM 上下文窗口扩展到几乎无限的大小,RAG 对这些变化的适应提出了一个重要的研究问题。
- 鲁棒性。检索过程中存在噪音或错误信息可能会对 RAG 的输出产生不利影响。
- 混合方法(RAG+FT) 。将 RAG 与微调正在成为一种主要策略。确定 RAG 的最佳集成和微调(无论是顺序的、交替的还是通过端到端联合训练)以及如何利用参数化和非参数化的优势都是值得探索的领域。
- 扩展 LLM 角色。除了生成最终答案之外,LLMs 还可用于 RAG 框架内的检索和评估。寻找进一步释放 RAG 系统 LLMs 潜力的方法是一个不断发展的研究方向。
- 生产就绪的 RAG。 RAG 的实用性以及与工程要求的一致性促进了它的使用。然而,提高检索效率、提高大型知识库中的文档召回率以及确保数据安全(例如防止 LLMs 无意中泄露文档源或元数据)是仍有待解决的关键工程挑战。
RAG 的模态扩展
RAG 超越了最初基于文本的问答限制,拥抱了各种模态数据。这种扩展催生了创新的多模式模型,将 RAG 概念集成到各个领域:
- 图像。 RA-CM3 [Yasunaga et al., 2022] 是检索和生成文本和图像的开创性多模态模型。 BLIP-2 [Li et al., 2023a] 利用冻结图像编码器和 LLMs 进行高效的视觉语言预训练,实现零样本图像到文本的转换。 "Visualize Before You Write"方法 [Zhu et al., 2022] 使用图像生成来引导 LM 的文本生成,在开放式文本生成任务中显示出前景。
- 音频和视频。 GSS 方法检索音频剪辑并将其拼接在一起,将机器翻译的数据转换为语音翻译的数据 [Zhao et al., 2022]。 UEOP 通过结合外部离线语音到文本转换策略,标志着端到端自动语音识别的重大进步 [Chan et al., 2023]。此外,基于 KNN 的注意力融合利用音频 Embedding 和语义相关的文本 Embedding 来完善 ASR,从而加速领域适应。 Vid2Seq 使用专门的时间标记增强了语言模型,有助于在统一的输出序列中预测事件边界和文本描述。
- 代码。 RBPS [Nashid et al., 2023] 通过编码和频率分析检索与开发人员目标相符的代码示例,在小规模学习任务中表现出色。这种方法已在测试断言生成和程序修复等任务中证明了有效性。对于结构化知识,CoK 方法 [Li et al., 2023c] 首先从知识图中提取与输入查询相关的事实,然后将这些事实作为 prompt 集成到输入中,从而提高知识图问答任务的性能。
8.2 RAG 生态系统
下游任务和评估
RAG 在丰富语言模型方面显示出了巨大的前景,能够利用广泛的知识库处理复杂的查询并生成详细的响应。经验证据表明,RAG 在各种下游任务中表现出色,包括开放式问答和事实验证。 RAG 的集成不仅增强了响应的准确性和相关性,而且增强了响应的多样性和深度。
RAG 跨多个领域的可扩展性和多功能性值得进一步研究,特别是在医学、法律和教育等专业领域。在这些领域,与专业领域知识问答中的传统微调方法相比,RAG 可以潜在地降低训练成本并提高性能。
同时,完善 RAG 的评估框架对于最大限度地提高其在不同任务中的功效和效用至关重要。这需要开发细致入微的指标和评估工具,可以衡量上下文相关性、内容的创造力和非恶意等方面。
此外,提高 RAG 驱动模型的可解释性仍然是一个关键目标。这样做可以让用户了解模型生成的响应背后的推理,从而促进 RAG 应用程序使用的信任和透明度。
技术栈
RAG生态系统的发展很大程度上受其技术栈的进步影响。随着 ChatGPT 的出现,LangChain 和 LLamaIndex 等关键工具迅速流行起来,提供了广泛的 RAG 相关 API,并在 LLMs 领域变得至关重要。
新兴的技术堆栈虽然不像 LangChain 和 LLamaIndex 那样功能丰富,但凭借专业的产品而脱颖而出。例如,Flowise AI 优先考虑低代码方法,使用户能够通过用户友好的拖放界面部署包括 RAG 在内的 AI 应用程序。 HayStack、Meltano 和 Cohere Coralare 等其他技术也因其对该领域的独特贡献而受到关注。
除了专注于人工智能的提供商之外,传统软件和云服务提供商也在扩展其产品范围。 Weaviate 的 Verba 专为个人助理应用程序而设计,而亚马逊的 Kendra 提供智能企业搜索服务,允许用户使用内置连接器浏览各种内容存储库。在 RAG 技术格局的演变过程中,不同专业领域存在明显的分歧,例如: 1) 定制。定制 RAG 以满足特定要求。 2)简化。使 RAG 更易于使用,从而缩短初始学习曲线。 3)专业化。完善RAG以更有效地服务生产环境。
RAG 模型及其技术堆栈的共同成长是显而易见的;技术进步不断为现有基础设施建立新标准。反过来,技术堆栈的增强又推动了 RAG 功能的发展。 RAG 工具包正在融合为一个基础技术堆栈,为高级企业应用程序奠定了基础。

图7:RAG生态系统总结
9 总结
如图 7 所示,本文的摘要强调了 RAG 通过将来自语言模型的参数化知识与来自外部知识库的大量非参数化数据相集成,在增强 LLMs 功能方面取得的重大进展。我们的调查说明了 RAG 技术的演变及其对知识密集型任务的影响。我们的分析描绘了 RAG 框架内的三种开发范式:Naive、Advanced 和 Modular RAG,每种范式都标志着对其前身的逐步增强。高级 RAG 范例通过合并复杂的架构元素(包括查询重写、块重新排序和提示摘要),超越了 Naive 方法。这些创新带来了更加细致和模块化的架构,增强了 LLMs 的性能和可解释性。 RAG 与微调和强化学习等其他人工智能方法的技术集成进一步扩展了其功能。在内容检索中,利用结构化和非结构化数据源的混合方法正在成为一种趋势,提供更丰富的检索过程。 RAG 框架内的前沿研究正在探索新的概念,例如从 LLMs 进行自我检索和信息检索的动态时序。
尽管 RAG 技术取得了长足的进步,但在提高其稳健性和管理扩展上下文的能力方面的研究机会仍然很多。 RAG的应用范围也正在扩展到多模式领域,调整其原理来解释和处理不同的数据形式,例如图像、视频和代码。此次扩展凸显了 RAG 对人工智能部署的重大影响,吸引了学术界和工业界的兴趣。以 RAG 为中心的人工智能应用程序的增加和支持工具的持续开发凸显了 RAG 生态系统的不断发展。然而,随着 RAG 应用领域的扩大,迫切需要完善评估方法以跟上其发展的步伐。确保评估保持准确对于充分了解 RAG 对人工智能研究和开发社区的贡献至关重要。