1. 专栏简介

4 min

1. 什么是 RAG

大语言模型(LLM)虽然强大,但有两个绕不开的短板:

  • 知识截止:训练数据有截止日期,无法回答最新信息
  • 幻觉问题:对不确定的内容会"编"出看似合理但错误的答案

业界主要有两条路径来弥补:

  1. Tool Calling(工具调用)
    • 原理:模型主动调用外部工具(搜索引擎、API、数据库)实时获取数据
    • 适用场景:结构化查询、实时性强的场景(查天气、全网检索、调接口)
  2. 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 连接并验证基础通信。