ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

用Spring AI调模型很爽,但手搓AI工作流你试过吗?Spring AI Alibaba把Agent变成了一张图

用Spring AI调模型很爽,但手搓AI工作流你试过吗?Spring AI Alibaba把Agent变成了一张图 用Spring AI调模型很爽但手搓AI工作流你试过吗Spring AI Alibaba把Agent变成了一张图一句话先睹为快Spring AI Alibaba不是在Spring AI上“加几个阿里云适配器”而是将整个框架从“模型调用抽象”推向了“工作流编排平台”——以Graph为运行时基座、以ReactAgent为高层抽象、以A2ANacos为分布式协作骨架让Java开发者用Spring的方式构建生产级Agentic应用。你有没有想过——当你用Spring AI几行代码调用大模型时一切都很美好StringresponsechatClient.prompt(你好).call().content();但当产品经理跑过来说“让AI自己判断用户意图然后调用不同的工具。如果涉及退款先让主管审批一下审批通过再执行。”你开始用if-else和while手搓多步骤流程。Service层堆满了状态变量、条件分支和循环控制。然后老板又说“让两个AI并行处理不同任务最后把结果汇总。”你发现代码已经变成了一团乱麻。更崩溃的是半夜三点服务重启所有正在进行的工单审批全部丢失。业务方一大早就冲过来问“为什么AI处理到一半的流程全没了”你真正需要的不是更聪明的模型而是一个能把“多步骤推理、条件分支、工具循环、人工审批、状态持久化”全部装进去的工作流引擎。Spring AI Alibaba正是为回答这个问题而生的。Spring AI Alibaba由阿里云团队主导开发于2024年9月正式开源。截至2026年8月项目已迭代至1.1.2.x系列在阿里巴巴集团十余条核心业务线生产环境深度使用来源InfoQ技术文章、GitHub Releases。它的特别之处在于它不是Spring AI的“阿里云适配器”而是一个在Spring AI之上重构了Agent编程范式的框架——它把“Agent推理框架映射成Graph”用Graph作为运行时基座。那么这个“把Agent变成Graph”的Java框架到底是如何设计的我们从源码出发一步步拆解。一、打个比方AI工作流就像一座城市的交通图想象你运营一支智能配送车队。Graph有向图就是这座城市的交通图——每条路线节点代表一个任务路与路之间的连接边决定了车队下一步往哪走。这张图让整个配送流程一目了然从哪个仓库出发START经过哪些站点节点在哪个路口该左转还是右转条件边最终到达哪里END。State状态是中央调度室的实时大屏——所有车辆的位置、货物状态、天气信息都在上面。每个站点完成工作后都会更新这个大屏。检查点Checkpoint是车辆的自动存档点——每完成一个站点系统就自动保存一次。即使半夜抛锚服务重启也能从最近的存档点恢复不用从头再来。ReactAgent是自动驾驶系统——你只需要告诉它“把货物送到指定地点”它自己决定走哪条路、要不要加油调用工具、遇到堵车怎么办重新规划。A2ANacos是对讲机调度中心——不同城市的车队通过对讲机互相求助调度中心知道每一支车队的位置和能力。这就是Spring AI Alibaba的设计哲学Agent不是对话是工作流——有状态、有分支、可并行、可暂停、可恢复。二、核心问题为什么“手搓工作流”行不通在SAA出现之前Java开发者处理多步骤AI任务的方式是这样的// 第一步调用模型分析StringanalysischatClient.prompt(分析这个用户需求).call().content();// 第二步根据分析结果决定调用哪个工具if(analysis.contains(退款)){StringrefundResultrefundTool.execute(orderId);// 第四步如果需要人工审批if(refundResult.contains(审批)){// 等待人工审批……状态存哪里}}elseif(analysis.contains(咨询)){StringanswerknowledgeBase.search(question);}// ——这些逻辑散落在Service层难以维护更无法可视化这段代码的问题状态散落流程中间的状态变量到处定义难以追踪无法恢复服务一重启正在执行的流程直接丢失无法并行多个分支只能串行执行无法可视化全是纯代码逻辑业务方看不懂也没法调试无法暂停需要人工审批时你发现自己不知道怎么“停下来等”SAA的解法把工作流变成一张图。三、Graph Core三要素撑起工作流引擎Graph Core是SAA整个框架的“心脏”。它的核心模型只有三个概念要素作用通俗理解State状态全局共享数据贯穿流程中央调度室的“实时大屏”Node节点执行具体逻辑交通图上的“站点”Edge边决定下一个节点站点之间的“道路”// 文件路径spring-ai-alibaba-graph-core结构示意// ① State所有节点共享的数据publicclassState{privateMapString,Objectdata;}// ② Node执行具体逻辑publicinterfaceNode{Objectexecute(Statestate);}// ③ Edge决定下一个节点publicinterfaceEdge{Stringroute(Statestate);}构建流程构建→编译→执行。// 构建一个客服工作流StateGraphgraphnewStateGraph().addNode(classifier,node_async(分类逻辑))// 第一步分类.addNode(refund_handler,node_async(退款处理))// 退款分支.addNode(consult_handler,node_async(咨询处理))// 咨询分支.addEdge(START,classifier).addConditionalEdges(classifier,edge_async(路由逻辑),Map.of(退款,refund_handler,咨询,consult_handler,其他,END)).compile();// ★ 编译后图结构固定可安全并发执行设计模式解读StateGraph.compile()是构建器模式的经典应用——构建阶段自由增减节点编译后结构固定可安全并发执行。核心数据结构SAA预置了15种节点类型——LlmNode模型调用、ToolNode工具执行、KnowledgeRetrievalNode知识检索、QuestionClassifierNode问题分类等开箱即用来源SAA GitHub源码。四、ReactAgent不用手搓ReAct循环很多Java新手写AI Agent喜欢自己写while(true)循环去模拟“推理-行动”过程。这不仅容易写出Bug还极其容易陷入工具调用无限循环。ReactAgent遵循ReAct范式Reasoning Acting用户输入 → Agent推理要不要用工具 ↓ 需要工具 ↙ ↘ 是 否 ↓ ↓ 调用工具 生成最终答案 ↓ 获取结果回到推理你只需要这样写ReactAgentagentReactAgent.builder().name(weather_agent).model(chatModel).instruction(You are a helpful assistant.).tools(toolList)// 工具列表.saver(newPostgresSaver())// ★ 检查点保存器重要.build();agent.call(杭州天气怎么样);关键设计ReactAgent的底层运行在Graph之上——builder()在背后构建了一个标准的ReAct循环图LLM节点↔工具节点然后编译为CompiledGraph执行。你拿到的不仅是简洁的API更是Graph提供的全量状态管理能力。五、检查点让Agent扛得住崩溃这是SAA最实用的企业级能力之一。Graph Core支持6种持久化后端来源SAA官方文档PostgreSQL、MySQL、Oracle、MongoDB、Redis、File。PostgresSaversaverPostgresSaver.builder().dataSource(dataSource).build();ReactAgentagentReactAgent.builder().model(model).saver(saver)// ★ 开启检查点.build();检查点保存的内容来源SAA Graph Core源码当前图状态所有通道的值历史消息下一步要执行的节点待写入的更新三个核心能力能力业务价值故障恢复凌晨服务重启流程不丢中断与恢复人工审批可以“等”时间旅行调试时“倒带”看每一步六、执行流程全链路拆解当你调用agent.call(用户问题)时① 用户调用 agent.call(用户问题) ↓ ② ReactAgent 将调用委托给底层 CompiledGraph ↓ ③ Graph 初始化状态 → 进入超步循环 ↓ ④ 第一超步执行 LLM 节点AgentLlmNode ├── 执行前置 HooksbeforeLlm ├── 调用 ChatModel → 获取响应 └── 执行后置 HooksafterLlm ↓ ⑤ 条件边路由响应是否包含 tool calls ├── 否 → 跳到 END返回最终答案 └── 是 → 执行工具节点AgentToolNode ↓ ⑥ 工具节点执行所有工具调用 ├── 执行前置 HooksbeforeTool ├── 调用工具方法 → 获取结果 └── 执行后置 HooksafterTool ↓ ⑦ 将工具结果追加到状态 → 回到 LLM 节点下一超步 ↓ ⑧ 检查点保存如配置了 saver ↓ ⑨ 循环直到 LLM 不再返回 tool calls图Spring AI Alibaba的完整执行流程。从Agent.call到最终响应经历LLM推理、工具执行、条件路由、检查点保存的全链路。关键设计整个执行过程遵循**“构建→编译→执行”三阶段模式**。Agent Framework在构建阶段定义图结构编译阶段验证并生成可执行图执行阶段由Graph Core按拓扑序调度。七、多智能体协作开箱即用的4种模式SAA的Agent Framework提供了四种内置的多智能体工作流模式来源SAA官方文档模式适用场景SequentialAgent有明确依赖链的审批流程ParallelAgent大批量独立任务并行处理RoutingAgent根据意图路由给不同专业AgentLoopAgent需要迭代优化的任务A2ANacos让多Agent系统可以跨越多个微服务实例部署——Agent通过Nacos注册自己的能力其他Agent发现并调用这些能力来源SAA官方文档。八、横向对比SAA在Java生态中是什么位置对比维度Spring AI AlibabaSpring AILangChain4j核心定位企业级Agent工作流平台Spring官方AI抽象声明式Java AI框架设计哲学Graph为运行时基座抽象与解耦声明式服务核心抽象StateGraphReactAgentModelChatClientAiServices工作流引擎自研Graph Core无内置有限分布式A2A✅Nacos原生集成❌❌Admin/Studio✅可视化平台❌❌数据来源各框架官方文档及GitHub截至2026年8月选型建议需要复杂工作流编排、多Agent协作、可视化运维→Spring AI Alibaba已有Spring Boot项目需要基础AI能力→Spring AI需要声明式AI服务、组件最全→LangChain4j九、避坑指南陷阱1检查点未配置导致状态丢失// ❌ 错误没有检查点ReactAgentagentReactAgent.builder().model(model).build();// ✅ 正确配置检查点ReactAgentagentReactAgent.builder().model(model).saver(newPostgresSaver(dataSource)).build();陷阱2工具调用无限循环现象Agent在LLM节点和工具节点之间无限循环。解决在Agent配置中设置最大迭代次数或通过上下文工程策略限制工具调用次数。陷阱3分布式部署时A2A通信失败现象多Agent协作时Agent无法发现彼此。解决引入spring-ai-alibaba-starter-a2a-nacos依赖确保Nacos服务发现和配置管理正确启用。写在最后Spring AI Alibaba的本质不是在Spring AI上“加几个阿里云适配器”而是将整个框架从“模型调用抽象”推向了“工作流编排平台”——以Graph为运行时基座、以ReactAgent为高层抽象、以A2ANacos为分布式协作骨架让Java开发者用Spring的方式构建生产级Agentic应用。它用Graph Core回答了“工作流怎么编排”——StateNodeEdge三要素15预置节点类型开箱即用。它用检查点回答了“崩溃了怎么办”——6种持久化后端每超步自动保存从任意存档点恢复。它用4种多智能体模式回答了“多Agent怎么协作”——Sequential/Parallel/Routing/Loop开箱即用。如果你正在Java项目中探索Agent落地1.1.2.2版本值得花一个下午深入读一读spring-ai-alibaba-graph-core模块的源码。关注我们获取更多AI技术深度解读和Java生态落地案例。如您所在的企业正面临AI技术选型、大模型应用落地或系统架构设计的挑战欢迎进一步沟通。我们可提供针对贵企业具体场景的定制化方案和现场调研服务。数据来源Spring AI Alibaba官方文档、GitHub仓库源码1.1.2.x系列、InfoQ技术文章、CSDN源码分析系列、Spring AI Alibaba Admin深度解读截至2026年8月
返回列表