RAG 的核心思路其实很简单:先检索,再生成 。整个流程可以分为两大阶段 ------离线构建知识库 和在线问答推理,每个阶段又包含几个关键步骤。
一、 离线阶段:搭建专属知识库
这一步是 RAG 的基础,简单说就是把海量的非结构化数据变成机器能看懂、能快速检索的格式。
1. 文档加载与预处理
首先要把分散的数据源 "喂" 给系统。不管是本地的 Word 文档、线上的网页文,还是数据库里的结构化数据,都需要通过对应的加载器导入。导入后还得做预处理:去除无关的格式符号(比如 PDF 里的页眉页脚)、纠正错别字、统一文本编码,有的复杂文档还需要做语种检测和翻译。这一步就像整理书架,先把杂乱的书籍分类清理,为后续整理做准备。
2. 文本分割
长篇大论的文档没法直接用来检索,必须切成一个个短小精悍的 "文本块"。
为什么要切?因为大模型的上下文窗口有限,而且小文本块的语义更聚焦,检索准确率会更高。分割的技巧很关键,不能硬邦邦按字符数切,最好是按语义分割------ 比如按段落、按章节标题,或者用句子嵌入模型判断语义边界,保证每个 Chunk 的内容完整且独立。
3. 向量化与存储
这是离线阶段最核心的一步。计算机看不懂文字,但能看懂向量。我们需要用嵌入模型 ,把每个文本块转换成固定长度的向量。这个向量就像文本的 "语义指纹",相似内容的向量距离会更近。生成的向量会被存入向量数据库 。向量数据库的优势在于能快速做近似最近邻搜索,毫秒级就能从百万级向量里找到和查询最匹配的文本块。
二、 在线阶段:检索 + 生成
当用户提出一个问题时,RAG 系统就会启动 "检索 - 生成" 的联动模式。
1. 用户查询处理与向量化
系统先接收用户的自然语言问题,比如 "LlamaIndex 的核心功能有哪些?"。和离线阶段的文本块一样,这个问题也需要用同一个嵌入模型转换成向量。这里要注意,必须用和知识库向量相同的模型,否则生成的向量 "语义指纹" 不兼容,检索就会失效。
2. 相似性检索
系统把用户问题的向量传入向量数据库,执行相似性搜索。数据库会根据向量距离,返回和问题最相关的 Top-N 个文本块 ------ 这些就是回答问题的 "证据"。比如用户问 LlamaIndex 的功能,数据库就会检索出包含 LlamaIndex 核心模块、使用场景的文本块。
3. 构建提示词并调用大模型
这一步是连接检索和生成的桥梁。系统会把用户问题 和检索到的文本块,按照一定的格式拼接成一个提示词。一个典型的提示词模板大概是这样的:
请根据以下参考信息回答问题,只使用参考信息中的内容,不要编造。
参考信息:[检索到的文本块 1][检索到的文本块 2]
用户问题:[用户的原始问题]
然后,这个精心构造的提示词会被发送给大语言模型(比如 GPT-5,DeepSeek)。
4. 生成并返回答案
大模型接收到提示词后,会基于参考文本块的内容,结合自身的语言理解能力,生成准确、有据可依的回答。最后,系统把这个回答返回给用户,整个流程就完成了。