Spring AI RAG -01 知识库系统架构全解——系列总览
·

前言
在大模型落地的浪潮中,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 补充知识 |
环境准备
在开始阅读本系列之前,建议准备以下环境:
- JDK 17+ —— Spring Boot 3.x 的最低要求
- Maven 3.9+ —— 项目构建工具
- MySQL 5.7+ —— 业务数据库
- Redis —— 缓存服务
- Milvus —— 向量数据库(可通过 Docker 快速部署)
- 阿里云 OSS —— 对象存储(需开通并获取 AccessKey)
- 通义千问 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 是如何优雅地封装大模型调用的。

更多推荐



所有评论(0)