在这里插入图片描述

前言

在大模型落地的浪潮中,RAG(Retrieval-Augmented Generation,检索增强生成)已经成为企业级知识库系统的标准范式。它通过将外部知识注入大模型的生成过程,有效解决了大模型"知识截止"和"幻觉"两大核心痛点。

本系列博客将以一个完整的 Spring Boot + Spring AI 实战项目为蓝本,从零到一拆解一个生产级 RAG 知识库系统的设计与实现。项目采用前后端分离架构,后端基于 Spring Boot 3.4.2 + Spring AI 1.0.0 GA 构建,前端使用 Vue 3 + TypeScript + Vite,涵盖了从基础对话、文档向量化、检索增强、对话记忆,到敏感词过滤、来源追溯、跨向量聚合等完整功能链路。

技术栈一览

层级 技术选型 说明
后端框架 Spring Boot 3.4.2 主体框架
AI 框架 Spring AI 1.0.0 GA AI 能力抽象层
LLM 接入 Spring AI Alibaba + 通义千问 大模型调用
向量数据库 Milvus 向量存储与检索
关系数据库 MySQL 5.7 业务数据持久化
缓存 Redis 热词缓存、会话管理
对象存储 阿里云 OSS 原始文件存储
ORM MyBatis-Plus + PageHelper 数据访问层
认证 JWT (jjwt) 用户身份认证
中文分词 IK Analyzer 热词统计分词
前端 Vue 3 + TypeScript + Vite 用户界面

系统架构

整个系统的数据流可以概括为两条主线:

知识入库流程(Embedding Pipeline):

用户上传文件 → 阿里云 OSS 存储 → TikaDocumentReader 解析
→ TokenTextSplitter 分块 → Embedding 向量化 → Milvus 存储
→ MySQL 记录文件元数据与向量 ID 映射

智能问答流程(Query Pipeline):

用户提问 → JWT 身份验证 → 敏感词过滤 → ChatClient 构建请求
→ PromptChatMemoryAdvisor(对话记忆)
→ QuestionAnswerAdvisor(向量检索)
→ MetadataAwareQuestionAnswerAdvisor(来源追溯)
→ RagTool(聚合查询路由)
→ LLM 生成回答 → 流式返回前端

核心模块划分

系统按功能可划分为以下核心模块:

模块 核心类 职责
基础对话 ChatController 流式对话、System Prompt 定制
RAG 问答 AiRagController 检索增强生成、来源过滤
知识管理 KnowledgeController 文件上传、向量化、删除
对话记忆 PromptChatMemoryAdvisor 多轮会话上下文保持
敏感词 SensitiveWordController 内容安全过滤
日志与热词 LoggingAspect + TaskJobScheduled AOP 日志 + 定时分词统计
用户认证 UserController + JwtTokenUserInterceptor JWT 登录与鉴权
AI 绘图 DrawImageController 文生图能力
来源追溯 MetadataAwareQuestionAnswerAdvisor 回答引用来源文件
跨向量聚合 RagTool + SuperSQL Text-to-SQL 解决统计类问题

博客系列目录

本系列将按照功能模块逐一深入,每篇聚焦一个核心功能点:

序号 标题 核心内容
01 Spring AI ChatClient 基础对话与流式输出 ChatClient 构建、流式 SSE 响应、System Prompt
02 对话记忆 ChatMemory 实现多轮会话 PromptChatMemoryAdvisor、用户隔离、会话 ID
03 RAG 文档上传与向量化入库全流程 Tika 解析、TokenTextSplitter、Milvus 存储
04 RAG 检索阶段与 QuestionAnswerAdvisor 向量检索、相似度阈值、Top-K、Filter Expression
05 敏感词过滤与内容安全防护 敏感词 CRUD、对话前置拦截
06 AOP 日志记录与热词统计 自定义注解、IK 分词、定时任务、Redis 缓存
07 JWT 认证与用户体系设计 JWT 生成解析、拦截器、ThreadLocal 上下文
08 AI 绘图 ImageModel 集成 DashScope 文生图、图片流式返回
09 来源追溯自定义 Advisor Metadata 注入、BaseAdvisor 实现、优先级控制
10 Text-to-SQL 跨向量聚合 SuperSQL 集成、@Tool 注解、意图路由
11 文档更新与全链路删除 版本隔离、向量 ID 追踪、OSS + Milvus 联动删除
12 防幻觉与召回率优化 RetrievalAugmentationAdvisor、Rerank、查询改写
13 网络检索增强 Tavily/SearXNG 集成、Web Search 补充知识

环境准备

在开始阅读本系列之前,建议准备以下环境:

  1. JDK 17+ —— Spring Boot 3.x 的最低要求
  2. Maven 3.9+ —— 项目构建工具
  3. MySQL 5.7+ —— 业务数据库
  4. Redis —— 缓存服务
  5. Milvus —— 向量数据库(可通过 Docker 快速部署)
  6. 阿里云 OSS —— 对象存储(需开通并获取 AccessKey)
  7. 通义千问 API Key —— 通过阿里百炼平台获取

数据库初始化

项目使用 MySQL 存储业务数据,核心表结构如下:

-- 用户表
CREATE TABLE `tb_user` (
    `id` INT NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(255) NOT NULL COMMENT '姓名',
    `user_name` VARCHAR(255) NOT NULL COMMENT '用户名',
    `password` VARCHAR(255) NOT NULL COMMENT '密码(MD5)',
    `status` INT NOT NULL DEFAULT 1 COMMENT '状态 0:禁用 1:启用',
    `create_time` DATE,
    `update_time` DATE,
    PRIMARY KEY (`id`)
);

-- OSS 文件记录表
CREATE TABLE `ali_oss_file` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `file_name` VARCHAR(255) COMMENT '文件名',
    `url` VARCHAR(500) COMMENT 'OSS链接',
    `vector_id` TEXT COMMENT '向量分片ID(JSON数组)',
    `create_time` TIMESTAMP,
    `update_time` TIMESTAMP,
    PRIMARY KEY (`id`)
);

-- 日志表
CREATE TABLE `log_info` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `method_name` VARCHAR(255),
    `class_name` VARCHAR(255),
    `request_time` DATE,
    `request_params` TEXT,
    PRIMARY KEY (`id`)
);

-- 敏感词表
CREATE TABLE `sensitive_word` (
    `id` INT NOT NULL AUTO_INCREMENT,
    `word` VARCHAR(255) COMMENT '敏感词内容',
    `category` VARCHAR(255) COMMENT '类别',
    `status` VARCHAR(50),
    PRIMARY KEY (`id`)
);

-- 词频统计表
CREATE TABLE `word_frequency` (
    `id` INT NOT NULL AUTO_INCREMENT,
    `word` VARCHAR(255) COMMENT '分词',
    `count_num` INT COMMENT '出现频次',
    `business_type` VARCHAR(255),
    `create_time` DATE,
    `update_time` DATE,
    PRIMARY KEY (`id`)
);

小结

本篇作为系列总览,梳理了整个 RAG 知识库系统的技术选型、架构设计和模块划分。后续每篇博客将深入一个具体功能点,包含设计说明、原理方案、完整源码解析和验证结果,帮助你从理论到实践全面掌握 Spring AI RAG 系统的开发。

下一篇,我们将从最基础的 ChatClient 对话能力开始,看看 Spring AI 是如何优雅地封装大模型调用的。

在这里插入图片描述

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