Advanced-RAG详解

Advanced RAG 详解

概述

RAG(Retrieval-Augmented Generation,检索增强生成) 是一种将外部知识检索与大语言模型生成能力相结合的技术架构。

Advanced RAG(高级 RAG) 是对基础 RAG(也称 Naive RAG)的系统性优化,通过在检索前、检索中、检索后引入多种优化技术,显著提升检索质量和生成准确性。

为什么需要 Advanced RAG?

Naive RAG 存在以下问题:

问题类型 具体表现
检索质量差 召回的文档与问题不相关
上下文丢失 分块切断了语义完整性
幻觉问题 模型生成与检索内容不符的答案
效率低下 检索大量无关内容浪费 Token

RAG 演进路线

1
2
3
4
5
6
7
┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│ Naive RAG │ ─→ │ Advanced RAG│ ─→ │ Modular RAG │
│ (基础版) │ │ (进阶版) │ │ (模块化版) │
└─────────────┘ └─────────────┘ └─────────────┘
↓ ↓ ↓
简单流程 优化流程 灵活组合
问题多 质量提升 高度定制

三代 RAG 对比

特性 Naive RAG Advanced RAG Modular RAG
检索方式 单一向量检索 混合检索 + 重排序 可插拔检索模块
查询处理 直接使用原始查询 查询改写/扩展 自适应查询路由
上下文处理 简单拼接 压缩/过滤/去重 动态上下文管理
索引策略 固定分块 多粒度索引 自定义索引管道

Advanced RAG 核心架构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
用户查询


┌───────────────────────────────────────────────────────┐
│ 预检索阶段 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │查询改写 │ │查询扩展 │ │查询路由 │ │ HyDE │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
└───────────────────────────────────────────────────────┘


┌───────────────────────────────────────────────────────┐
│ 检索阶段 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │混合检索 │ │多路召回 │ │ 重排序 │ │元数据过滤│ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
└───────────────────────────────────────────────────────┘


┌───────────────────────────────────────────────────────┐
│ 后检索阶段 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │上下文压缩│ │ 去重过滤 │ │相关性校验│ │内容重组 │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
└───────────────────────────────────────────────────────┘


┌───────────────────────────────────────────────────────┐
│ 生成阶段 │
│ ┌─────────────────────────────────────────────────┐ │
│ │ LLM 根据优化后的上下文生成高质量答案 │ │
│ └─────────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────┘

预检索优化技术

预检索阶段的目标是优化用户查询,使其更适合检索系统。

1. 查询改写(Query Rewriting)

将用户的原始查询改写为更适合检索的形式。

为什么需要?

  • 用户查询可能口语化、模糊、有歧义
  • 检索系统需要精确、明确的查询

示例:

1
2
3
4
5
原始查询: "那个东西怎么用啊"
改写后: "请解释该工具的使用方法和操作步骤"

原始查询: "Python 爬虫报错了"
改写后: "Python 爬虫常见错误类型及解决方案"

实现方式:

  • 使用 LLM 进行查询改写
  • 基于规则的改写(去停用词、纠错等)

2. 查询扩展(Query Expansion)

将单个查询扩展为多个相关查询,增加召回覆盖面。

技术方案:

方法 说明 示例
同义词扩展 添加同义词 “机器学习” → “ML”、”Machine Learning”
上下位词扩展 添加上位/下位概念 “Python” → “编程语言”、”Python3”
多角度扩展 从不同角度生成查询 原因、方法、比较、应用

Multi-Query 示例:

1
2
3
4
5
6
7
原始: "如何优化 RAG 系统?"

扩展为:
1. "RAG 系统性能优化方法"
2. "提升 RAG 检索准确率的技术"
3. "RAG 系统常见问题及解决方案"
4. "Advanced RAG 最佳实践"

3. HyDE(Hypothetical Document Embeddings)

核心思想:先让 LLM 生成一个「假设性答案文档」,再用这个文档去检索。

为什么有效?

  • 问题和答案的语义空间不同
  • 用「答案」检索比用「问题」检索更精准

流程图:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
用户问题


┌─────────────────┐
LLM 生成假设答案 │
└─────────────────┘


┌─────────────────┐
│ 对假设答案做嵌入 │
└─────────────────┘


┌─────────────────┐
│ 用嵌入向量检索 │
└─────────────────┘


检索结果

示例:

1
2
3
4
5
6
7
8
问题: "什么是向量数据库?"

假设答案(LLM 生成):
"向量数据库是一种专门用于存储和检索高维向量数据的数据库系统。
它支持相似性搜索,常用于推荐系统、图像搜索、语义搜索等场景。
常见的向量数据库包括 Milvus、Pinecone、Weaviate 等。"

