什么是 RAG?为什么 AI 能够查询自己的知识库?
你有没有遇到过这样的情况:
你问 AI:“我们公司今年最新的产品价格是多少?”
AI 却回答:“抱歉,我没有相关信息。”
但实际上,这些价格明明就保存在公司的 Excel、PDF 和内部文档中。
为什么 AI 不能直接读取这些资料?
因为大语言模型虽然拥有大量训练知识,但它并不天然知道你电脑里的文件,也无法自动获取最新的内部数据。
那么,有没有办法让 AI 在回答问题之前,先去查询指定的知识库?
这就是今天要介绍的技术:RAG(Retrieval-Augmented Generation),检索增强生成。
一、什么是 RAG?
RAG 全称 Retrieval-Augmented Generation,中文通常称为检索增强生成。
简单理解:
RAG 就是在 AI 回答问题之前,先从外部知识库中检索相关资料,再把检索到的内容交给大模型,让模型根据这些资料生成答案。
传统的大模型问答流程:
用户提问
↓
大语言模型
↓
生成回答
RAG 问答流程:
用户提问
↓
检索知识库
↓
找到相关资料
↓
将资料和问题一起交给大模型
↓
生成回答
两者最大的区别在于:
传统方式主要依赖模型已有的训练知识,而 RAG 可以在回答问题时引入外部资料。
例如:
你上传了一份公司的产品说明书,里面记录了产品型号、价格和功能。
当用户询问某款产品的价格时,RAG 会先从知识库中找到相关内容,再将这些内容提供给大模型。
这样,模型就可以根据实际资料回答,而不必完全依赖训练阶段学到的知识。
二、RAG 的核心技术是什么?
想要理解 RAG,需要先认识三个关键概念:
1. Embedding:把文字转换成向量
计算机并不能像人一样直接理解文字的语义。
因此,RAG 通常会使用 Embedding(向量嵌入)模型,将文本转换成一组数字,也就是向量。
例如:
文本 A:如何学习 Python?
文本 B:Python 入门教程
文本 C:今天的天气怎么样?
经过 Embedding 模型处理后,会得到对应的向量表示。
概念上可以理解为:
文本 A → [0.12, 0.35, 0.78, ...]
文本 B → [0.15, 0.32, 0.81, ...]
文本 C → [0.92, 0.11, 0.24, ...]
这里的数字仅用于演示,并非真实模型输出。
为什么要这样做?
因为语义相近的文本,经过合适的 Embedding 模型处理后,通常会在向量空间中表现出较高的相似度。
例如:
“如何学习 Python?”
“Python 入门教程”
虽然两个句子的文字不同,但表达的意思比较接近。
通过向量相似度计算,系统就有机会找到它们之间的语义联系。
这就是语义检索的基础。
2. 向量数据库:存储和检索向量
有了向量之后,还需要一个地方存储它们。
这时候就需要向量数据库。
常见的向量数据库和检索系统包括:
- Milvus
- Qdrant
- Weaviate
- Chroma
- Elasticsearch(支持向量检索)
它们可以存储文本向量及其关联信息,并根据查询向量寻找相似内容。
例如:
知识库里有 10 万条文档。
用户提出问题后,系统先将问题转换成向量,再通过向量检索找到与问题最相关的几条内容。
这样就不需要每次把 10 万条文档全部交给大模型。
需要注意,向量检索通常还会结合关键词检索、元数据过滤和重排序等技术,以提高检索准确率。
3. Prompt:把检索结果交给大模型
找到相关资料之后,下一步就是将资料和用户问题组合起来,交给大模型。
例如:
你是一名企业知识库助手。
请根据下面提供的资料回答问题。
如果资料中没有相关信息,请明确说明不知道。
参考资料:
公司产品 A 的售价为 199 元。
产品 A 支持蓝牙连接。
用户问题:
产品 A 的售价是多少?
模型根据检索到的资料,就可以生成:
产品 A 的售价是 199 元。
这一步非常重要。
RAG 并不是让模型重新训练一遍,而是在生成回答时,为模型提供额外的参考信息。
三、RAG 的完整工作流程
理解了三个核心技术之后,我们把整个流程串起来。
一个典型的 RAG 系统可以分为两个阶段。
第一阶段:构建知识库
这一步通常在用户提问之前完成。
步骤 1:导入数据
将 PDF、Word、TXT、网页、数据库等资料导入系统。
步骤 2:文档解析
提取文档中的文字、表格和其他可用信息。
步骤 3:文本切分
将较长的文档切分成多个小文本片段,也叫 Chunk。
为什么要切分?
因为文档可能有几百页,如果直接把整份文档交给模型,不仅成本高,还可能超过模型的上下文窗口。
所以需要按照一定规则拆分。
例如:
原始文档
↓
切分文本
↓
Chunk 1:产品介绍
Chunk 2:产品价格
Chunk 3:售后政策
Chunk 4:使用说明
实际切分时,还需要考虑段落边界、语义完整性和相邻片段重叠等问题。
步骤 4:生成向量
将每个文本片段交给 Embedding 模型,转换成向量。
步骤 5:存入向量数据库
保存向量、原始文本和文档元数据。
至此,知识库就构建完成了。
第二阶段:用户提问和检索
步骤 1:用户提出问题
例如:
“产品 A 的售后政策是什么?”
步骤 2:问题向量化
使用 Embedding 模型将用户问题转换成向量。
步骤 3:相似度检索
到向量数据库中查找与问题最相关的文本片段。
步骤 4:整理参考资料
选出相关内容,必要时进行重排序和过滤。
步骤 5:交给大模型
将用户问题和检索到的资料组合成 Prompt。
步骤 6:生成最终答案
大模型根据参考资料生成回答,并可以附带资料来源。
整个过程可以概括为:
知识库构建
原始文档 → 文本切分 → Embedding
↓
向量数据库
↑
用户提问 → 问题向量化 → 相似度检索
↓
相关资料
↓
大语言模型
↓
最终答案
四、RAG 和微调有什么区别?
这是很多初学者容易混淆的问题。
RAG 和微调(Fine-tuning)都可以改善 AI 应用的表现,但它们解决的问题并不一样。
| 对比维度 | RAG | 微调 |
|---|---|---|
| 核心思路 | 检索外部资料 | 使用数据调整模型 |
| 是否修改模型参数 | 通常不修改 | 会修改 |
| 知识更新 | 更新知识库即可 | 通常需要重新训练或微调 |
| 适合场景 | 企业知识库、文档问答 | 特定任务、表达风格、行为模式 |
| 数据来源 | 外部知识库 | 训练数据集 |
举个例子:
如果你希望 AI 知道公司最新的产品价格,使用 RAG 通常更合适。
因为价格可能经常变化,只需要更新知识库中的资料即可。
如果你希望 AI 学会特定的客服回答风格,或者更稳定地执行某种任务,那么微调可能更合适。
当然,两者也可以结合使用。
五、RAG 是不是可以彻底解决 AI 幻觉?
不能。
RAG 可以通过提供外部参考资料,降低模型因为缺少相关信息而产生错误回答的概率,但不能保证答案百分之百准确。
主要有几个原因:
- 检索错误: 系统没有找到真正相关的资料。
- 切分不合理: 文档被切分后丢失了必要的上下文。
- 资料过时: 知识库中的内容本身就不准确。
- 模型理解错误: 大模型可能错误理解检索到的内容。
- 生成偏差: 模型可能加入参考资料中不存在的信息。
因此,一个可靠的 RAG 系统不仅需要优秀的大模型,还需要做好文档解析、文本切分、检索优化和答案验证。
六、总结
RAG 是目前 AI 应用开发中非常重要的一项技术。
它让大模型不再只能依赖训练阶段学到的知识,而是能够在回答问题时查询外部知识库。
整个过程可以简单记成:
文档切分 → 向量化 → 存储 → 检索 → 大模型生成。
如果你正在开发企业知识库、智能客服、文档问答或者 AI 助手,RAG 都是值得掌握的技术方向。
未来,随着大模型应用越来越深入,如何让 AI 准确获取外部信息、理解私有数据,并基于可靠资料完成任务,将会成为 AI 应用开发的重要能力。