# RAG 学习笔记

> RAG 核心流程、查询与检索优化、索引与生成策略、系统评估和常见问题的整理，标注了各章节的学习优先级。
>
> 原文：https://blog-4cr.pages.dev/blog/rag-notes/ · 2026-08-26

## 📌 阅读优先级

> 星级直接写在正文主要章节标题中，用于表示第一次学习应投入的精力；低星级不代表内容无价值。

| 星级 | 分类 | 建议学习深度 |
|---|---|---|
| ★★★★★ | 重点掌握 | 理解原理，能运行、修改、组合并排查常见问题 |
| ★★★ | 补充掌握 | 能读懂并知道何时使用，项目需要时可快速落地 |
| ★ | 了解即可 | 建立概念边界，需要时查询，不必投入大量时间记忆 |

> 建议先完成所有五星章节，再补三星章节；一星章节可在遇到对应场景时查阅。

### ★★★★★ 重点掌握

1. **RAG完整流程理解（第1节）**
   - 应用场景：知识库问答、文档助手、智能客服、企业内部资料检索
   - 为什么重要：当答案依赖私有、动态或需要引用的数据时，RAG 是连接模型与外部知识的重要方案
   - 核心流程：数据获取→文档分块→向量化→存储→检索→生成
   - 必会概念：每个环节的作用、数据流转方式、常见问题定位

2. **文档分块策略（第1.2.2节）**
   - 应用场景：处理长文档（PDF、网页、Word）时必须分块，否则超过模型上下文长度
   - 为什么重要：分块策略直接影响检索质量，chunk太大找不准，太小丢上下文
   - 核心参数：
     - chunk_size：通常512-1024 tokens（取决于文档类型）
     - chunk_overlap：通常50-200 tokens（防止重要信息被切断）
   - 实战技巧：代码文档用语义分块（按函数边界），普通文章用固定大小+重叠

3. **向量检索原理（第1.3节）**
   - 应用场景：从数千上万篇文档中找到与用户问题最相关的几条
   - 为什么重要：检索质量决定生成质量，检索错了后面都白搭
   - 核心技能：
     - 相似度计算（余弦相似度最常用）
     - top_k参数选择（通常3-10，太多会稀释相关性）
     - 混合检索（向量检索+BM25关键词，提升鲁棒性）
     - 重排序（用Cross-Encoder模型精排top_k结果）

4. **Prompt工程：检索结果注入（第1.4.1节）**
   - 应用场景：把检索到的文档片段组装成模型能理解的上下文
   - 为什么重要：好的Prompt能让模型基于检索内容回答，差的Prompt会导致模型忽略检索结果
   - 核心技能：
     - 构建检索增强Prompt（参考资料+用户问题）
     - 引用标注（让模型标注信息来源）
     - 控制生成基于上下文（"仅根据以上资料回答"）
     - 处理检索为空的情况（拒答而非编造）

5. **评估指标（第1.3.4、1.4.2节）**
   - 应用场景：优化RAG系统、对比不同方案、监控生产质量
   - 为什么重要：没有量化指标就是盲目调参，不知道改进是否有效
   - 核心指标：
     - Recall召回率（相关文档找到了多少）
     - Precision准确率（检索结果中相关的占比）
     - MRR（第一个相关结果的位置）
     - Faithfulness（生成内容是否忠于检索结果）
     - Relevance（生成内容是否回答了问题）

6. **实战调优（第八节）**
   - 应用场景：RAG效果不好时的系统性排查和优化
   - 为什么重要：初版RAG系统通常效果不理想，必须会调优
   - 常见问题：
     - 检索不准：优化分块策略、换embedding模型、加混合检索
     - 生成幻觉：加强Prompt约束、检索结果质量过滤
     - 响应太慢：embedding缓存、检索结果缓存、top_k调小
     - 成本太高：换便宜模型、减少检索调用、优化Prompt长度

### ★★★ 补充掌握

1. **向量数据库选型（第1.2.4节）**
   - 实用价值：不同场景选不同数据库，选错了会遇到性能/功能瓶颈
   - 选型考量：
     - Milvus：分布式、高性能、适合大规模（百万级以上）
     - Qdrant：易用、支持过滤、适合中小规模+复杂条件
     - Chroma：轻量级、适合原型开发和本地测试
     - FAISS：仅索引库，需自己管理存储

