简介:本文从定义、架构、检索与生成机制等角度,系统拆解RAG(检索增强生成)的底层原理。你将了解向量检索、混合召回、重排序、上下文注入与幻觉抑制等关键环节的工作方式,并掌握RAG在知识库问答、企业文档处理与智能体应用中的典型设计思路与注意事项。
RAG,即检索增强生成,是一种将“信息检索”与“文本生成”结合起来的复合型技术架构。它的核心思想是:在生成模型产生回答之前,先从外部知识库或文档集合中检索出与用户问题最相关的片段,再把这些片段作为上下文提供给生成模型,让模型基于“检索到的证据”来组织答案。
这一定义可以从三个视角来理解:
RAG之所以被广泛采用,是因为纯生成模型存在几个明显局限:知识有截止时间、无法访问私有数据、容易在不确定时产生幻觉。RAG通过引入外部证据,在相当程度上缓解了这些问题。
大语言模型通常在通用语料上训练,参数中编码的是训练时点的公开知识。但在真实业务场景中,很多问题涉及:
如果仅靠模型自身记忆,要么无法回答,要么可能编造出貌似合理但实际错误的内容。RAG的核心价值在于:
因此,RAG并不是对生成模型的替代,而是一种能力增强机制。它让模型从“闭卷考试”变成“开卷考试”,但“开卷”是否有效,取决于检索质量与上下文组织质量。
一个典型的RAG系统通常包含预处理、检索、生成三个阶段。每个阶段内部又有多个关键组件协同工作。
预处理阶段负责将原始文档转换为适合检索和生成使用的结构化形式。主要步骤包括:
文档解析
对于PDF、HTML、Word等不同格式,需要先抽取正文、标题、表格、图片文字等信息。扫描件还需要借助OCR进行文字补偿。解析质量直接决定后续检索的上限,解析错误会在后续阶段被不断放大。
分块策略
文档通常会被切分成较小的“块”,例如按段落、固定字符数或语义边界划分。分块需要平衡两个目标:块太大会引入噪声、降低检索精度;块太小则可能丢失上下文、割裂语义。常见做法包括:
向量编码
切分后的文本块需要被编码为向量,以便后续进行相似度检索。一般会采用预训练的语义编码模型将文本映射为高维稠密向量,例如768维或1024维。为了提升召回效果,也常同时保留稀疏编码信号,如基于词频的倒排索引表示。两种表示在召回层面可以形成互补:稠密向量擅长捕捉语义相近,稀疏表示擅长匹配精确词汇。
检索阶段的任务是从海量文档块中找出与用户问题相关的候选集合。核心挑战是:既要“找得全”,又要“找得准”,还要“找得快”。
混合检索
单一检索方式很难同时满足精确匹配与语义泛化。常见架构会同时使用:
两者召回的结果经过融合,可以提升整体召回率,并在响应速度与召回质量之间取得平衡。
近似最近邻检索
当文档量达到百万、千万级别时,精确计算所有向量距离不现实。常用近似最近邻算法构建索引,例如基于图的索引结构,在建索引时设置连接参数,在搜索时控制探索范围。参数选择会影响召回率与延迟:探索范围越大,召回越充分,但耗时越长。
重排序机制
初步检索通常返回Top 100左右的候选块,但这些块的排序并不足够精确。重排序阶段使用更强的交叉编码模型,对“问题—候选块”逐对计算相关性分数,再将最相关的前若干项送入生成阶段。重排序能有效解决初排中的语义漂移问题,是提升最终回答质量的关键环节。
生成阶段把用户问题与检索到的片段组合成提示词,交给生成模型产出最终回答。这个阶段看似简单,但上下文组织方式会显著影响回答质量。
上下文注入
若检索到的总文本较长,需要使用长上下文窗口或对片段进行截断、压缩、重排。常见思路是优先展示高相关片段,并在片段之间明确标注边界,避免模型混淆不同来源。
注意力融合
生成模型在处理提示词时,会对用户问题部分和检索内容部分分配不同的注意力权重。良好的提示结构能引导模型优先依据检索内容作答,而不是过度依赖自身参数记忆。
结构化提示
为了让模型稳定遵循“基于资料回答”的要求,通常会在提示词中设置明确边界标识,例如:
检索内容开始[片段1][片段2]检索内容结束请根据以上信息回答用户问题。如果信息不足,请明确说明“资料中未提供相关信息”。
这种结构化提示能降低模型自由发挥的空间,减少无依据的生成。
基础的RAG流水线在复杂场景下会暴露一些问题,例如检索不准、上下文过长、单轮检索无法满足多步推理等。由此衍生出多种增强架构。
在更复杂的任务中,RAG不再是单次检索,而是由智能体根据任务状态进行多步决策。例如:
这类架构将RAG从“一次性流水线”升级为“可循环、可决策的流程”,适合多源数据、复杂推理和工具调用的场景。
检索器通常采用双塔结构:一个编码器处理用户问题,另一个编码器处理文档块。两个编码器输出同维度向量后,通过内积或余弦相似度计算相关性。训练检索器时,负采样策略对效果影响很大。简单随机负样本容易让模型“偷懒”,困难负样本挖掘能让模型学会区分语义相近但不相关的内容。
在实际工程中,近似最近邻索引的构建参数需要在召回率与延迟之间权衡。量化压缩可以显著降低内存占用,但会带来一定精度损失。团队需要根据文档规模、查询延迟要求、硬件资源来选择合适的索引方案。
生成器选型需要考虑显存占用、上下文长度、推理成本与回答质量。大模型加轻量微调可以在特定任务上获得更稳定的格式输出,同时控制资源消耗。对于长上下文需求,可以采用位置编码插值等方式扩展窗口,但需要注意长距离依赖能力并不会因窗口扩大而自动线性提升。
生成侧的提示工程同样重要。除了结构化边界外,还可以使用“自检”机制:要求模型为关键事实标注来源文档ID,如果无法标注,则该事实需要被标注为“不确定”。这种机制可以显著降低幻觉内容在正式答案中的占比。
RAG适合以下类型场景:
RAG与微调
微调是改变模型参数,让模型学习新知识或新行为;RAG不改变模型参数,而是在推理时提供外部知识。二者可以结合使用:微调用于稳定输出格式与领域风格,RAG用于提供实时、可追溯的知识。
RAG与长上下文
长上下文是将所有资料直接塞入提示词,无需检索。但当文档量巨大时,长上下文成本高、注意力分散,且容易超出窗口限制。RAG通过检索筛选出真正相关的片段,是更具性价比的方案。二者也可以组合:检索后用长上下文窗口容纳更多相关片段。
向量检索与关键词检索
向量检索侧重语义相似,关键词检索侧重精确匹配。实际系统很少只用一种,混合检索加重排序是更稳健的选择。
RAG的底层原理可以概括为:将外部知识通过解析、分块、编码转化为可检索的索引;在用户提问时,通过混合召回与重排序找到最相关的证据片段;最后将证据与问题一起提供给生成模型,让模型在证据约束下组织答案。
这一架构的核心价值不在于某一种算法或模型,而在于它把“检索”和“生成”两个原本独立的能力用流水线方式结合起来,使生成结果具备更强的实时性、可追溯性与领域适配性。理解RAG的底层原理,关键就是理解“知识如何被索引、如何被找到、如何被使用”这三点。只有检索质量、上下文组织与生成控制三方面同时到位,RAG系统才能真正发挥其价值。