Spring AI Alibaba-Graph流程编排

目录

1、Graph 工作流编排

1.1、核心组件

1.1.1、状态 (State)

1.1.2、节点 (Node)

1.1.2.1、NodeAction

1.1.2.2、NodeAction和AsyncNodeAction核心区别

1.1.2.3、如果各节点是有先后顺序的,异步AsyncNodeAction的意义何在?

1.1.2.3.1、异步的真正意义在于“不阻塞当前线程”:

1.1.2.3.2、应对 AI 应用中的“高耗时”特性:

1.1.2.3.3、为“并行分支”提供基础能力

1.1.2.3.4. 框架的底层设计哲学:异步优先

1.1.3、边 (Edge)

1.2、核心能力与优势

1.3、智能流程编排示例

1.3.1、添加依赖

1.3.2、设置策略

1.3.3、编排 Graph 工作流

1.3.4、触发与执行

1.3.5、调用示例


Spring AI Alibaba继承SpringAI。增强,深度集成了阿里巴巴中间件生态,特别是 Nacos(3.1.0 或更高版本)。补齐了企业级应用所必需的分布式治理能力。

官网:https://sca.aliyun.com/en/docs/ai/overview/

能力 原生 Spring AI Spring AI Alibaba + Nacos
服务注册 不支持 支持。MCP Server 启动时自动将自身及工具元数据注册到 Nacos。
服务发现 不支持 支持。MCP Client 从 Nacos 动态获取可用的 Server 实例列表,而非硬编码地址。
负载均衡 不支持 支持。Client 端内置负载均衡器(如轮询),在调用工具时自动选择健康的 Server 实例。
高可用 单点故障 高可用。当某个 Server 实例宕机,Client 会自动感知并切换到其他健康实例。
智能路由 不支持 支持。通过 Nacos MCP Router 组件,可根据工具描述进行智能路由,而不仅是简单的负载均衡。

1、Graph 工作流编排

官方文档:https://java2ai.com/docs/frameworks/graph-core/quick-start

Graph 工作流编排是 Spring AI Alibaba 的核心增强能力,它将 AI 应用的构建过程,从单一的“对话”模式,升级为可编排、可控制、有状态的“流程”模式。Graph 框架允许开发者通过声明式 API 定义复杂的、有状态的 AI 工作流,支持多智能体协作、条件分支、循环和人工介入(Human-in-the-loop),非常适合构建复杂的业务流程。

它的每个节点不再只是简单的业务逻辑,而可以是 AI 对话、工具调用、条件判断,甚至是另一个完整的子流程。

1.1、核心组件

Graph将复杂的工作流抽象为三个核心组件:状态(State)、节点(Node)和边(Edge)。

1.1.1、状态 (State)

它是整个工作流的“共享大脑”或“记事本”,是一个贯穿始终的、线程安全的键值对数据结构(OverAllState)。

每个节点都从 State 中读取所需信息,并将自己的处理结果写回 State。这样,数据就能在不同的节点之间流动和累积。

策略:并且可以通过 KeyStrategy 来定义当多个节点同时更新同一个状态键时,如何进行合并  (三种策略:ReplaceStrategy替换、AppendStrategy追加到列表、MergeStrategy合并。)  默认defaultStrategy = KeyStrategy.REPLACE;

且Append策略对应的类型,如果有值的话会直接构建为List类型,这种后面从state中取值要注意类型。

1.1.2、节点 (Node)

是工作流中的“处理单元”,代表一个具体的动作。

负责接收当前的 State 作为输入,执行逻辑(如调用大模型、执行一段 Java 代码、调用外部 API),然后返回对 State 的更新。

1.1.2.1、NodeAction

NodeAction和AsyncNodeAction:可以通过实现 NodeAction 接口来创建自定义节点。

NodeAction 是Graph中对节点的抽象。我们只需要实现NodeAction接口,在apply方法中定义节点的 执行逻辑即可。但是要区分同步与异步的执行机制。AsyncNodeAction 异步节点,提供了一个静态方法可以NodeAction转化成 AsyncNodeAction。

1.1.2.2、NodeAction和AsyncNodeAction核心区别

NodeAction(同步节点)执行方式:阻塞式执行。当调用 apply 方法时,当前线程会一直等待该方法执行完毕并返回更新的状态映射(Map<String, Object>)后,才会继续往下走。

AsyncNodeAction(异步节点)执行方式:非阻塞式执行。它的 apply 方法返回的是一个 CompletableFuture<Map<String, Object>>,这意味着节点任务会被提交到异步线程中执行,不会阻塞主流程。

使用异步节点可以大幅提升工作流的整体并发能力和响应速度

在实际开发中,无需为同步和异步编写两套代码:AsyncNodeAction 提供了一个静态方法 node_async(NodeAction syncAction),可以直接将一个同步的 NodeAction 包装成异步的 AsyncNodeAction

var readEmail = node_async(new ReadEmailNode());

框架底层会通过 CompletableFuture 自动包装同步操作的结果兜底,并处理异常传递。

如果你的节点不仅需要全局状态(OverAllState),还需要获取运行时配置(如线程 ID、元数据等),可以使用 NodeActionWithConfig和AsyncNodeActionWithConfig 

强烈建议所有节点都使用 AsyncNodeAction(或通过 node_async 转换),以保证工作流的高效运行。

1.1.2.3、如果各节点是有先后顺序的,异步AsyncNodeAction的意义何在?

“节点之间的流转顺序”“节点内部的执行方式”是不同概念。宏观顺序不变,微观执行不阻塞。

在 Spring AI Alibaba Graph 中,节点之间的先后顺序是由 Edge(边)和 StateGraph 的编排决定的。无论节点是同步还是异步,图执行引擎都会严格按照你定义的边来推进流程(例如 A -> B -> C)。异步改变的是“等待的方式”,而不是“执行的先后顺序”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值