前言

前面简单了解了一下MCP技术,RAG技术也是早有耳闻,但是要说RAG对我印象最深的是一天坐地铁时看到小红书中一个帖子,内容大概是清华大一某一门课程第一节课的作业要求:需要搭建一个RAG系统。我看到后有些惊讶感觉我应该加快学习的步伐了。

如果文章能帮到其他小伙伴,那是我的荣幸。文中如有不当的地方欢迎大家友好讨论,对于不妥我会积极修改。(有部分图片和实现方案及操作步骤取自其他博客和公众号,作者均会在后面引用说明)

大佬们有更好的解决见解和想法,也希望能够指点指点~~~~

一、什么是RAG?

我感觉LangChain4j 中文文档(RAG (检索增强生成) | LangChain4j 中文文档)中的介绍还挺有趣:“RAG 是一种在发送给 LLM 之前,从你的数据中找到并注入相关信息片段到提示中的方法。 这样 LLM 将获得(希望是)相关信息,并能够使用这些信息回复, 这应该会降低产生幻觉的概率。”我的理解是:例如,向 LLM 提问一个问题(qustion),RAG 从各种数据源检索相关的信息,并将检索到的信息和问题(answer)注入到提示词模板中,LLM 最后给出答案。

RAG模型由Facebook AI Research(FAIR)团队于2020年首次提出([2005.11401] 用于知识密集型自然语言处理任务的检索增强生成),毕竟早在2019年,FAIR的Faiss 就实现了基于嵌入的向量搜索技术。

一篇关于RAG技术的综述

我认为要弄清楚一个技术看一看近几年不错的综述也一定会有不一样的全局感,关于RAG技术的综述我感觉这篇大型语言模型的检索增强生成:一项综述Retrieval-Augmented Generation for Large Language Models: A Survey》(同济-KGLLM/RAG调查)不错,虽然是2024年的但是也可以帮助我们了解清楚RAG发展脉络。

1.概述

复旦、同济的研究学者们将RAG范式进展概括为三个部分:Naive RAG, the Advanced RAG, the Modular RAG。将RAG相关研究演变分为如下图的四个阶段,这四个阶段是伴随着大模型的能力来演进的,其共性都是为了让模型更好的利用知识。

涉及RAG的阶段主要包括预训练、微调和推理。随着LLM的出现,RAG研究最初聚焦于利用LLM强大的上下文学习能力,主要集中在推理阶段。后续研究深入探讨,逐步与LLMs的微调相结合。研究人员还在探索通过检索增强技术提升预训练阶段的语言模型。

这篇综述的RAG生态图系统性地勾勒出检索增强生成(RAG)技术从理论到实践、从单一到生态的整体发展脉络:底层以上游技术栈与核心范式为支撑,通过一系列精细化技术持续优化检索与生成效果;中层直面“检索什么、何时检索、如何利用”三大核心挑战,并推动RAG向长上下文、多模态与生产级系统演进;上层以多样化下游任务为导向,依托日益成熟的工具生态和涵盖质量、鲁棒性、忠实度等多维度的评估体系,推动RAG走向专业化、可衡量、可落地的未来。整张图表明,RAG已从一种简单的拼接技术,演进为一个层次清晰、持续进化且生态完备的新型知识增强智能架构。

2.RAG的定义

在该综述中RAG的定义:

RAG是一种通过从外部知识源实时检索相关信息,并将其与用户查询相结合来增强大型语言模型(LLM)生成能力的技术框架。它主要用于弥补LLM依赖静态预训练数据、难以获取最新或特定领域知识的局限性。

其核心运作流程包含三个关键步骤:

  1. 索引:将外部文档分割成片段,转化为向量表示,并存入向量数据库以供高效检索。

  2. 检索:根据用户查询的语义,从向量数据库中找出最相关的文本片段。

  3. 生成:将检索到的文本片段与原始查询组合成增强提示,输入LLM以生成最终答案。

3.RAG的框架

RAG的三种范式:

Naive RAG:主要由三个部分组成:索引、检索和生成。

Advanced RAG:提出了多种优化策略,围绕检索前和检索后,过程类似于Naive RAG,但仍遵循链状结构。

