目录
1.1.2.2、NodeAction和AsyncNodeAction核心区别
1.1.2.3、如果各节点是有先后顺序的,异步AsyncNodeAction的意义何在?
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)。异步改变的是“等待的方式”,而不是“执行的先后顺序”。


3172

被折叠的 条评论
为什么被折叠?



