什么是 RAG?从原理到工作流,一篇讲清 RAG 增强生成流程
为什么你的AI助手总爱“编答案”?RAG 就是那个能帮它作弊的“小抄本”。
你有没有遇到过这种情况:问AI一个公司内部的问题,它回答得头头是道,但细看全是网上搜来的通用信息,甚至还会凭空捏造一些不存在的流程?或者让它推荐最新的技术方案,它却翻出三年前的过时资料?
这不是AI不够聪明,而是它天生有个“硬伤”——知识截止日期。大模型的知识来自训练时的数据,之后发生的事情它一概不知。更麻烦的是,为了让你满意,它偶尔会“自信地胡说八道”,这就是传说中的幻觉。
怎么破?答案是 RAG(检索增强生成)。今天这篇文章,我会用最通俗的方式,把RAG的原理、工作流程和关键技术讲清楚。
一、RAG到底是什么?给AI配个“外挂知识库”
RAG = 检索(Retrieval) + 增强(Augmented) + 生成(Generation)
你可以把它想象成:让AI在回答之前,先偷偷翻一下“小抄”。
传统大模型就像一个闭卷考试的学生——只能靠脑子里的记忆答题,遇到没学过的或者记错了,就会瞎蒙。而RAG相当于允许大模型开卷:先到知识库里快速查找相关段落,然后结合查到的资料和自己的语言能力,给出一个有理有据的回答。

所以,RAG改造后的AI:
- 回答更准:基于真实资料,不易胡说
- 能及时更新:知识库换新内容,AI马上学会
- 有据可查:甚至可以告诉你答案来自哪份文档
- 更懂你:知识库可以是你自己的业务数据,语气、风格都可以定制
对比一下传统大模型 和 RAG增强模型的区别:
| 特性 | 传统大模型 | RAG增强模型 |
|---|---|---|
| 知识新鲜度 | 截止到训练时 | 随时可更新 |
| 专业深度 | 泛知识,通用 | 可接入专业库 |
| 胡扯概率 | 较高 | 大幅降低 |
| 可控性 | 不可控 | 通过知识库控制 |
| 资源消耗 | 模型巨大 | 模型可小,成本更低 |
二、RAG工作流程拆解
一个完整的RAG系统包含四个关键步骤:文档收集和切割、向量转换和存储、文档过滤和检索、查询增强和关联。我们跟着一个具体例子来走一遍。
假设:你是一家公司的客服AI,需要回答产品规格问题。知识库里存着《产品手册2026版》等文档。
第一步:文档收集与切分
先把你的PDF、Word、网页、数据库内容统统抓过来,清洗掉乱码、统一格式。然后,把长文档切成一个个小片段(chunk),每个片段通常在几百个token左右。

切分的方式很有讲究,常见的切分方式:
- 按固定长度切(比如512个token)——简单但可能打断句子
- 按语义边界切(段落、章节)——更合理
- 递归切分(优先按段落,太长再按句子)——折中方案
这一步其实是最容易影响最终效果的。切得好,召回率高;切得烂,神仙也救不了。我之前专门写了一篇不同文档切分策略的实测,感兴趣的可以阅读我的另一篇文章 【TODO】别再乱切文档了:实测5种切分策略在RAG中的效果。
第二步:向量化与存储
计算机看不懂文字,但看得懂数字。所以要把每个文本片段“翻译”成一组数字,这就是向量。
- Embedding模型 负责这个翻译工作。它会把一段文字映射到高维空间中的一个点。
- 语义相似的文本,在这个空间里距离更近。比如“电脑”和“笔记本”的向量会挨着,“电脑”和“香蕉”就离得远。
- 生成的向量和它对应的原文,一起存进向量数据库。

