多源检索增强生成系统

0 阅读3分钟

Multi-RAG - 多源检索增强生成系统

基于 Spring AI 的 RAG(检索增强生成)系统,集成 MCP(Model Context Protocol)工具调用能力,支持多种外部数据源和 AI 模型。

项目架构

multi-rag/
├── rag-back/          # 后端服务 (Spring Boot)
└── rag-front/         # 前端应用 (Vue 3)

技术栈

后端技术栈

技术版本说明
Java21JDK 21,支持虚拟线程
Spring Boot4.0.0Web 框架基础
Spring AI2.0.0-M2AI 应用能力集成
Milvus-向量数据库,用于存储嵌入向量
Thymeleaf-模板引擎,用于前端页面渲染
Lombok1.18.42简化 Java 代码
FastJSON22.0.60JSON 处理库
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 33.5.26渐进式前端框架
Vite7.3.0前端构建工具
Vue Router4.6.4路由管理
TDesign Vue Next1.17.7腾讯 TDesign UI 组件库
@vueuse/core14.1.0Vue 组合式工具集
Less4.5.1CSS 预处理器
前端工具链
  • unplugin-auto-import - 自动导入 Vue API
  • unplugin-vue-components - 组件自动导入
  • eslint + prettier - 代码规范与格式化
  • vite-plugin-compression - 资源压缩
  • tdesign-icons-vue-next - 图标库

AI 模型与服务配置

服务说明
Chat ModelQwen/Qwen3-8B (硅基流动 API)
Embedding ModelBAAI/bge-m3 (1024 维度)
Vector StoreMilvus (Zilliz Cloud serverless)

MCP 服务器集成

项目通过 MCP(Model Context Protocol)集成多个外部工具服务:

  • 百度地图 MCP (mcp-server-baidu-map) - 地图服务
  • Tavily 搜索 (tavily-mcp) - 网络搜索
  • 和风天气 (q-weather-mcp-server) - 天气预报
  • Wakatime (wakatime-server) - 编程时间统计

运维与部署

技术说明
Docker容器化部署,多阶段构建
Maven3.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