2. **高级检索技术（第二节）**
   - 实用场景：基础RAG效果不够好时的提升方案
   - 核心技术：
     - 查询改写（Query Rewriting）：用户问题不清晰时重新表述
     - HyDE：先让模型生成假设答案，再用假设答案做检索
     - MultiQuery：把复杂问题拆成多个子问题分别检索
     - 父文档检索：检索时用小块，返回时给完整段落

3. **上下文窗口优化（第5.2节）**
   - 实用场景：检索到10条结果但模型上下文只能放5条
   - 关键技能：
     - Token预算控制（预留生成空间）
     - 相似度阈值过滤（低于阈值的不要）
     - 智能截断（保留最相关的，超长的截断）

4. **缓存与延迟优化（第8.4节）**
   - 实用价值：大幅降低成本和延迟
   - 三层缓存：
     - Embedding缓存（相同文档不重复向量化）
     - 检索结果缓存（相同问题不重复检索）
     - 生成结果缓存（完全相同的问题直接返回）

5. **监控与评测（第七节）**
   - 实用价值：生产环境持续优化、成本控制
   - 关键指标：检索命中率、平均延迟、Token消耗、用户满意度

### ★ 了解即可

1. **查询分解（第二节）** - 复杂问题才需要，简单问答不用
2. **RAPTOR 与 ColBERT（第四节）** - 基础检索不足且有明确评测收益时再引入
3. **查询分解与 RAG-Fusion（第二节）** - 复杂多意图问题需要时使用
4. **多模态RAG** - 图像/表格检索，生态还不成熟

---

## 一、RAG核心流程 ★★★★★

> 🔥 **学习优先级：重点掌握**
> **使用位置：** 完成数据处理、索引、检索、上下文组装和生成主链路；**学习要求：** 理解原理，能独立修改、组合使用并排查常见问题。

### 1.1 数据获取
从各种数据源获取原始文档数据。

**常见数据源：**
- 文本文档（PDF、Word、TXT、Markdown）
- 网页内容（HTML）
- 数据库记录
- API接口数据

---

### 1.2 索引构建（Indexing）

#### 1.2.1 文档预处理
```python
# 数据清洗
- 去除无效字符、特殊符号
- 统一编码格式（UTF-8）
- 提取纯文本内容
- 去重处理
```

#### 1.2.2 文档分块（Chunking）
将长文档切分成适合处理的小块。

**分块策略：**
- **固定大小分块**：按字符数或token数切分
- **语义分块**：按段落、句子边界切分
- **重叠分块**：块之间保留重叠部分（overlap）

**关键参数：**
- `chunk_size`：每块大小（通常512-1024 tokens）
- `chunk_overlap`：重叠大小（通常50-200 tokens）

```python
# 示例
chunk_size = 1000        # 每块1000字符
chunk_overlap = 200      # 重叠200字符
```

#### 1.2.3 向量化（Embedding）
将文本块转换为向量表示。

**常用模型：**
- OpenAI: `text-embedding-3-small/large`
- 开源: `bge-large-zh`、`m3e-base`
- 多语言: `multilingual-e5-large`

**向量维度：**
- 通常 768/1024/1536维
- 维度越高，表达能力越强，但计算成本越大

#### 1.2.4 存储（向量数据库）

**常用向量数据库：**
- **Milvus**：开源、分布式、高性能
- **Qdrant**：易用、支持过滤
- **Pinecone**：云服务、托管方案
- **Chroma**：轻量级、适合原型开发
- **Weaviate**：支持混合搜索
- **FAISS**：Meta开源、仅索引库

**存储内容：**
- 向量（embedding vector）
- 原始文本块（text chunk）
- 元数据（metadata）：来源、时间、标签等

---

### 1.3 检索（Retrieval）

#### 1.3.1 查询处理
- 查询文本向量化（使用与文档相同的embedding模型）
- 查询改写/扩展（Query Rewriting）
- 查询分解（Query Decomposition）

#### 1.3.2 向量检索
**相似度计算方法：**
- **余弦相似度**（Cosine Similarity）：最常用
- **欧氏距离**（Euclidean Distance）
- **点积**（Dot Product）

**检索参数：**
- `top_k`：返回最相似的k个结果（通常3-10）
- `similarity_threshold`：相似度阈值过滤

#### 1.3.3 检索策略

