Agentic RAG + MCP 驱动的企业智能知识检索系统
不只是搜索,而是让知识库像专家一样思考、决策、自证
简介 • 核心特性 • 技术栈 • 架构总览 • 核心流程 • 快速开始 • 部署 • 展示 •
DocMind 是一个基于 Agentic RAG(检索增强生成) 架构的企业级智能知识检索系统。它不仅仅是简单的“文档问答”,而是通过 LLM Agent 在运行时动态决策,智能编排检索链路,实现对任意领域私有知识的高质量、可溯源、自适应问答。
核心理念:用 AI 决策替代硬编码流水线。让知识库“学会”根据不同问题,选择最合适的检索策略。
一句话概括:上传你的企业文档(技术手册、规章制度、产品说明等),即可获得一个能深度理解、精准回答、并可无缝接入你 AI 工作流的专家级知识助手。
| 特性 | 说明 |
|---|---|
| 🤖 真正的 Agentic RAG | 基于 Spring AI Function Calling,LLM 实时分析问题意图,动态调用向量检索、关键词检索、联网搜索、长期记忆等工具,不同问题走不同优化路径,告别传统 RAG 的固定流水线。 |
| 🔄 七步检索链 | 查询改写 → LLM 选工具 → 多路召回 → RRF融合 → 重排序 → 上下文压缩 → 自检纠错,每一步均有独立降级方案,工程级保障检索质量与系统鲁棒性。 |
| 🔌 MCP 协议开放 | 通过 Model Context Protocol (MCP) 标准协议,对外暴露所有检索工具。您的 Claude Desktop、Cursor 或自研 Agent 可直接调用企业知识库,实现“知识即服务”。 |
| 📊 答案完全可追溯 | 每条回答均附带精确来源(文档名、章节、页码)、完整的 Agent 推理链(Thought-Action-Observation)、工具调用记录及自检评分,杜绝黑箱。 |
| 🧠 跨会话长期记忆 | 自动识别并记忆用户显式偏好(如“我是Java开发者”),在后续对话中主动召回,实现个性化、有上下文的问答体验。 |
| ⚙️ 全链路热配置 | 所有 RAG 参数(TopK、阈值、模型等)均支持通过管理后台动态调整,无需重启服务。LLM 模型支持运行时热切换,不影响正在处理的请求。 |
| 🏗️ 生产级容错 | 从查询改写到最终生成,每一环节都设计了降级策略(随机向量兜底、规则路由降级、关键词评分降级等),确保单点故障不导致服务中断。 |
后端框架:
- Spring Boot 3.4 + Spring AI 1.1.4
- Spring Security + JWT
AI 与检索:
- LLM: Spring AI OpenAI Compatible (通义千问、DeepSeek、OpenAI 等)
- 向量数据库: Milvus 2.x
- 全文检索: Apache Lucene 8.11 (SmartCN 分词 + BM25)
- 重排模型: DashScope gte-rerank (云端 Cross-Encoder)
- 嵌入模型: text-embedding-v3 (1024维)
数据与存储:
- 关系数据库: MySQL 8
- 缓存与内存: Redis 7
- 对象存储: MinIO (S3兼容)
- ORM: MyBatis-Plus 3.5
前端:
- Vue 3.5 + TypeScript
- Vite + Element Plus + ECharts
通信与协议:
- SSE (Server-Sent Events) 流式输出
- MCP (Model Context Protocol) via Spring AI MCP Server
DocMind 采用纯 Java 单体架构,逻辑清晰,部署简单。核心是 Agent 驱动的检索引擎,并通过 MCP 层 实现能力开放。
┌─────────────────────────────────────────────────────┐
│ 前端 (Vue 3) │
│ 聊天界面 / 知识库管理 / MCP控制台 / 数据大屏 │
└───────────────┬─────────────────────────────────────┘
│ (HTTP/SSE, JWT)
┌───────────────▼─────────────────────────────────────┐
│ 后端 (Spring Boot 单体) │
│ │
│ ┌───────────────┐ ┌──────────────────────────┐ │
│ │ Agent 层 │ │ MCP 工具层 │ │
│ │ • ReAct Agent │◄─┤ • doc_search (语义检索) │ │
│ │ • QueryRouter │ │ • keyword_search (BM25) │ │
│ │ • 自检纠错 │ │ • web_search (联网) │ │
│ └───────┬───────┘ │ • memory (长期记忆) │ │
│ │ └──────────┬───────────────┘ │
│ ┌───────▼──────────────────────▼───────────────┐ │
│ │ 检索引擎层 │ │
│ │ • 多路召回 (向量/BM25) • RRF融合 • 重排序 │ │
│ │ • 上下文压缩 • Prompt组装 • 安全护栏 │ │
│ └───────┬──────────────────────┬───────────────┘ │
│ │ │ │
│ ┌───────▼──────┐ ┌──────────▼──────────────┐ │
│ │ 存储层 │ │ 外部服务 │ │
│ │ • MySQL │ │ • LLM API (通义/OpenAI) │ │
│ │ • Milvus │ │ • Embedding API │ │
│ │ • Redis │ │ • Rerank API │ │
│ │ • MinIO │ │ • Tavily (联网搜索) │ │
│ └──────────────┘ └──────────────────────────┘ │
└─────────────────────────────────────────────────────┘
- 查询改写:LLM 将口语化问题优化为更适合检索的表达。
- 工具选择:LLM Agent 分析问题,通过 Function Calling 动态决定调用
doc_search(语义)、keyword_search(精确)、web_search(时效)、recall_memory(记忆)中的哪些工具。 - 多路召回与 RRF 融合:并行执行所选工具的检索,使用 RRF(倒数秩融合) 算法将不同评分体系的向量、BM25、网页结果统一排序,解决分数不可比问题。
- Cross-Encoder 精排:调用云端
gte-rerank模型对候选文档进行(query, chunk)对精细相关度打分,精选 Top-6。(降级方案:模型不可用时采用关键词频率混合评分)。 - 上下文压缩:对精排结果进行前缀去重、单片截断、总量控制,在保留核心信息的同时严格控制 Token 消耗。
- Prompt 组装与安全护栏:注入带精确来源的参考文档、用户画像、长期记忆、对话历史。进行紧急关键词检测和置信度兜底。
- 流式生成与自检:SSE 流式输出答案。生成后,LLM对答案进行事实一致性、完整性、来源匹配度自检,低置信度触发最多2轮重新检索循环。
- JDK 17
- Maven 3.9+
- Node.js 18+ 和 npm 9+
- Docker 与 Docker Compose
-
启动基础设施:确保 Docker 守护进程运行,然后在项目根目录执行: bash docker-compose up -d
这将启动 MySQL、Redis、Milvus、MinIO 的容器。
-
配置应用:复制
application.yml.example为application.yml,并填写您的:- 大模型 API Key 和 Base URL(阿里云百炼、OpenAI 等)
- Tavily API Key(用于联网搜索功能)
-
启动后端: bash mvn spring-boot:run
java -jar target/DocMind.jar
-
启动前端: bash cd DocMind-frontend npm install npm run dev
-
访问系统:打开浏览器,访问前端控制台输出的地址(通常是
http://localhost:5173)。使用默认账号登录,开始上传文档并体验智能问答。
我们提供了生产环境可用的 docker-compose.prod.yml 配置文件,一键部署所有组件。
bash
- 构建后端 Docker 镜像 (在项目根目录)
docker build -t docmind-backend:latest .
- 调整配置文件
编辑 docker-compose.prod.yml,设置正确的环境变量(API Keys等)。
- 启动所有服务
docker-compose -f docker-compose.prod.yml up -d
部署成功后,访问 http://your-server-ip:8080 即可使用系统。
源码链接:https://pan.quark.cn/s/8c1b46a96139?pwd=fv9U
由 Xingyan Liu 构建,用 ❤️ 和 ☕️ 驱动
