实验室智能助手 —— 基于 RAG + 多 Agent 的知识问答系统
一个面向实验室场景的 AI Agent 项目,集成 RAG 知识检索、Planner/Executor 多 Agent 深度问答、自动 Memory 压缩、代码助手和多用户协作对话。
| 功能 | 说明 |
|---|---|
| RAG 知识检索 | 上传 .txt / .md 文档,自动切块向量化存入 Milvus,问答时语义检索增强回答 |
| 多 Agent 深度问答 | Planner → Executor → Supervisor 三层 Agent 架构,对复杂问题进行规划-执行-再规划闭环 |
| 自动 Memory | 单 session 对话轮数超过阈值(默认 8 轮)时,自动调用 LLM 对历史进行摘要压缩,注入上下文窗口 |
| 代码助手 | 专属代码模式,支持代码生成、解释、调试,代码块语法高亮 + 一键复制 |
| 多用户协作 | 创建/加入共享房间(6 位房间码),多人实时共享同一 session,AI 回复 SSE 广播给所有成员 |
- 后端: Spring Boot 3.2 + Java 17
- AI 框架: Spring AI 1.1 + Spring AI Alibaba 1.1.0.0-RC2
- Agent: ReactAgent + SupervisorAgent(Spring AI Alibaba Agent Framework)
- 大模型: 阿里云 DashScope(qwen3-max 对话 / text-embedding-v4 向量化)
- 向量数据库: Milvus 2.4
- 前端: 原生 HTML/CSS/JS + marked.js + highlight.js
lab-assistant/
├── src/main/java/org/example/
│ ├── agent/tool/
│ │ ├── DateTimeTools.java # 时间工具
│ │ ├── InternalDocsTools.java # RAG 文档检索工具
│ │ └── CodeTools.java # 代码生成/解释/调试工具
│ ├── service/
│ │ ├── ChatService.java # ReactAgent 对话编排
│ │ ├── LabAgentService.java # Planner+Executor 多 Agent
│ │ ├── MemoryService.java # 自动历史摘要
│ │ ├── SharedSessionService.java # 多用户协作 Session
│ │ ├── RagService.java # RAG 流式问答
│ │ ├── VectorIndexService.java # 文档切块 + 向量入库
│ │ ├── VectorSearchService.java # 向量相似度检索
│ │ └── VectorEmbeddingService.java # 文本向量化
│ └── controller/
│ ├── ChatController.java # 主 API 控制器
│ └── FileUploadController.java # 文件上传
├── src/main/resources/
│ ├── application.yml # 配置文件
│ ├── application-example.yml # 配置示例
│ └── static/ # 前端静态资源
├── docker-compose.yml # Milvus 向量数据库
└── pom.xml
- Java 17+
- Maven 3.8+
- Docker & Docker Compose
- 阿里云 DashScope API Key(申请地址)
git clone https://github.com/deepbule0/lab-assistant.git
cd lab-assistantdocker-compose up -d等待 Milvus 启动完成(约 30 秒),可访问 http://localhost:8000 查看 Attu 管理界面。
# Linux / macOS
export DASHSCOPE_API_KEY=sk-your-dashscope-api-key
# Windows PowerShell
$env:DASHSCOPE_API_KEY="sk-your-dashscope-api-key"
# Windows CMD
set DASHSCOPE_API_KEY=sk-your-dashscope-api-key或复制配置示例并修改:
cp src/main/resources/application-example.yml src/main/resources/application-local.yml
# 编辑 application-local.yml,填入 api-keymvn spring-boot:run点击输入框左侧 ··· → 上传文件,支持 .txt / .md 格式。文件会自动切块(800字/块,100字重叠)并向量化存入 Milvus。
顶部切换三种模式:
- 普通对话 — ReactAgent + RAG,适合日常问答
- 多 Agent — Planner/Executor 深度分析,适合复杂问题
- 代码助手 — 专注代码生成、解释、调试
底部状态栏显示当前对话轮数。超过 8 轮后自动触发摘要,历史被压缩为摘要注入上下文,状态栏显示「已启用 Memory 摘要」。
- 点击右上角 创建房间 → 获得 6 位房间码
- 分享房间码给其他人
- 其他人点击 加入房间 → 输入房间码和昵称
- 所有成员共享同一对话历史,AI 回复实时广播
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/chat_stream |
普通流式对话(SSE) |
| POST | /api/agent_stream |
多 Agent 流式对话(SSE) |
| POST | /api/chat/clear |
清空会话历史 |
| GET | /api/chat/session/{id} |
获取会话信息(含 Memory 状态) |
| POST | /api/upload |
上传文档到知识库 |
| POST | /api/shared/create |
创建共享房间 |
| POST | /api/shared/join |
加入共享房间 |
| GET | /api/shared/stream/{code} |
订阅共享房间 SSE |
| POST | /api/shared/send |
向共享房间发送消息 |
# 普通对话
curl -X POST http://localhost:9901/api/chat_stream \
-H "Content-Type: application/json" \
-d '{"Id":"session-1","Question":"介绍一下 RAG 技术"}'
# 创建共享房间
curl -X POST http://localhost:9901/api/shared/create| 配置项 | 默认值 | 说明 |
|---|---|---|
server.port |
9901 |
服务端口 |
rag.top-k |
3 |
RAG 检索返回文档数 |
rag.model |
qwen3-max |
RAG 使用的对话模型 |
memory.threshold |
8 |
触发自动摘要的对话轮数 |
document.chunk.max-size |
800 |
文档切块最大字符数 |
document.chunk.overlap |
100 |
切块重叠字符数 |
milvus.host |
localhost |
Milvus 地址 |
milvus.port |
19530 |
Milvus 端口 |
欢迎提交 Issue 和 Pull Request。
- Fork 本仓库
- 创建特性分支
git checkout -b feature/your-feature - 提交更改
git commit -m 'Add some feature' - 推送分支
git push origin feature/your-feature - 提交 Pull Request