Modular RAG :继承并发展自前一范式,整体展现出更高的灵活性。这在多个特定功能模块的引入和现有模块的替代中表现得尤为明显。整体过程不仅限于顺序检索和生成;它包括迭代和自适应检索等方法,如图是Modular RAG的框架。

(1)Naive RAG(基础 RAG)
  • 核心流程Indexing(文档分块→向量化→存入向量库)→ Retrieval(查询向量化→相似性匹配取 Top K)→ Generation(查询 + 召回文档→LLM 生成回复),是 RAG 的最基础 “检索 - 读取” 框架。
  • 优势:流程简单、易实现,是 RAG 的入门范式。
  • 不足
    • 检索精度 / 召回率低(易取到无关内容、漏关键信息);
    • 生成易 “幻觉”(输出无文档支撑的内容);
    • 增强环节僵化(多源信息整合易冗余、风格不一致)。
(2)Advanced RAG(增强 RAG)
  • 核心升级:在 Naive RAG 基础上,增加 **Pre-Retrieval(检索前优化)Post-Retrieval(检索后优化)** 环节,针对性解决 Naive RAG 的痛点。
    • Pre-Retrieval:优化索引(滑动窗口分块、细粒度分割、加元数据)+ 优化查询(查询重写 / 扩展 / 路由,让查询更精准);
    • Post-Retrieval:重排序(重新筛选召回内容的相关性)+ 上下文压缩(精简召回内容,避免信息过载)。
  • 优势:通过 “前 + 后” 优化提升了检索质量、减少了冗余,缓解了 Naive RAG 的部分问题。
  • 不足:流程仍相对固定,适配不同任务 / 场景的灵活性有限。
(3)Modular RAG(模块化 RAG)

  • 核心特点:将 RAG 拆解为独立模块(如 Search、Routing、Memory、Rewrite 等),并支持模块的灵活组合 / 替换,是更灵活的 “组件化架构”。
    • 新模块:新增 Search(跨数据源搜索)、Memory(LLM 记忆引导检索)、Routing(多数据源路由)等模块,扩展功能边界;
    • 新模式:支持模块的自定义编排(如 Rewrite-Retrieve-Read、Iter-RETGEN 等流程),可适配不同任务(知识密集型、多轮对话等)。
  • 优势
    • 适配性强:能通过模块重组解决特定场景问题;
    • 扩展性高:可整合微调、强化学习等技术,或新增模块拓展能力;
    • 协同性好:模块间可动态交互(如一个模块的输出增强另一个模块)。

4.对RAG的评价

RAG就像给模型提供一本定制信息检索的教材,非常适合特定查询。另一方面,FT就像学生随着时间内化知识,更适合模仿特定的结构、风格或格式。FT可以通过增强基础模型的知识、调整输出和教授复杂指令来提升模型的性能和效率。但它不擅长整合新知识或快速迭代新用例。RAG和FT并不互斥;它们是互补的,结合使用可能带来最佳效果。

对于RAG的质量评分评估:

包括上下文相关性、答案忠实性和答案相关性。这些质量评分从不同角度评估RAG模型在信息检索和生成过程中的效率。

上下文相关性:评估检索上下文的精确性和具体性,确保相关性并最小化与多余内容相关的处理成本。

答案忠实性:确保生成的答案忠实于检索到的上下文,保持一致性并避免矛盾。

答案相关性:要求生成的答案与提出的问题直接相关,有效回应核心问题。

5.Llamaindex的cheet sheet

Llamaindex针对这篇综述整理了一个cheet sheet(一张速查表和一些构建高级RAG的配方)。

核心观点

构建成功的RAG系统,无论是基础版还是高级版,都围绕两个根本目标展开:

  1. 检索:必须找到与用户查询最相关的文档。

  2. 生成:必须能有效利用检索到的文档来生成充分回答。

基础RAG
  • 构成:包含三个核心组件——检索组件外部知识数据库生成组件(LLM)

  • 流程:从知识库中检索相关文档,将其与用户查询一并提供给LLM以生成最终响应。

高级RAG

高级RAG旨在应用更复杂的技术来确保上述两个根本目标得以更好地实现。技术可分为三类:

1. 高级检索技术