**单纯向量检索（Dense Retrieval）：**
仅使用向量相似度检索。

**混合检索（Hybrid Search）：**
结合向量检索 + 关键词检索（BM25）
```python
# 混合检索
final_score = α × vector_score + (1-α) × keyword_score
```

**重排序（Reranking）：**
使用更精细的模型对初步检索结果重新排序。
- **Cross-Encoder模型**：直接判断query和doc的相关性
- **常用模型**：`bge-reranker-large`、`cohere-rerank`

```python
# 检索流程
1. 向量检索：top_k=20
2. 重排序：取top_n=5 最相关结果
```

#### 1.3.4 检索效果评估指标

**Recall（召回率）：**
检索到的相关文档数 / 总相关文档数
- 衡量：有多少相关内容被找到了

**Precision（准确率/精确率）：**
检索到的相关文档数 / 检索到的总文档数
- 衡量：检索结果中有多少是真正相关的

**MRR（Mean Reciprocal Rank，平均倒数排名）：**
```
MRR = 1/n × Σ(1/rank_i)
```
- 衡量：第一个相关结果的排名位置

**NDCG（Normalized Discounted Cumulative Gain，归一化折损累计增益）：**
- 衡量：排序质量（考虑相关性程度和位置）
- 越靠前的相关文档权重越高

---

### 1.4 生成（Generation）

#### 1.4.1 提示词工程（Prompt Engineering）
构建包含检索结果的提示词。

**经典模板：**
```
你是一个问答助手。请根据以下参考资料回答用户问题。

【参考资料】
{retrieved_chunks}

【用户问题】
{user_query}

【回答要求】
- 仅根据参考资料回答
- 如果参考资料中没有相关信息，明确说明
- 回答要准确、简洁
```

#### 1.4.2 调用LLM生成
将构建好的prompt发送给大模型生成答案。

**常用模型：**
- GPT-4/GPT-3.5
- Claude
- 国产：文心一言、通义千问、ChatGLM

#### 1.4.3 答案后处理
- 去除冗余信息
- 格式化输出
- 添加引用来源
- 置信度标注

#### 1.4.4 生成效果评估

**置信度（Confidence）：**
模型对答案的确定程度。

**相关性/相似度（Relevance）：**
答案与问题的相关程度。

**流畅度（Coherence）：**
答案的语言表达质量。

**依赖度/可归因性（Groundedness）：**
答案是否基于检索到的参考资料，而非模型自身知识。
- 检查答案内容是否能在检索文档中找到依据

**引用（Citation）：**
答案是否标注了信息来源。

---

## 二、查询优化策略 ★★★

> 🧩 **学习优先级：补充掌握**
> **使用位置：** 基础检索不足时改善复杂、模糊或多意图查询；**学习要求：** 能读懂并知道何时使用，项目需要时可快速落地。

### 2.1 多查询策略（Multi-Query）

**原理：**
将用户原始查询扩展为多个相关查询，分别检索后合并结果。

**优点：**
- 简单易实现
- 提升召回率
- 速度较快

**实现方式：**
```python
# 原始查询
原始问题："RAG是什么？"

# 扩展为多个查询
查询1："RAG的定义是什么？"
查询2："什么是检索增强生成？"
查询3："RAG技术原理"

# 分别检索后合并
```

---

### 2.2 RAG-Fusion（多查询结果融合）

**原理：**
Multi-Query的加强版，增加RRF（Reciprocal Rank Fusion，倒数排名融合）对结果重排。

**优点：**
- 检索效果更好
- 融合多个查询的优势

**缺点：**
- 复杂度高
- 速度较慢

**RRF公式：**
```python
RRF_score(d) = Σ 1/(k + rank_i(d))
# k: 常数（通常60）
# rank_i(d): 文档d在第i个查询结果中的排名
```

---

### 2.3 问题分解策略（Decomposition）

**原理：**
将复杂问题拆解为多个子问题，逐个解决后合并答案。

**分解策略：**

**顺序分解（Sequential/依赖）：**
子问题之间有依赖关系，需按顺序执行。
```python
# 示例
原始问题："2023年哪家公司的AI产品最受欢迎，它的市场份额是多少？"

子问题1："2023年哪家公司的AI产品最受欢迎？"
→ 答案：OpenAI

子问题2："OpenAI在2023年的市场份额是多少？"
→ 使用子问题1的答案
```

