1. 什么是RAG?它解决了大模型的是什么问题?
1.1 什么是RAG?
RAG(Retrieval-Augmented Generation,检索增强生成)是一种在LLM推理时动态检索外部知识库,将检索到的相关内容注入Prompt再由LLM生成答案的架构范式。
1.2 RAG解决的核心问题
| 问题 | 说明 |
|---|---|
| 幻觉 | LLM在缺乏相关知识时,会“编造”看似合理但事实错误的内容。RAG通过提供可溯源的上下文将生成锚定在真实数据上。 |
| 知识时效性 | 模型训练数据有截止日期,无法回答训练后发生的事件。RAG检索实时/近实时数据解决。 |
| 私有数据访问 | 预训练语料不包含企业内部文档、业务数据。RAG在不微调模型的前提下让LLM访问私有数据 |
| 可追溯性 | LLM的生成是黑盒的。RAG可以附带引用来源,让用户验证答案的可靠性。 |
这里需要区分两个概念:
- 可解释性:为什么给出这个答案?(内部推理过程可解释原因)
- 可追溯性:答案的依据来源是什么?(能指出我引用了哪段资料)
RAG 主要解决的是可追溯性,它让"答案有出处"成为可能,从而在应用层面提升了可信度。注意:可追溯 不等于 正确。
1.3 RAG如何降低幻觉
1.3.1 幻觉产生根源
LLM幻觉的本质:模型在缺失相关知识时,不是拒绝回答而是基于概率模型生成看似合理但错误的内容。
对于RAG场景,幻觉来源三类:
| 来源 | 说明 |
|---|---|
| 检索噪声 | 检索到的片段与问题无关或相关性低,模型被“带偏” |
| 上下文冲突 | 多段资料互相矛盾,模型不知道怎么选 |
| 模型倾向 | 模型”过度自信“,即使有依据也倾向自由发挥 |
1.3.2 降低幻觉的措施
- 提升检索质量 (从源头减少噪声):
- 混合检索:向量检索 + BM25关键词检索,用RRF或加权融合,兼顾语义和精确匹配
- Rerank重排序:用交叉编码器(Cross-Encoder)对召回结果进行精排,把最相关的排最前面
- 相关性阈值过滤:设置相似度阈值,低于阈值的直接丢弃
- 查询改写:把模糊问题改写的更精确,提高召回质量
核心思想:给模型提供的资料越准确,模型越不容易被误导。
- Prompt设计约束(引导模型”只依据材料“):
- 明确指令:告诉模型”只能基于提供的上下文回答,不能使用外部知识“
- 无依据拒绝回答:指令中加入”如果上下文中没有相关信息,请明确说明无法回答,不要编造“
- 引用要求: 要求模型在回答中标注引用来源,强制它”对着材料说话“
示例 Prompt: 你是一个严谨的问答助手。请仅根据以下【上下文】回答问题。 如果上下文中没有足够信息,请直接回答"根据现有资料无法回答"。 回答时请标注引用来源编号 [1][2]。 - 上下文管理(减少冲突):
- 去重和压缩:去除重复片段,压缩冗余内容,避免上下文过长注意力被稀释
- 冲突检测:检测多段材料是否矛盾,矛盾时优先采用更高置信度/更新版的材料
- 控制上下文长度:只保留top-k最相关的内容,避免塞入过多无关内容
- 生成后校验(事后兜底):
- 忠实度评估(Faithfulness):用另一个模型/规则检查答案是否和检索片段一致,检测答案中有没有上下文相关的内容
- 引用一致性校验:检查答案引用的编号是否真的对应到相关文档,模型可能标了引用但内容对不上,必须做引用一致性校验
- 幻觉检测模型:训练专门的幻觉检测器,对生成结果进行打分,低分则触发重试或拒答
- 检索增强的进阶形态:
- Agentic RAG:让模型自主决定:要不要检索、检索什么、检索几次,避免一次检索不够或检索方向不对
- Graph RAG:通过实体关系图做多条推理,减少单点检索信息不多导致的幻觉
- Self RAG:模型在生成过程中自我反思,判断是否需要更多信息,动态决定是否补充检索
1.3.3 引用溯源实现
目标:让用户/审计者能从答案追溯到原始文档,行程完整证据链。
溯源是系统工程:不是加个引用标记就完事,涉及 ID 管理、解析、校验、渲染、审计全链路。注意 可追溯不等于正确,因为引用来源本身可能就是错误的,需要结合资料可信度评估。
实现方案:
- 方案1:片段级引用(最常用):
流程: 1.检索时给每个片段编号:[1] [2] [3] 2.Prompt中要求模型在引用处标注对应ID 3.生成后解析答案中的[n],映射回原始文档片段 4.前端渲染时,把[n]变成可点击的引用链接- 片段ID必须和检索结果一一对应
- 需要处理模型输出的引用标记(模型可能标错编号)
- 方案2:句子级引用:
- 用句子对齐技术,把答案中每个句子映射到最相似的检索片段
- 优点:引用更精准,用户可直接知道该句出自哪段
- 缺点:实现复杂,需要额外引入对其模型
- 方案3:元数据注入:
- 检索的片段携带元数据(文档标题、章节、URL、时间戳)
- 生成时要求模型在引用处带上这些元数据
- 前端直接展示来源信息
2. RAG和微调(Fine-tuning)的区别?各自适用什么场景?
RAG和微调的本质区别是:RAG是“外挂知识”,微调是“内化知识”。
| 维度 | RAG | Fine-tuning |
|---|---|---|
| 原理 | 推理时动态检索外部知识注入Prompt | 通过继续训练将知识写入模型参数 |
| 知识更新 | 只需更新知识库 | 需重新训练/微调 |
| 成本 | 低,检索基础设施 | 高,训练算力 |
| 可控性 | 高(可精确控制检索来源) | 低(知识“融入”参数,难以移除) |
| 可追溯性 | 高(可追溯来源) | 低(黑盒参数) |
| 适用数据量级 | 任意规模 | 需要足够标准数据(通常数千条高质量数据) |
| 外部知识依赖 | 强依赖检索质量 | 不依赖检索质量,但强依赖数据工程 |
适用场景:
- RAG更适合:
- 知识频繁更新:如新闻、政策、产品文档,数据库随时可改
- 需要可追溯/可解释:金融、医疗、法律等强监管场景,答案必须有出处
- 私有/领域数据:企业内部的文档、知识库,不想(或不能)用于训练
- 数据量大且分散:海量文档,无法全部塞进模型
- 对幻觉敏感:需要答案有据可查
- Fine-tuning更适合:
- 需要特定风格/格式:如让模型模仿特定写作风格、输出固定格式
- 需要领域术语/知识内化:如医疗、法律的专业术语,希望模型"张口就来"
- 需要特定行为模式:如让模型更严谨、更简洁、更符合某种角色
- 推理速度敏感:不希望有检索延迟
- 数据相对稳定:知识不会频繁变化
最佳实践:两者并非互斥,生产级系统常采用RAG + Fine-tuning组合。微调让模型更好地遵循RAG指令格式和引用规范,RAG负责提供最新知识。
3. RAG完整流程流程是什么?
RAG 的完整流程可分为离线阶段(索引构建)与在线阶段(检索增强生成)两部分,整体架构如下:
四阶段详解:
- 索引(Indexing):
- 文档解析:将PDF/HTML/Markdown转换为 纯文本
- 文档切分(Chunking):将长文档切分为合适大小的片段
- 向量化(Embedding):将文本片段转换为稠密向量
- 存储:向量入库(FAISS/Milvus/Qdrant/PGVector等)、索引构建(NHSW)
- 检索(Retrieval):
- Query向量化
- 相似度检索:余弦向量、内积、欧氏距离等
- 可选:混合检索(向量 + BM25)、查询改写、多路召回
- 增强(Augmentation):
- 重排序(Rerank):双塔算法、交叉编码(Cross-Encoder)
- 上下文拼接与格式化
- 窗口管理(截断/压缩)
- 生成(Generation):
- 将增强后的Prompt送入LLM
- 生成答案(通常要求附带引用)
4. RAG有哪些变体?Naive RAG、Advanced RAG、Modular RAG的区别?
RAG的演进路线经历了三代:
| 变体 | 时间 | 核心特征 | 典型技术 |
|---|---|---|---|
| Naive RAG | 2023年初 | 最简流程:索引->检索->生成,无优化 | 固定大小切分、单次向量检索、直接拼接 |
| Advanced RAG | 2023年中-2024 | 在检索前后增加优化环节 | 混合检索、Rerank、查询改写、语义切分 |
| Modular RAG | 2024-2025 | 模块化可组合架构,按需插拔 | 自适应检索、多路召回融合 |
RAG 的演进本质是从"固定流水线"走向"自适应、可编排":
- Naive RAG:一条固定流水线,检索质量决定上限
- Advanced RAG:在流水线各环节做优化,提升检索质量
- Modular RAG:拆成模块自由组合,引入路由、记忆、自适应检索
第一代:Naive RAG(朴素RAG)
最基础的形态,也是大多数人对RAG的第一印象
流程:文档 -> 切分 -> 向量化 -> 存入向量库 用户问题 -> 向量化 -> 检索 top-k -> 拼进 Prompt -> LLM生成特点:
- 结构简单,易于实现
- 检索、生成是串行、一次性的
- 问题:检索质量差时,效果直接崩;无法处理多跳推理
第二代:Advanced RAG(进阶RAG)
在Naive RAG的检索前、检索中、检索后三个环节做优化。
| 环节 | 优化手段 |
|---|---|
| 检索前(Pre-Retrieval) | 查询改写、查询扩展、HyDE(假设性文档嵌入)、意图识别 |
| 检索中(Retrieval) | 混合检索(向量+BM25)、Rerank重排序、元数据过滤、父子块切分 |
| 检索后(Post-Retrieval) | 上下文压缩、去重、冲突检测、相关性阈值检测 |
特点:
- 检索质量显著提升
- 目前生产环境的主流形态
第三代:Modular RAG(模块化RAG)
把 RAG 拆成可自由组合的独立模块,按需编排,甚至引入循环和路由。
核心思想:不再是一条固定流水线,而是像搭积木一样组合模块。
常见模块:
- 路由(Routing):根据问题类型,路由到不同的检索策略或数据源
- 查询规划(Query Planning):把复杂问题拆成多个子查询
- 记忆(Memory):引入对话历史,支持多轮检索
- 融合(Fusion):多路检索结果融合
- 自适应检索(Adaptive Retrieval):模型自主决定"要不要检索、检索几次"
关键变体:
- Agentic RAG:在 Modular RAG 基础上引入 Agent 编排,让模型自主决策"何时检索、检索什么、检索几次",支持多轮工具调用与反思,适合复杂任务分解。
- Graph RAG:将文档构建为实体-关系图,检索时沿图结构做多跳推理,能回答跨文档的聚合性问题,弥补单点检索信息不足的短板。
- Speculative RAG:先由轻量模型生成草稿答案,再用检索片段验证并修正,兼顾速度与准确率。
- Self-RAG:模型在生成过程中自我反思,动态决定是否需要补充检索,并对检索结果与自身输出进行打分取舍。
这些变体并非互相替代,而是针对不同场景的组合式演进:生产实践中常以 Modular RAG 为骨架,按需叠加 Agentic、Graph 或 Self-RAG 能力,形成"可编排、自适应"的完整方案。
RAG的基础概念到此结束,期待后续的检索优化。