LangGraph-2-interrupt 流程中斷

??interrupt?是 LangGraph 中一個強大的流程控制機制,允許在狀態機執行過程中根據特定條件中斷當前流程并跳轉到其他節點。這種機制特別適用于處理異常情況、用戶中斷或特定業務規則的觸發。

????????在 LangGraph 中,interrupt_before?和?interrupt_after?是兩個強大的流程控制機制,允許在節點執行前或執行后插入中斷檢查。這些機制提供了更精細的流程控制能力,特別適合需要精確管理執行順序和條件的復雜工作流。

????????interrupt_before?一般用于指定在執行某個特定操作或者步驟之前中斷流程。這一機制可以讓開發者在關鍵操作執行前對條件進行檢查,若不滿足條件,就提前終止流程,避免不必要的計算或者操作。

????????interrupt_before?一般用于指定在執行某個特定操作或者步驟之前中斷流程。這一機制可以讓開發者在關鍵操作執行前對條件進行檢查,若不滿足條件,就提前終止流程,避免不必要的計算或者操作。

#在tools節點執行前中斷
graph = graph.compile(checkpointer=memory_checkpointer, interrupt_before=["tools"])

流程恢復執行:

graph.invoke(None, config=config)

案例,在調用外部工具前,進行人工確認,如果輸入y或者yes流程恢復執行:

import os
from typing import Annotated, TypedDict
from langchain_tavily import TavilySearch
from langgraph.checkpoint.memory import MemorySaver
from langgraph.constants import START, END
from langgraph.graph import add_messages, StateGraph
from langgraph.prebuilt import ToolNode, tools_condition
from model.deepseek import deepseek_llmclass ChatSate(TypedDict):# messages:狀態中保存數據的keymessages: Annotated[list, add_messages]graph = StateGraph(ChatSate)# 定義一個互聯網搜索工具
os.environ["TAVILY_API_KEY"] = ""
search_tool = TavilySearch(max_result=5)
runnable = deepseek_llm.bind_tools([search_tool])# 定義第一個節點
def chatbot(state: ChatSate) -> ChatSate:resp = runnable.invoke(state["messages"])return {"messages": resp}# 定義第二個節點工具節點
too_node = ToolNode([search_tool])# 添加邊
graph.add_node("agent", chatbot)
graph.add_node("tools", too_node)
# 根據智能體自主決定是否調用工具
graph.add_conditional_edges("agent",#條件變量,根據智能體的回答決定是否調用工具tools_condition
)
graph.add_edge("tools", "agent")  # 流程從tools 到 chatbot
graph.add_edge(START, "agent")  # 流程從start 到 chatbot
graph.add_edge("agent", END)  # 流程從chatbot 到 END
graph.set_entry_point("agent")  # 設置入口節點
#保存對話記錄到內存中
memory_checkpointer = MemorySaver()
graph = graph.compile(checkpointer=memory_checkpointer, interrupt_before=["tools"])# png = graph.get_graph().draw_mermaid_png()
# with open("graph2.png", "wb") as f:
#    f.write(png)
config={"configurable": {"thread_id": "1234"}}
def loop_graph_invoke(user_input: str):if user_input:result = graph.invoke({'messages': [('user', user_input)]}, config=config)if type(result['messages']) is list:print('AI:', result['messages'][-1].content)else:print('AI:', result['messages'].content)else:result = graph.invoke(None, config=config)if type(result['messages']) is list:print('AI:', result['messages'][-1].content)else:print('AI:', result['messages'].content)while True:user_input = input('User:')if user_input.lower() in ['q', 'exit', 'bye', 'quit']:print('AI:', 'Bye')breakelse:loop_graph_invoke(user_input)state = graph.get_state(config)if "tools" in state.next:an = input('是否允許調用外部工具?(y/n)')if an.lower() in ['y', 'yes']:#繼續執行流程loop_graph_invoke(None)else:#退出當前流程pass

測試驗證:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/88310.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/88310.shtml
英文地址,請注明出處:http://en.pswp.cn/web/88310.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前綴和|差分