目标:确保检索到最相关的文档。

  • 分块优化:根据文档内容调整块大小,过大或过小都会影响生成质量。可通过参数调优(如网格搜索)找到最佳分块策略。

  • 结构化知识库:为知识库引入更复杂的结构(如向量索引、知识图谱),以支持递归检索(用小片段检索,但将关联的大片段传递给生成器)或混合检索,从而更精准地处理复杂查询。

  • 其他技术:微调嵌入模型、查询转换(如HyDE)等,以提升检索的准确性。

2. 高级生成技术

目标:确保LLM能高效、准确地利用检索到的文档。

  • 信息压缩:在将文档传递给LLM前,过滤掉无关信息(噪声),防止上下文过长或信息干扰导致响应质量下降。

  • 结果重排序:针对LLM可能更关注提示开头和结尾的“注意力迷失”现象,对检索到的文档进行重新排序,将最相关的内容放在最有利于LLM注意的位置。

3. 检索与生成协同增强技术

目标:通过让检索和生成过程更紧密地互动,同时提升两者的效果。

  • 生成器增强检索:让LLM在检索前主动参与,根据原始查询生成更精确的“检索指令”或问题,从而引导检索组件找到更相关的信息。

  • 迭代检索生成器:进行多轮“检索-生成-评估”的循环,直到生成结果达到满意标准或达到最大循环次数。这对于需要多步推理的复杂问题特别有效。

RAG的评估

评估对构建可靠的RAG系统至关重要。综述中指出了七个衡量方面(如答案相关性、上下文相关性、忠实度等)。LlamaIndex提供了相应的评估工具和抽象,帮助开发者系统性地评估其RAG系统在很大程度上满足了核心成功要求。

6.总结

这篇综述及LlamaIndex的实践指南提供了一个清晰的心理模型:构建高级RAG系统就是围绕“精准检索”和“有效生成”这两个核心,有针对性地选择和实施一系列先进技术(包括独立优化任一环节或协同优化两者),并通过系统的评估来持续改进。

二、RAG工作流程

2025年5月一篇关于RAG模型综述(检索增强生成:架构、增强与稳健性前沿的全面综述)是这么介绍RAG的工作流程的:用户查询由检索器处理,检索器可能会在从外部知识源(如数据库、API或文档存储)检索文档前进行查询扩展。检索到的文档会按相关性重新排序,Top-K 作为事实上下文传递给生成器。生成器综合响应,条件是查询和检索内容。可选的后处理步骤(如排名、重写或事实核查)可以进一步优化输出,提升大型语言模型(LLM)中的事实一致性、实时适应性和整体响应质量。

从整体架构来看,RAG系统主要由三个模块构成:

  1. 查询编码器(Query Encoder):负责将输入 x 编码为查询表示 q,用于检索相关文档。该模块可以是基于神经网络的编码器,也可以是基于规则的模板方法。

  2. 检索器(Retriever):根据查询 q 从语料库 𝒞 中检索出一个排序的文档列表 d₁, d₂, …, dₖ。检索器可分为稀疏型(如 BM25(现出版 - 概率相关性框架:BM25及以后))、稠密型(如 DPR(开放域问答的密集通道检索——ACL选集))、混合型或生成型等不同实现方式。

  3. 生成器(Generator):依据输入 x 以及检索到的文档 d,生成最终的输出 y。该部分通常基于预训练的 Transformer 模型实现,例如 T5(1910.10683)、BART(BART:自然语言生成、翻译和理解的序列间去噪预训练——ACL选集) 等。

三、拆解RAG工作流

拆解RAG七步工作流:从知识准备到智能生成的全流程。我是主要参考在Daily-Dose-of-Data-Science的这篇博客 (RAG系统的基础)。

这张图展示了从“原始知识”到“最终答案”的七个关键步骤。

这是典型RAG架构图。

1:知识分块(Chunking)——将海量知识拆分为“可检索的小单元”


我们使用的外部知识(如PDF报告、Word文档、企业数据库内容)通常是大段文本,直接处理容易导致语义混乱、检索精度低。因此,第一步需要进行知识分块,即将长文本切割成语义完整的小片段。

