前面了解了基础的概念及流程,以及一些参数类

下面了解一些特殊的边和节点

条件边

常见的流程图可能长这个样子:

其中菱形的为条件节点(或者叫判定节点),但是在spring-ai-alibaba-graph中,并没有条件节点

在spring-ai-alibaba-graph中,条件是加在边上的

直觉添加条件边的方法可能是这个样子:addEdge(sourceNodeId, targetNodeId, condition)

但实际是这个样子:addConditionalEdges(sourceNodeId, condition, mappings)

sourceNodeId 是边的起始节点,condition 是判断条件,输出结果中包含一个 String 类型的结果,mappings 是一个Map<String, String>,key 是 condition 返回的结果中的 String, value 是 targetNodeId,目标节点id

也就是说,addConditionalEdges 方法添加了一个Edge对象,这个Edge对象包含了传统流程图中判定节点的逻辑,和后续从该判定节点延伸出的所有边

说实话这种设计给人的感觉不够直观,不清楚是为了与langgraph保持一致,还是有其他考量

并行节点

条件边是多边n选1,那如果多边n选n,也就是并行执行,类似下图,该如何操作

其实根据图形来设置节点和边即可

StateGraph stateGraph = new StateGraph(keyStrategyFactory)                
.addNode("a", nodeasync(new ...))                
.addNode("b", nodeasync(new ...))                
.addNode("c", nodeasync(new ...))
.addNode("d", nodeasync(new ...)).addEdge(StateGraph.START, "a")                
.addEdge("a", "b")                
.addEdge("a", "c")
.addEdge("b", "d")
.addEdge("c", "d")                
.addEdge("d",  StateGraph.END)

在编译图时,会将b节点和c节点组合成为一个并行节点 ParallelNode,并行节点的id为“__PARALLEL__”+前序节点的id

ParallelNode:继承Node类,内部含id和ActionFactory,构造函数参数为【id,多个异步节点 List<AsyncNodeActionWithConfig> actions,状态中各字段的更新策略Map<String, KeyStrategy> keyStrategyMap】

ActionFactory 对应 lambda 表达式为:(config) -> new AsyncParallelNodeAction(actions, keyStrategyMap)

AsyncParallelNodeAction:实现了AsyncNodeActionWithConfig接口,提供 CompletableFuture<Map<String, Object>> apply(OverAllState state, RunnableConfig config) 方法,内部包含前面提到的多个异步节点 List<AsyncNodeActionWithConfig> actions,状态中各字段的更新策略Map<String, KeyStrategy> keyStrategyMap

AsyncParallelNodeAction执行时会同时执行内部的多个异步节点 List<AsyncNodeActionWithConfig> actions,并等待全部执行完成后进入下一节点

ps:并行节点的原节点,也就是b和c,后续的边不能是条件边,而且必须有同一个targetNode,也就是d,不支持配置下图的流程

子图节点

    StateGraph child = ...StateGraph parent = ...parent.addNode("nodeId", child);...

所谓子图,就是图中图,以节点的形式将一个图嵌入到另一个图中

使用方法很简单,StateGraph 提供了一个重载方法 addNode(String id, StateGraph subGraph)

addNode 方法会将子图封装为 SubStateGraphNode ,该类内部包含id和一个StateGraph

编译时,ProcessedNodesEdgesAndConfig 会将子图中的START节点替换为子图外部的前序节点,将子图中的END节点替换为子图外部的后续节点,子图中的节点的id会替换为【子图节点id+节点id】

子图不支持内部以并行节点开始,也不支持子图外部后续节点为并行节点

ps:由于编译时是先处理子图,然后再处理并行节点,所以前一节的多步骤并行的流程也无法通过将b和b2做成子图节点来实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/917236.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917236.shtml
英文地址,请注明出处:http://en.pswp.cn/news/917236.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入浅出设计模式——创建型模式之原型模式 Prototype

文章目录原型模式简介原型模式结构关于克隆方法&#xff1a;浅拷贝/深拷贝原型模式代码实例定义原型类和克隆方法客户端使用代码示例示例一&#xff1a;浅拷贝示例二&#xff1a;深拷贝原型模式总结开闭原则代码仓库原型模式&#xff1a;用原型实例指定创建对象的种类&#xff…