向量数据库专门为这种“找近邻”的查询做了优化。常见的包括Milvus、Pinecone,以及传统数据库的向量插件(PGVector、RediSearch等)。
为什么要这么折腾将**文本转换成向量?**
了解了基本文本向量化基本概念,有的朋友读到这里可能就会有疑问了,我们为什么需要将文本向量化呢?直接将文本输入给大模型或者存储起来不可以吗?
回答是——**不可以!!!**总结原因有三:
- (1)让文本可计算:把文本转换成向量,最根本的原因在于:计算机只能处理数字,无法直接理解文字符号。而向量是文本的一种数值化表示,有了它才能让计算机“读懂”文本,并执行各种智能任务
- (2)语义表征:在向量空间中,词的语义关系(相似、类比、蕴含)可以被映射为可量化的距离与方向,从而让机器“理解”含义而非字面匹配。
- (3)降低维度与抽象表示 :原始文本通常是极高维且稀疏的,直接使用会导致计算爆炸且泛化能力差。通过向量化(尤其是降维技术)既避免计算灾难与过拟合,又为各类机器学习模型提供高效、泛化的特征输入
第三步:检索与过滤
当用户问“产品A的防水等级是多少?”时,系统先把这个问题也转成向量,然后去向量数据库里找和它最相似的几个文档片段。常用的相似度算法有余弦相似度、欧氏距离等。
有时候还会加上一些过滤条件,比如只查最近三个月更新的文档,或者指定文件来源。这样就能快速拿到一批和问题高相关的候选段落。

这里涉及几个术语:
- 召回:就是快速捞出可能相关的一堆结果,不要求特别准,但必须快、广。
- 精排:对上一步捞出的一两百个结果,用更复杂的模型算分,挑出最相关的3-5个给大模型。精排通常会用Rank模型(如BERT排序)。
第四步:增强生成
最后一步,把检索到的几个相关段落和用户原问题,拼成一个增强提示(Augmented Prompt),喂给大模型。模型会根据这些上下文生成最终答案,甚至可以引用具体来源。

比如提示词可能是:
请根据以下参考资料回答用户问题。
参考资料1:产品A防水等级IP68...
参考资料2:...
用户问题:产品A的防水等级是多少?
这样模型就不会瞎编,老老实实照资料说。
三、一张图看懂RAG全流程

四、RAG 进阶——混合检索让结果更聪明
只靠向量检索有时候也会翻车——比如用户搜“iPhone 15”,向量检索可能把“iPhone 14”也当成相近的,但关键词“15”却没有被重视。解决办法是混合检索:
- 同时跑关键词检索(经典算法BM25)和向量检索。
- 把两者的结果按一定权重合并(比如各占50%)。
- 很多RAG框架(如Dify、LlamaIndex)都支持这种策略,还可以调权重。
这样既保留了关键词的精确匹配,又利用了语义的泛化能力。关于RAG的混合检索,大家感兴趣可以阅读我的另一篇文章:什么是混合检索?在RAG系统中如何结合BM25与向量检索实现混合检索?
五、RAG 相关术语速查表
这里汇总一下关于 RAG 的相关的技术术语,方便大家查阅:
| 术语 | 一句话解释 |
|---|---|
| 向量 | 向量就像是一个有序的数字列表,或者说是多维空间中的一个点、一条有方向的线段。这些数字共同描述了对象在某一个"特征空间"中的位置。 |
| Embedding(嵌入) | 把文本转换为多维向量的过程叫做Embedding(嵌入)。 |
| Embedding Model 嵌入模型 | 嵌入模型可以把文本转换成多维向量。 |
| 向量数据库 | 能够存储向量并且具有向量相似度检索相关能力的数据库。 |
| 向量维度 | 向量的维度就是这个列表里数字的个数。例如,向量[0.12,-0.870.33,1.24]的维度是4;较高维度通常能提供更丰富的语义信息和更强的区分能力,尤其利于处理复杂语义或需要高精度的场景。但这会增加计算量,占用更多内存和存储,也可能使计算速度变慢 |
| 召回 | 第一轮筛选,快但不太准 |
| 精排 | 第二轮筛选,慢但准 |
| Rank模型 | 给结果打分的模型 |
| 混合检索 | 关键词+向量一起上,效果更稳 |
总结
关于 RAG 的基本原理,本文就讲到这里。但理论只是第一步,接下来我会陆续输出更落地的内容:
- Spring AI + 本地知识库 RAG 实战:从零搭建一个完整的问答系统,代码、配置、踩坑点全记录。
- 向量数据库选型对比:Milvus、PGVector、Redis Stack 怎么选?
- RAG 评估与调优:如何量化你的 RAG 系统到底好不好用?
如果你不想错过这些实战教程,欢迎关注我的公众号 AutowiredAI,每一篇都会第一时间推送。后台回复 「RAG」 还能获取本文的完整代码仓库链接(实战篇发布后自动更新)。