RAG基础
3570 字约 12 分钟
domain/aiai/rag
2026-07-24
RAG(检索增强生成)是让 LLM 从"闭卷考试"变成"开卷考试"的核心技术,结合检索系统和生成模型,让 LLM 能够基于外部知识回答问题。
一句话解释
RAG 在推理时动态从外部知识库检索最相关的信息,注入 LLM 上下文,让模型基于实时、准确的外部知识生成回答,而非仅依赖训练时记忆的参数。
核心问题
LLM 为什么需要 RAG?三个根本问题:
- 知识截止:模型训练完成后知识停止更新,无法回答训练截止日期之后的问题
- 幻觉问题:模型在缺乏外部约束时容易编造事实,产生看似合理但错误的回答
- 可解释性:纯模型输出的答案无法追溯来源,在金融、医疗、法律等合规场景不可接受
基础概念
RAG(Retrieval-Augmented Generation):通过检索外部知识增强 LLM 生成能力的技术。核心逻辑是将信息检索与文本生成解耦又融合。
Chunk:文档被切分后的片段,是检索和向量化的基本单位。
Embedding:将文本转换为高维向量,用于语义相似度计算。
向量数据库(Vector Database):存储和高效检索向量的专用数据库,支持近似最近邻(ANN)搜索。
Retrieval:根据用户查询从知识库中检索相关文档的过程。
Generation:LLM 基于检索到的文档上下文生成回答。
Context:检索到的相关文档内容,作为 LLM 的参考上下文。
完整架构图
核心流程详解
离线阶段:索引构建
1. 文档加载与解析
支持多源数据:TXT、Markdown、PDF、Word、Excel、PPT、图片、网页等。数据清洗包括去除特殊字符、HTML 标签、冗余信息,统一编码。
2. 文档切分(Chunking)
将长文档切分为适当大小的片段。四种策略递进:
- 字符分块:固定长度切割,简单但破坏语义
- 段落分块:按自然段落切分,保持基本语义单元
- 语义分块:基于语义边界智能切分,保证每个块的语义完整性
- 智能分块:递归分块 + 滑动窗口 + 重叠分块,保证上下文连贯性
详细见 文档切分策略。
3. 向量化(Embedding)
主流通用 Embedding 模型:
- BGE-M3(多语言,BAAI)
- text-embedding-3-small/large(OpenAI)
- GTE-large、E5-large-v2(开源)
4. 索引存储
三级索引策略:
- 父子文档索引:构建文档层次结构
- 分层索引(RAPTOR):按语义层次构建索引树
- 多表示索引:同一文档用不同 Embedding 模型表示
向量数据库选型:开源方案(Milvus、Qdrant、Chroma、FAISS)vs 云服务(Pinecone、ElasticSearch)。索引算法:HNSW(层次化小世界图,高效近似检索)、IVF(倒排索引)、PQ(乘积量化压缩)。
在线阶段:检索与生成
1. 检索前处理(Pre-Retrieval)
- 查询改写:多查询生成、退一步查询、查询澄清
- 查询分解:复杂问题拆解为多个子问题
- 查询扩展:HyDE(先用 LLM 生成假设性文档,对假设文档编码而非原始查询编码)
- 查询路由:逻辑路由(基于规则)、语义路由(动态选择最佳 Embedding 模型)
2. 检索(Retrieval)
三种嵌入方式:
- 密集嵌入(Dense):Transformer 类模型,捕捉语义相似性
- 稀疏嵌入(Sparse):TF-IDF、BM25,精确匹配关键词
- 混合嵌入(Hybrid):密集 + 稀疏结合,兼顾语义和关键词匹配
3. 检索后处理(Post-Retrieval)
- 重排序(Reranking):RRF、CrossEncoder、RankLLM
- 上下文压缩:相关性压缩、冗余度压缩
- CRAG(Corrective RAG):检索结果不满意时触发二次检索
4. 生成(Generation)
- 结构化 Prompt 模板(角色定义 + 任务说明 + 格式约束)
- 思维链(CoT)引导逐步推理
- LLM 选型:商用(GPT-4o、Claude 3.5 Sonnet)vs 开源(DeepSeek、Qwen2、Llama 3)
四种检索模式对比
Naive RAG(基础版)
架构:文档切分 → 向量化 → 单轮检索 → 直接生成,无优化环节。
优点:架构简单,开发成本低,硬件资源要求低,适合万级文档小规模知识库。
缺点:检索精度低,易遗漏语义相关内容;抗干扰差,检索到无关文档时生成器"照单全收";长文档处理弱。
适用场景:简单标准化问答——企业官网 FAQ、产品说明书查询。
Advanced RAG(进阶版)
架构:Naive RAG + Pre-Retrieval 优化 + Post-Retrieval 优化。流程为:Indexing → Pre-Retrieval → Retrieval → Post-Retrieval → Generation。
关键优化:稠密向量检索 + 重排序(CrossEncoder)+ 动态分块 + 查询改写。
优点:检索精度显著提升(语义检索 + 重排序可过滤 70% 以上无关信息);长文档处理更合理;支持十万级知识库。
缺点:架构复杂度增加(需维护多个模型);未解决多轮推理问题。
适用场景:中等复杂度知识查询——企业 helpdesk、在线教育课程问答。
Modular/Hybrid RAG(模块化)
架构:组件解耦 + 标准化接口,将系统拆分为多个独立模块(检索器、重排序器、分块器、生成器、知识库管理器、监控器),模块可独立升级替换。
编排方式:线性编排、条件编排、并行编排、循环编排。
优点:多源数据支持(文本、表格、图片、PDF);易于迭代(单模块升级不影响整体);高度可定制。
缺点:设计门槛高(需定义清晰的模块接口);模块协同增加延迟。
适用场景:多源数据整合或长期迭代系统——政务服务平台、科研文献管理系统。
Agentic RAG(智能体版)
架构:引入智能体(Agent),赋予系统自主规划、反思与迭代能力。核心流程:问题分析 → 检索规划 → 检索执行 → 反思 → 生成输出。
架构演进:
- Single-Agent:一个 Router Agent 动态处理信息检索
- Multi-Agent:多个专用 Agent 各自处理不同数据源
- Hierarchical Agentic RAG:多层 Agent,顶级 Agent 驱动子 Agent 并聚合结果
- Agentic Corrective RAG:5 个关键 Agent——Context Retrieval、Relevance Evaluation、Query Refinement、External Knowledge Retrieval、Response Synthesis
优点:支持多步推理(拆解-检索-整合);自主优化(反思机制减少人工干预);适应动态环境。
缺点:系统复杂度极高;响应速度慢(比 Advanced RAG 慢 2-5 倍[1]);成本高昂。
适用场景:高复杂度知识密集型任务——金融投研、法律咨询。
四大模式对比
| 维度 | Naive RAG | Advanced RAG | Modular RAG | Agentic RAG |
|---|---|---|---|---|
| 架构复杂度 | ★☆☆☆☆ | ★★★☆☆ | ★★★★☆ | ★★★★★ |
| 检索精度 | ★☆☆☆☆ | ★★★★☆ | ★★★★☆ | ★★★★★ |
| 复杂问题处理 | ★☆☆☆☆ | ★★★☆☆ | ★★★☆☆ | ★★★★★ |
| 知识库规模 | 万级 | 十万级 | 十万-百万级 | 百万级+ |
| 典型应用 | FAQ | Helpdesk | 多模态平台 | 投研/法律 |
RAG vs Fine-tuning 决策树
核心区别
RAG:在推理时动态从外部知识库检索相关信息,注入 LLM 上下文。知识更新即时生效。
Fine-tuning:在训练时调整模型参数,使其内化特定领域知识或行为模式。知识更新需要重新训练。
记忆法则:想让模型知道昨天的会议纪要 → 用 RAG;想让模型说话像个老北京 → 用微调。
决策维度对比
| 维度 | RAG | Fine-tuning |
|---|---|---|
| 知识更新 | 实时更新,知识库更新即生效 | 需重新训练,滞后 |
| 成本 | 低(Embedding API + 向量 DB) | 高(GPU 训练 + 数据标注) |
| 幻觉控制 | 较好(有外部来源约束) | 一般(知识内化后仍可能编造) |
| 可解释性 | 高(可追溯检索来源) | 低(黑盒参数) |
| 数据需求 | 无需标注数据 | 需高质量标注数据 |
| 风格控制 | 弱(依赖 Prompt) | 强(可学习特定风格) |
| 延迟 | 增加检索步骤(100-500ms[2]) | 无额外延迟 |
决策树
需要给模型注入新知识?
├── 知识频繁更新(天/周级别)→ 用 RAG
├── 知识相对稳定 → 继续判断
│ ├── 需要控制输出风格/格式 → 用 Fine-tuning
│ ├── 需要高可解释性/可追溯 → 用 RAG
│ ├── 预算有限/无 GPU → 用 RAG
│ ├── 有大量标注数据 → 用 Fine-tuning
│ └── 两者皆可 → 用 RAG(更灵活,先试)
└── 最佳实践:RAG + Fine-tuning 组合
├── Fine-tuning 控制风格/格式
└── RAG 提供最新知识2026 年共识:RAG 优先于 Fine-tuning。除非有明确风格控制需求,先用 RAG 解决问题。
主流 RAG 框架对比
| 维度 | LangChain | LlamaIndex | Haystack | DSPy |
|---|---|---|---|---|
| 定位 | 通用 LLM 应用框架 | RAG 专用利器 | 企业级 Pipeline 引擎 | 声明式编程,可优化 |
| 学习曲线 | 中等 | 低 | 高 | 低 |
| RAG 专注度 | 通用 | 极高 | 高 | 高(偏研究) |
| 扩展性 | 强 | 中 | 极强 | 中 |
| 社区活跃度 | 极高 (70k+ Stars[3]) | 高 (30k+ Stars[3:1]) | 中 (15k+ Stars[3:2]) | 低(新兴) |
选型建议:
- 初创团队快速迭代 → LangChain + LlamaIndex 混合
- 企业知识库 → LlamaIndex 或 Haystack
- 系统稳定性与可观测性优先 → Haystack
- AI 研究或自动优化实验 → DSPy
优势与局限
优势
- 知识新鲜度:知识库更新即时生效,无需重新训练模型
- 幻觉减少:外部知识约束生成内容,降低模型"编造"可能性(但无法完全消除——法律 RAG 工具幻觉率仍高达 17-33%[4])
- 成本优势:相比 Fine-tuning 需要 GPU 集群训练,RAG 仅需 Embedding API + 向量数据库,成本低 1-2 个数量级[5]
- 可解释性:每个答案可追溯到具体检索来源,用户可验证
- 灵活性:同一套 RAG 系统可随时切换知识库,无需为每个场景重新训练
局限
- 检索质量依赖:RAG 系统的上限由检索质量决定,垃圾文档导致垃圾检索结果
- 上下文窗口限制:检索结果过多挤占生成空间,过少丢失信息
- 模型可能"不听话":即使检索到正确信息,LLM 仍可能忽略检索结果,坚持自己"知道"的知识
- 延迟增加:相比纯对话,增加检索步骤(100-500ms[2:1]),Agentic RAG 多轮检索延迟 2-5 倍[1:1]
- 多步推理薄弱:Naive/Advanced RAG 依赖单轮检索,复杂推理需 Agentic RAG
- Chunk 策略敏感:分块大小对效果影响巨大,没有通用最优解
RAG 评估速览
RAG 系统需要在检索层和生成层分别评估,不能只看最终答案质量。
检索层指标
| 指标 | 定义 | 目标值参考 |
|---|---|---|
| Recall@k | 正确答案是否落在 top-k 检索结果中 | >85% @5 |
| MRR | 正确答案排名的倒数均值 | >0.7 |
| nDCG | 考虑相关性分级和排名的归一化折损累积增益 | >0.8 |
| Context Precision | 检索内容中真正相关的比例 | >70% |
生成层指标
| 指标 | 定义 | 说明 |
|---|---|---|
| Faithfulness(忠实度) | 答案是否忠实于检索到的上下文 | 杜绝幻觉的核心指标 |
| Answer Relevance | 答案是否直接回答了用户问题 | 避免答非所问 |
| Answer Correctness | 对比标准答案的准确度 | 需要标注数据 |
详细评估方法论见 Chunk设计 的"实验方法论"和 RAG评估与优化。
常见误区
- 忽视文档质量:垃圾文档导致垃圾检索结果
- 切分策略不当:过大或过小的 chunk 都影响效果
- 只用向量检索:忽略关键词检索的价值,顾名思义检索
- 不评估检索质量:只看最终回答,不检查检索结果 —— 检索质量差而生成质量好,往往是模型"脑补"了答案
- 忽视元数据:元数据可以大幅提升检索精度,但常被跳过
- 以为 RAG 能消除幻觉:RAG 降低幻觉但不能消除,仍需在生成端做约束
进阶方向
- Hybrid Search(混合检索)— 密集 + 稀疏嵌入结合
- Rerank重排序 — 检索后精排,提升 top-k 质量
- Query Rewrite查询改写 — HyDE、多查询生成、查询分解
- Graph RAG — 基于知识图谱的实体级推理
- RAG评估与优化 — 检索与生成的双维度评估体系
- Multi-query Retrieval — 多角度查询并行检索
- Self-RAG — 模型自评估生成质量,触发重新检索
- Agentic RAG — 自主规划、反思、迭代检索
推荐资料
- LangChain RAG Guide - https://docs.langchain.com/rag
- LlamaIndex Documentation - https://docs.llamaindex.ai/
- Pinecone RAG Guide - https://www.pinecone.io/learn/series/rag/
- Haystack RAG Tutorial - https://docs.haystack.deepset.ai/docs/rag
- Retrieval-Augmented Generation Paper - https://arxiv.org/abs/2005.11401
关联笔记
- 向量与Embedding
- 文档解析
- 文档切分策略
- Chunk设计
- Metadata设计
- 检索增强生成流程
- 向量数据库
- Keyword Search
- Hybrid Search
- Rerank重排序
- Query Rewrite查询改写
- Graph RAG
- RAG评估与优化
- LLM应用模式
- AI搜索