→ 用这段文本的嵌入向量去检索,比直接用问题检索效果更好

4. 查询路由(Query Routing)

根据查询类型,将其路由到最合适的检索源或处理流程。

1
2
3
4
5
6
7
8
9
10
11
12
                 用户查询


┌─────────────┐
│ 路由判断器 │
└─────────────┘

┌───────────────┼───────────────┐
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ 向量库 │ │ 知识图谱 │ │ SQL数据库│
└─────────┘ └─────────┘ └─────────┘

路由策略:

  • 基于关键词:包含特定关键词走特定通道
  • 基于 LLM 分类:让 LLM 判断查询类型
  • 基于嵌入相似度:与预设类别嵌入比较

检索优化技术

1. 混合检索(Hybrid Search)

结合关键词检索向量检索的优势。

检索方式 优势 劣势
关键词检索 (BM25) 精确匹配、可解释 无法理解语义
向量检索 (Embedding) 语义理解、模糊匹配 可能丢失关键词
混合检索 兼顾精确与语义 需要融合策略

融合策略示例(RRF - Reciprocal Rank Fusion):

1
2
3
4
5
RRF_score = Σ 1 / (k + rank_i)

其中:
- k 为常数(通常为 60)
- rank_i 为文档在第 i 个检索结果中的排名

2. 重排序(Reranking)

对初步检索结果进行二次排序,提升相关性。

