ProjectsApr 1, 20266 分钟/阅读时间
基于Graph Agent的智能聊天助手 - Project Detail

JAVASpring AIRAGRedis,LLM
基于Graph Agent的智能聊天助手——项目说明文档
1. 项目是什么
本项目是一个基于 Spring Boot + Spring AI 的多智能体聊天系统,核心目标不是“单次对话问答”,而是让 Agent 具备可编排执行能力:
- 能做任务拆解(Supervisor)
- 能按任务类型路由到不同 Worker(RAG / SQL / Tool)
- 能调用工具并根据执行结果重试或回退
- 能通过 SSE 把执行过程实时推送给前端
前端是 React + Vite + Ant Design,提供会话、Agent 管理、知识库管理与实时消息展示。
2. 核心能力
- Agent 图编排执行(GraphEngine)
- 多模型切换(
deepseek-chat/glm-4.6) - 工具系统(固定工具 + 可选工具)
- 知识库检索(PostgreSQL + pgvector + 混合检索)
- Redis 热缓存 + DB 冷存储的对话记忆
- SSE 实时状态与增量内容推送
3. 技术栈
后端(graph mind)
- Java 17
- Spring Boot 3.5.8
- Spring AI 1.1.0
- MyBatis
- PostgreSQL + pgvector
- Redis
- Lombok
前端(ui)
- React 19
- TypeScript
- Vite(rolldown-vite)
- Ant Design 6
- Tailwind CSS 4
- React Router 7
4. 架构与执行链路
4.1 请求主链路(聊天)
- 前端调用
POST /api/chat-messages写入用户消息。 ChatMessageFacadeServiceImpl发布ChatEvent。ChatEventListener异步消费事件,创建JChatMind实例并执行run()。JChatMindFactory按 Agent 配置装配模型、工具、知识库、记忆与图节点。GraphEngine从SUPERVISOR开始调度到RAG_WORKER / SQL_WORKER / TOOL_WORKER。- 每轮产出的 assistant/tool 消息会持久化并通过
SseService推送前端。 - 结束时统一发送
AI_DONE,前端解除输入锁定。
4.2 SSE 消息类型
AI_GENERATED_CONTENTAI_GENERATED_CONTENT_STARTAI_GENERATED_CONTENT_DELTAAI_GENERATED_CONTENT_ENDAI_PLANNINGAI_THINKINGAI_EXECUTINGAI_DONE
5. 目录结构(精简)
JChatMind/
├─ jchatmind/ # Spring Boot 后端
│ ├─ src/main/java/com/kama/jchatmind/
│ │ ├─ agent/ # Agent 核心(图编排、工具、记忆)
│ │ ├─ controller/ # REST / SSE 接口
│ │ ├─ service/impl/ # 业务实现
│ │ ├─ mapper/ # MyBatis Mapper 接口
│ │ ├─ config/ # 异步、CORS、多模型、Redis 配置
│ │ └─ event/ # ChatEvent 与监听器
│ └─ src/main/resources/
│ ├─ application.yaml
│ └─ mapper/*.xml # SQL 映射(agent/chat/kb/document/chunk)
└─ ui/ # React 前端
└─ src/
├─ api/ # HTTP 封装与接口定义
├─ components/ # 聊天页、知识库页、布局组件
├─ hooks/ # Agents / Sessions / KB / Documents
└─ contexts/ # 会话上下文
6. 数据层模型(按 Mapper 推断)
主要表:
agentchat_sessionchat_messageknowledge_basedocumentchunk_bge_m3(embedding为vector)
说明:
- Agent 的
allowed_tools / allowed_kbs / chat_options存在 JSONB 字段。 - 向量检索依赖
chunk_bge_m3.embedding <-> query_vector。
7. 关键模块说明
7.1 JChatMindFactory
负责运行时装配:
- 读取 Agent 配置
- 选择 ChatClient(按
model字段) - 计算可用工具(固定 + 可选)
- 根据工具集合决定启用哪些 Worker
- 构建
GraphEngine
7.2 SupervisorNode
负责:
- 任务拆分
- 领域判定(SQL / RAG / TOOL / GENERAL)
- 工具策略约束与重试
- 结果评估与最终总结
7.3 DistributedChatMemory
- Redis: 热缓存(key:
chat:memory:<sessionId>) - PostgreSQL: 冷数据回源
- 仅保留最近
messageLength条消息参与上下文
7.4 DocumentFacadeService + RagService
- 上传 Markdown 后自动解析 section
- 对 section 标题做 embedding
- 写入
chunk_bge_m3 - 检索时执行向量/关键词混合召回
8. 对外接口概览
Agent
GET /api/agentsPOST /api/agentsPATCH /api/agents/{agentId}DELETE /api/agents/{agentId}
会话与消息
GET /api/chat-sessionsGET /api/chat-sessions/{chatSessionId}GET /api/chat-sessions/agent/{agentId}POST /api/chat-sessionsPATCH /api/chat-sessions/{chatSessionId}DELETE /api/chat-sessions/{chatSessionId}GET /api/chat-messages/session/{sessionId}POST /api/chat-messagesPATCH /api/chat-messages/{chatMessageId}DELETE /api/chat-messages/{chatMessageId}
知识库与文档
GET /api/knowledge-basesPOST /api/knowledge-basesPATCH /api/knowledge-bases/{knowledgeBaseId}DELETE /api/knowledge-bases/{knowledgeBaseId}GET /api/documentsGET /api/documents/kb/{kbId}POST /api/documentsPOST /api/documents/uploadPATCH /api/documents/{documentId}DELETE /api/documents/{documentId}
工具与 SSE
GET /api/toolsGET /sse/connect/{chatSessionId}GET /health
9. 本地启动(开发环境)
9.1 前置依赖
- JDK 17
- Maven(或使用
mvnw.cmd) - Node.js 20+
- PostgreSQL(需安装 pgvector 扩展)
- Redis
- Ollama(用于
bge-m3embedding,默认访问http://localhost:11434)
9.2 启动后端
cd jchatmind
mvnw.cmd spring-boot:run
默认端口:8080
9.3 启动前端
cd ui
npm install
npm run dev
默认端口通常为:5173
10. 配置说明
核心配置文件:
jchatmind/src/main/resources/application.yamljchatmind/src/main/resources/application-dev.yaml
重点配置项:
- 数据库:
spring.datasource.* - Redis:
spring.data.redis.* - 模型:
spring.ai.deepseek.*、spring.ai.zhipuai.* - 向量检索参数:
vectormodel.* - 文档存储目录:
document.storage.base-path
建议:
- 不要把真实 API Key 提交到仓库。
- 优先使用环境变量注入密钥(如
${springAI.deepseek.api-key})。
11. 扩展指南
-
新增模型:
- 在
MultiChatClientConfig增加ChatClient Bean - 保证 Agent
model字段能命中该 Bean 名
- 在
-
新增工具:
- 实现
com.kama.jchatmind.agent.tools.Tool - 用
@org.springframework.ai.tool.annotation.Tool暴露方法 - 设置
ToolType(FIXED/OPTIONAL) - 在 Agent 配置中控制是否挂载
- 实现
-
调整执行策略:
- 修改
SupervisorNode的领域判定、重试阈值、策略校验逻辑
- 修改
12. 已知注意事项
- 目前未发现数据库初始化 SQL 脚本,需要手动建表。
- SSE 连接按
chatSessionId维护,前端应优先建立连接后再发消息。 - 文件系统工具类当前未启用
@Component,默认不参与工具装配。