AI 通关攻略 · 第 4 关 | RAG:给 AI 装上"实时资料库"

5 阅读5分钟

AI 通关攻略 · 第 4 关 | RAG:给 AI 装上"实时资料库"

故事从一个问题说起

LLM 的知识是静态的——训练完成后,它的知识就停止了。如果你想让 LLM 回答:

  • "我们公司去年 Q3 的营收是多少?"
  • "最新的 XXX 法规有什么变化?"
  • "某篇论文的核心结论是什么?"

这些问题 LLM 不可能知道,因为答案在它的训练数据之外。

怎么办?有两个方向:

  1. Fine-tuning(微调):把新知识"训练"进模型里
  2. RAG(检索增强生成):在回答问题时,临时把相关知识找出来给 LLM 看

RAG 就是第二种思路的完整解决方案。


1. 什么是 RAG?

RAG = Retrieval(检索) + Augmented(增强) + Generation(生成)

核心思想:不改变 LLM 本身,而是给 LLM 配备一个"实时资料库",让它在回答问题前先去查资料,再基于查到的真实资料生成答案。

类比:就像开卷考试——LLM 是学生,知识库是课本。学生不需要背下所有知识,但考试时能翻开课本查到准确答案。


2. RAG 的工作流程

RAG 的完整流程分为两个阶段:建库阶段查询阶段

2.1 建库阶段(离线)

文档 → 切分(Chunk) → Embedding → 存入向量数据库

步骤详解:

  1. 文档获取:收集需要 LLM 掌握的知识(PDF、网页、数据库、合同等)
  2. 文档切分(Chunking):把长文档切成小块(如每块 500 token)。切太小丢失上下文,切太大检索不精准
  3. 生成 Embedding:用 Embedding 模型把每个文本块转成向量
  4. 存入向量数据库:向量 + 原始文本块 + 元数据(来源、时间等)一起存储

2.2 查询阶段(在线)

用户问题 → Embedding → 向量数据库检索 → 拼接上下文 → LLM 生成回答

步骤详解:

  1. 问题向量化:把用户问题用同一个 Embedding 模型转成向量
  2. 相似度检索:在向量数据库中找到与问题向量最相似的 Top-K 个文本块
  3. 上下文拼接:把检索到的文本块按相关性排序,拼接成一个上下文
  4. LLM 生成:把上下文 + 用户问题一起发给 LLM,让它基于真实资料回答

3. RAG 的核心组件

3.1 Embedding 模型

负责把文本转成向量。Embedding 模型的质量直接影响检索质量。

选择建议

  • 中文场景:推荐 BGE-large-zhM3E 等国产开源模型
  • 英文场景: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 大小在 300800 token 之间效果较好。重叠 1020% 可以减少边界信息丢失。

3.4 检索策略

基本的相似度检索之外,还有高级策略:

  • 混合搜索(Hybrid Search):同时做向量相似度搜索 + 关键词搜索,兼顾语义和精确匹配
  • 重排序(Reranking):先用向量搜索召回 Top-20,再用更精确的模型(如 BGE Reranker)排序到 Top-5
  • 元数据过滤:按时间、来源等条件过滤,减少不相关内容

4. RAG vs Fine-tuning(微调)

这是最常见的对比问题:

对比项RAGFine-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 + 知识"的系统都至关重要。