題目:MT2047距離平方和你有𝑛n個點,請編寫一個程序,求這𝑛n個點的距離的平方和。格式輸入格式:第一行:一個整數𝑛(0≤𝑛≤100000)n(0≤…

x86架構CPU市場格局

x86架構的CPU市場是全球處理器市場的核心,涵蓋PC(桌面端與移動端)、服務器和超算等領域,主要玩家為英特爾(Intel)和AMD。以下基于最新數據分析市場格局及各領域份額,輔以國產廠商動態。 1. 總體…

【Swift開發】屏蔽NSSecureCoding頻繁警告

解決 iOS 開發中 NSSecureCoding 警告的最佳實踐 問題背景 在開發 Mac 應用時,我遇到了一個令人困擾的問題:Xcode 控制臺不斷輸出 NSSecureCoding allowed classes list contains [NSObject class] 相關的警告信息。這些警告雖然不影響應用功能&#xff…

SpringBoot實現MCP

前言 之前的文章都是各種使用MCP,自從有了MCP我們立馬感受到大模型真的可以幫我們干活了,實際上當我們想把企業內部的業務向AI方向轉型的話主要就是實現MCP,另外加上多Agent在流程上的控制和自有的知識庫這就可以滿足企業80%的需求了,剩下的2…

windows對\和/敏感嗎?

在Windows系統中,路徑分隔符\和/的敏感性需要分情況來看: 1. 文件系統層面 Windows文件系統(如NTFS、FAT32)不區分\和/。 例如,以下路徑是等效的: C:\Users\Documents\file.txt C:/Users/Documents/file.tx…

緩存穿透與擊穿多方案對比與實踐指南

緩存穿透與擊穿多方案對比與實踐指南 問題背景介紹 在高并發的分布式系統中,緩存是提升讀寫性能的重要組件。但在實際生產環境中,經常會遇到兩類問題: 緩存穿透:客戶端頻繁請求不存在的數據,導致請求直達數據庫&#x…

【音視頻】HTTP協議介紹

參考博客:https://cloud.tencent.com/developer/article/2183902 一、HTTP協議概述 HTTP(HyperText Transfer Protocol) 即 超文本傳輸協議,它是一種用于分布式、協作式和超媒體信息系統的應用層協議。HTTP 是萬維網&#xff08…

神經網絡基礎及API使用詳解

一、神經網絡概述神經網絡是一種模仿生物神經網絡結構和功能的計算模型,它由大量的人工神經元相互連接構成,能夠通過調整內部大量節點之間相互連接的關系,從而達到處理信息的目的。1.1 神經網絡的基本組成輸入層:接收原始數據隱藏…

分桶表的介紹和作用

一、分桶表的基本介紹1、什么是分桶表?分桶表主要是用于分文件的,在建表的時候,指定按照那些字段執行分桶操作,并可以設置需要分多少個桶,當插入數據的時候,執行MR的分區的操作,將數據分散各個分…

HighReport報表工具開始支持BS報表設計器

HighReport報表工具同時支持c/s報表設計器和b/s報表設計器,大部分情況下使用c/s報表設計器,在某些業務場景或者用戶自己簡單修改報表模板,可以用b/s報表設計器。b/s報表設計器和c/s報表設計器操作一樣b/s報表設計器免費下載免費使用(c/s報表設…

數據結構--堆的實現

目錄 一、堆的概念及結構 二、小根堆的實現 2.1 堆的數據結構 2.2 堆的初始化HeapInit 2.3 堆的銷毀HeapDestory 2.4 堆的插入HeapPush ?2.4.1 插入代碼HeapPush 2.4.2 向上調整代碼AdjustUp 2.4.3 交換數據代碼Swap 2.5 堆的刪除HeapPop 2.5.1 刪除代碼HeapPop 2…

evo軌跡評估工具

文章目錄evo參數設置evo_traj指標度量evo_apeevo_rpe結果比較evo工具主要有如下六個常用命令: evo_ape - 用于評估絕對位姿誤差;evo_rpe- 用于評估相對位姿誤差;evo_traj - 這個主要是用來畫軌跡、輸出軌跡文件、轉換數據格式等功能&#xf…

Django+DRF 實戰:自定義異常處理流程

文章目錄一、DRF 異常處理流程DRF 默認異常處理流程源碼二、實戰DRF 自定義異常處理流程應用自定義異常處理流程一、DRF 異常處理流程 DRF 默認異常處理流程 DRF默認的異常處理流程如下: 當異常發生時,會自動調用rest_framework.views.exception_hand…

Spring MVC 1

什么是Spring Web MVC 官方對Spring MVC的描述是這樣的:Spring Web MVC 是基于Severlet API構建的原始Web框架,從一開始就包含在Spring框架中。它的正式名稱“Spring Web MVC”來自其源模塊的名稱(Spring-webmvc),但它…

一個基于若依(ruoyi-vue3)的小項目部署記錄

一、背景 收到朋友的求助,他拿到了一個項目的源代碼,說需要我幫助部署。部署要求是需要域名訪問。 因為沒有文檔和其他資料以及幫助,我先清理了源收到的資料: 1.后端:是java代碼,一看就是若依框架。心里大大…

【實戰總結】WMIC在HW行動中的4類關鍵應用

WMIC命令完全指南:網絡安全運維工程師的深度實踐手冊 關鍵詞:WMIC命令、Windows管理、網絡安全運維、系統信息收集、進程分析、自動化審計 【實戰總結】WMIC在HW行動中的4類關鍵應用 1. 前言 在Windows環境下的網絡安全運維中,WMIC&#x…

LKT4304穩定可靠高兼容性國產安全加密芯片

隨著 IOT 的飛速發展,智能家居,智能汽車,智能工控等物聯網設備和云服務的安全問題成為IOT普及的關鍵障礙。在設計之初就為物聯網產品配備正確的安全解決方案,是幫助預防措施的關鍵所在。LKT4304是凌科芯安專為物聯網應用場景而推出…

Android 網絡開發核心知識點

Android 網絡開發核心知識點 一、基礎網絡通信 1. HTTP/HTTPS 協議 HTTP方法:GET、POST、PUT、DELETE等狀態碼:200(成功)、404(未找到)、500(服務器錯誤)等HTTPS加密:SSL/TLS握手過程報文結構:請求頭/響應頭、請求體/響應體 2. 網…

DVWA靶場通關筆記-弱會話IDs(Weak Session IDs Medium級別)

目錄 一、Session ID 二、代碼審計(Medium級別) 1、配置security為Medium級別 2、源碼分析 (1)index.php (2)Medium.php (3)對比分析 (4)滲透思路 三…

編輯器Vim的快速入門

如大家所了解的,Vim是一個很古老的編輯器,但是并沒有隨著時間的流逝消失在編輯器/IDE 的競爭中,Vim 獨創的模式機制和 hjkl 移動光標方式使得使用者在編輯文件時可以雙手不離開鍵盤,極大地提升了工作效率。由于 Vim 學習曲線極為陡…