spring-ai-alibaba 學習(十九)——graph之條件邊、并行節點、子圖節點

前面了解了基礎的概念及流程,以及一些參數類

下面了解一些特殊的邊和節點

條件邊

常見的流程圖可能長這個樣子:

其中菱形的為條件節點(或者叫判定節點),但是在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;頁…