Multi-RAG - 多源检索增强生成系统
基于 Spring AI 的 RAG(检索增强生成)系统,集成 MCP(Model Context Protocol)工具调用能力,支持多种外部数据源和 AI 模型。
项目架构
multi-rag/
├── rag-back/ # 后端服务 (Spring Boot)
└── rag-front/ # 前端应用 (Vue 3)
技术栈
后端技术栈
| 技术 | 版本 | 说明 |
|---|---|---|
| Java | 21 | JDK 21,支持虚拟线程 |
| Spring Boot | 4.0.0 | Web 框架基础 |
| Spring AI | 2.0.0-M2 | AI 应用能力集成 |
| Milvus | - | 向量数据库,用于存储嵌入向量 |
| Thymeleaf | - | 模板引擎,用于前端页面渲染 |
| Lombok | 1.18.42 | 简化 Java 代码 |
| FastJSON2 | 2.0.60 | JSON 处理库 |
Spring AI 相关组件
spring-ai-rag- RAG 检索增强生成功能spring-ai-advisors-vector-store- 向量存储顾问spring-ai-starter-model-chat-memory- 聊天记忆功能spring-ai-starter-mcp-client- MCP 客户端支持spring-ai-pdf-document-reader- PDF 文档读取spring-ai-tika-document-reader- TIKI 文档解析spring-ai-openai- OpenAI 兼容接口
前端技术栈
| 技术 | 版本 | 说明 |
|---|---|---|
| Node.js | ^20.19.0 / >=22.12.0 | 运行时环境 |
| Vue 3 | 3.5.26 | 渐进式前端框架 |
| Vite | 7.3.0 | 前端构建工具 |
| Vue Router | 4.6.4 | 路由管理 |
| TDesign Vue Next | 1.17.7 | 腾讯 TDesign UI 组件库 |
| @vueuse/core | 14.1.0 | Vue 组合式工具集 |
| Less | 4.5.1 | CSS 预处理器 |
前端工具链
unplugin-auto-import- 自动导入 Vue APIunplugin-vue-components- 组件自动导入eslint+prettier- 代码规范与格式化vite-plugin-compression- 资源压缩tdesign-icons-vue-next- 图标库
AI 模型与服务配置
| 服务 | 说明 |
|---|---|
| Chat Model | Qwen/Qwen3-8B (硅基流动 API) |
| Embedding Model | BAAI/bge-m3 (1024 维度) |
| Vector Store | Milvus (Zilliz Cloud serverless) |
MCP 服务器集成
项目通过 MCP(Model Context Protocol)集成多个外部工具服务:
- 百度地图 MCP (
mcp-server-baidu-map) - 地图服务 - Tavily 搜索 (
tavily-mcp) - 网络搜索 - 和风天气 (
q-weather-mcp-server) - 天气预报 - Wakatime (
wakatime-server) - 编程时间统计
运维与部署
| 技术 | 说明 |
|---|---|
| Docker | 容器化部署,多阶段构建 |
| Maven | 3.9,项目构建与依赖管理 |
| 阿里云镜像 | 加速 Docker 和 Apt 包下载 |
项目结构
后端模块 (rag-back)
src/main/java/com/multi/rag/
├── MultiRagApplication.java # 启动类
├── config/ # 配置类
│ ├── ChatClientConfig.java # 聊天客户端配置
│ ├── ChatModelConfig.java # 聊天模型配置
│ ├── VectorConfig.java # 向量配置
│ ├── VectorClientConfig.java # 向量客户端配置
│ ├── FileServerConfig.java # 文件服务器配置
│ └── WebConfig.java # Web 配置
├── controller/ # 控制器
│ ├── ChatController.java # 聊天接口
│ └── IndexController.java # 首页接口
├── service/ # 服务层
│ └── impl/ChatServiceImpl.java
├── advisor/ # RAG 顾问
│ ├── DocumentSourceAdvisor.java # 文档源顾问
│ └── ToolSourceAdvisor.java # 工具源顾问
├── tool/ # 自定义工具
│ └── CustomTool.java
├── handler/ # 处理器
│ └── GlobalExceptionHandler.java
├── interceptor/ # 拦截器
│ └── RequestInterceptor.java
├── model/ # 模型类
│ ├── UserInput.java
│ └── TokenTextSplitterConfig.java
└── common/ # 通用类
├── UserContext.java
├── SessionContext.java
└── GlobalConst.java
前端模块 (rag-front)
src/
├── main.js # 入口文件
├── App.vue # 根组件
├── router/
│ └── index.js # 路由配置
└── views/ # 页面视图
├── RagPage.vue # RAG 聊天页面
├── MemoryPage.vue # 记忆管理页面
├── FilePage.vue # 文件管理页面
├── ToolPage.vue # 工具管理页面
└── VectorPage.vue # 向量管理页面
功能特性
- RAG 智能问答: 基于向量检索的上下文增强问答
- 持久化记忆: 支持对话历史的存储与检索
- 文档上传: PDF 及多种格式文档解析入库
- MCP 工具调用: 集成外部 API 服务(地图、搜索、天气等)
- 向量管理: 向量的增删改查可视化操作
- 流式响应: SSE 实时流式输出
快速开始
前置要求
- Java 21+
- Node.js 20.19.0+ 或 22.12.0+
- Maven 3.9+
- Docker & Docker Compose
环境变量配置
编辑 rag-back/src/main/resources/application-dev.yml:
multi:
vector:
host: <your-milvus-endpoint>
api-key: <your-milvus-api-key>
collection-name: rag
embeddingDimension: 1024
chat-model:
base-url: <your-llm-api-base-url>
api-key: <your-llm-api-key>
model-name: <your-model-name>
embedding-model:
base-url: <your-embedding-api-base-url>
api-key: <your-embedding-api-key>
model-name: <your-embedding-model>
dimensions: 1024
本地开发
# 后端
cd rag-back
mvn spring-boot:run
# 前端(另一终端)
cd rag-front
npm install
npm run dev
Docker 部署
# 构建镜像
docker build -t multi-rag .
# 运行容器
docker run -d -p 8080:8080 \
-e ACTIVE_PROFILE=dev \
--name multi-rag \
multi-rag
许可证
MIT License