关键原则是:既要保证每个片段能独立表达完整含义,又要适应后续嵌入模型的输入长度限制。例如,表格应完整保留、不可拆分;段落应按主题边界切割,避免将“问题”与“解决方案”分离。合理的分块是后续精准检索的基础。

给我们新手的提示:常见分块策略有5种,需根据场景选择。下图展示了不同策略的适用情况:

 (1)固定大小分块

  • 核心思想:设定一个固定的、重叠的字符或词元数量(如500个字符),像“滑动窗口”一样对文档进行机械切割。

  • 工作原理

    1. 选择一个固定的块大小和块间重叠量。

    2. 从文本开头开始,每到达预设大小就切割一次。

    3. 下一个块的起始点会与前一个块有部分重叠,以保持上下文连贯。

  • 优缺点

    • 优点:简单、高效、可预测。

    • 缺点:可能生硬地切断完整的句子或语义单元,导致块内的语义不完整。

  • 适用场景:对处理速度要求高、文档结构相对简单或作为其他复杂策略的基线方法。

(2)语义分块

  • 核心思想:根据句子的语义相似性进行动态分块,确保每个块在语义上是连贯和独立的。

输出可能呈现如下:

与固定大小的块不同,这保持了语言的自然流畅,并保留了完整的思想。由于每个块更丰富,它提高了检索准确性,进而产生更连贯且相关的LLM响应。

  • 工作原理

    1. 将文档分割成最小的语义单元(通常是句子)。

    2. 计算相邻句子间的嵌入向量余弦相似度。

    3. 当相似度突然出现显著下降时,表明主题或语义发生了转换,便在此处进行分块。

  • 优缺点

    • 优点:能产出语义边界清晰的块,极大提升后续检索的相关性。

    • 缺点:计算成本较高,需要依赖嵌入模型,且相似度阈值需要调整。

  • 适用场景:追求最高检索精度的场景,如法律文件、学术论文等语义密集的文档。

(3)递归分块

  • 核心思想:采用“分而治之”的策略,利用文本的自然分隔符(如换行、句号、分号等)递归地进行分割,直到块的大小符合预设限制。

输出可能呈现如下:

如上所示:

  • 首先,我们定义两个区块(紫色的两段)。

  • 接下来,第一段进一步细分为更小的部分。

与固定大小的块不同,这种方法还保持了语言的自然流畅,并保留了完整的思想。然而,在实现和计算复杂度方面存在一些额外的开销。

  • 工作原理

    1. 首先使用较大的分隔符(如“\n”)将文档分割。

    2. 如果分割后的块仍然过大,则使用下一级分隔符(如“.”)继续分割。

    3. 重复此过程,直到所有块的大小都满足要求。

  • 优缺点

    • 优点:在保持段落或句子完整性的同时控制大小,比固定分块更尊重文本结构。

    • 缺点:仍可能受限于分隔符,在语义边界上不如语义分块精准。

  • 适用场景:通用性强,尤其适合混合了段落、列表、标题等多种格式的文档。

(4)基于文档结构的分块

  • 核心思想:利用文档本身固有的层级结构(如标题、章节、子节)作为分块的天然边界。

输出可能呈现如下:

