## 检索增强生成（Retrieval -Agument-Generation，RAG）

## 引言

### 什么是大语言模型的幻觉？

为大语言模型提供从某些数据源检索到的信息，用户提供一个问题,然后大语言模型在数据库中搜索这个回答,返回给用户。作为其生成答案的依据

虽然有很好的生成能力，但是会存在幻觉——瞎答或者乱答。一方面，无法即时获取最新信息；另一方面，个人隐私不愿意暴露。

尤其是当查询超出模型的训练数据或需要最新信息时。这些缺点强调了在没有额外保障措施的情况下，将LLMs作为黑盒解决方案部署在现实世界生产环境中的不切实际性。缓解这些局限性的一个有前景的方法是检索增强生成（Retrieval-Augmented Generation, RAG），它通过将**外部数据**检索整合到生成过程中，从而增强了模型提供准确和相关响应的能力。

### 什么是RAG

RAG通过整合外部数据库的知识，成为一种有前景的解决方案。将LLMs的内在知识与庞大、动态的外部数据库资源协同融合。这增强了模型的准确性和可信度，特别是在知识密集型任务中，并允许持续的知识更新和领域特定信息的整合。RAG将LLMs的内在知识与外部数据库的广阔、动态存储库相结合。

在这个框架中，通过搜索算法先去检索和用户提示语+query有关的信息。然后将这些信息编织到LLM的提示语中，为生成过程提供额外的上下文。RAG的主要优势在于它消除了为特定任务应用程序重新培训LLMs的需要。开发人员可以附加一个外部知识库，丰富输入，从而改进模型的输出精度

包括两个阶段： 

1.  搜索上下文相关信息

2.  使用检索到的知识指导生成过程

RAG 通过从外部知识库中检索相关文档块，通过语义相似度计算来增强LLMS。

RAG的发展轨迹经历了四个不同的阶段，如图1所示。在其2017年的起源时，与Transformer架构的出现相一致，主要重点是通过预训练模型（PTM）吸收额外的知识来增强语言模型。这个时期见证了RAG的基础工作主要集中在优化预训练方法上。在chatGPT出现之前，有一个相对休眠的时期，RAG相关研究的进展很少。

社区的焦点转向利用LLMs的能力以实现更高的可控性并满足不断演变的需求。因此，大部分RAG工作集中在推理上，少数致力于微调过程。随着LLMs能力的持续进步，特别是随着GPT-4的引入，RAG技术领域经历了重大变革。重点发展成为一种混合方法，结合了RAG和微调的优势，同时还有一小部分继续专注于优化预训练方法。



### 流行应用：

结合网络搜索引擎和LLM 的问答服务

### RAG和LLM的关系

**LLM的能力和局限**

- **强项**：语言理解、文本生成、上下文推理。

​	它的强项是:

​	-  **语言理解**：理解提问的意图。	

​	- **文本生成**：按照指令和格式要求组织文字。

​	- **上下文推理**：在它**当前看到的**上下文范围内进行逻辑推理和总结。



- **弱项**：准确记忆最新事实、处理未见过的专有信息。
   ⚠️ 重点：LLM本身不是数据库，它的知识基于训练数据，可能不完整、过时甚至错误。

**RAG的本质**

- **思路**：绕过LLM内部的知识局限，不靠“记忆”回答问题，而是给它“临时参考资料”。
- **增强提示词（Augmented Prompt）**：就是把检索到的相关文档或信息整合进提示词，让LLM基于这些“外部知识”生成答案。
- 类比开卷考试：有了RAG，LLM不再闭卷答题，而是带着“参考书”作答。

RAG的做法是：**不依赖LLM的内部知识库，而是在提问时，当场动态地为它创建一个“外部知识库”**。

1. **提供了答案的来源**：让LLM“有依可循”。
2. **限制了LLM的胡说八道**：强制LLM只基于你提供的事实来回答，大大减少“幻觉”。
3. **实现了知识的动态更新**：要更新LLM的知识，不需要重新训练这个耗资巨大的模型，只需要更新它背后的向量数据库即可。

## 向量数据库

### 将向量放入索引

在完成嵌入后，下一步是将所有的嵌入向量存储到一个索引中。这通常是为了加速检索过程，使用类似向量数据库（如FAISS、Annoy等）来组织这些嵌入向量，使得后续在大规模数据中进行检索时能够高效地找到相似内容。

向量数据库是一种专门用于存储和查询高维向量数据的数据库系统。在现代数据处理和人工智能应用中，越来越多的数据以高维向量的形式存在，例如图像特征、文本嵌入和用户行为等。传统的关系型数据库在处理这种高维数据时效率低下，而向量数据库则通过特定的索引结构和优化算法，使得高维向量的存储、管理和检索变得更加高效。

向量数据库不仅支持大规模向量数据的存储，还提供高效的相似性搜索功能，即快速找到与查询向量最相似的若干个向量。这在推荐系统、图像识别、自然语言处理等领域具有广泛的应用。向量数据库的核心技术包括向量空间模型、距离度量、索引构建和优化检索算法等。

### **向量数据库的起源与发展**

向量数据库的概念并不是凭空出现的，它的起源可以追溯到信息检索和机器学习领域中的向量空间模型（Vector Space Model, VSM）。向量空间模型是一种用于信息检索的数学模型，它将文档和查询都表示为向量，通过计算向量之间的相似性来进行检索。这一模型在20世纪60年代由Gerard Salton提出，为向量数据库的发展奠定了理论基础。

20世纪90年代，随着大规模数据集和复杂算法的出现，研究者们开始探索如何高效地存储和查询这些高维数据。2000年代，随着机器学习和深度学习的兴起，向量数据的需求急剧增加。例如，图像识别中的卷积神经网络（CNN）和自然语言处理中的词嵌入（Word Embeddings）都产生了大量的高维向量数据，这些数据需要专门的存储和处理技术。

向量空间模型（Vector Space Model, VSM）是向量数据库的基础概念之一。VSM是信息检索领域中广泛使用的模型，它将文档和查询都表示为向量，利用向量之间的相似性进行检索。向量空间模型的核心思想是将文本数据转化为多维空间中的点，通过点之间的距离或夹角来衡量相似性。

在VSM中，每个文档或查询向量的维度通常表示词汇表中的一个词，向量的每个分量表示该词在文档或查询中的重要性。常见的权重计算方法包括词频-逆文档频率（TF-IDF）和词嵌入（Word Embeddings)。向量之间的相似性通常通过余弦相似度、欧氏距离或曼哈顿距离等度量方法来计算。

### **向量检索的基本原理**

向量检索是向量数据库的核心功能之一，即根据查询向量找到最相似的向量集合。向量检索的基本原理包括相似性度量、索引结构和检索算法。根据语义相似性检索。

**索引结构**

为了提高向量检索的效率，向量数据库通常会构建索引结构。常见的索引结构包括：

- **倒排索引**：用于稀疏向量，记录每个词在文档中的出现位置。
- **树形结构**：如KD树（k-dimensional tree）和R树（R-tree），适用于低维向量的检索。
- **图结构**：如HNSW（Hierarchical Navigable Small World），适用于高维向量的近似最近邻搜索。

**检索算法**

向量检索算法旨在快速找到与查询向量最相似的若干个向量。常见的检索算法包括：

- **暴力搜索**：直接计算查询向量与数据库中所有向量的相似性，适用于小规模数据集。
- **局部敏感哈希（LSH）**：通过哈希函数将相似的向量映射到相同的桶中，从而减少计算量。
- **近似最近邻搜索（ANN）**：如FAISS（Facebook AI Similarity Search）和ANNOY（Approximate Nearest Neighbors Oh Yeah），聚类树、通过构建近似索引结构，提高检索效率。

### **常用距离度量方法**

在向量数据库中，距离度量方法是检索过程中的重要组成部分。除了余弦相似度、欧氏距离和曼哈顿距离外，还有其他几种常用的距离度量方法。

1. 向量存储索引:

2. 层次索引：

如果有许多文档需要检索，就需要能够有效地在其中进行检索，找到相关信息并将其综合；

一种有效 的方法是，创建两个索引，一个由摘要组成，另一个由文档块组成，分两步检索，首先通过摘要过滤掉相关文档，然后只在这个相关组内检索；

假设问题和HyDE；

要求LLM 为每个块生成一个问题并将这些问题嵌入向量中，在运行时针对该问题向量索引执行查询检索（用索引中的问题向量替换块中向量），然后在检索后路由到原始数据文本块；

查询与假设之间的语义相似性更高；

HyDE的反向逻辑，要求LLM根据给定的查询生成假设的相应然后使用其向量和查询向量来提高检索质量。

上下文丰富；

句子窗口检索：将检索到的句子之前和之后扩展k个窗口

自动合并检索器：k个叶子块，若个n个块引用同一父块，用该父块替换它们；

融合和检索或混合搜索

可以充分利用两种搜索的优点——基于关键字的老式搜索——稀疏检索算法和现代于一或向量搜索，并将其组合到一个检索结果中。

这里唯一的技巧是将检索到的结果与不同的相似度分数结合起来，借助Reciprocal rank fusionRRF来解决

得到了解锁结果，现在需要过滤、重新排序或者某种转换来优化它们。相似度得分呢、关键词、元数据过滤、LLM、句子转换器交叉编码器，cohere重排序端点或者基于日期新进度等元数据；

 

（**选择建议）**

1. **词嵌入矩阵较小，或者计算资源有限**：直接计算距离（如余弦相似度）可能是最简单且高效的选择。这种方法不依赖于额外的系统，可以快速获得结果，特别适合小型应用或离线任务。
2. **词嵌入模型较大，且需要高效计算**：使用向量数据库和ANN算法是最优选择。它可以处理大规模数据集，并且能够在实时应用中保持较低的延迟。
3. **需要更复杂的上下文感知**：如果你需要模型能够考虑更多的上下文或动态因素，基于神经网络的进一步处理可能是较好的选择，但它通常需要更多的计算资源。

 



