多 Agent 协作请假审批系统 技术设计文档基于 Spring AI Alibaba(通义千问)+ 手动 ReAct 循环 + SSE 实时追踪,把传统「Web 表单 + 审批页」业务改造为对话式体验。用户只和一个主 Agent 聊天,主 Agent 在后台自动调度收集、审批、查询三个子 Agent 完成业务闭环。1. 项目定位项说明业务场景员工请假申请 + 审批原流程用户在前端填写表单 → 保存草稿 / 提交 → 管理员在另一个页面审批新流程用户只和主 Agent 对话,字段在对话中被提取并落库,审批也通过自然语言完成核心挑战对话式拿到结构化数据、角色隔离、可追溯可视化解法Supervisor + 子 Agent 工具化 + 手动 ReAct + SSE + 读写分离2. 技术栈层选型作用运行时JDK 17基础环境框架Spring Boot 3.3.5Web / 依赖注入 / 事务AI 编排Spring AI 1.0.0ChatModel、ToolCalling、消息抽象大模型Spring AI Alibaba DashScope Starter 1.0.0.3(qwen-plus)通义千问对接数据访问Spring Data JPA + MySQL 8持久化工具库Lombok 1.18.34去除样板代码前端原生 HTML + fetch 流式读取极简 SSE 消费推送SseEmitter(text/event-stream)Agent 过程实时可视化3. 整体架构3.1 分层层组件职责接入层/api/chat+ SSE接收对话、流式返回事件编排层Supervisor Agent理解意图 + 路由,唯一面向用户子 Agent 层Collector / Approver / Query职责单一、被 Supervisor 通过工具调用工具层@Tool注解方法封装业务能力,内置权限硬校验服务层LeaveFormService / FormQueryService写服务 + 读服务分离持久化层JPA Repository落库 MySQL3.2 调用关系示意Browser ──POST /api/chat──▶ AgentChatController │ ▼ AgentOrchestrator │ ▼ Supervisor (ManualReActAgent) / │ \ ▼ ▼ ▼ callCollector callApprover callQuery (@Tool 方法) │ │ │ ▼ ▼ ▼ Collector Approver Query (子 ManualReActAgent) Agent Agent Agent │ │ │ ▼ ▼ ▼ FormCollector FormApprover FormQuery (业务工具层) Tools Tools Tools │ │ │ ▼ ▼ ▼ LeaveFormService FormQueryService (应用服务) │ │ └──────── JPA ─────────┘ │ ▼ MySQL4. Agent 角色矩阵Agent是否面向用户可调用工具权限要求典型场景Supervisor是callCollector / callApprover / callQuery无(自身不操作业务)所有用户输入的第一站Collector否saveDraft / submitAPPLICANT新建请假、补字段、提交Approver否listPending / getForm / approveAPPROVER查待办、通过或驳回Query否listMyApplications / listMyApprovals / searchByStatus / getDetail / getTimeline只读,按角色自动裁剪查询范围查「我有哪些」「走到哪了」4.1 设计原则原则体现单一职责每个子 Agent 只做一件事,工具集互不重叠读写分离业务 Agent 只写数据;只读查询集中到 Query Agent身份隔离工具入口有 requireXxx 硬校验,LLM 即使被诱导也无法越权可观测所有过程事件(思考、工具调用、交接)都通过 SSE 推给前端5. 数据模型5.1 leave_form(请假主表)字段类型是否索引含义idVARCHAR(64)主键uuid 前 8 位applicantVARCHAR(64)是申请人姓名leave_typeVARCHAR(32)否年假 / 病假 / 事假start_dateVARCHAR(32)否yyyy-MM-ddend_dateVARCHAR(32)否y
多Agent协作示例--请假审批系统(基于Spring AI Alibaba)
多 Agent 协作请假审批系统 技术设计文档基于 Spring AI Alibaba(通义千问)+ 手动 ReAct 循环 + SSE 实时追踪,把传统「Web 表单 + 审批页」业务改造为对话式体验。用户只和一个主 Agent 聊天,主 Agent 在后台自动调度收集、审批、查询三个子 Agent 完成业务闭环。1. 项目定位项说明业务场景员工请假申请 + 审批原流程用户在前端填写表单 → 保存草稿 / 提交 → 管理员在另一个页面审批新流程用户只和主 Agent 对话,字段在对话中被提取并落库,审批也通过自然语言完成核心挑战对话式拿到结构化数据、角色隔离、可追溯可视化解法Supervisor + 子 Agent 工具化 + 手动 ReAct + SSE + 读写分离2. 技术栈层选型作用运行时JDK 17基础环境框架Spring Boot 3.3.5Web / 依赖注入 / 事务AI 编排Spring AI 1.0.0ChatModel、ToolCalling、消息抽象大模型Spring AI Alibaba DashScope Starter 1.0.0.3(qwen-plus)通义千问对接数据访问Spring Data JPA + MySQL 8持久化工具库Lombok 1.18.34去除样板代码前端原生 HTML + fetch 流式读取极简 SSE 消费推送SseEmitter(text/event-stream)Agent 过程实时可视化3. 整体架构3.1 分层层组件职责接入层/api/chat+ SSE接收对话、流式返回事件编排层Supervisor Agent理解意图 + 路由,唯一面向用户子 Agent 层Collector / Approver / Query职责单一、被 Supervisor 通过工具调用工具层@Tool注解方法封装业务能力,内置权限硬校验服务层LeaveFormService / FormQueryService写服务 + 读服务分离持久化层JPA Repository落库 MySQL3.2 调用关系示意Browser ──POST /api/chat──▶ AgentChatController │ ▼ AgentOrchestrator │ ▼ Supervisor (ManualReActAgent) / │ \ ▼ ▼ ▼ callCollector callApprover callQuery (@Tool 方法) │ │ │ ▼ ▼ ▼ Collector Approver Query (子 ManualReActAgent) Agent Agent Agent │ │ │ ▼ ▼ ▼ FormCollector FormApprover FormQuery (业务工具层) Tools Tools Tools │ │ │ ▼ ▼ ▼ LeaveFormService FormQueryService (应用服务) │ │ └──────── JPA ─────────┘ │ ▼ MySQL4. Agent 角色矩阵Agent是否面向用户可调用工具权限要求典型场景Supervisor是callCollector / callApprover / callQuery无(自身不操作业务)所有用户输入的第一站Collector否saveDraft / submitAPPLICANT新建请假、补字段、提交Approver否listPending / getForm / approveAPPROVER查待办、通过或驳回Query否listMyApplications / listMyApprovals / searchByStatus / getDetail / getTimeline只读,按角色自动裁剪查询范围查「我有哪些」「走到哪了」4.1 设计原则原则体现单一职责每个子 Agent 只做一件事,工具集互不重叠读写分离业务 Agent 只写数据;只读查询集中到 Query Agent身份隔离工具入口有 requireXxx 硬校验,LLM 即使被诱导也无法越权可观测所有过程事件(思考、工具调用、交接)都通过 SSE 推给前端5. 数据模型5.1 leave_form(请假主表)字段类型是否索引含义idVARCHAR(64)主键uuid 前 8 位applicantVARCHAR(64)是申请人姓名leave_typeVARCHAR(32)否年假 / 病假 / 事假start_dateVARCHAR(32)否yyyy-MM-ddend_dateVARCHAR(32)否y