1. 什么是 RAG
大语言模型(LLM)虽然强大,但有两个绕不开的短板:
- 知识截止:训练数据有截止日期,无法回答最新信息
- 幻觉问题:对不确定的内容会"编"出看似合理但错误的答案
业界主要有两条路径来弥补:
- Tool Calling(工具调用)
- 原理:模型主动调用外部工具(搜索引擎、API、数据库)实时获取数据
- 适用场景:结构化查询、实时性强的场景(查天气、全网检索、调接口)
- RAG(Retrieval-Augmented Generation,检索增强生成)
- 原理:从外部知识库中语义检索相关文档片段,作为上下文喂给模型
- 适用场景:非结构化的私域知识(企业文档、产品手册、历史工单)
2. RAG vs 模型微调
| 维度 | RAG | 微调(Fine-tuning) |
|---|---|---|
| 成本 | 低,无需训练 | 高,需要 GPU 和训练时间 |
| 数据时效 | 实时,随时更新知识库 | 静态,需重新训练才能更新 |
| 硬件要求 | 普通服务器即可 | 需要高性能 GPU |
| 实现难度 | 中等,搭建检索管道 | 较高,需要训练数据和调参经验 |
| 适用场景 | 企业知识库、文档问答、客服 | 特定领域风格适配、专业术语理解 |
| 可解释性 | 强,能追溯答案来源 | 弱,模型内部黑盒 |
3. RAG 工作流程
1. 阶段一:文档入库(离线)
将原始文档处理后存入向量数据库,为后续检索做准备。
- 文档分割:长文档无法直接处理,需要切分成合适大小的文本块(Chunk)
- 向量化:通过 Embedding 模型将文本块转换为数学向量,语义相近的内容在向量空间中距离更近
- 存储:将向量和对应原文一起存入向量数据库,建立可检索的知识库
2. 阶段二:检索问答(在线)
用户提问时,从向量数据库中找到最相关的内容,交给 LLM 生成回答。
- 问题向量化:用同一个 Embedding 模型将用户问题转为向量
- 向量检索:在向量数据库中搜索与问题向量最相似的文本块
- 构建 Prompt:将检索到的文本块拼接到 Prompt 中,为模型提供参考依据
- 生成回答:LLM 基于上下文生成有据可查的回答,而不是凭空编造
整个流程的核心思想:让模型有据可查,而不是凭空回答。
4. 本专栏的定位
本专栏是一个纯后端的 RAG 实战专栏,带你从零搭建一套完整的检索增强生成系统。
设计原则:
- 渐进式:从最简单的内存向量存储开始,逐步升级到生产级 Qdrant
- 测试驱动:每个功能都配套测试用例,写完即可验证
- 聚焦 RAG:不是全栈应用专栏,专注于 RAG 管道本身的构建和优化
- 本地优先:全程使用 Ollama 本地模型,零 API 费用,随时练习
专栏会用 Spring AI 提供的 RAG 组件,从 SimpleVectorStore 起步,最终构建一个支持多格式文档、具备评估能力的 RAG 服务。
5. 前置要求
开始之前,请确保你的环境满足以下条件:
- JDK 25:Spring Boot 4.x 要求 Java 25+
- Ollama:已安装并运行(执行
ollama list确认服务正常) - Maven:3.9+ 或使用项目自带的 mvnw
- IDE:IntelliJ IDEA 推荐,VS Code 也可以
6. 本章小结
本章介绍了 RAG 的核心思想和两阶段工作流程,明确了本专栏的定位与前置要求。
| 知识点 | 说明 |
|---|---|
| RAG 核心思想 | 让模型基于检索到的外部文档回答问题,而非凭空生成 |
| 文档入库阶段 | 文档分割 -> 向量化 -> 存入向量数据库,构建可检索的知识库 |
| 检索问答阶段 | 问题向量化 -> 向量检索 -> 构建 Prompt -> LLM 生成有据可查的回答 |
| 专栏定位 | 纯后端、渐进式、测试驱动、本地优先,聚焦 RAG 管道本身 |
| 前置要求 | JDK 25、Ollama、Maven 3.9+、IDE |
接下来从零初始化 Spring Boot 项目,配置 Ollama 连接并验证基础通信。