.NET 10 中的新增功能系列文章3—— .NET MAUI 中的新增功能

.NET 10 预览版 6 中的 .NET MAUI.NET 10 预览版 5 中的.NET MAUI.NET 10 预览版 4 中的 .NET MAUI.NET 10 预览版 3 中的 .NET MAUI.NET 10 预览版 2 中的 .NET MAUI.NET 10 预览版 1 中的 .NET MAUI 一、MediaPicker 增强功能&#xff08;预览版6&#xff09; .NET 10 预览…

MT Photos图库部署详解:Docker搭建+贝锐蒲公英异地组网远程访问

如今&#xff0c;私有化部署轻量级图床/图库系统&#xff0c;已经成为越来越多用户的高频需求。而MT Photos&#xff0c;正是一款非常适合在Docker环境下运行的自托管图床/图库系统。MT Photos基于Node.js与Vue构建&#xff0c;界面简洁美观&#xff0c;支持多用户权限管理、多…

解决dbeaver连接不上oceanbase数据库的问题

解决dbeaver连接不上oceanbase数据库的问题 问题&#xff1a; 使用dbeaver连接oceanbase数据库报错如下&#xff1a; ORA-00900: You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near ‘dat…

Kafka——请求是怎么被处理的?

引言在分布式消息系统中&#xff0c;请求处理机制是连接客户端与服务端的"神经中枢"。无论是生产者发送消息、消费者拉取数据&#xff0c;还是集群内部的元数据同步&#xff0c;都依赖于高效的请求处理流程。Apache Kafka作为高性能消息队列的代表&#xff0c;其请求…

区块链技术如何确保智能合约的安全性和可靠性?

智能合约作为区块链上自动执行的可编程协议&#xff0c;其安全性和可靠性直接决定了区块链应用的信任基础。区块链通过底层技术架构、密码学工具和机制设计的多重保障&#xff0c;构建了智能合约的安全防线。以下从技术原理、核心机制和实践保障三个维度展开分析&#xff1a;一…

2020 年 NOI 最后一题题解

问题描述2020 年 NOI 最后一题是一道结合图论、动态规划与状态压缩的综合性算法题&#xff0c;题目围绕 "疫情期间的物资配送" 展开&#xff0c;具体要求如下&#xff1a;给定一个有向图 G (V, E)&#xff0c;其中节点代表城市&#xff0c;边代表连接城市的道路。每个…

加密与安全

目录 一、URL编码&#xff1a; 二、Base64编码&#xff1a; 三、哈希算法&#xff1a; 四、Hmac算法&#xff1a; 五、对称加密算法&#xff1a; 一、URL编码&#xff1a; URL编码是浏览器发送数据给服务器时使用的编码&#xff0c;它通常附加在URL的参数部分。之所以需要…

EasyExcel 公式计算大全

EasyExcel 是基于 Apache POI 的封装&#xff0c;主要专注于简化 Excel 的读写操作&#xff0c;对于公式计算的支持相对有限。以下是 EasyExcel 中处理公式计算的全面指南&#xff1a;1. 基本公式写入1.1 写入简单公式Data public class FormulaData {ExcelProperty("数值…

2025年AI+数模竞赛培训意见征集-最后一轮

在过去几天的“AI时代下2025年数模竞赛培训课程需求调研紧急征集”我们收到了大量老师、学生的反馈。我们通过大家的实际需求&#xff0c;编写了下述2025年AI时代下最新的数学建模竞赛教学课程课程表&#xff0c;具体授课内容以及相关课件、支撑材料都将会免费发布&#xff0c;…

Qwen2 RotaryEmbedding 位置编码仅仅是第一层有吗