**并行分解（Parallel/独立）：**
子问题相互独立，可同时执行。
```python
# 示例
原始问题："比较GPT-4和Claude的优缺点"

子问题1："GPT-4的优点和缺点是什么？"
子问题2："Claude的优点和缺点是什么？"
→ 并行检索，最后合并对比
```

---

### 2.4 Step-Back（回退策略）

**原理：**
将具体问题回退到更高层次的通用问题，先获取背景知识。

**适用场景：**
- 时间序列问题
- 多步推理问题
- 需要背景知识的复杂问题

**示例：**
```python
# 原始问题（具体）
"2024年3月OpenAI发布了什么新功能？"

# 回退问题（通用）
"OpenAI的产品发展历史和重要版本？"

# 流程
1. 先回答回退问题，获取背景知识
2. 再回答原始问题，结合背景给出答案
```

---

### 2.5 HyDE（假设性文档嵌入）

**原理：**
生成假设性答案，用假答案的embedding去检索，而非用问题embedding。

**核心假设：**
假答案与真实答案的相似度 > 问题与答案的相似度

**流程：**
```python
1. 输入用户问题
2. LLM生成假设性答案（可能不准确）
3. 用假答案的embedding进行向量检索
4. 检索到的真实文档作为上下文
5. 重新生成最终答案
```

**优点：**
- 提升检索准确性
- 适合复杂语义匹配

**缺点：**
- 需要额外LLM调用
- 成本和延迟增加

---

## 三、路由与查询构建策略 ★★★★★

> 🔥 **学习优先级：重点掌握**
> **使用位置：** 选择正确知识源并构建带过滤条件的检索请求；**学习要求：** 理解原理，能独立修改、组合使用并排查常见问题。

### 3.1 路由（Routing）

**定义：**
智能流量调度，根据查询类型将请求路由到不同的处理流程。

#### 3.1.1 逻辑路由（LLM as Classifier）

**原理：**
使用LLM作为分类器，判断查询类型并路由。

**示例：**

```python
# 查询类型分类
- 事实型问题 → 知识库RAG
- 计算型问题 → 调用计算工具
- 闲聊问题 → 直接对话模型
- 代码问题 → 代码知识库
```

#### 3.1.2 语义路由（Semantic Routing）

**原理：**
基于查询的语义相似度进行路由。

**实现：**
```python
# 预定义主题向量
topics = {
    "产品功能": embedding("产品相关问题"),
    "技术支持": embedding("技术故障问题"),
    "价格咨询": embedding("价格优惠问题")
}

# 计算查询与各主题的相似度
query_embedding = embedding(user_query)
similarity_scores = cosine_similarity(query_embedding, topics)

# 路由到最相似主题
```

**最佳实践：**
- **主题数量**：5-20个为佳（太少不够细分，太多overlap严重）
- **Fallback机制**：相似度都低时的兜底策略
- **A/B测试**：对比不同路由策略的效果

---

### 3.2 查询构建（Query Construction）

**定义：**
将自然语言查询转换为结构化查询语句。

#### 3.2.1 关系数据库查询（SQL）

**示例：**
```python
# 自然语言
"查询2023年销售额超过100万的客户"

# 转换为SQL
SELECT customer_name, SUM(sales) 
FROM orders 
WHERE year = 2023 
GROUP BY customer_name 
HAVING SUM(sales) > 1000000
```

#### 3.2.2 图数据库查询（Cypher）

**示例：**
```python
# 自然语言
"查找张三的所有二度好友"

# 转换为Cypher
MATCH (p:Person {name: '张三'})-[:FRIEND]->()-[:FRIEND]->(friend)
RETURN friend.name
```

#### 3.2.3 向量库 + 元数据过滤

**示例：**
```python
# 自然语言
"查找2024年发布的关于AI的文档"

# 转换为向量检索 + 元数据过滤
{
    "query_embedding": embedding("AI相关内容"),
    "filter": {
        "year": 2024,
        "category": "AI"
    },
    "top_k": 5
}
```

#### 3.2.4 错误处理

**重试机制：**
SQL/Cypher生成错误时重新生成。

**SQL验证：**
```python
# 检查SQL安全性
- 禁止DROP/DELETE等危险操作
- 限制查询范围（添加LIMIT）
- 参数化查询防注入
```