## 为LLM创建基于检索上下文的提示（生成）

上下文整理

冗余信息和过长的上下文可能会干扰LLM的最终生成，因此我们需要进一步处理检索到的内容；

1、 重排序：重排序从根本上重写排列文档块，以突出最相关的结果

2、 上下文的选择/压缩

LLM微调

用户提出的查询和选定的文档被合成为一个连贯的提示，这个提示用于大模型来制定响应。

最后，基于用户的查询，使用存储的向量进行检索，找到最相关的文本块，并将其用于构造对大型语言模型（LLM）的提示。将原始问题和检索到的块一起输入LLM生成最终答案。

提示通常是基于上下文生成的，目的是让LLM更好地理解和生成相关的文本或回答。

如果查询很复杂，可以将其分解为多个子查询，并将它们并行执行，然后将检索到的上下文合并到一个提示中，供LLM合成初始查询的最终答案；

后退提示；生成更通用的查询

查询重写，使用LLM重新制定初始查询；





## RAG的一般过程

这种情况下，用户询问[ChatGPT](https://zhida.zhihu.com/search?content_id=240584278&content_type=Article&match_order=1&q=ChatGPT&zhida_source=entity)关于一个最近引起公众广泛讨论的高调事件（即OpenAI首席执行官的突然解雇和重新任命）。作为最著名和广泛使用的LLM，ChatGPT受限于其预训练数据，缺乏对最近事件的了解。RAG通过从外部知识库检索最新的文档摘要来解决这一差距。在这种情况下，它获取了与查询相关的新闻文章选择。这些文章以及初始问题随后被合并到一个丰富的提示中，使ChatGPT能够合成一个知情的回应。这个例子说明了RAG过程，展示了它通过实时信息检索增强模型响应的能力。

![image-20251021152104657](https://chenalna.oss-cn-hangzhou.aliyuncs.com/img/image-20251021152104657.png)

1.  索引。语料库被分割成块，编码为向量索引，并存储在向量数据库中。
2.  检索。根据查询和索引块的向量相似性识别和检索块，语义相似性检索与问题最相关的Top k个块。
3.  生成。将原始问题和从检索到的块中获得的上下文信息一起输入LLM，LLM基于这个**被“增强”过的、包含了最新知识的提示词**，以生成最终答案。

首先，将分割成离散的块，然后使用编码模型构建向量索引。其次，RAG根据。最后，模型根据从检索到的块中获得的上下文信息合成响应。这些步骤构成了RAG过程的基础框架，支撑其信息检索和上下文感知生成能力。接下来，我们将介绍RAG研究框架。

RAG是一种通过整合外部知识库来**增强**LLMs的范式。它采用协同方法，结合信息检索机制和上下文学习（In-Context Learning, ICL）来增强LLM的性能。在这个框架中，用户发起的查询通过搜索算法检索相关信息。然后将这些信息编织到LLM的提示中，**为生成过程提供额外的上下文**。（这就是增强，虽然在主要过程中没提到）RAG的关键优势在于它消除了为特定任务重新训练LLMs的需要。开发者可以添加一个外部知识库，丰富输入，从而提高模型输出的精确度。

### 朴素RAG

朴素的RAG遵循一个传统的过程，包括索引、检索和生成，这也被称为检索-阅读框架。

1. 索引

索引过程是数据准备中的关键初始步骤，它在离线时进行，并涉及几个阶段。

从清理和提取各种格式的原始数据（PDF/Markdown、Word、Markdown）开始，然后将其转换为统一的纯文本格式。

为了适应模型的上下文限制，文本被分割成更小的、更易于理解的块。 然后编码为向量表示，存储在向量数据块中。

这个过程被称为分块。这些块随后通过嵌入模型转换为向量表示，该模型在推理效率和模型大小之间取得了平衡。这便于在检索阶段进行相似性比较。最后，创建一个索引来存储这些文本块及其向量嵌入作为键值对，允许高效和可扩展的搜索能力。

2. 检索

在收到用户查询后，系统使用与索引阶段相同的编码模型将输入转换为向量表示。然后，它计算查询向量与索引语料库中向量化块之间的相似度分数。系统优先检索与查询最相似的前K个块。这些块随后被用作解决用户请求的扩展上下文基础。

3. 生成

提出的查询和选定的文档被合成为一个连贯的提示词，大语言模型的任务是对这个（据此）提示词做出响应。如何做出回答？因任务特定标准而异，要么利用固有的参数知识，要么将其回答限制在提供的文档中包含的信息。在持续对话的情况下，任何对话历史都集中在提示词中。

缺点：

1.  检索挑战。包括低精度，导致检索到的块与查询不一致，可能产生幻觉或中途消失的问题。低召回率也会出现，导致未能检索到所有相关块，从而阻碍LLMs制定全面响应。过时的信息进一步加剧了问题，可能导致不准确的检索结果

2. 生成困难，生成的答案没有基于提供的上下文，以及模型输出中的不相关上下文和潜在的有害或偏见问题。

3. 增强障碍。
   1. 检索到的信息与不同的任务整合，导致不连贯或混乱的输出。
   2. 从多个来源检索到相似的信息，使得响应中出现重复和冗余。

4. 过度依赖增强信息，输出的时是重复检索到的内容。

### 高级RAG

对于检索，它提出了**预检索过程(Pre-Retrieval Process)**和**后检索过程(Post-Retrieval Process)**的策略。

对于索引方面，过使用滑动窗口、细粒度分割和元数据等技术改进了其索引方法。它还引入了各种方法来优化检索过程。

![image-20251021211911045](https://chenalna.oss-cn-hangzhou.aliyuncs.com/img/image-20251021211911045.png)

#### **预检索过程(Pre-Retrieval Process)**

**优化数据索引**(*Optimizing Data Indexing*)。优化数据索引的目标是提高被索引内容的质量。这涉及五个主要策略：增强数据粒度(enhancing data granularity)、优化索引结构(optimizing index structures)、添加元数据(adding metadata)、对齐优化(alignment optimization)和混合检索(mixed retrieval)。

- 增强数据粒度旨在提高文本标准化、一致性、事实准确性和丰富上下文，以提高RAG系统的性能。这包括去除无关信息、消除实体和术语的歧义、确认事实准确性、保持上下文和更新过时文档。
- 优化索引结构涉及调整块的大小以捕获相关上下文，跨多个索引路径查询，并利用图数据索引中的节点关系来捕获相关上下文。
- 添加元数据信息涉及将引用的元数据（如日期和目的）集成到块中以进行过滤，并结合元数据（如参考章节和小节）以提高检索效率。
- 对齐优化通过在文档中引入“假设性问题”[Li等人，2023d]来解决文档之间的对齐问题和差异。

#### **后检索过程(Post-Retrieval Process)**

在从数据库检索到有价值的上下文后，将其与查询合并为LLMs的输入，同时解决上下文窗口限制带来的挑战，这是至关重要的。简单地一次性向LLMs呈现所有相关文档可能会超过上下文窗口限制，引入噪声，并阻碍对关键信息的关注。对检索到的内容进行额外处理是必要的，以解决这些问题。先把问题传进agents 把问题选择一种工具或者普通检索（一般模式下的位置检索、概要检索、词嵌入）进行一种转化。

**重新排名**(*Re-Ranking*)。将检索到的信息重新排名，将最相关的内容重新定位到提示的边缘，是一个关键策略。这个概念已经在[LlamaIndex](https://zhida.zhihu.com/search?content_id=240584278&content_type=Article&match_order=1&q=LlamaIndex&zhida_source=entity)[^4] 、[LangChain](https://zhida.zhihu.com/search?content_id=240584278&content_type=Article&match_order=1&q=LangChain&zhida_source=entity)[^5]和[HayStack](https://zhida.zhihu.com/search?content_id=240584278&content_type=Article&match_order=1&q=HayStack&zhida_source=entity)[Blagojevi, 2023]等框架中实施。例如，Diversity Ranker[^6]根据文档多样性优先重新排序，而LostInTheMiddleRanker在上下文窗口的开头和结尾交替放置最佳文档。此外，像cohereAI rerank[Cohere, 2023]、bge-rerank[^7]和LongLLMLingua[Jiang等人，2023a]这样的方法重新计算相关文本和查询之间的语义相似度，解决了解释基于向量的模拟搜索的语义相似度的挑战。

**提示压缩**(*Prompt Compression*)。研究表明，检索文档中的噪声对RAG性能产生不利影响。在后处理中，重点是**压缩不相关的上下文，突出关键段落，并减少整体上下文长度。**像Selective Context和LLMLingua[Litman等人，2020, Anderson等人，2022]这样的方法利用小型语言模型计算提示互信息或困惑度，估计元素重要性。Recomp[Xu等人，2023a]通过在不同粒度上训练压缩器来解决这个问题，而Long Context[Xu等人，2023b]和“Walking in the Memory Maze”[Chen等人，2023a]设计了总结技术，以增强LLM的关键信息感知，特别是在处理广泛上下文时。



### 模块化RAG

模块化RAG结构与传统的朴素RAG框架不同，提供了更大的灵活性和灵活性。它整合了各种方法来增强功能模块，例如结合搜索模块进行相似性检索，并在检索器中应用微调方法[Lin等人，2023]。重组的RAG模块[Yu等人，2022]和迭代方法[Shao等人，2023]已经被开发出来以解决特定问题。模块化RAG范式在RAG领域越来越成为常态，允许在多个模块之间进行串行管道或端到端训练。三种RAG范式的比较如图3所示。然而，模块化RAG并非独立存在。高级RAG是模块化RAG的一种专门形式，而进一步地，朴素RAG本身是高级RAG的一个特殊情况。这三种范式之间的关系是继承和发展的关系。

<img src="https://chenalna.oss-cn-hangzhou.aliyuncs.com/img/image-20251021233528280.png" alt="image-20251021233528280" style="zoom: 50%;" />

#### **新模块(New Modules)**

- **搜索模块**(*Search Module*)。与朴素/高级RAG中的相似性检索不同，搜索模块针对特定场景进行定制，**并结合直接在额外的语料库上进行搜索**。这种整合是通过LLM生成的代码、SQL或Cypher等查询语言以及其他自定义工具实现的。这些搜索的数据源可以包括搜索引擎、文本数据、表格数据和知识图谱[Wang等人，2023d]。

- **记忆模块**(*Memory Module*)。这个模块利用LLM的记忆能力来指导检索。该方法涉及识别与当前输入最相似的记忆。Selfmem[Cheng等人，2023b]利用检索增强的生成器迭代地创建一个无界记忆池，结合“原始问题”和“双重问题”。通过使用检索增强的生成模型，该模型使用自己的输出来改进自己，文本在推理过程中与数据分布更加一致。因此，模型的输出被用来代替训练数据[Wang等人，2022a]。

- **融合**(*Fusion*)。RAG-Fusion[Raudaschl，2023]通过多查询方法增强了传统搜索系统，该方法将用户查询扩展到多个不同的视角，使用LLM。这种方法不仅捕获用户寻求的显式信息，还揭示了更深层次的、变革性的知识。融合过程涉及原始查询和扩展查询的并行向量搜索，智能重新排名以优化结果，并将最佳结果与新查询配对。这种复杂方法确保搜索结果与用户的显式和隐式意图紧密对齐，从而发现更有洞察力和相关的信息。

- **路由**(*Routing*)。RAG系统的检索过程利用了不同领域、语言和格式的多样化来源，这些来源可以根据情况交替或合并[Li等人，2023b]。查询路由器决定用户查询的后续操作，选项包括摘要、搜索特定数据库或将不同路径合并为单个响应。查询路由器还选择适当的数据存储用于查询，可能包括各种来源，如向量存储、图数据库或关系数据库，或索引的层次结构——例如，用于多文档存储的摘要索引和文档块向量索引。查询路由器的决策是预先定义的，并通过LLMs调用执行，将查询定向到所选索引。

- **预测**(*Predict*)。它解决了检索内容中的冗余和噪声问题。与直接从数据源检索不同，这个模块使用LLM生成必要的上下文[Yu等人，2022]。LLM生成的内容更有可能包含相关信息，而不是通过直接检索获得的内容。

​	**什么是“上下文”？**

​	在RAG中，**上下文** 通常指的是为回答用户问题而提供的**相关背景信息或支持性文档**。

​		- 在标准RAG中，这个上下文是**直接从向量数据库中检索出来的、原始的文本块**。

​		- 它的作用是**填补LLM的知识空白**，为LLM提供它原本不知道的事实依据。

- **任务适配器**(*Task Adapter*)。这个模块专注于将RAG适应于各种下游任务。UPRISE自动化了从预构建的数据池中检索零次任务输入的提示，从而提高了跨任务和模型的通用性[Cheng等人，2023a]。同时，PROMPTAGATOR[Dai等人，2022]利用LLM作为少次查询生成器，并根据生成的数据创建特定任务的检索器。通过利用LLM的泛化能力，它使得开发具有最小示例的特定任务端到端检索器成为可能。

#### **新模式(New Patterns)**

模块化RAG的组织结构高度适应性，允许在RAG过程中替换或重新排列模块以适应特定的问题背景。

朴素RAG和高级RAG都可以被视为由一些固定模块组成。如图3所示，朴素RAG主要由“检索”和“阅读”模块组成。高级RAG的典型模式在朴素RAG的基础上增加了“重写”和“重新排名”模块。然而，总的来说，模块化RAG享有更大的多样性和灵活性。

当前的研究主要探索两种组织范式。第一种涉及添加或替换模块，而第二种专注于调整模块之间的组织流程。这种灵活性使得RAG过程能够有效地解决广泛的任务。

- **添加或替换模块**(*Adding or Replacing Modules*)。引入或替换模块的策略涉及在保持检索-阅读过程的核心结构的同时，整合额外的模块以增强特定功能。RRR模型[Ma等人，2023a]引入了重写-检索-阅读( Rewirte-Retrieve-Read)过程，利用LLM性能作为重写模块的强化学习激励。这使得重写器能够微调检索查询，从而提高下游任务的读者性能。

类似地，模块可以在像Generate-Read[Yu等人，2022]这样的方法中选择性地交换，其中LLM的生成模块取代了检索模块。Recite-Read方法[Sun等人，2022]将外部检索转化为模型权重的检索，要求LLM首先记住特定任务的信息，然后产生能够处理知识密集型自然语言处理任务的输出。

- **调整模块之间的流程**(*Adjusting the Flow between Modules*)。在模块流程调整领域，重点是增强语言模型和检索模型之间的互动。DSP[Khattab等人，2022]引入了Demonstrate-Search-Predict框架，将上下文学习系统视为一个明确的程序，而不是最终任务提示，从而更有效地处理知识密集型任务。ITER-RETGEN[Shao等人，2023]方法利用生成的内容指导检索，在检索-阅读-检索-阅读流程中迭代实施“检索增强生成”和“生成增强检索”。这种方法展示了一种创新的使用一个模块的输出来改进另一个模块功能的方式。





### RAG/Fine tuning /Prompt engineering

提示词工程通过外部知识的最小必需性和模型适应性利用了大语言模型内在的能力。RAG 为模型的信息检索提供了裁制好的上下文吧。FT合适哪些要求重复的具体的结构或者风格的场景。

RAG在提供实时的知识更新和利用高解释能力对外部知识源的有效利用有杰出的效果，但是有着高延迟和关于信息数据检索的道德考虑。

FT更加静态，需要对于更新的反复训练，但是对于模型的性能和风格有着更深的定制化。但是也可能对于不熟悉的数据是一种挑战。






![image-20251022112849551](https://chenalna.oss-cn-hangzhou.aliyuncs.com/img/image-20251022112849551.png)



### **优化RAG流程(Optimizing the RAG Pipeline)**

检索过程的优化旨在提高RAG系统中信息的效率和质量。当前的研究集中在整合多样化的搜索技术、完善检索步骤、纳入认知回溯、实施多功能查询策略和利用嵌入相似度。这些努力共同致力于在RAG系统中实现检索效率和上下文信息深度之间的平衡。

**混合搜索探索**(*Hybrid Search Exploration*)。RAG系统通过智能整合各种技术，包括基于关键词的搜索、语义搜索和向量搜索，来优化其性能。这种方法利用每种方法的独特优势，以适应多样化的查询类型和信息需求，确保检索到高度相关和上下文丰富的信息。混合搜索的使用作为检索策略的有力补充，从而提高了RAG流程的整体效率。

**递归检索和查询引擎**(*Recursive Retrieval and Query Engine*)。递归检索涉及在初始检索阶段获取较小的块以捕获关键语义含义。随后，在过程的后期阶段向LLM提供包含更多上下文信息的较大块。这种两步检索方法有助于在效率和提供上下文丰富响应之间取得平衡。

**StepBack-prompt**。该方法鼓励LLM远离具体实例，围绕更广泛的概念和原则进行推理[Zheng等人，2023]。实验结果表明，当使用向后提示时，各种具有挑战性的、基于推理的任务的性能显著提高，突显了它们对RAG流程的自然适应性。这些检索增强步骤既可以应用于生成对向后提示的响应，也可以应用于最终的问题回答过程。

**子查询**(*Sub-Queries*)。根据场景，可以采用各种查询策略，例如使用LlamaIndex等框架提供的查询引擎，利用树查询，使用向量查询，或执行块的简单顺序查询。

**假设文档嵌入**(*Hypothetical Document Embeddings*)。HyDE基于这样一个信念：生成的答案可能在嵌入空间中比直接查询更接近。使用LLM，HyDE创建一个假设的文档（答案）来响应查询，嵌入这个文档，并使用结果嵌入来检索与假设文档相似的真实文档。这种方法不是基于查询的嵌入相似度，而是专注于从一个答案到另一个答案的嵌入相似度[Gao等人，2022]。然而，它可能不会始终产生理想的结果，特别是当语言模型对主题不熟悉时，可能导致更多错误实例。





1、 Rewirte-Retrieve-Read，通过重写模块和利用LM的反馈机制来优化检索查询、更新重写模型。

2、 Generated-Read用LLM生成的内容取代传统检索

3、 ReciteRead则强调从模型权重中检索，增强模型处理知识密集型人物的能力。

4、 混合检索策略整合了关键词、语义和向量检索。

5、 HyDE

6、 模块排列和交互的调整

7、 DSP（Denmonstrate-Search-Predicct）和ITERREGEN的迭代检索展示了动态使用模块输出来增强另一个模块功能的方式。

8、 FLARE和Self-RAG等技术进行自适应检索的优势。

9、 更容易地与其他技术（如微调或强化学习）集成

RAG与微调（FT）、提示工程进行比较。





## 检索

在检索阶段，主要关注的是计算查询和块之间的相似度，以识别适当的上下文。嵌入模型在这一过程中起着核心作用。在高级RAG中，嵌入模型的优化是可能的。创建一个熟练的检索器面临着重大挑战。本节将探讨三个基本问题：

我们如何实现准确的语义表示？

哪些方法可以对齐查询和文档的语义空间？

检索器的输出如何与大型语言模型（LLM）的偏好对齐？

### 检索源

1. 数据的结构

   1. 结构化数据

      知识图谱，GNN
   2. 非结构化数据

      比如说文本，Wikipedia
   3. 半结构化数据

      包含文本和图表，比如说是PDF
   4. LLM自生成内容

2. 检索粒度

### **增强语义表示(Enhancing Semantic Representations)**

在RAG中，语义空间至关重要，因为它涉及查询和文档的多维映射。在这个语义空间中的检索准确性显著影响RAG的结果。本节将介绍构建准确语义空间的两种方法。

#### 索引优化

**块优化(Chunk optimization)**

在处理外部文档时，初始步骤涉及将它们分解成较小的块以提取细粒度特征，然后嵌入这些特征以表示它们的语义。然而，嵌入过大或过小的文本块可能会导致次优结果。因此，确定文档语料库中文档的最佳块大小对于确保检索结果的准确性和相关性至关重要。选择合适的分块策略需要仔细考虑几个关键因素，例如索引内容的性质、嵌入模型及其最佳块大小、用户查询的预期长度和复杂性，以及应用程序对检索结果的具体使用。

例如，选择分块模型应基于内容的长度——无论是更长还是更短。此外，不同的嵌入模型在不同的块大小下表现出不同的性能特征。例如，sentence-transformer在处理单个句子时表现更好，而text-embedding-ada-002在处理包含256或512个token的块时表现出色。

此外，用户输入问题的长度和复杂性以及应用程序（例如语义搜索或问答）对检索结果的具体需求也会影响块大小的选择。实际上，获得精确的查询结果涉及灵活应用不同的分块策略。没有一种“最佳”策略适用于所有情况，只有特定情境下最合适的策略。

当前RAG领域的研究探索了各种块优化技术，旨在提高检索效率和准确性。其中一种方法涉及使用滑动窗口技术，通过合并多个检索过程中的全局相关信息来实现分层检索。

另一种策略，称为“small2big”方法，利用小文本块进行初始搜索阶段，然后在后续阶段向语言模型提供较大的相关文本块。

抽象嵌入技术优先考虑基于文档摘要（或摘要）的Top K检索，提供对整个文档上下文的全面理解。此外，元数据过滤技术利用文档元数据来增强过滤过程。一种创新的方法，图索引技术，将实体和关系转化为节点和连接，显著提高了相关性，特别是在多跳问题的背景下。

这些多样化方法的结合导致了显著的进步，从而提高了检索结果和RAG性能。

**添加元数据**

检索可以根据元素据，降低了检索的范围。

**结构索引**

**分层索引结构**

**知识图谱索引**

节点存储文档到底信息，边存储段落间语义或者语义相关性。

#### 查询优化

1. 查询扩展


2.  查询转换
2.  查询路由

#### 嵌入

 在RAG中，检索式通过计算问题与文档块的嵌入之间的相似度实现的，其中嵌入模型的语义表示能力起着关键作用。这主要包括稀疏编码器（BM25）和密集检索器（BERT）。还有AngIE、Voyage、BGE等嵌入模型

##### 1. 混合检索（mix/hybrid Retrieval）

​	将稀疏的和紧密的嵌入混合。

##### 2. **微调嵌入模型(Fine-tuning Embedding Models)**

一旦确定了适当的块大小，下一步关键是使用嵌入模型将这些块和查询嵌入到语义空间中。嵌入的有效性至关重要，因为它影响模型表示语料库的能力。最近的研究引入了著名的嵌入模型，如AngIE、Voyage、BGE等[Li和Li，2023，VoyageAI，2023，BAAI，2023]。这些模型已经在广泛的语料库上进行了预训练。然而，当应用于特定领域时，它们准确捕捉领域特定信息的能力可能受到限制。

此外，针对特定任务对嵌入模型进行微调对于确保模型理解用户查询的内容相关性至关重要。没有经过微调的模型可能无法充分满足特定任务的要求。因此，对于下游应用来说，微调嵌入模型变得至关重要。嵌入微调方法主要有两种范式。

**领域知识微调**(*Domain Knowledge Fine-tuning*)。

为了确保嵌入模型准确捕捉领域特定信息，利用领域特定数据集进行微调至关重要。这个过程与标准语言模型微调的主要区别在于涉及的数据集的性质。通常，嵌入模型微调的数据集包括三个主要元素：查询、语料库和相关文档。模型使用这些查询在语料库中识别相关文档。然后根据模型检索这些相关文档对查询的能力来评估其有效性。数据集构建、模型微调和评估阶段各自面临不同的挑战。LlamaIndex[Liu，2023]引入了一系列关键的类和函数，旨在简化嵌入模型微调工作流程，从而简化这些复杂的过程。通过策划一个充满领域知识的语料库并利用提供的方法，可以巧妙地微调嵌入模型，使其紧密符合目标领域的特定要求。

**针对下游任务的微调**(*Fine-tuning for Downstream Tasks*)。

针对下游任务微调嵌入模型是提高模型性能的关键步骤。在利用RAG处理这些任务的领域中，出现了创新的方法，利用LLMs的能力对嵌入模型进行微调。例如，PROMPTAGATOR[Dai等人，2022]利用LLM作为少次查询生成器来创建特定任务的检索器，解决了监督微调中的挑战，特别是在数据稀缺的领域。另一种方法，LLM-Embedder[Zhang等人，2023a]，利用LLMs为多个下游任务的数据生成奖励信号。检索器通过两种类型的监督信号进行微调：数据集的硬标签和LLMs的软奖励。这种双信号方法促进了更有效的微调过程，使嵌入模型适应于多样化的下游应用。

尽管这些方法通过结合领域知识和针对特定任务的微调提高了语义表示，但检索器可能并不总是与某些LLMs表现出最佳兼容性。为了解决这个问题，一些研究人员探索了使用LLMs的反馈直接监督微调过程。这种直接监督旨在使检索器更紧密地与LLM对齐，从而提高下游任务的性能。关于这个主题的更全面讨论将在第4.3节中介绍。

**微调嵌入**(*Fine-tuning Embedding*)。

微调嵌入模型显著影响RAG系统中检索内容的相关性。这个过程涉及定制嵌入模型以增强特定领域背景下的检索相关性，特别是对于涉及不断发展或罕见术语的专业领域。[BGE嵌入模型](https://zhida.zhihu.com/search?content_id=240584278&content_type=Article&match_order=1&q=BGE嵌入模型&zhida_source=entity)[BAAI, 2023]，如BAAI开发的BGE-large-EN[^2]，是一个高性能嵌入模型，可以微调以优化检索相关性。微调的训练数据可以使用像GPT-3.5-turbo这样的语言模型生成，以制定基于文档块的问题，然后用作微调对。

**动态嵌入**(*Dynamic Embedding*)

适应单词使用的上下文，与静态嵌入不同，静态嵌入为每个单词使用单一向量[Karpukhin等人，2020]。例如，在像BERT这样的变换器模型中，同一个单词可以根据周围的单词有不同的嵌入。OpenAI的embeddings-ada-02模型[^3]，基于像GPT这样的LLMs的原则，是一个复杂的动态嵌入模型，能够捕捉上下文理解。然而，它可能没有最新的全尺寸语言模型（如GPT-4）对上下文的敏感性。

### 对齐查询和文档(Aligning Queries and Documents)

在RAG应用的背景下，检索器可能使用单一嵌入模型对编码查询和文档，或者为每个使用单独的模型。此外，用户的原始查询可能由于表述不精确和缺乏语义信息而受到影响。因此，将用户查询的语义空间与文档的语义空间对齐至关重要。本节介绍了两种旨在实现这种对齐的基本技术。



#### **查询重写(Query Rewriting)**

查询重写是将**查询和文档的语义对齐的基本方法**。Query2Doc和ITER-RETGEN等方法**利用LLMs通过结合原始查询和额外指导来创建伪文档**[Wang等人，2023c，Shao等人，2023]。**HyDE利用文本线索构建查询向量**，以生成捕获基本模式的“假设”文档[Gao等人，2022]。RRR引入了一个框架，颠覆了传统的检索和阅读顺序，专注于查询重写[Ma等人，2023a]。STEP-BACKPROMPTING使LLMs能够执行基于高层次概念的抽象推理和检索[Zheng等人，2023]。此外，多查询检索方法利用LLMs同时生成和执行多个搜索查询，对于解决具有多个子问题的复杂问题特别有利。

#### **嵌入转换(Embedding Transformation)**

除了像查询重写这样的广泛策略外，还有一些更精细的技术专门设计用于嵌入转换。LlamaIndex[Liu，2023]通过引入一个适配器模块来实现这一点，该模块可以在**查询编码器**之后集成。这个适配器促进了微调，从而优化了查询嵌入的表示，将它们映射到与预期任务更紧密对齐的潜在空间。SANTA[Li等人，2023d]解决了与结构化外部文档对齐查询的问题，特别是处理结构化和非结构化数据之间的不一致性。它通过两种预训练策略增强了检索器对结构化信息的敏感性：首先，通过利用结构化和非结构化数据之间的固有对齐来指导对比学习的结构感知预训练方案；其次，通过实施Masked Entity Prediction。后者利用以实体为中心的掩蔽策略，鼓励语言模型预测并填写掩蔽的实体，从而促进对结构化数据的更深入理解。

### **对齐检索器和LLM(Aligning Retriever and LLM)**

在RAG流程中，通过各种技术提高检索命中率可能并不一定改善最终结果，因为检索到的文档可能与LLMs的特定要求不一致。因此，本节介绍了两种旨在将检索器输出与LLMs偏好对齐的方法。

#### **微调检索器(Fine-tuning Retrievers)**

一些研究利用LLMs的反馈信号来完善检索模型。例如，AAR[Yu等人，2023b]通过使用**编码器-解码器架构**为预训练检索器引入监督信号。这是通过识别LM的首选文档通过FiD交叉注意力分数实现的。随后，检索器通过**硬负采样和标准交叉熵损失**进行微调。最终，经过改进的检索器可以直接应用于增强目标LLMs，在目标任务中实现更好的性能。此外，有人建议LLMs可能更喜欢关注可读性而不是信息丰富的文档。REPLUG[Shi等人，2023]**利用检索器和LLM来计算检索文档的概率分布，然后通过计算KL散度进行监督训练。**这种简单有效的训练方法通过使用LM作为监督信号来提高检索模型的性能，消除了对特定交叉注意力机制的需求。UPRISE[Cheng等人，2023a]也利用冻结的LLMs来微调提示检索器。LLM和检索器都以提示输入对作为输入，并利用LLM提供的分数来监督检索器的训练，有效地将LLM视为数据集标签器。此外，Atlas[Izacard等人，2022]提出了四种监督微调嵌入模型的方法：

- 注意力蒸馏(*Attention Distillation*)。这种方法利用LLM在输出期间生成的交叉注意力分数来提炼模型的知识。
- EMDR2。通过使用期望最大化算法，这种方法使用检索文档作为潜在变量来训练模型。
- 困惑度蒸馏(*Perplexity Distillation*)直接使用生成标记的困惑度作为指标来训练模型。
- LOOP。这种方法提出了一种基于文档删除对LLM预测影响的新损失函数，提供了一种有效的训练策略，以更好地适应特定任务。

这些方法旨在改善检索器和LLM之间的协同作用，从而提高检索性能并更准确地响应用户查询。

### **适配器(Adapters)**

微调模型可能会带来挑战，例如通过API整合功能或解决由于本地计算资源有限而产生的约束。因此，一些方法选择加入**外部适配器**来帮助对齐。

在收到用户查询时后，RAG系统使用与索引阶段相同的编码模型（神经网络）将查询转换为向量表示，然后计算查询向量与索引语料块库中块向量之间的相似度分数，系统优先检索查询相似度最高的前K个块。最后被用作提示中扩展上下文。

PRCA通过上下文提取阶段和奖励驱动阶段训练适配器。然后使用基于标记的自回归策略优化检索器的输出[Yang等人，2023b]。标记过滤方法利用交叉注意力分数有效地过滤标记，仅选择得分最高的输入标记[Berchansky等人，2023]。

RECOMP引入了提取性和生成性压缩器用于摘要生成。这些压缩器要么选择相关句子，要么合成文档信息，创建针对多文档查询量身定制的摘要[Xu等人，2023a]。此外，PKG通过指令微调引入了一种创新的方法，将知识集成到白盒模型中[Luo等人，2023]。在这种方法中，检索器模块被直接替换为根据查询生成相关文档。这种方法有助于解决微调过程中遇到的困难，并提高模型性能。

## **生成**

RAG的一个关键组成部分是其生成器，它负责将检索到的信息转换为连贯流畅的文本。与传统的语言模型不同，RAG的生成器通过整合检索到的数据来提高准确性和相关性。在RAG中，生成器的输入不仅包括典型的上下文信息，还包括通过检索器获取的相关文本片段。这种全面的输入使生成器能够深入了解问题的上下文，从而产生更具信息性和上下文相关性的响应。此外，生成器受到检索到的文本的指导，以确保生成的内容与获取的信息保持一致。多样化的输入数据导致了生成阶段的针对性努力，旨在完善大型模型对来自查询和文档的输入数据的适应。在以下小节中，我们将通过深入探讨后检索处理和微调方面，介绍生成器的引入。

### **后检索处理与冻结的LLM(Post-retrieval with Frozen LLM)**

在不可调的LLM领域，许多研究依赖于像GPT-4这样的成熟模型，利用它们全面的内部知识来系统地综合来自各种文档的检索信息。  
然而，这些大型模型仍然存在挑战，包括上下文长度的限制和对冗余信息的敏感性。为了解决这些问题，某些研究工作转向了**后检索处理。后检索处理涉及处理、过滤或优化检索器从大型文档数据库检索到的相关信息**。其主要目标是提高检索结果的质量，使其更贴近用户需求或后续任务。它可以被视为对检索阶段获得的文档进行的再处理。常见的后检索处理操作通常包括信息压缩和结果重新排名。



### **信息压缩**

检索器擅长从庞大的知识库中检索相关信息，但管理检索文档中的大量信息是一个挑战。正在进行的研究旨在扩展大型语言模型的上下文长度以解决这个问题。然而，当前的大型模型仍然难以应对上下文限制。因此，在某些情况下，压缩信息变得必要。信息压缩对于减少噪声、解决上下文长度限制和增强生成效果至关重要。



LLMLingua 使用小型模型去移除不必要的tokens，并且将其 转换成LLMs适合理解的形式。

PRCA通过训练一个信息提取器来解决这个问题[Yang等人，2023b]。在上下文提取阶段，当提供输入文本S_{input}时，它能够产生一个输出序列C_{extracted}，代表输入文档的压缩上下文。训练过程旨在最小化C_{extracted}和实际上下文C_{truth}之间的差异。

同样，RECOMP采用类似的方法，通过对比学习训练一个信息压缩器[Xu等人，2023a]。每个训练数据点包括一个正样本和五个负样本，编码器在整个过程中使用对比损失进行训练[Karpukhin等人，2020]。

另一项研究采取了不同的方法，旨在减少文档数量以提高模型答案的准确性。在[Ma等人，2023b]的研究中，他们提出了“Filter-Reranker”范式，结合了LLMs和小型语言模型（SLMs）的优势。在这个范式中，SLMs充当过滤器，而LLMs充当重新排序代理。研究表明，指导LLMs重新排列SLMs识别出的具有挑战性的样本，可以在各种信息提取（IE）任务中取得显著改进。

### **重新排名(Reranking)**

重新排名模型在优化检索器检索到的文档集中起着关键作用。语言模型在引入额外上下文时经常面临性能下降，重新排名有效地解决了这个问题。核心概念涉及重新排列文档记录，以优先考虑最相关的项目，从而限制文档总数。这不仅解决了检索过程中上下文窗口扩展的挑战，还提高了检索效率和响应性。

重新排名模型在信息检索过程中扮演双重角色，既是优化器又是精炼器。它为后续的语言模型处理提供了更有效和准确的输入[Zhuang等人，2023]。

上下文压缩被纳入重新排序过程中，以提供更精确的检索信息。这种方法涉及减少单个文档的内容和过滤整个文档，最终目标是在搜索结果中呈现最相关的信息，以便更专注和准确地显示相关内容。

### **为RAG微调LLM( Fine-tuning LLM for RAG)**

优化RAG模型中的生成器是其架构的关键方面。生成器的角色是接收检索到的信息并生成相关文本，形成模型的最终输出。生成器的优化旨在确保生成的文本既自然又有效地利用检索到的文档，以更好地满足用户的查询需求。

在标准的LLM生成任务中，输入通常包括一个查询。RAG通过将查询和检索器检索到的各种文档（结构化/非结构化）整合到输入中而脱颖而出。这种额外的信息可以显著影响模型的理解，尤其是对于较小的模型。在这种情况下，微调模型以适应查询和检索到的文档的输入变得至关重要。在将输入呈现给微调模型之前，通常会对检索器检索到的文档进行后检索处理。值得注意的是，RAG中生成器的微调方法与LLMs的一般微调方法一致。以下，我们将简要描述一些涉及数据（格式化/非格式化）和优化功能的代表性工作。



基于场景和数据特征的微调可以产生更好的结果；可以调节模型的输入和输出。通过强化学习，利用索引器偏好来对齐LLM的输出

#### **一般优化过程(General Optimization Process)**

作为一般优化过程的一部分，训练数据通常包括输入-输出对，旨在训练模型在给定输入x的情况下产生输出y。在Self-Mem[Cheng等人，2023b]的工作中，采用了传统的训练过程，其中给定输入x，检索相关文档z（在论文中选择Top-1），并在整合（x，z）后，模型生成输出y。该论文利用了两种常见的微调范式，即Joint-Encoder和Dual-Encoder[Arora等人，2023，Wang等人，2022b，Lewis等人，2020，Xia等人，2019，Cai等人，2021，Cheng等人，2022]。

在Joint-Encoder范式中，使用基于编码器-解码器的标准模型。这里，编码器首先编码输入，然后解码器通过注意力机制结合编码结果以自回归方式生成标记。另一方面，在Dual-Encoder范式中，系统设置两个独立的编码器，每个编码器分别编码输入（查询，上下文）和文档。然后，解码器按顺序对这两个输出进行双向交叉注意力处理。这两种架构都使用Transformer[Vaswani等人，2017]作为基础块，并使用**负对数似然损失**(Negative Log-Likelihood loss)进行优化。

#### **利用对比学习(Utilizing Contrastive Learning)**

在为语言模型准备训练数据的过程中，通常会创建输入和输出的交互对。这种传统方法可能导致“曝光偏差(exposure bias)”，即模型仅在训练数据中遇到的个别正确输出示例上进行训练，从而限制了模型在各种可能输出中的泛化能力。这种限制可能会通过使模型过度拟合训练集中的特定示例，从而降低模型在现实世界性能中的泛化能力。

为了缓解曝光偏差，SURGE[Kang等人，2023]提出了使用图-文本对比学习。这种方法包括一个对比学习目标，促使模型产生一系列合理且连贯的响应，超越了训练数据中遇到的实例。这种方法对于减少过拟合并加强模型的泛化能力至关重要。

对于涉及结构化数据的检索任务，SANTA框架[Li等人，2023d]实施了三部分训练方案，有效地封装了结构和语义细节。初始阶段专注于检索器，其中对比学习被用来完善查询和文档嵌入。

随后，生成器的初步训练阶段使用对比学习将结构化数据与其非结构化文档描述对齐。在生成器训练的进一步阶段，模型认识到实体语义在文本数据表示学习中的关键作用，如[Sciavolino等人，2021，Zhang等人，2019]所强调。这个过程从识别结构化数据中的实体开始，然后在生成器的输入数据中对这些实体应用掩码，为模型预测和预测这些掩蔽元素做好准备。

训练方案随着模型学习利用上下文信息重建掩蔽实体而进展。这种练习培养了模型对文本数据结构语义的理解，并促进了结构化数据中相关实体的对齐。总体优化目标是训练语言模型准确地恢复被掩盖的跨度，从而丰富其对实体语义的理解[Ye等人，2020]。

## **RAG 增强阶段( RAG in Augmentation Stages)**

RAG是一个知识密集型的努力(knowledge-intensive endeavor)，它在语言模型训练的预训练、微调和推理阶段采用了各种技术方法。

### **预训练阶段(Pre-training Stage)**

在预训练阶段，研究人员已经研究了通过基于检索的策略来增强开放领域问答（QA）的预训练模型（PTMs）的方法。REALM模型采用了一种结构化、可解释的知识嵌入方法，将预训练和微调框定为在掩码语言模型（MLM）框架内的检索然后预测的工作流程[Arora等人，2023]。

RETRO[Borgeaud等人，2022]利用检索增强进行大规模预训练，实现了模型参数的减少，同时在困惑度方面超越了标准GPT模型。RETRO的独特之处在于它设计了一个额外的编码器来处理从外部知识库检索到的实体的特征，这是在GPT模型的基础上构建的。

Atlas[Izacard等人，2022]也在T5架构的预训练和微调阶段引入了检索机制。它使用预训练的T5来初始化编码器-解码器语言模型，并使用预训练的Contriever作为密集检索器，提高了其在复杂语言建模任务中的效率。

此外，COG[Lan等人，2022]引入了一种新颖的文本生成方法，模仿从预先存在的集合中复制文本片段。利用高效的向量搜索工具，COG计算并索引文本片段的上下文意义表示，在问答和领域适应等域中表现出优于RETRO的性能。

随着规模法则的出现，模型参数的增长推动了自回归模型成为主流。研究人员正在将RAG方法扩展到更大的预训练模型，RETRO++就是这一趋势的典范，它扩大了模型参数，同时保持或提高了性能[Wang等人，2023b]。

实证证据强调了在文本生成质量、事实准确性、减少毒性() reduced toxicity和下游任务熟练度方面的显著改进，特别是在开放领域问答等知识密集型应用中。这些结果表明，将检索机制整合到自回归语言模型的预训练中是一个有前景的途径，将复杂的检索技术与庞大的语言模型相结合，以产生更精确、更高效的语言生成。

增强预训练的好处包括一个强大的基础模型，其在困惑度、文本生成质量和特定任务性能方面都优于标准GPT模型，同时使用的参数更少。这种方法特别擅长处理知识密集型任务，并有助于通过在专业语料库上进行训练来开发领域特定模型。

尽管这种方法面临诸如需要大量预训练数据集和资源以及随着模型大小增加更新频率降低等挑战，但这种方法在模型韧性方面提供了显著的优势。一旦训练完成，增强检索模型可以独立于外部库运行，提高生成速度和操作效率。这些潜在的收益使得这种方法成为人工智能和机器学习中持续研究和创新的一个引人入胜的主题。

### **微调阶段(Fine-tuning Stage)**

RAG和微调是增强LLMs的强大工具，将两者结合起来可以满足更特定场景的需求。一方面，微调允许检索具有独特风格的文档，实现更好的语义表达，并调整查询和文档之间的差异。这确保了检索器的输出更适合当前场景。另一方面，微调可以满足生成需求，进行风格化和针对性的调整。此外，微调还可以用于调整检索器和生成器，以提高模型的协同作用。

微调检索器的主要目标是提高语义表示的质量，通过直接微调嵌入模型来实现，使用语料库[Liu，2023]。通过反馈信号将检索器的能力与LLMs的偏好对齐，两者可以更好地协调[Yu等人，2023b，Izacard等人，2022，Yang等人，2023b，Shi等人，2023]。针对特定下游任务微调检索器可以提高适应性。引入任务无关的微调旨在提高检索器在多任务场景中的多功能性[Cheng等人，2023a]。

微调生成器可以产生更风格化和定制化的输出。一方面，它允许针对不同的输入数据格式进行专门的适应。例如，微调LLMs以适应知识图的结构[Kang等人，2023]，文本对的结构[Kang等人，2023，Cheng等人，2023b]，以及其他特定结构[Li等人，2023d]。另一方面，通过构建指令数据集，可以要求LLMs生成特定格式的内容。例如，在适应性或迭代检索场景中，LLMs被微调以生成有助于确定下一步行动时机的内容[Jiang等人，2023b，Asai等人，2023]。

通过协同微调检索器和生成器，我们可以提高模型的泛化能力，避免因单独训练它们而可能出现的过拟合。然而，联合微调也导致了资源消耗的增加。RA-DIT[Lin等人，2023]提出了一个轻量级的双指令微调框架，可以有效地为任何LLMs添加检索能力。检索增强的指令微调更新LLM，引导它更有效地利用检索到的信息，并忽略分散注意力的内容。

尽管它具有优势，但微调也有局限性，包括需要专门的RAG微调数据集和大量的计算资源。然而，这个阶段允许根据特定需求和数据格式定制模型，可能与预训练阶段相比减少资源使用，同时仍能够微调模型的输出风格。

总之，微调阶段对于RAG模型适应特定任务至关重要，它增强了检索器和生成器的多功能性和适应性，尽管资源和数据集要求带来了挑战。RAG模型的战略微调因此是开发高效、有效的检索增强系统的关键组成部分。

### **推理阶段(Inference Stage)**

RAG模型的推理阶段至关重要，因为它涉及与LLMs的广泛集成。传统的RAG方法，也称为朴素RAG，涉及在这个阶段将检索内容整合到生成过程中。

为了克服朴素RAG的局限性，先进技术在推理过程中引入了更丰富的上下文信息。DSP框架[Khattab等人，2022]利用冻结的LMs和检索模型（RMs）之间的复杂自然语言文本交换，丰富了上下文，从而提高了生成结果。PKG[Luo等人，2023]方法为LLMs配备了一个知识引导模块，允许检索相关信息，而无需修改LMs的参数，使更复杂的任务执行成为可能。CREAICL[Li等人，2023b]采用跨语言知识的同步检索来增强上下文，而RECITE[Sun等人，2022]通过直接从LLMs中采样段落来生成上下文。

在需要多步推理的任务中，迭代检索方法进一步提高了RAG过程的精细化。ITRG[Feng等人，2023]迭代检索信息以确定正确的推理路径，从而提高了任务适应性。ITERRETGEN[Shao等人，2023]遵循迭代策略，将检索和生成合并在一个循环过程中，交替进行“检索增强生成”和“生成增强检索”。对于非知识密集型（NKI）任务，PGRA[Guo等人，2023]提出了一个两阶段框架，首先是一个任务无关的检索器，然后是一个提示引导的重排器，用于选择和优先考虑证据。相比之下，IRCOT[Trivedi等人，2022]将RAG与思维链（CoT）方法相结合，交替进行CoT引导的检索和检索信息的CoT过程，显著提高了GPT-3在各种问答任务中的性能。

本质上，这些推理阶段的增强提供了轻量级、成本效益高的选择，利用预训练模型的能力，而无需进一步训练。主要优势是在保持静态LLM参数的同时提供与上下文相关的信息以满足特定任务需求。然而，这种方法并非没有局限性，因为它需要精心的数据处理和优化，并且受到基础模型内在能力的约束。为了有效地应对多样化的任务需求，这种方法通常与程序优化技术（如逐步推理、迭代检索和自适应检索策略）结合使用。

### **增强来源(Augmentation Source)**

RAG模型的有效性在很大程度上受到增强数据源选择的影响。不同层次的知识和维度需要不同的处理技术。它们被归类为非结构化数据、结构化数据和由LLMs生成的内容。图5展示了具有不同增强方面的代表性RAG研究的技术树。叶子以三种不同的颜色表示，代表使用各种类型数据的增强：非结构化数据、结构化数据和由LLMs生成的内容。图表清楚地表明，最初，增强主要是通过非结构化数据（如纯文本）实现的。这种方法后来扩展到包括使用结构化数据（例如知识图谱）以进一步改进。最近，研究中出现了一个趋势，即使用LLMs自身生成的内容进行检索和增强。



#### **使用非结构化数据增强(Augmented with Unstructured Data)**

非结构化文本从语料库中收集，例如用于微调大型模型的提示数据[Cheng等人，2023a]和跨语言数据[Li等人，2023b]。检索单元从标记（例如kNN-LM[Khandelwal等人，2019]）到短语（例如NPM，COG[Lee等人，2020，Lan等人，2022]）和文档段落，更细的粒度提供了精确度，但代价是检索复杂性的增加。

FLARE[Jiang等人，2023b]引入了一种主动检索方法，由LM生成低概率词触发。它创建一个临时句子用于文档检索，然后使用检索到的上下文重新生成句子以预测后续句子。RETRO使用前一个块来检索块级别的最近邻，结合前一个块的上下文，指导下一个块的生成。为了保持因果关系，下一个块Ci的生成仅使用前一个块N(Ci−1)的最近邻，而不是N(Ci)。

#### **使用结构化数据增强(Augmented with Structured Data)**

结构化数据，如知识图谱（KGs），提供高质量的上下文并减轻模型幻觉。RET-LLMs[Modarressi等人，2023]为未来参考构建了一个由过去对话组成的知识图谱记忆。SUGRE[Kang等人，2023]利用图神经网络（GNNs）编码相关的KG子图，通过多模态对比学习确保检索到的事实与生成文本的一致性。KnowledgeGPT[Wang等人，2023d]生成KB搜索查询并将知识存储在个性化数据库中，增强了RAG模型的知识丰富性和上下文性。

#### **LLMs生成的内容在RAG中(LLMs-Generated Content in RAG)**

为了解决RAG中外部辅助信息的局限性，一些研究专注于利用LLMs的内部知识。SKR[Wang等人，2023e]将问题分类为已知或未知，并有选择地应用检索增强。GenRead[Yu等人，2022]用LLM生成器替换检索器，发现由于与因果语言建模的预训练目标更好地对齐，LLM生成的上下文通常包含更准确的答案。Selfmem[Cheng等人，2023b]使用检索增强的生成器迭代创建一个无界记忆池，使用记忆选择器选择作为原始问题的双重问题的输出，从而自我增强生成模型。

这些方法强调了在RAG中创新数据源利用的广度，努力提高模型性能和任务效果。

### **增强过程(Augmentation Process)**

在RAG领域，标准做法通常涉及单一检索步骤，然后进行生成，这可能导致效率低下。一个值得注意的问题，称为“中间丢失”现象，出现在单一检索产生冗余内容时，可能会稀释或与关键信息相矛盾，从而降低生成质量[Liu等人，2023a]。此外，这种单一检索通常不足以应对需要多步推理的复杂问题，因为它提供的信息范围有限[Yoran等人，2023]。如图5所示，为了规避这些挑战，当代研究提出了改进检索过程的方法：迭代检索、递归检索和自适应检索。迭代检索允许模型基于初始查询和迄今为止生成的文本重复收集文档，为LLMs提供更全面的知识库[Borgeaud等人，2022，Arora等人，2023]。

这种方法已被证明通过提供额外的上下文参考，增强了后续答案生成的鲁棒性。然而，它可能受到语义不连续性和无关信息积累的影响，因为它通常依赖于一个序列的n个标记来划分生成文本和检索文档之间的边界。为了解决特定的数据场景，使用了递归检索和多跳检索技术。递归检索涉及使用结构化索引以分层方式处理和检索数据，这可能包括在执行基于此摘要的检索之前对文档或长篇PDF的部分进行总结。随后，在文档内进行的二次检索细化了搜索，体现了过程的递归性质。相比之下，多跳检索旨在深入挖掘图结构化数据源，提取相互关联的信息[Li等人，2023c]。此外，一些方法整合了检索和生成的步骤。ITER-RETGEN[Shao等人，2023]采用了一种协同方法，利用“检索增强生成”和“生成增强检索”来处理需要复制特定信息的任务。该模型利用所需的内容作为检索相关知识的上下文基础，这反过来又促进了后续迭代中改进响应的生成。

![image-20251028182725243](https://chenalna.oss-cn-hangzhou.aliyuncs.com/img/image-20251028182725243.png)

#### **迭代检索(Iterative Retrieval)**

迭代检索是RAG模型中的一个过程，其中文档会基于初始查询和迄今为止生成的文本重复收集，为LLMs提供更全面的知识库[Borgeaud等人，2022，Arora等人，2023]。这种方法已被证明可以通过提供额外的上下文参考，增强后续答案生成的鲁棒性。然而，它可能受到语义不连续性和无关信息积累的影响，因为它通常依赖于一个序列的n个标记来划分生成文本和检索文档之间的边界。

为了解决特定的数据场景，使用了递归检索和多跳检索技术。递归检索涉及使用结构化索引以分层方式处理和检索数据，这可能包括在执行基于此摘要的检索之前对文档或长篇PDF的部分进行总结。随后，在文档内进行的二次检索细化了搜索，体现了过程的递归性质。相比之下，多跳检索旨在深入挖掘图结构化数据源，提取相互关联的信息[Li等人，2023c]。

此外，一些方法整合了检索和生成的步骤。ITER-RETGEN[Shao等人，2023]采用了一种协同方法，利用“检索增强生成”和“生成增强检索”来处理需要复制特定信息的任务。该模型利用所需的内容作为检索相关知识的上下文基础，这反过来又促进了后续迭代中改进响应的生成。

#### **递归检索(Recursive Retrieval)**

递归检索通常用于信息检索和自然语言处理（NLP），以提高搜索结果的深度和相关性。 该过程涉及根据前一次搜索的结果迭代地完善搜索查询。递归检索旨在通过反馈循环逐步收敛到最相关的信息，从而增强搜索体验。IRCoT[Trivedi等人，2022]使用思维链来指导检索过程，并使用检索结果完善CoT。ToC[Kim等人，2023]创建了一个澄清树，系统地优化查询中的模糊部分。它在用户需求一开始就不完全清楚或所寻求的信息非常专业或微妙的复杂搜索场景中特别有用。该过程的递归性质允许对用户需求进行持续学习和适应，通常会导致对搜索结果的满意度提高。

递归检索和多跳检索的组合。

#### **自适应检索(Adaptive Retrieval)**

自适应检索方法，如Flare和SelfRAG[Jiang等人，2023b，Asai等人，2023]，通过使LLMs能够主动确定检索的最佳时机和内容，从而提高RAG框架的效率和相关信息的来源。

这些方法是LLMs在其操作中采用主动判断的更广泛趋势的一部分，如AutoGPT、Toolformer和Graph-Toolformer等模型代理[Yang等人，2023c，Schick等人，2023]。例如，Graph-Toolformer将其检索过程分为不同的步骤，其中LLMs主动使用检索器，应用Self-Ask技术，并使用少次提示来启动搜索查询。这种主动立场使LLMs能够决定何时搜索所需的信息，类似于代理如何使用工具。

WebGPT[Nakano等人，2021]集成了一个强化学习框架，以在文本生成过程中训练GPT-3模型自主使用搜索引擎。它使用特殊标记来促进如搜索引擎查询、浏览结果和引用参考等操作，从而通过使用外部搜索引擎扩展GPT-3的能力。

Flare通过监控生成过程中生成术语的概率来自动化检索时机[Jiang等人，2023b]。当概率低于某个阈值时，会激活检索系统以收集相关信息，从而优化检索周期。

Self-RAG[Asai等人，2023]引入了“反思标记”，允许模型反思其输出。这些标记有两种类型：“检索”和“批评”。模型可以自主决定何时激活检索，或者预定义的阈值可能会触发该过程。在检索期间，生成器在多个段落中进行片段级别的束搜索，以得出最连贯的序列。批评分数用于更新细分分数，具有在推理期间调整这些权重的灵活性，以定制模型的行为。Self-RAG的设计消除了对额外分类器或依赖自然语言推理（NLI）模型的需求，从而简化了决定何时参与检索机制的决策过程，并提高了模型在生成准确响应方面的自主判断能力。

由于LLM的日益普及，LLM优化受到了显著关注。提示工程、微调（FT）和RAG等技术各有特点，如图6所示。虽然提示工程利用了模型的固有能力，但优化LLM通常需要应用RAG和FT方法。RAG和FT的选择应基于场景的具体要求和每种方法的固有属性。表1提供了RAG和FT的详细比较。





#### **RAG与微调(RAG vs Fine-Tuning)**

RAG就像给模型一本教科书，用于特定查询的信息检索，非常适合特定查询。另一方面，FT就像学生随着时间的推移内化知识，更适合复制特定的结构、风格或格式。FT可以通过加强基础模型知识、调整输出和教授复杂指令来提高模型的性能和效率。然而，它在整合新知识或快速迭代新用例方面并不擅长。

RAG和FT这两种方法并不互相排斥，可以在不同层次上互补，增强模型的能力。在某些情况下，它们的结合使用可能会产生最佳性能。涉及RAG和FT的优化过程可能需要多次迭代才能达到满意的结果。





## **RAG评估**

RAG在自然语言处理（NLP）领域的快速发展和日益广泛的应用推动了LLMs社区对RAG模型评估的研究。评估的主要目标是理解和优化RAG模型在不同应用场景下的性能。

从历史上看，RAG模型的评估主要集中在其在特定下游任务中的执行上。这些评估采用适合手头任务的既定指标。例如，问答评估可能依赖于EM和F1分数[Wang等人，2023a, Shi等人，2023, Feng等人，2023, Ma等人，2023a]，而事实核查任务通常以准确性为主要指标[Lewis等人，2020, Izacard等人，2022, Shao等人，2023]。为RAG应用设计的自动评估工具，如RALLE，同样基于这些特定于任务的指标进行评估[Hoshi等人，2023]。尽管如此，专门评估RAG模型独特特性的研究仍然很少。

以下部分将从任务特定评估方法和指标的焦点转移到现有文献的综合上，这些文献基于它们的独特属性。这一探索涵盖了RAG评估的目标、评估这些模型的方面以及可用于此类评估的基准和工具。目标是提供一个全面的RAG模型评估概述，概述专门针对这些先进生成系统的独特方面的评估方法。

### **评估目标(Evaluation Targets)**

RAG模型的评估主要围绕两个关键组件：检索和生成模块。这种划分确保了对检索器组件提供的上下文质量和生成器产生的内容质量进行全面评估。

### 下游任务（Downstream Task）

RAG的核心任务就是问题-回答，包括单任务/多任务，多选择的、具体特定的回答。

### **检索质量(Retrieval Quality)**

评估检索质量对于确定检索器组件提供的上下文的有效性至关重要。评估RAG检索模块的性能通常采用搜索引擎、推荐系统和信息检索系统中的标准指标。常用的指标包括命中率、MRR和NDCG[Liu，2023, Nguyen，2023]。

### **生成质量(Generation Quality)**

生成质量的评估集中在生成器从检索到的上下文中合成连贯和相关答案的能力上。这种评估可以根据内容的目标分为两类：未标记和已标记内容。对于未标记内容，评估包括生成答案的真实性、相关性和无害性。相比之下，对于已标记内容，重点是评估模型产生的信息的准确性[Liu，2023]。此外，检索和生成质量评估也可以通过手动或自动评估方法进行[Liu，2023, Lan等人，2022, Leng等人，2023]。

### **评估方面(Evaluation Aspects)**

当代RAG模型的评估实践强调三个主要质量分数和四种基本能力，这些共同构成了对RAG模型两个主要目标：检索和生成的评估。

#### **质量分数(Quality Scores)**

质量分数包括上下文相关性、答案真实性和答案相关性。这些质量分数从不同角度评估RAG模型在信息检索和生成过程中的效率[Es等人，2023, Saad-Falcon等人，2023, Jarvis和Allard，2023]。

**上下文相关性**(*Context Relevance*)评估检索上下文的精确性和特异性，确保相关性并最小化与无关内容相关的处理成本。

**答案真实性**(*Answer Faithfulness*)确保生成的答案忠实于检索到的上下文，保持一致性并避免矛盾。

**答案相关性**(*Answer Relevance*)要求生成的答案直接相关于提出的问题，有效地解决核心查询。

#### **所需能力(Required Abilities)**

RAG评估还涉及四种能力，表明其适应性和效率：噪声鲁棒性、负面拒绝、信息整合和反事实鲁棒性[Chen等人，2023b, Liu等人，2023b]。这些能力对于模型在各种挑战和复杂场景下的性能至关重要，影响质量分数。

**噪声鲁棒性**(*Noise Robustness*)评估模型处理与问题相关的但缺乏实质性信息的噪声文档的能力。

**负面拒绝**(*Negative Rejection*)评估模型在检索到的文档不包含回答问题所需的知识时避免响应的辨别力。

**信息整合**(*Information Integration*)评估模型从多个文档中综合信息以解决复杂问题的能力。

**反事实鲁棒性**(*Counterfactual Robustness*)测试模型识别并忽略文档中已知不准确性的能力，即使在被告知潜在的错误信息时也是如此。

上下文相关性和噪声鲁棒性对于评估检索质量很重要，而答案真实性、答案相关性、负面拒绝、信息整合和反事实鲁棒性对于评估生成质量很重要。每个评估方面的具体指标总结在表2中。需要注意的是，这些指标来源于相关工作，尚未代表量化RAG评估方面的成熟或标准化方法。一些评估研究还开发了针对RAG模型细微差别的定制指标。





### **评估基准和工具(Evaluation Benchmarks and Tools)**

本节描述了RAG模型的评估框架，包括基准测试和自动化评估工具。这些工具提供了量化指标，不仅衡量RAG模型的性能，还增强了对模型在各种评估方面能力的理解。著名的基准测试，如RGB和RECALL[Chen等人，2023b, Liu等人，2023b]，专注于评估RAG模型的基本能力。同时，最先进的自动化工具，如RAGAS[Es等人，2023]、ARES[Saad-Falcon等人，2023]和TruLens[^8]，利用LLMs来评判质量分数。这些工具和基准共同构成了一个强大的框架，用于系统地评估RAG模型，如表3所总结。

## **未来前景**

本节探讨了RAG的三个未来前景：未来的挑战、模态扩展和RAG生态系统。

### **RAG的未来挑战(Future Challenges of RAG)**

尽管RAG技术取得了显著进展，但仍存在几个挑战需要深入研究：

- **上下文长度**(*Context Length*)：RAG的有效性受到大型语言模型（LLMs）上下文窗口大小的限制。平衡窗口长度过短可能导致信息不足，过长可能导致信息稀释，这是至关重要的。随着努力扩大LLM上下文窗口到几乎无限大，适应这些变化对RAG提出了重要的研究问题[Xu等人，2023c，Packer等人，2023，Xiao等人，2023]。
- **鲁棒性**(*Robustness*)：检索过程中存在的噪声或矛盾信息可能对RAG的输出质量产生不利影响。提高RAG对这种对抗性或虚假输入的抵抗力正在获得研究动力，并已成为关键的性能指标[Yu等人，2023a，Glass等人，2021，Baek等人，2023]。
- **混合方法**(*Hybrid Approaches* RAG+FT)：将RAG与微调相结合正成为一种领先策略。确定RAG和微调的最佳整合方式，无论是顺序、交替还是通过端到端的联合训练，以及如何利用参数化和非参数化的优势，都是值得探索的领域[Lin等人，2023]。
- **扩展LLM角色**(*Expanding LLM Roles*)：除了生成最终答案外，LLMs在RAG框架中也被用于检索和评估。识别进一步解锁RAG系统中LLMs潜力的方法是一个不断增长的研究方向。
- **规模法则**(*Scaling Laws*)：虽然LLMs的规模法则已经确立[Kaplan等人，2020年]，但其对RAG的适用性仍不确定。初步研究已经开始解决这个问题[Wang等人，2023b]，但RAG模型的参数数量仍然落后于LLMs。较小模型在某些情况下可能优于较大模型的逆规模法则特别引人入胜[^9]，值得进一步调查。
- **生产就绪的RAG**(*Production-Ready RAG*)：RAG的实用性和与工程需求的一致性促进了其采用。然而，提高检索效率、改善大型知识库中的文档召回率以及确保数据安全（例如防止LLMs无意中披露文档来源或元数据）等关键工程挑战仍有待解决[Alon等人，2022年]。

### **模态扩展的RAG(Modality Extension of RAG)**

RAG已经超越了其最初的基于文本的问答限制，拥抱了各种模态数据。这种扩展催生了创新的多模态模型，这些模型在各个领域整合了RAG概念：

- **图像**(*Image*)。RA-CM3[Yasunaga等人，2022]是一种先进的多模态模型，能够检索和生成文本和图像。BLIP-2[Li等人，2023a]利用冻结的图像编码器与LLMs一起进行高效的视觉语言预训练，实现了零-shot图像到文本的转换。“在写之前进行可视化”方法[Zhu等人，2022]利用图像生成来引导LM的文本生成，在开放式文本生成任务中表现出潜力。
- **音频和视频**(*Audio and Video*)。GSS方法检索并拼接音频片段，将机器翻译数据转换为语音翻译数据[Zhao等人，2022]。UEOP通过引入外部的离线策略，用于语音转文本转换，实现了端到端自动语音识别的重大进步[Chan等人，2023]。此外，基于KNN的注意力融合利用音频嵌入和语义相关的文本嵌入来改进ASR，从而加速领域适应。Vid2Seq通过引入专门的时间标记，为语言模型增加了语义，以便在统一的输出序列中预测事件边界和文本描述[Yang等人，2023a]。
- **代码**(*Code*)。RBPS[Nashid等人，2023]在小规模学习任务中表现出色，通过编码和频率分析检索与开发人员目标一致的代码示例。这种方法在测试断言生成和程序修复等任务中已经证明了其有效性。对于结构化知识，CoK方法[Li等人，2023c]首先从知识图谱中提取与输入查询相关的事实，然后将这些事实作为提示集成到输入中，在知识图谱问答任务中提高了性能。

### **RAG生态系统( Ecosystem of RAG)**

#### **下游任务和评估(Downstream Tasks and Evaluation)**

RAG在丰富语言模型处理复杂查询和生成详细响应的能力方面显示出相当的前景。RAG不仅增强了响应的精确性和相关性，还增强了其多样性和深度。RAG在多个领域的可扩展性和多功能性需要进一步研究，特别是在医学、法律和教育等专业领域。在这些领域，RAG可能比传统的微调方法更能降低训练成本并提高性能。同时，完善RAG的评估框架对于最大化其在不同任务中的有效性和实用性至关重要。这需要开发能够衡量上下文相关性、内容创造性和非恶意性等方面细微差别的指标和评估工具。此外，提高RAG驱动模型的可解释性仍然是一个关键目标。这样做将允许用户理解模型生成响应背后的推理过程，从而促进对RAG应用的信任和透明度。

#### **技术栈(Technical Stack)**

RAG生态系统的发展受到其技术栈进展的极大影响。像LangChain和LLamaIndex这样的关键工具随着ChatGPT的出现迅速流行，提供了广泛的RAG相关API，并成为LLMs领域的重要工具。

新兴的技术栈，虽然功能不如LangChain和LLamaIndex丰富，但以其专业服务脱颖而出。例如，Flowise AI[^10]优先考虑低代码方法，使用户能够通过用户友好的拖放界面部署AI应用，包括RAG。其他技术如HayStack、Meltano[^11]和Cohere Coral[^12]也因其在该领域的特殊贡献而受到关注。

除了AI专业提供商外，传统的软件和云服务提供商也在扩展其产品，包括以RAG为中心的服务。Weaviate的Verba[^13]专为个人助理应用设计，而Amazon的Kendra提供智能企业搜索服务，允许用户使用内置连接器浏览各种内容库。在RAG技术景观的演变过程中，明显出现了不同的专业化方向，例如：1）定制化。根据特定要求定制RAG。2）简化。使RAG更易于使用，从而降低初始学习曲线。3）专业化。优化RAG以更有效地服务于生产环境。

RAG模型及其技术栈的相互增长显而易见；技术进步不断为现有基础设施设定新的标准。反过来，技术栈的增强推动了RAG能力的进化。RAG工具包正在汇聚成一个基础技术栈，为先进的企业应用奠定基础。然而，一个完全集成的、全面平台的概念仍然在地平线上，等待进一步的创新和发展。

![image-20251029100253512](https://chenalna.oss-cn-hangzhou.aliyuncs.com/img/image-20251029100253512.png)

## 一些概念

query（文中的问题/查询/指令）--在自然语言处理和机器学习领域中，query通常指的是查询、询问或请求。在大模型中，query可以指代用户输入的问题或指令，用于触发模型进行相应的处理和响应。例如，在对话生成模型中，query可以是用户提出的问题，模型会根据query生成相应的回答。在其他应用中，query也可以指代用户输入的特定指令或查询条件，用于从大模型中检索相关信息。因此，在大模型中，query的具体含义取决于上下文和模型的应用场景。

Masked Language Modeling（MLM）--是一种预训练语言模型的方法。它通过在输入文本中随机掩盖一些单词或标记，并要求模型预测这些被掩盖的单词或标记，以此训练模型来学习上下文信息，提高预测准确性。MLM的主要目的是让模型能够理解语言的上下文关系，并生成合理的回复或文本。MLM可以用于各种自然语言处理任务，如文本分类、机器翻译、情感分析等。MLM的训练过程通常采用自监督学习的方式进行，这意味着模型通过分析已有的语料库来学习语言的规律和结构。