RAG 检索增强生成
RAG(Retrieval-Augmented Generation)是大模型落地最主流的范式:先「检索」再「生成」。它让模型回答时带上外部知识,从而缓解幻觉、突破训练数据截止、接入私有数据。本节图文讲清原理、模块、进阶与常见坑。
01为什么需要 RAG
纯 LLM 有三大硬伤,RAG 正是为它们而生:
① 知识截止
训练数据有截止日期,无法回答最新事件、内部文档、实时信息。
② 幻觉
模型对不知道的内容会「自信编造」,尤其涉及专有名词与事实。
③ 私有数据
企业知识库、个人笔记不在公开训练集里,必须外挂检索。
02RAG 是什么
RAG = 检索(Retrieval) + 增强(Augmented) + 生成(Generation)。核心思想:在回答用户问题前,先用检索器从知识库找到最相关的若干片段,把这些片段拼进提示词,让 LLM 基于「检索到的证据」生成答案。模型本身不存储这些知识,而是「现用现查」。
03基础 RAG 流程
RAG 分两条时间线:离线条(建库)与在线条(问答)。
离线条 · 知识入库
① 文档加载 → ② 切分(chunking)→ ③ 每段 Embedding 成向量 → ④ 写入向量库。
在线条 · 问答
① 问题 Embedding → ② 向量库召回 Top-K 片段 → ③ 重排(可选)→ ④ 拼进 Prompt → ⑤ LLM 生成。
04关键模块拆解
① 文档切分(Chunking)
切分粒度直接影响召回质量:太大检索不精准,太小丢失上下文。
固定长度切分
按 token/字符数硬切,简单但易切断语义。
递归/语义切分
按段落→句子→词递归,或按语义边界切,保留结构。
父子分块(Parent-Child)
检索用小块(精准),生成用其父块(完整上下文)。
重叠切分
相邻块留重叠区,避免边界信息丢失。
② Embedding 与向量检索
用嵌入模型把文本映射到向量空间,再用近似最近邻(ANN)检索相似片段。详见《Embedding 完全图解》与《向量数据库详解》。
③ 重排(Rerank)
向量召回的 Top-K 往往含噪声,再用一个交叉编码器重排模型对「问题-片段」对重新打分,挑出真正相关的片段,显著提召回精度。
④ 上下文拼接与引用
把重排后的片段拼成带编号的上下文,要求模型「只基于给定资料回答」并标注引用来源,提升可溯源与可控性。
05进阶 RAG
混合检索(Hybrid)
向量检索(语义)+ BM25/关键词(精确)融合,弥补纯向量对专有名词、ID 不敏感的问题。
查询改写 / 扩展
用 LLM 把口语问题改写成更利于检索的查询(如 HyDE:先生成假设答案再检索)。
元数据过滤
先按时间/来源/权限过滤,再向量检索,缩小范围、提升相关性与安全。
多路召回 / 融合
不同索引、不同切分策略并行召回后融合,覆盖更全面。
Self-RAG
让模型自己决定「是否需要检索、检索什么、是否采纳」,反思式增强。
Agentic RAG
用 Agent 多步检索、工具调用、迭代澄清,应对复杂多跳问题。
06RAG vs 微调 vs 长上下文
📚 RAG
外挂知识,不改模型权重。适合频繁变化、需溯源、私有数据场景。成本低、易更新。
🎯 微调(SFT/LoRA)
把能力/风格固化进权重。适合稳定任务、特定语气、结构化输出,但知识更新慢。
📏 长上下文
直接把长文档塞进窗口。省去检索但贵且易中间遗忘,常与 RAG 混合用。
07常见坑与评估
召回质量差
切分不当、Embedding 不匹配、纯向量漏掉关键词 → 用混合检索+重排缓解。
中间迷失(Lost in the Middle)
相关信息放上下文中部时模型易忽略 → 重排把关键片段放头尾、控制数量。
知识冲突
检索片段与模型先验矛盾 → 显式要求「仅依据资料、冲突时说明」。
延迟与成本
多路召回+重排增加耗时 → 按场景裁剪链路、用更小重排模型。
08面试速记卡
本质
现用现查:检索真实片段 → 拼进 Prompt → 基于证据生成。
两条线
离线入库(切分+Embedding+写库);在线问答(召回+重排+生成)。
三把钥匙
切分粒度、Embedding 质量、重排——决定召回上限。
进阶
混合检索、查询改写、元数据过滤、Self-RAG / Agentic RAG。