Java Ai :SpringAiAlibaba graph人工介入基础入门及详细解释【含完整代码】

张开发
2026/4/16 8:03:53 15 分钟阅读

分享文章

Java Ai :SpringAiAlibaba graph人工介入基础入门及详细解释【含完整代码】
前言在企业级AI应用中,完全自动化的流程往往难以满足复杂业务需求。例如请假审批系统,AI可以帮我们校验信息、计算余额,但最终的决策权必须交给人。这就需要 人工介入(Human-in-the-Loop) 机制。本文将带你从零开始,使用 Spring AI Alibaba Graph 框架,构建一个完整的请假审批工作流,深入讲解人工介入的实现原理。代码仓库后端代码前端代码实现效果一、基础概念:先搞懂 人工介入 在AI工作流中的定位1.1 什么是AI工作流中的人工介入?人工介入,本质是在AI自动化流程中设置 中断点 ,当流程执行到该节点时,暂停AI的自动执行,将关键信息推送至人工端,由人工完成判断、确认、审批等操作后,再将人工操作结果反馈给工作流,恢复流程继续执行。简单来说:AI负责“重复性、规则明确”的操作(如信息校验、数据计算),人工负责“不确定性、高风险、需主观判断”的操作(如信息确认、审批决策),二者协同完成完整业务流程。1.2 人工介入的核心场景以本文的员工请假流程为例,核心人工介入场景有2个,也是实际业务中最常见的场景:场景1:AI校验后的 信息确认 — AI完成请假信息(天数、类型、原因)的基础校验后,需要人工确认信息是否准确、是否存在遗漏,避免AI误判。场景2:流程中的 主管审批 — AI计算完员工假期余额后,需要主管人工审批是否同意请假,审批结果直接决定流程继续执行还是终止。1.3 核心技术框架说明本文案例基于Spring Cloud AI Graph 框架开发,该框架是Spring生态中用于构建AI工作流的核心框架,支持节点定义、流程编排、中断控制、状态管理,非常适合实现“AI+人工”混合工作流。核心优势:无需手动编写复杂的流程控制逻辑,通过注解和API即可完成节点配置、分支判断、中断与恢复,大幅降低人工介入流程的开发成本。二、核心组件在开始解析代码前,我们先梳理案例中涉及的核心组件,明确每个组件的作用,避免后续看代码时“一头雾水”。所有组件均对应本文提供的代码,一一对应,方便大家对照查看。2.1 核心组件分类及作用组件类型具体类名核心作用工作流配置类GraphHumanConfiguration定义工作流的节点、分支、状态字段,是整个工作流的“总配置”节点类(NodeLeaveInfoCheckNode、LeaveInfoConfirmNode等工作流的最小执行单元,负责具体业务逻辑(AI校验、人工确认、余额计算等)调度器类(Dispatcher)LeaveInfoDispatcher、ManagerApproveDispatcher负责分支判断,根据节点执行结果,决定流程下一步走向流程处理类GraphProcess处理工作流的输出流,将节点结果、中断信息推送至前端(供人工操作)控制器类GraphHumanController提供接口供前端调用(提交申请、人工确认、主管审批、查询中断状态)状态相关KeyStrategyFactory、StateGraph管理工作流的状态字段(如user_id、leave_days),支持状态持久化与更新2.2 核心概念补充StateGraph(状态图):整个工作流的载体,包含所有节点、分支、状态信息,负责流程的启动、执行、中断与恢复。中断点(Interrupt):人工介入的核心触发点,通过 interruptAfter(节点执行后中断)、interruptBefore(节点执行前中断)定义。StateSnapshot(状态快照):保存工作流中断时的所有状态信息,用于人工操作后恢复流程时,获取中断前的上下文。Stream(流):工作流的输出方式,通过SSE(Server-Sent Events)推送给前端,实现实时反馈(如节点执行状态、中断提示)。三、业务流程拆解结合本文案例的员工请假流程,我们先梳理完整的业务流程,明确AI操作和人工操作的边界、流程走向,再通过流程图和时序图直观呈现,最后对应代码解析。3.1 完整业务流程整个请假流程分为 AI自动执行 和 人工介入 两个阶段,共7个核心步骤,其中2个人工介入步骤,具体如下:员工提交请假申请:前端调用接口,传入user_id、user_name、leave_type(请假类型)、leave_days(请假天数)、leave_reason(请假原因)等参数。AI智能校验(自动):工作流启动,执行AI校验节点(LeaveInfoCheckNode),校验请假信息是否完整(天数0、类型和原因非空),返回校验结果(ok/error)。人工信息确认(介入):AI校验完成后,工作流中断(interruptAfter("ai_check")),将校验后的请假信息推送给人工,人工确认信息是否准确(确认/取消)。分支判断(自动):根据人工确认结果,调度器(LeaveInfoDispatcher)决定流程走向 — 确认通过则进入下一步,取消则流程终止。AI计算假期余额(自动):确认通过后,执行余额计算节点(LeaveCalcBalanceNode),计算员工的年假、病假、事假余额。主管审批(介入):余额计算完成后,工作流再次中断(interruptBefore("manager_approve")),将员工请假信息、假期余额推送给主管,主管审批(同意/拒绝)。流程收尾(自动):根据主管审批结果,调度器(ManagerApproveDispatcher)决定流程走向 — 同意则发送通知(LeaveNotifyNode),流程结束;拒绝则流程终止。3.2 工作流流程图以下流程图直观呈现整个请假流程的节点、分支和人工介入点,清晰区分AI自动节点和人工节点:人工确认通过人工确认取消审批通过审批拒绝流程开始AI智能校验请假信息(LeaveInfoCheckNode)人工信息确认(LeaveInfoConfirmNode,介入点)AI计算假期余额(LeaveCalcBalanceNode)流程结束主管审批(ManagerApproveNode,介入点)执行通知(LeaveNotifyNode)3.3 人工介入时序图时序图主要呈现 前端-后端-工作流-人工 的交互过程,重点体现人工介入时的中断、操作、恢复逻辑:人工操作(员工/主管)各业务节点StateGraph/CompiledGraphGraphHumanController前端(员工/主管)人工操作(员工/主管)各业务节点StateGraph/CompiledGraphGraphHumanController前端(员工/主管)调用/submit接口,传入请假参数启动工作流,传入参数执行AI校验节点(LeaveInfoCheckNode)返回AI校验结果(ok/error)触发中断(interruptAfter("ai_check"))通过SSE推送中断信息(需人工确认)展示请假信息+AI校验结果确认/取消操作调用/confirm-info接口,传入确认结果更新状态,恢复流程执行执行人工确认节点(LeaveInfoConfirmNode)返回下一步走向(calc_balance/END)执行余额计算节点(LeaveCalcBalanceNode)返回假期余额触发中断(interruptBefore("manager_approve"))通过SSE推送中断信息(需主管审批)展示请假信息+假期余额审批通过/拒绝调用/approve接口,传入审批结果更新状态,恢复流程执行执行主管审批节点(ManagerApproveNode)返回下一步走向(notify/END)执行通知节点(LeaveNotifyNode)返回通知结果流程执行完成通过SSE推送流程结束信息四、代码逐模块解析接下来,我们对照业务流程,逐模块解析代码,重点关注 人工介入相关逻辑 (中断配置、中断信息推送、人工操作接口、流程恢复),其他基础代码会简要说明,确保大家能看懂每一行代码的作用。4.1 核心依赖projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"modelVersion4.0.0/modelVersiongroupIdcom.elvis/groupIdartifactIdhuman-in-the-loop-leave/artifactIdversion1.0/versionpackagingjar/packagingnamehuman-in-the-loop-leave/nameurlhttp://maven.apache.org/urlpropertiesjava.version17/java.versionproject.build.sourceEncodingUTF-8/project.build.sourceEncodingproject.reporting.outputEncodingUTF-8/project.reporting.outputEncodingspring-boot.version3.5.4/spring-boot.versionspring-ai-alibaba.version1.1.2.0/spring-ai-alibaba.version/propertiesdependenciesdependencygroupIdorg.springframework.boot

更多文章