RAG
RAG 的全称是检索增强生成,说起来其实就是两件事:
- 先从资料库里检索相关内容。
- 再基于这些内容来生成答案。
先检索再生成,所以叫做检索增强生成。
RAG 是目前最常见的 AI 问答方案之一,很多企业内的知识助手、智能客服用的都是这项技术。
使用场景
假设你想做一个智能客服,这个智能客服可以回答各种关于公司产品的问题,那应该怎么实现呢,首先这个客服的内部必须要有一个模型,比如 GPT-4o、DeepSeek。

不过光有模型可不够,因为模型不知道公司内部的信息,这个问题好办。
在给模型发送问题的时候,把产品手册一起发给模型就可以解决。
这确实是一个解决方案。
但是如果产品手册的字数特别多,比如有上百页甚至上千页,就会带来很多问题。
- 模型无法读取所有内容,因为每个模型都只能存储一定量的信息。通常称这个量为上下文窗口大小。如果超出,模型就会读了后面,忘了前面,回答的准确性就会大打折扣
- 模型的推理成本高,输入越多,成 本越高
- 模型推理慢
直接把文档丢给模型是行不通的,那是不是可以考虑只把文档中相关的内容发给模型呢?
大致流程
首先 RAG 会把文档切分成多个片段,当用户提出问题后,就用这个问题在所有片段中寻找相关内容。
比如在一份上百页的产品手册中,可能只有三个片段与用户的问题相关,那么我们就将这三个片段挑出来,把它们和用户的问题一起发给大模型。
这样模型就只会感知三个相关的片段,而不是整个文档。之前的问题就会迎刃而解了。
上面是一个过度简化的链路,隐藏了很多实现细节,比如:如何分片、如何选择相关的片段。
通常来说 RAG 的整体流程包含两个部分,一个是数据准备部分,这个发生在用户提问前,我们要在这一部分里把相关的文档都给准备好,并完成相应的预处理,它一共是包含分片和索引两个环节。
另一部分是回答部分,这一部分是发生在用户提问之后了,在用户问问题之后,便会触发回答问题的各个环节,分别是召回、重排和生成。
