RAG
1. RAG 概述
1.1 什么是 RAG
RAG (Retrieval-Augmented Generation) 是一种设计模式,在 LLM 生成答案之前,实时从外部知识库检索相关文档/片段,并将其注入提示词中,让模型基于检索到的上下文生成回答。
名称本身描述了四步工作流:
|
步骤 |
说明 |
|---|---|
|
Retrieve |
从知识库中检索相关文档/片段 |
|
Augment |
将检索到的上下文注入提示词 |
|
Generate |
LLM 基于增强后的上下文生成答案 |
1.2 为什么需要 RAG
RAG 解决 LLM 三大核心缺陷:
|
问题 |
传统 LLM |
RAG 方案 |
|---|---|---|
|
幻觉 (Hallucination) |
编造不存在的事实 |
答案基于检索到的真实文档 |
|
知识过时 (Staleness) |
训练数据有截止日期 |
实时检索最新知识 |
|
领域知识缺乏 |
通用模型不懂专业领域 |
注入企业/行业专属文档 |
1.3 发展简史
|
阶段 |
时间 |
里程碑 |
|---|---|---|
|
起源 |
2020 |
Lewis et al. 提出 RAG 概念(Facebook AI Research) |
|
基础 RAG |
2020–2022 |
BM25 检索 + 预训练 LLM,单次检索 |
|
高级 RAG |
2023–2024 |
密集向量检索、重排序、混合搜索、多跳推理 |
|
图增强 RAG |
2024 |
GraphRAG (Microsoft)、LightRAG (港大) 引入知识图谱 |
|
智能体 RAG |
2024–2025 |
规划模块、工具使用、自校正循环、多智能体协作 |
2. 核心架构
2.1 经典 RAG 双流水线
┌──────────────────────────────────────────────────────────┐
│ A. 索引流水线(离线) │
│ │
│ 文档 → 分块(Chunking) → 嵌入(Embedding) → 向量库(Vector Store) │
└──────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────┐
│ B. 生成流水线(在线) │
│ │
│ 用户查询 → 检索(Retrieval) → 重排序(Re-rank) → LLM 生成 │
└──────────────────────────────────────────────────────────┘
2.2 全栈架构图
┌─────────────────────────────────────────────────────────────┐
│ 编排层 (Orchestration) │
│ LangChain / LlamaIndex / Semantic Kernel / LangGraph │
├─────────────────────────────────────────────────────────────┤
│ 检索 (Retrieval) │ 向量存储 │ 生成 (Generation) │
│ ─────────────── │ ──────── │ ────────────── │
│ • 密集向量 (Dense) │ • ChromaDB │ • GPT-4o │
│ • 稀疏检索 BM25 │ • FAISS │ • Claude 3.5/4 │
│ • 混合检索 (Hybrid) │ • Qdrant │ • Llama 3 │
│ • MMR 多样性 │ • Pinecone │ • Qwen3 │
│ • 多跳 (Multi-hop) │ • Azure AI │ • DeepSeek │
├─────────────────────────────────────────────────────────────┤
│ 评估 │ 监控 │ 安全护栏 │
│ RAGAS / LangSmith │ 追踪/可观测 │ 输入/输出过滤 │
└─────────────────────────────────────────────────────────────┘
3. 关键组件详解
3.1 分块策略 (Chunking)
分块是将长文档拆分为可检索片段的过程,是 RAG 系统性能的关键决定因素。
|
策略 |
原理 |
适用场景 |
|---|---|---|
|
固定大小分块 |
按 token/字符数切分(如 512 tokens) |
简单文档 |
|
递归分块 |
层级切分:段落 → 句子 → 词 |
结构化文档 |
|
语义分块 |
基于嵌入相似度聚合相关句子(阈值 ~0.7 cosine) |
保留跨块语义 |
|
文档感知分块 |
利用 PDF/DOCX 结构(标题、表格) |
复杂格式文档 |
块大小选择(2025 最新研究):
|
块大小 |
最佳场景 |
|---|---|
|
64–128 tokens |
事实型问答、实体级匹配 |
|
512–1024 tokens |
上下文理解、长文档检索 |
2025 年 6 月研究 "Chunk Twice, Embed Once" 评估了 25 种分块配置,发现递归 token 分块(R100-0)在 48 个嵌入模型上一致表现最优。
企业级实践:递归分块 + TF-IDF 加权嵌入可达 82.5% 精确率(vs 语义分块纯内容 73.3%)。
3.2 嵌入模型 (Embedding)
|
模型 |
特点 |
适用场景 |
|---|---|---|
|
|
OpenAI,性价比高 |
通用生产 |
|
|
OpenAI,精度最高 |
高质量需求 |
|
|
Sentence Transformers,通用强 |
本地部署 |
|
|
BAAI,中文友好 |
多语言场景 |
|
Nomic Embed v2 |
MoE 架构,同参数量级最优 |
单语 & 多语 |
|
E5 系列 (Intfloat) |
检索优化 |
高精度检索 |
关键发现:检索优化嵌入模型(Nomic、E5)显著优于领域专用模型(如 SciBERT);但 BM25 在精确术语匹配上仍有竞争力。
3.3 向量存储 (Vector Store)
|
存储 |
类型 |
场景 |
|---|---|---|
|
ChromaDB |
开源,本地/服务端 |
原型开发,中小规模 |
|
FAISS (Meta) |
内存,GPU 加速 |
高性能本地检索 |
|
Qdrant |
向量数据库 + 过滤 |
生产环境,混合搜索 |
|
Pinecone |
托管云向量数据库 |
Serverless,弹性扩展 |
|
Azure AI Search |
托管,多模态 |
微软企业生态 |
|
Weaviate |
开源,Hybrid + Generative |
需要内置生成能力 |
|
Milvus |
分布式向量数据库 |
十亿级向量检索 |
3.4 检索策略
|
策略 |
原理 |
|---|---|
|
密集检索 (Dense) |
嵌入向量余弦相似度 — 语义匹配 |
|
稀疏检索 (Sparse/BM25) |
关键词倒排索引 — 精确术语匹配 |
|
混合检索 (Hybrid) |
密集 + 稀疏组合,可调权重(如 0.6 密集 / 0.4 稀疏) |
|
MMR (最大边际相关性) |
平衡相关性与多样性,减少冗余 |
|
多跳检索 (Multi-hop) |
链式多次检索,用于复杂推理 |
3.5 重排序 (Re-Ranking)
检索后使用 Cross-Encoder 或 LLM 对结果重新排序,大幅提升精确率:
初检结果(Top K) → Cross-Encoder 重排序 → Top N(送入 LLM)
推荐模型:ms-marco-MiniLM-L-12-v2(MS MARCO 微调)
重排序是 ROI 最高的单项优化之一,在企业场景中持续提升 Precision@5 和 MRR。
4. RAG 演进路线
4.1 三代演进
|
代际 |
时间 |
特征 |
|---|---|---|
|
Naive RAG |
2020–2022 |
单次检索 + 直接生成,44% 事实准确率 |
|
Advanced RAG |
2023–2024 |
语义检索、重排序、混合搜索、多跳推理 |
|
Agentic RAG |
2024–2025 |
规划、工具调用、自校正、多智能体协同 |
4.2 演进全景图
Naive RAG (44% 准确率)
↓ 添加检索评估器
CRAG — 插件式纠正,检测检索质量并 fallback 到网络搜索
↓ 添加复杂度路由
Adaptive RAG — 按查询复杂度路由到不同策略
↓ 嵌入自反思能力
Self-RAG — 模型自主决定是否检索、检索结果是否相关、答案是否有据
↓ 编排层抽象
Agentic RAG — 完整 Agent 循环,动态编排检索/生成/工具调用
↓ 引入知识图谱
GraphRAG / LightRAG / KAG — 图结构增强全局推理
4.3 综合基准
2024 年综合 RAG 基准测试(arXiv:2406.04744)发现:
- SOTA RAG 系统 仅能正确回答 63% 的事实问题
- Naive RAG 仅 44%
- 从 Naive → Advanced 提升最大,Advanced → Agentic 边际提升递减但解决长尾困难案例
5. GraphRAG:图增强 RAG
5.1 概述
GraphRAG 是微软研究院 2024 年提出的 RAG 方法(论文: "From Local to Global: A Graph RAG Approach to Query-Focused Summarization", arXiv:2404.16130),通过构建知识图谱 + 社区检测 + 层次化摘要,解决传统 RAG 无法回答的全局性问题(如"数据集的主要主题是什么?")。
5.2 核心问题
|
传统 RAG 局限 |
原因 |
|---|---|
|
点连接问题 |
无法在多个文档间连接分散的提及 |
|
全局推理缺口 |
无法在语料库范围内综合主题 |
|
上下文碎片化 |
从孤立块重组答案时丢失关键上下文 |
5.3 六阶段索引流水线
源文档
↓ [分块]
文本块 (300–1200 tokens)
↓ [LLM 实体/关系提取 + Gleaning 多轮抽取]
实体 & 关系(结构化)
↓ [去重 + 生成丰富描述]
实体摘要(非简单三元组,含丰富上下文)
↓ [构建同质无向加权图]
知识图谱 (NetworkX/iGraph)
↓ [Leiden 社区检测算法]
层次化社区 (Level 0 → 1 → 2 ...)
↓ [LLM 社区摘要生成]
社区报告(每社区每层级一份,含标题、摘要、全文、引用)
↓ [持久化]
.parquet / .json / .gml
Gleaning 机制:LLM 首轮提取后,系统问"是否全部提取?",若回答"是",则提示"上一轮遗漏了大量实体",触发多轮提取——系统性地恢复遗漏信息。
5.4 两种搜索模式
|
模式 |
原理 |
适用场景 |
|---|---|---|
|
Local Search |
向量搜索定位相关实体 → 图遍历收集关联文本块、关系、社区报告 → 组合注入提示词 |
具体实体查询、关系导航 |
|
Global Search |
使用所有预计算社区摘要 → Map-Reduce 跨社区综合 → 全局答案 |
"主要主题?"、数据集级分析 |
5.5 动态社区选择(GraphRAG 2.0)
原始 GraphRAG 静态处理所有社区报告(含不相关的)。2.0 引入动态社区选择:
- 从知识图谱层次结构的根节点开始
- LLM 评估每个社区报告与查询的相关性
- 不相关 → 剪枝(连同其子社区)
- 相关 → 向下遍历子节点重复评估
- 仅将相关报告传递给 Map-Reduce
结果:77% Token 成本降低,可使用更小更便宜的 LLM 且不损失质量。
5.6 Leiden 算法
GraphRAG 选择 Leiden 算法 (2019) 做社区检测,而非更早的 Louvain:
- 保证社区内连接良好
- 在大图上高效生成层次化分区
- 图是同质无向加权图:节点 = 实体,边 = 关系,权重 = 检测到的关系数量
5.7 性能数据
|
指标 |
数据 |
|---|---|
|
全局问题准确率 |
3–4 倍提升(常从 0% → 90%+) |
|
Token 效率 |
减少 26–97% |
|
LinkedIn 客服 |
问题解决速度提升 28.6% |
|
data.world |
准确率提升 54.2 个百分点 |
|
动态选择后 |
全局查询成本仅为传统层次摘要的 2–3% |
5.8 总结:GraphRAG 核心创新
- 索引时摘要:查询时 LLM 读压缩的专题摘要而非全量原文
- Leiden 层次社区:多粒度主题结构
- 丰富实体描述:超越简单三元组,捕捉丰富语义
- Gleaning:多轮抽取确保实体覆盖率
- 索引与查询分离:重计算一次完成,查询轻量实时
6. LightRAG:高效图 RAG
6.1 概述
LightRAG 是香港大学 2024 年 10 月开源的系统(论文: arXiv:2410.05779),通过知识图谱 + 双层检索 + 增量更新机制,在效率和准确性上显著超越 GraphRAG。
6.2 核心创新
|
创新 |
说明 |
|---|---|
|
图增强文本索引 |
用知识图谱替代扁平向量索引,保留实体间复杂语义关系 |
|
双层检索 |
低层:定位具体实体及邻居 → 精准细节;高层:匹配宏观主题 → 全局视野 |
|
增量更新算法 |
新数据直接追加到现有图,无需重建整个图谱 |
|
实体/关系去重 |
自动合并冗余节点和关系,压缩图谱规模 |
6.3 性能对比:LightRAG vs GraphRAG
|
指标 |
GraphRAG |
LightRAG |
优势 |
|---|---|---|---|
|
检索 Token |
~610,000 |
< 100 |
~99% 节省 |
|
增量更新成本 |
~13,990,000 tokens(重建社区报告) |
仅处理新增 |
~80% 降低 |
|
API 调用 |
数百次 |
仅 1 次 |
— |
|
Legal 数据集准确率 |
基线 |
↑ 54.30% |
— |
|
多样性 |
基线 |
↑ 67–76% |
— |
6.4 三种检索模式
|
模式 |
说明 |
|---|---|
|
Naive / Local |
向量相似度直接匹配,限于局部上下文 |
|
Global |
跨整个知识库的全局检索 |
|
Hybrid / DRIFT |
结合 Local + Global 优势 |
6.5 LightRAG 的三重压缩哲学
- 知识图谱 → 压缩原始文本
- 双层检索 → 压缩搜索空间
- 增量更新 → 压缩维护成本
6.6 图增强 RAG 方案对比
|
维度 |
GraphRAG (微软) |
LightRAG (港大) |
KAG (阿里蚂蚁) |
MedGraphRAG (牛津) |
|---|---|---|---|---|
|
检索方式 |
社区遍历 + Map-Reduce |
双层检索 (Low/High) |
逻辑符号引导混合推理 |
三层子图 + U 型检索 |
|
更新成本 |
需重建社区结构 |
增量更新 |
— |
实时更新 |
|
Token 消耗 |
高 (610×1000+) |
极低 (<100) |
中 |
中 |
|
适用场景 |
静态知识库 |
动态数据、快速响应 |
专业逻辑推理 |
医学、证据溯源 |
|
核心特色 |
Leiden 社区 + 层次摘要 |
去重 + 双层检索 + 增量 |
Schema 约束 + 逻辑推理 |
证据可追溯 |
6.7 选型建议
- 动态数据、资源受限 → LightRAG
- 静态知识库、需要层次化理解 → GraphRAG
- 专业逻辑推理 → KAG
- 医学/生物 → MedGraphRAG
7. Self-RAG / CRAG / Adaptive RAG
7.1 对比总览
|
技术 |
核心思想 |
检索触发 |
自校正 |
复杂度 |
|---|---|---|---|---|
|
Self-RAG |
LLM 自主决定检索并评估输出质量 |
按需(模型决定) |
✅ 全流程 |
高(需微调) |
|
CRAG |
评估检索文档质量,低质时 fallback 网络 |
始终先检索再纠正 |
✅ 仅检索后 |
中(评估器模块) |
|
Adaptive RAG |
按复杂度路由查询 |
分类器决定 |
❌ 无 |
中(训练分类器) |
|
Agentic RAG |
Agent 迭代决定策略,支持循环 |
Agent 驱动 |
✅ 迭代循环 |
中–高 |
7.2 Self-RAG(自反思 RAG)
论文: ICLR 2024 Oral
- LLM 微调引入反思 Token:
<Retrieve>(是否检索)、<IsREL>(段落是否相关)、<IsSUP>(段落是否支持)、<IsUSE>(输出是否有用) - 对简单问题避免无谓检索("写一篇论文"→ 直接 LLM)
- 仅 ~2% 的正确预测需要外部段落(基线 15–20%)
- 局限:需要微调 LLM
7.3 CRAG(纠正型 RAG)
论文: Yan et al., 2024
- 轻量级检索评估器将文档拆解为"知识条"评分:
- 正确 → 正常 RAG
- 错误 → 丢弃文档,fallback 网络搜索
- 模糊 → 同时使用本地 + 网络
- 插件式,无需微调
- 风险:网络搜索 fallback 引入 prompt injection 风险
- 适合:高风险领域(法律、医疗、合规)
7.4 Adaptive RAG
论文: NAACL 2024
- 小型查询分类器预测问题复杂度:
- 简单 → 不检索(直接 LLM)
- 中等 → 单步检索 + 生成
- 复杂 → 多步迭代检索
- 平衡成本与准确率
7.5 关系与堆叠
复杂度谱系:
Naive RAG → CRAG → Adaptive RAG → Self-RAG → Agentic RAG
(44%) (插件 (按复杂度 (模型 (完整 Agent
纠正) 路由) 自反思) 编排)
Agentic RAG 不是直接竞争者,而是可以融合前三者所有能力的编排范式。一个生产级 LangGraph Agent 可能同时使用 Adaptive RAG 路由 + CRAG 网络 fallback + Self-RAG 幻觉审查。
8. 评估体系(RAGAS)
8.1 RAGAS 概述
RAGAS (Retrieval Augmented Generation Assessment) 是 EACL 2024 发表的参考无关评估框架,无需人工标注即可评估 RAG 管道。
8.2 核心指标
|
指标 |
评估维度 |
评估关系 |
方法 |
|---|---|---|---|
|
Faithfulness (忠实度) |
生成 |
回答 ↔ 检索文档 |
LLM 将回答拆解为声明,逐一检查是否被上下文支持 |
|
Context Relevance (上下文相关性) |
检索 |
检索文档 ↔ 查询 |
LLM 生成合成问题 + 余弦相似度 |
|
Answer Relevance (回答相关性) |
生成 |
回答 ↔ 查询 |
LLM 生成合成问题 + 余弦相似度 |
|
Answer Correctness |
生成 |
回答 ↔ 标准答案 |
LLM as Judge |
|
Answer Similarity |
生成 |
与参考答案语义相似度 |
Cross-encoder 嵌入 |
8.3 评估工具生态
|
工具 |
特点 |
|---|---|
|
RAGAS |
参考无关,LLM-as-Judge,最广泛使用 |
|
ARES (NAACL 2024) |
微调轻量 LM 评判器 + 预测驱动推理 |
|
LangSmith |
LangChain 生态,端到端追踪 & 评估 |
|
TruLens |
TruEra RAG Triad(忠实度/相关性/基础性) |
|
DeepEval |
开源,单元测试风格 |
9. 生产最佳实践
9.1 优化优先级
- 从简单开始:合理分块(~512 tokens,10–15% 重叠)+ 混合搜索 → 最大收益(微软官方建议)
- 始终重排序:Cross-Encoder 重排序是 ROI 最高的单项优化
- 按数据选块大小:事实型 QA 用小块,上下文理解用大块
- 优先检索优化嵌入:Nomic、E5、all-mpnet-base-v2
- 元数据增强:NER 提取实体标签 + LLM 生成摘要 → 一致提升 Precision 和 Hit Rate
- 语义缓存:对重复查询缓存结果
9.2 性能优化
|
技术 |
效果 |
|---|---|
|
向量压缩(Product Quantization) |
768D → 64D,存储减少 92% |
|
HNSW 图索引 |
百万级文档 <50ms 检索 |
|
上下文压缩 |
2048 → 512 tokens,减少提示词长度 |
|
混合检索权重调优 |
密集/稀疏比例优化 |
|
查询改写 |
消歧、拼写纠正、缩写展开 |
9.3 安全与可信
- 引用可追溯:每项生成内容链接到源段落
- 护栏 (Guardrails):输入/输出过滤、PII 脱敏
- 拒绝回答:低置信度时说"我不知道"
- 红队测试:检索和生成的对抗性测试
9.4 部署模式
|
模式 |
技术栈 |
|---|---|
|
本地开发 |
Docker Compose: Qdrant + TGI + App |
|
生产 |
Kubernetes: 检索/重排/生成 独立微服务 |
|
Serverless |
Pinecone + OpenAI/Llama API |
|
微软生态 |
Azure AI Search + Azure OpenAI |
10. 框架与技术栈对比
10.1 编排框架
|
框架 |
特点 |
适用场景 |
|---|---|---|
|
LangChain |
最成熟,生态最大,文档丰富 |
通用 RAG,快速原型 |
|
LlamaIndex |
专注数据索引,查询引擎强大 |
复杂数据结构 RAG |
|
LangGraph |
LangChain 的 Agent 图编排 |
Agentic RAG,复杂工作流 |
|
Semantic Kernel (微软) |
.NET/Python,企业即用 |
微软生态集成 |
|
Dify |
低代码 RAG 平台 |
非技术用户 |
|
RAGFlow |
开源,深度文档理解 |
复杂文档格式 |
10.2 图 RAG 框架
|
框架 |
特点 |
|---|---|
|
Microsoft GraphRAG |
官方实现,功能完整,Token 消耗高 |
|
LightRAG (HKU) |
轻量高效,增量更新,成本极低 |
|
nano-GraphRAG |
~800 行代码,极简实现,适合学习 |
|
Fast-GraphRAG |
PageRank 图探索,Agent 驱动,大规模 |
|
LazyGraphRAG (微软 2024.11) |
索引成本仅原版 0.1%,即将开源 |
11. 未来趋势
11.1 当前研究热点
- 多模态 RAG:文本 + 图像 + 表格 + 视频的统一检索与生成
- RAG + Agent 深度融合:工具调用、长程规划、自我进化
- 端到端可微 RAG:检索器与生成器联合训练
- 个性化 RAG:结合用户画像和历史交互
- 隐私保护 RAG:联邦学习、差分隐私、本地部署
11.2 未解决问题
- 复杂推理能力仍有上限(SOTA 仅 63% 事实正确率)
- 检索质量评估尚无统一标准
- 大规模知识图谱的实时更新与维护
- 低资源语言(非英语)的支持
- 企业级场景的可解释性与合规性
11.3 推荐学习路径
1. 理解基础 RAG 架构 → 动手搭建 Naive RAG
2. 学习分块/Embedding/检索/重排序优化 → 升级到 Advanced RAG
3. 学习 GraphRAG 论文 + LightRAG 论文 → 图增强 RAG
4. 学习 Self-RAG / CRAG / Adaptive RAG → 理解各种纠正方案
5. 学习 LangGraph / Agentic RAG → 搭建完整 Agent 系统
6. 深入 RAGAS 评估体系 → 学会量化评估