Qwen2 RotaryEmbedding 位置编码仅仅是第一层有吗,还是全部层都有 Qwen2 模型中的 Rotary Embedding(旋转位置编码)是应用于所有 Transformer 层 的,而非仅第一层。 1. Transformer 架构的核心逻辑 Qwen2 基于 Decoder-only Transformer 架构,而位置编码(如 Rotary Emb…

CNN卷积神经网络之LeNet和AlexNet经典网络模型(三)

CNN卷积神经网络之LeNet和AlexNet经典网络模型&#xff08;三&#xff09; 文章目录CNN卷积神经网络之LeNet和AlexNet经典网络模型&#xff08;三&#xff09;深度学习两大经典 CNN 模型速览1. LeNet-5&#xff1a;CNN 的开山之作&#xff08;1998&#xff09;2. AlexNet&#…

江协科技STM32 12-2 BKP备份寄存器RTC实时时钟

这一节我们要讲的主要内容是RTC实时时钟&#xff0c;实时时钟本质上是一个定时器&#xff0c;但是这个定时器是专门用来产生年月日时分秒&#xff0c;这种日期和时间信息的。所以学会了STM32的RTC就可以在STM32内部拥有一个独立运行的钟表。想要记录或读取日期和时间&#xff0…

【10】大恒相机SDK C++开发 ——对相机采集的原图像数据IFrameData裁剪ROI 实时显示在pictureBox中,3种方法实现(效率不同)

文章目录1 在回调函数中实现2 独立封装调用2.1 获取图像宽、高、pBuffer、channel2.2 内存图像数据截取ROI并显示2.3 回调函数调用3 for循环嵌套 方法24 for循环嵌套 方法35 按行复制数据提高效率&#xff0c;但很耗内存6 unsafe代码 解释及注意事项 看我另一篇文章7 ConvertTo…

ubuntu22.04系统入门 linux入门(二) 简单命令 多实践以及相关文件管理命令

以下有免费的4090云主机提供ubuntu22.04系统的其他入门实践操作 地址&#xff1a;星宇科技 | GPU服务器 高性能云主机 云服务器-登录 相关兑换码星宇社区---4090算力卡免费体验、共享开发社区-CSDN博客 之所以推荐给大家使用&#xff0c;是因为上面的云主机目前是免费使用的…

分布式ID方案(标记)

一、参考文章-标记 分布式ID方案有哪些&#xff1f;雪花算法如何搞定时钟回拨和动态机器ID&#xff1f; 二、应用 1.百度 uid-generator github项目地址 原理参考 2.百度 uid-generator 扩展应用 灯官网 灯 项目代码 lamp-util 单元模块 lamp-util 单元模块子模块 lamp-…

std::map 加锁

在并发环境下使用std::map&#xff0c;必须采取同步措施。 在并发环境下对 std::map 进行不加锁的读写操作会导致严重的线程安全问题&#xff0c;主要会产生以下几种问题&#xff1a; ⚠️ 主要风险与后果数据竞争&#xff08;Data Race&#xff09; 当多个线程同时修改同一个键…

学习笔记090——Ubuntu 中 UFW 防火墙的使用

文章目录1、允许特定的端口访问2、允许特定 IP 访问某个端口3、允许某个范围的端口4、查看 UFW 状态5、重新加载 UFW6、启用 UFW7、关闭 UFW1、允许特定的端口访问 # 允许 TCP 端口&#xff08;例如 80&#xff09;&#xff1a; sudo ufw allow 80/tcp# 允许 UDP 端口&#xf…

移动端 WebView 内存泄漏与性能退化问题如何排查 实战调试方法汇总

在混合 App 应用中&#xff0c;WebView 页面常承载复杂业务逻辑与交互。随着用户使用时间增长&#xff0c;特别在切换多个页面或反复打开界面后&#xff0c;常常会出现性能下降、页面卡顿、甚至白屏崩溃等现象。这通常是因为页面存在内存泄漏、事件监听未解绑或垃圾回收阻塞导致…

JSON 对象在浏览器中顺序与后端接口返回不一致的问题

一、问题描述 后端接口返回一个字典表的JSON对象&#xff0c;页面展示排序与预期排序不一致。 在浏览器调试面板Response中看到接口原始响应字符串&#xff0c;是期望顺序&#xff1a;在Preview中看到&#xff0c; key “22” 被提到最前&#xff0c;顺序发生变化&#xff1a;页…