**安全检查：**
- 权限验证
- 敏感数据脱敏
- 查询超时限制

---

## 四、索引生成优化策略 ★★★

> 🧩 **学习优先级：补充掌握**
> **使用位置：** 在特定数据规模和文档结构下提升索引表达能力；**学习要求：** 能读懂并知道何时使用，项目需要时可快速落地。

**补：高级索引优化技术**

### 4.1 多表示索引（Multi-Representation Indexing）

**原理：**
为同一文档生成多个不同的表示形式。

**实现方式：**
- **原始文本 + 摘要**：同时索引全文和摘要
- **多粒度切分**：段落级 + 句子级
- **多模型embedding**：使用不同embedding模型

**优点：**
- 提升不同类型查询的召回率
- 增强检索鲁棒性

---

### 4.2 RAPTOR（递归抽象处理树状检索）

**原理：**
构建层次化的文档摘要树，支持不同粒度的检索。

**结构：**
```
层级0（叶子节点）: 原始文档块
层级1: 多个块的摘要
层级2: 多个摘要的摘要
...
根节点: 全文总结
```

**检索策略：**
- 简单问题：在叶子节点（细粒度）检索
- 概括性问题：在上层节点（粗粒度）检索

**优点：**
- 支持多层次理解
- 适合长文档和复杂查询

---

### 4.3 ColBERT（细粒度上下文检索）

**原理：**
Token级别的交互匹配，而非整个chunk的向量匹配。

**特点：**
- 每个token都有自己的向量
- 计算query每个token与document每个token的相似度
- 精确度更高，但计算成本大

**适用场景：**
- 需要精确匹配的场景
- 关键词敏感的检索

---

### 4.4 其他优化技术

**文档摘要索引：**
为长文档生成摘要，同时索引原文和摘要。

**元数据增强：**
为每个chunk添加丰富的元数据（标题、章节、标签等）。

**时间衰减：**
为文档添加时间权重，新文档权重更高。

---

## 五、检索优化策略 ★★★★★

> 🔥 **学习优先级：重点掌握**
> **使用位置：** 改善召回、相关性、排序和上下文选择；**学习要求：** 理解原理，能独立修改、组合使用并排查常见问题。

**补：提升检索效果的方法**

### 5.1 查询扩展（Query Expansion）

**同义词扩展：**
```python
"汽车" → ["汽车", "轿车", "车辆", "机动车"]
```

**相关词扩展：**
使用词向量找相近概念。

**历史查询扩展：**
结合用户历史查询优化当前查询。

---

### 5.2 上下文窗口优化

**父文档检索（Parent Document Retrieval）：**
- 索引：小块（精确匹配）
- 返回：所属的大块（完整上下文）

**滑动窗口扩展：**
检索到某chunk后，同时返回其前后chunk。

---

### 5.3 负样本过滤

**低相似度过滤：**
设置相似度阈值，过滤不相关结果。

**多样性过滤：**
避免返回内容高度重复的chunk。

---

## 六、生成优化策略 ★★★★★

> 🔥 **学习优先级：重点掌握**
> **使用位置：** 压缩上下文、提供引用并降低无依据回答；**学习要求：** 理解原理，能独立修改、组合使用并排查常见问题。

**补：提升生成质量的方法**

### 6.1 上下文压缩

**问题：**
检索到的chunk过多，超出LLM上下文窗口。

**解决方案：**
- **重排后截断**：只保留top-k最相关的
- **摘要压缩**：对多个chunk生成摘要
- **LLMLingua**：使用模型压缩文本

---

### 6.2 引用追踪

**添加来源标记：**
```python
【来源1】原始文本1...
【来源2】原始文本2...

请在回答时标注信息来源，格式：[1][2]
```

**输出示例：**
```
RAG是检索增强生成技术[1]，它结合了检索和生成两个步骤[2]。
```

---

### 6.3 答案验证

**自我反思（Self-Reflection）：**
让LLM检查自己的答案是否符合要求。

**事实核查：**
对比答案与检索文档，验证一致性。

**置信度评分：**
让模型给出答案的置信度分数。

---

## 七、RAG系统评估 ★★★★★

> 🔥 **学习优先级：重点掌握**
> **使用位置：** 量化检索与生成质量并支持持续回归；**学习要求：** 理解原理，能独立修改、组合使用并排查常见问题。

**补：完整评估体系**