1
2
3
4
5
6
7
8
9
10
检索结果(Top 100


┌─────────────────┐
Reranker 模型 │
(Cross-Encoder)
└─────────────────┘


重排序结果(Top 10

常用 Reranker 模型:

  • Cohere Rerank
  • BGE Reranker
  • Jina Reranker
  • Cross-Encoder 模型

Bi-Encoder vs Cross-Encoder:

1
2
3
4
5
6
7
8
Bi-Encoder(用于初检索,快但不够精确):
Query → [Encoder] → 向量
Doc → [Encoder] → 向量
相似度 = cosine(Query向量, Doc向量)

Cross-Encoder(用于重排序,慢但精确):
[Query, Doc][Encoder] → 相关性分数
直接输出相关性,更准确

3. 多路召回(Multi-way Retrieval)

从多个维度同时检索,扩大召回范围。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
          用户查询

┌─────────┼─────────┐
▼ ▼ ▼
┌───────┐ ┌───────┐ ┌───────┐
│语义检索│ │关键词 │ │知识图谱│
└───────┘ └───────┘ └───────┘
│ │ │
└─────────┼─────────┘

┌─────────┐
│结果融合 │
└─────────┘


最终结果

索引优化技术

1. 分块策略优化

常见分块方法:

方法 说明 适用场景
固定大小分块 按字符/Token 数切分 通用场景
语义分块 按语义边界切分 文章、报告
递归分块 按标题层级递归切分 结构化文档
句子窗口 检索句子 + 返回周围窗口 精确定位

句子窗口(Sentence Window)示例:

1
2
3
4
5
6
7
原始文档:
"句子1。句子2。句子3。句子4。句子5。"

索引单位: 句子3
返回内容: 句子2 + 句子3 + 句子4(窗口大小=1)

优势: 索引粒度细,返回上下文完整

2. 层次化索引(Hierarchical Indexing)

1
2
3
4
5
6
7
8
9
10
11
12
13
                  ┌─────────────┐
│ 文档摘要 │ ← 粗粒度检索
└─────────────┘

┌───────────────┼───────────────┐
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ 章节摘要 │ │ 章节摘要 │ │ 章节摘要 │ ← 中粒度
└─────────┘ └─────────┘ └─────────┘

┌─────┼─────┐
▼ ▼ ▼
[段落] [段落] [段落] ← 细粒度检索

检索流程:

  1. 先用摘要快速定位相关文档
  2. 再深入检索具体段落

3. 父子文档索引(Parent-Child Indexing)

1
2
3
4
5
6
7
父文档(用于返回,包含完整上下文)
├── 子块1(用于检索,精确匹配)
├── 子块2
└── 子块3

检索时: 匹配子块
返回时: 返回父文档

优势:

  • 检索精确(小块匹配度高)
  • 上下文完整(返回大块内容)

后检索优化技术

1. 上下文压缩(Context Compression)

移除检索结果中与问题无关的内容,节省 Token。

1
2
3
4
5
6
7
8
9
原始检索结果(1000 Token):
"本文介绍了机器学习的基础知识...(大量背景信息)...
其中,向量数据库是...(相关内容)...
参考文献:..."

压缩后(200 Token):
"向量数据库是一种专门存储高维向量的数据库..."

压缩率: 80%

实现方式:

  • LLM 压缩:让 LLM 提取相关内容
  • LLMLingua:基于困惑度的压缩
  • Recomp:抽取式/生成式压缩

2. 去重与过滤

  • 语义去重:合并语义相似的检索结果
  • 相关性过滤:移除相关性低于阈值的结果
  • 元数据过滤:按时间、来源等条件过滤

3. 上下文重组

将检索结果按逻辑顺序重组,提升生成质量。

1
2
3
4
5
6
7
8
9
检索顺序(按相关性):
1. 结论段落
2. 背景段落
3. 方法段落

重组顺序(按逻辑):
1. 背景段落
2. 方法段落
3. 结论段落

高级 RAG 范式

1. Self-RAG(自反思 RAG)

模型在生成过程中自我评估是否需要检索、检索结果是否相关、生成是否符合事实。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
┌─────────────────────────────────────────────────────┐
│ Self-RAG 流程 │
├─────────────────────────────────────────────────────┤
1. [Retrieve] 是否需要检索? │
│ → Yes/No │
│ │
2. [IsRel] 检索结果是否相关? │
│ → Relevant/Irrelevant │
│ │
3. [IsSup] 生成内容是否有检索支持? │
│ → Fully/Partially/No Support │
│ │
4. [IsUse] 生成内容是否有用? │
│ → 1-5 分 │
└─────────────────────────────────────────────────────┘

2. CRAG(Corrective RAG)

带有纠错机制的 RAG,能够识别并修正检索错误。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
用户查询


┌─────────────┐
│ 初次检索 │
└─────────────┘


┌─────────────┐
│ 相关性评估 │
└─────────────┘

├── 相关 → 直接使用

├── 模糊 → 知识精炼(提取关键信息)

└── 不相关 → 触发网络搜索


┌─────────────┐
│ 知识重获取 │
└─────────────┘

3. RAG Fusion

执行多个改写查询的检索,然后融合结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
原始查询


┌─────────────┐
│ 生成多个改写 │
└─────────────┘

├── 改写查询 1 → 检索结果 1
├── 改写查询 2 → 检索结果 2
├── 改写查询 3 → 检索结果 3
└── 改写查询 4 → 检索结果 4


┌─────────────┐
│ RRF 融合 │
└─────────────┘


最终结果

评估指标

检索质量评估

指标 说明 公式
Recall@K Top-K 中包含正确答案的比例 相关文档数 / 总相关文档数
Precision@K Top-K 中相关文档的比例 相关文档数 / K
MRR 第一个正确结果的排名倒数 1 / rank
NDCG 归一化折损累积增益 考虑位置的相关性评分

生成质量评估

指标 说明
Faithfulness 生成内容是否忠于检索结果
Answer Relevancy 答案与问题的相关性
Context Relevancy 上下文与问题的相关性
Hallucination Rate 幻觉比例

常用评估框架

  • RAGAS:专门用于 RAG 评估的框架
  • TruLens:LLM 应用评估工具
  • LangSmith:LangChain 的评估追踪工具

技术选型建议

场景对应方案

场景 推荐技术
精确匹配重要 混合检索(BM25 + Vector)
长文档理解 层次化索引 + 父子文档
多源数据 查询路由 + 多路召回
Token 受限 上下文压缩 + 重排序
高准确性要求 Self-RAG / CRAG

技术栈推荐

组件 推荐工具
向量数据库 Milvus、Qdrant、Weaviate、Chroma
Embedding 模型 BGE、GTE、Jina、OpenAI Embedding
Reranker BGE Reranker、Cohere Rerank
框架 LangChain、LlamaIndex、Haystack

总结

Advanced RAG 通过在 RAG 管道的各个阶段引入优化技术,系统性地提升了检索增强生成的效果:

  1. 预检索:查询改写、扩展、路由、HyDE
  2. 检索:混合检索、多路召回、重排序
  3. 索引:分块优化、层次索引、父子文档
  4. 后检索:上下文压缩、去重、重组
  5. 高级范式:Self-RAG、CRAG、RAG Fusion

选择合适的技术组合需要根据具体场景权衡准确性、延迟、成本三者的关系。


相关链接

  • RAG 基础
  • Agent 架构
  • Prompt Engineering

Advanced-RAG详解
https://zmmmmy.github.io/2026/01/13/Advanced-RAG详解/
作者
ZhiMy
发布于
2026年1月13日
许可协议