不过,这种方法假设文档结构清晰,但这可能并不成立。

  • 工作原理

    1. 解析文档的格式信息(如PDF的书签、HTML的标签、Markdown的#标题)。

    2. 将每个逻辑部分(如一个章节及其下属内容)划分为一个独立的块。

    3. 如果某个部分过大,可以结合递归分块进行二次分割。

  • 优缺点

    • 优点:分块逻辑与人类理解文档的方式完全一致,结构清晰,信息完整。

    • 缺点:严重依赖文档格式的规范性和可解析性。

  • 适用场景:具有明确、规范结构的文档,如技术手册、产品说明书、学术书籍(PDF/Markdown/HTML格式)。

(5)基于LLM的分块

  • 核心思想:将大语言模型作为“智能分块器”,指示其根据语义和主题自动划分出连贯的片段。

  • 工作原理

    1. 向LLM提供整个文档和详细的分块指令(如“请将以下文档按主要主题分割成若干连贯的段落”)。

    2. LLM理解文档内容后,直接生成语义完整、大小合理的文本块列表。

  • 优缺点

    • 优点:智能化程度最高,能产生最符合人类直觉和理解的高质量分块。

    • 缺点:成本最高(消耗大量Token),速度最慢,且结果可能存在一定的不确定性。

  • 适用场景:对分块质量要求极高且不计较成本的场景,或作为评估其他自动分块方法效果的“黄金标准”。

2:生成嵌入(Embedding)——将文字转化为“机器可理解的数字”


机器无法直接理解文字语义,因此需要将分块后的知识,通过预训练嵌入模型(如基于Transformer的双编码器)转换为高维向量(即一串数字)。该过程的核心是捕捉语义特征,使语义相近的内容(如“抗过拟合技术”与“正则化方法”)的向量也接近,从而让机器识别其关联性。

请注意:RAG使用的是上下文嵌入模型,而非早期的单词嵌入模型(如Word2Vec、GloVe)。上下文嵌入的优势在于动态适配——同一词汇在不同语境中会生成不同向量。例如,“苹果”在“吃苹果”和“苹果手机”中含义不同,其向量也会相应区分,从而实现更精准的语义表达。

3:向量存储(Vector Storage)——构建“知识记忆库”


生成的高维向量将与原始知识块及其元数据(如文档来源、页码、创建时间)一并存入向量数据库。向量数据库不仅负责存储,更关键的是支持近似最近邻索引(如HNSW索引),可实现毫秒级相似性搜索——相当于为海量知识建立了一个“快速检索的记忆库”。

给程序员的提示:向量数据库是RAG的核心组件,选型时需关注吞吐量、检索速度与兼容性(如是否支持多模态向量)。常见选择包括Pinecone、Milvus、Chroma等;我们新手可从轻量易部署的Chroma入手。

4:用户查询嵌入(Query Embedding)——将“问题”转化为“检索指令”


当用户提出问题时,系统会使用与处理知识块相同的嵌入模型,将查询也转换为高维向量(即查询向量)。这使得问题与知识块处于同一语义空间,机器可通过计算向量相似度找到最相关的知识。

核心原则:必须保持语义标准统一。若知识嵌入与查询嵌入使用不同模型,向量将无法比对,导致检索失效。因此,搭建RAG时必须确保两者使用同一模型。

5:语义检索(Semantic Retrieval)——从记忆库中“精准查找答案”


系统使用查询向量,通过近似最近邻算法在向量数据库中快速扫描,召回最相关的Top-K个知识块。为提高精度,实际应用中常结合关键词匹配(如BM25算法),兼顾语义相关性与精确术语匹配。

例如,用户询问“多模态支持”,即使知识块中未直接出现该词,但若包含“OCR提取图片文字”“PDF表格识别”等内容,语义检索仍能精准定位——这正是其相对于传统关键词搜索的优势。

6:重排序(Reranking)——为检索结果“排列优先级”


初步检索得到的Top-K个知识块可能存在“语义相似但主题偏离”的情况。例如,询问“RAGFlow的多模态支持”时,结果中可能混入“其他工具的OCR功能”。此时需通过重排序进行校准。

重排序使用交叉编码器,深度分析查询与每个知识块的交互关系,并为每个片段打出精确的相关性分数,将最契合的内容置前。这一步能有效过滤噪声,为后续生成提供更精准的依据。

7:增强生成(Augmented Generation)——融合知识,输出最终答案


最后,大模型接收两个输入:用户原始问题 + 重排序后的优质知识块。通过注意力机制融合信息,生成连贯、结构化的回答。例如,结合“OCR提取图像文本”“表格转Markdown”等知识,输出完整答复:“RAGFlow的多模态支持主要体现在两方面:一是通过OCR技术提取图片中的文字信息;二是将PDF/图片中的表格转为Markdown格式以保留结构,最终实现文本、图像、表格等多模态内容的统一语义处理。”

生成的最终响应。

下一步

其实最后我很想再加入我对GraphRAG传统RAG的理解以及GraphRAG的实战练习部分,感觉篇幅有点长,如果明天没有什么任务准备明天再接着写GraphRAG部分。这是我2026年第一篇,也就以一篇技术介绍类博客开头吧,希望自己可以快快学习更多有用的技术为未来打下基础,加油!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