
RAG(Retrieval-Augmented Generation)的思路很直接:大模型回答问题之前,先从一个外部知识库里捞出相关信息,把问题和这些信息一起喂给模型,这样生成的答案往往会更可靠。Spring AI 对这个流程的每一个环节都做了抽象,从读文档、切块、转向量,到检索、排序、拼提示词,都有现成的组件可以用。
这篇文章就以 Spring AI 为主线,梳理 RAG 应用开发的核心步骤和需要注意的地方。
RAG 工作流程

整个过程可以分为两大步:离线建索引,在线检索增强。
建立索引
文档预处理与切割
首先得给文档做一些清洗和结构化。比如加上统一的标题层级,把模型读不了的图片链接、超链接去掉,代码块最好标记一下,免得切割时把逻辑切碎。之后就是切块——可以用固定大小、句子边界或者递归切分之类的方法,把长文档拆成一个个小片段,每个片段以后都是一个独立的检索单元。
向量转换与存储
切好的片段通过 Embedding 模型转成高维向量,然后存进向量数据库。这些向量就构成了后续检索的'知识库'。
检索增强
文档过滤与检索
- 用户的问题也一样先转成向量。
- 在向量库里面做相似度搜索,找出一批相关的文档片段。
- 如果业务需要,还可以根据问题里提炼出来的标签、关键词等元信息再筛一遍。
- 最后用 Rank 模型(Re-ranking)把这些初筛结果重新排个序,只取最相关的 Top‑N 个片段。
查询增强与关联
把排在最前面的几个片段拼接到原始问题里,形成最终的增强提示词(augmented prompt),再送给大模型。模型就有了知识库里的上下文,生成的结果会比直接问靠谱不少。
Spring AI 为上面每一步都提供了支持,下面按照流程逐个看具体的组件。
文档收集与切割:ETL 管道
ETL(抽取、转换、加载)这一步负责把准备好的知识库文档加工后写入向量数据库。Spring AI 围绕 Document 这个核心概念,提供了 DocumentReader、DocumentTransformer、DocumentWriter 三大接口。
Document 是什么
在 Spring AI 里,Document 不只是一段文本,它还能带上一堆元数据(比如来源、时间、标签)和多媒体附件。结构大致如下:

















