AI 通关攻略 · 第 4 关 | RAG:给 AI 装上"实时资料库"
故事从一个问题说起
LLM 的知识是静态的——训练完成后,它的知识就停止了。如果你想让 LLM 回答:
- "我们公司去年 Q3 的营收是多少?"
- "最新的 XXX 法规有什么变化?"
- "某篇论文的核心结论是什么?"
这些问题 LLM 不可能知道,因为答案在它的训练数据之外。
怎么办?有两个方向:
- Fine-tuning(微调):把新知识"训练"进模型里
- RAG(检索增强生成):在回答问题时,临时把相关知识找出来给 LLM 看
RAG 就是第二种思路的完整解决方案。
1. 什么是 RAG?
RAG = Retrieval(检索) + Augmented(增强) + Generation(生成)
核心思想:不改变 LLM 本身,而是给 LLM 配备一个"实时资料库",让它在回答问题前先去查资料,再基于查到的真实资料生成答案。
类比:就像开卷考试——LLM 是学生,知识库是课本。学生不需要背下所有知识,但考试时能翻开课本查到准确答案。
2. RAG 的工作流程
RAG 的完整流程分为两个阶段:建库阶段 和 查询阶段。
2.1 建库阶段(离线)
文档 → 切分(Chunk) → Embedding → 存入向量数据库
步骤详解:
- 文档获取:收集需要 LLM 掌握的知识(PDF、网页、数据库、合同等)
- 文档切分(Chunking):把长文档切成小块(如每块 500 token)。切太小丢失上下文,切太大检索不精准
- 生成 Embedding:用 Embedding 模型把每个文本块转成向量
- 存入向量数据库:向量 + 原始文本块 + 元数据(来源、时间等)一起存储
2.2 查询阶段(在线)
用户问题 → Embedding → 向量数据库检索 → 拼接上下文 → LLM 生成回答
步骤详解:
- 问题向量化:把用户问题用同一个 Embedding 模型转成向量
- 相似度检索:在向量数据库中找到与问题向量最相似的 Top-K 个文本块
- 上下文拼接:把检索到的文本块按相关性排序,拼接成一个上下文
- LLM 生成:把上下文 + 用户问题一起发给 LLM,让它基于真实资料回答
3. RAG 的核心组件
3.1 Embedding 模型
负责把文本转成向量。Embedding 模型的质量直接影响检索质量。
选择建议:
- 中文场景:推荐 BGE-large-zh、M3E 等国产开源模型
- 英文场景:OpenAI 的
text-embedding-3-large效果出色 - 多语言: Cohere Embed 3 多语言版
3.2 向量数据库
存储和检索 Embedding 向量的数据库。常见选择:
| 数据库 | 特点 | 适用场景 |
|---|---|---|
| Milvus | 开源,国产,支持海量向量 | 企业级大规模应用 |
| Pinecone | 云服务,免运维 | 快速上手 |
| Chroma | 轻量,Python 原生 | 个人项目、原型验证 |
| Weaviate | 开源,支持混合搜索 | 需要同时支持向量+关键词检索 |
| Qdrant | 开源,高性能 | 对延迟敏感的场景 |
3.3 文本切分策略(Chunking)
Chunking 是 RAG 中最容易被忽视但影响极大的环节。
常见策略:
- 固定长度切分:每 N 个 token 一切分(如 500 token),简单但可能切断语义
- 语义切分:按段落或句子切分,保留语义完整性
- 递归切分:先按段落,再按句子,层层细化
经验法则:目标 chunk 大小在 300
800 token 之间效果较好。重叠 1020% 可以减少边界信息丢失。
3.4 检索策略
基本的相似度检索之外,还有高级策略:
- 混合搜索(Hybrid Search):同时做向量相似度搜索 + 关键词搜索,兼顾语义和精确匹配
- 重排序(Reranking):先用向量搜索召回 Top-20,再用更精确的模型(如 BGE Reranker)排序到 Top-5
- 元数据过滤:按时间、来源等条件过滤,减少不相关内容
4. RAG vs Fine-tuning(微调)
这是最常见的对比问题:
| 对比项 | RAG | Fine-tuning |
|---|---|---|
| 本质 | 外部检索,不改变模型 | 把知识训练进模型参数 |
| 知识更新 | 随时更新知识库,无需重训 | 需要重新训练 |
| 幻觉减少 | 效果显著(基于真实资料) | 效果有限(只是让模型更"像"某个领域) |
| 成本 | 低(不用训练,只需维护向量库) | 高(GPU 训练成本) |
| 适用场景 | 实时性知识、私有知识、大规模知识 | 行为模式改变、风格调整 |
| 局限性 | 检索质量依赖 Embedding 和 Chunking | 新知识仍可能产生幻觉 |
最佳实践:RAG + Fine-tuning 结合使用。RAG 负责提供实时知识,Fine-tuning 负责让模型的行为更加符合特定领域的表达习惯。
5. Advanced RAG
在基础 RAG 之上,有一系列进阶技术:
5.1 Query 改写(Query Rewriting)
用户的问题可能表达不清,直接检索效果差。可以在检索前用 LLM 改写问题:
用户问:"那个啥,就是去年搞的那个AI项目,效果咋样来着?"
LLM 改写:"2024年AI项目的实施效果如何?"
5.2 Parent Document Retrieval
每个小块记录其父文档(更大的上下文块),检索时先找小块,再召回其父文档,给 LLM 更完整的上下文。
5.3 Self-RAG(自我反思 RAG)
让 LLM 在生成过程中判断:
- 检索的内容是否有用?
- 生成的答案是否基于检索到的内容?
- 答案是否完整?
类似 Agent 的自我反思机制。
6. RAG 的适用场景
| 场景 | 是否适合 RAG |
|---|---|
| 企业内部知识库问答 | ✅ 强烈推荐 |
| 法律/医疗等专业领域问答 | ✅ 强烈推荐 |
| 实时新闻相关问答 | ✅ 需要配合定时更新知识库 |
| 代码助手(结合代码库) | ✅ 非常适合 |
| 个人笔记/文档搜索 | ✅ 非常适合 |
| 开放式闲聊 | ❌ 不需要 RAG |
| 数学推理/逻辑推理 | ❌ RAG 帮助有限 |
7. 总结
RAG 的本质:给 LLM 装一个"实时查阅资料"的能力,让它回答知识库范围内的准确问题,而不是靠"记忆"(幻觉风险高)。
RAG = 向量检索 + 上下文拼接 + LLM 生成
RAG 的价值 = 实时知识 + 低幻觉 + 低成本 + 随时可更新
RAG 是当前企业 AI 落地最成熟的技术路径之一,理解它对于构建任何需要"AI + 知识"的系统都至关重要。