### 7.1 离线评估

**检索阶段：**
- Recall@K
- Precision@K
- MRR
- NDCG

**生成阶段：**
- BLEU：与参考答案的n-gram重叠
- ROUGE：召回率导向的重叠度
- BERTScore：语义相似度

---

### 7.2 在线评估

**用户反馈：**
- 点赞/点踩
- 答案有用性评分

**业务指标：**
- 答案采纳率
- 用户满意度
- 任务完成率

---

### 7.3 人工评估

**维度：**
- **相关性**：答案是否回答了问题
- **准确性**：事实是否正确
- **完整性**：是否遗漏重要信息
- **流畅性**：语言表达质量
- **可信度**：是否基于检索内容

---

## 八、常见问题与解决方案 ★★★★★

> 🔥 **学习优先级：重点掌握**
> **使用位置：** 定位召回不足、噪声、幻觉、延迟和成本问题；**学习要求：** 理解原理，能独立修改、组合使用并排查常见问题。

**补：实战中的坑与对策**

### 8.1 检索不到相关内容

**可能原因：**
- chunk切分不合理（过大或过小）
- embedding模型不匹配（中英文混用）
- 查询表达与文档差异大

**解决方案：**
- 调整chunk_size和overlap
- 使用领域特定embedding模型
- 查询改写/扩展

---

### 8.2 检索到无关内容

**可能原因：**
- 向量数据库中存在低质量数据
- 相似度阈值过低
- 元数据过滤不足

**解决方案：**
- 数据清洗和去重
- 提高相似度阈值
- 添加元数据过滤条件
- 使用reranker重排

---

### 8.3 答案生成幻觉

**可能原因：**
- prompt设计不当
- 检索内容不足
- 模型倾向于使用固有知识

**解决方案：**
- 强调"仅根据参考资料回答"
- 提升检索质量
- 使用依赖度检查工具
- 添加引用要求

---

### 8.4 响应速度慢

**瓶颈分析：**
- 向量检索耗时
- 重排序耗时
- LLM生成耗时

**优化方案：**
- 使用ANN加速向量检索（HNSW）
- 减少rerank候选数量
- 使用流式输出
- 缓存高频查询结果

---

## 九、实战工具与框架 ★★★

> 🧩 **学习优先级：补充掌握**
> **使用位置：** 按规模、过滤、部署和维护需求选择组件；**学习要求：** 能读懂并知道何时使用，项目需要时可快速落地。

**补：常用开发工具**

### 9.1 RAG框架

**LangChain：**
- 最流行的RAG框架
- 丰富的组件和集成

**LlamaIndex：**
- 专注数据索引和检索
- 强大的查询引擎

**Haystack：**
- NLP pipeline框架
- 支持混合检索

---

### 9.2 向量数据库对比

| 数据库 | 特点 | 适用场景 |
|--------|------|----------|
| **Milvus** | 高性能、分布式 | 大规模生产环境 |
| **Qdrant** | 易用、过滤强 | 中小型项目 |
| **Chroma** | 轻量级、内存 | 原型开发 |
| **Pinecone** | 云托管、免运维 | 快速上线 |
| **FAISS** | Meta开源、仅索引 | 研究和实验 |

---

### 9.3 Embedding模型选择

**中文场景：**
- `bge-large-zh`（推荐）
- `m3e-base`
- `text2vec-large-chinese`

**英文场景：**
- `text-embedding-3-large`（OpenAI）
- `gte-large`
- `e5-large-v2`

**多语言：**
- `multilingual-e5-large`
- `paraphrase-multilingual-mpnet-base-v2`

---

## 十、进阶学习资源 ★

> 👀 **学习优先级：了解即可**
> **使用位置：** 需要专项深入时查询论文和项目资料；**学习要求：** 建立概念边界，不必首次记忆细节，需要时再查询。

**补：深入学习方向**

### 10.1 论文推荐
- RAG原始论文（Lewis et al., 2020）
- ColBERT论文
- RAPTOR论文
- HyDE论文

### 10.2 实战项目
- 企业知识库问答系统
- 文档智能分析助手
- 客服机器人
- 法律文书检索系统

### 10.3 优化方向
- 多模态RAG（图片+文本）
- 实时数据更新
- 个性化检索
- 对话式多轮RAG

---

本文由作者整理，AI 辅助润色。
