關于Langgraph中的State狀態的深入研究 原創
“ 引言部分,總領全篇文章的中心內容。”
在Langgraph中的三個核心組件中,State是用來傳遞數據的;在使用Langgraph構建智能體時,不論是簡單還是復雜,歸根結底都是通過節點(nodes)和邊(edges)來構建一個完整的圖(graph)。
但 LangGraph 的核心從來不在于如何去界定節點與邊,而是在于如何高效地管控各個節點的輸入和輸出,以確保圖能夠持續穩定地運行。
LangGraph 的底層圖算法依托消息傳遞機制來定義和執行圖中的交互流程,在這一過程中,狀態(State)組件擔當著關鍵的載體角色,主要負責在圖的各個節點之間傳遞信息,像核心功能中的工具使用、記憶能力以及人機交互等,都得依仗 ??State?? 來達成并加以維護。

State-狀態
Langgraph的本質就是一個狀態圖,而狀態圖的體現就在于State狀態,State本質上是一個數據結構,其貫穿了Langgraph的整個生命周期。
定義圖時,首先要定義圖的狀態??State???。??State?? 是貫穿 LangGraph 整個工作流的核心數據結構,用于存儲和傳遞任務執行過程中的關鍵信息,它反映了應用在某一時刻的完整快照,例如用戶輸入、中間結果、工具調用日志等。

??State???的本質是一個共享的數據結構,它由圖的模式(schema)和 ???reducer??? 函數組成。節點執行的每一次完成都會帶動其內容的更新,以此來實現數據在不同節點間的流通與共享,從而消除節點間的數據孤島問題,確保在多智能體協作時,信息的一致性和連續性能得到可靠的保障。
模式 :狀態的模式是圖中所有節點和邊的輸入模式,可以是Python字典??dict???或強類型對象(如??TypedDict???、??Pydantic??模型)。它規定了狀態的數據結構和類型,為狀態的使用和管理提供了規范。
Reducer 函數 :Reducer 函數用于指定如何將節點的輸出合并到全局狀態,從而實現對狀態的修改。它通過特定邏輯控制狀態更新的方式,解決了多節點協作時狀態沖突和累積問題。每個狀態字段(如messages、plan等)可獨立配置Reducer,實現細粒度控制。例如:
覆蓋更新:默認行為,直接替換原有值
追加更新:將新值合并到列表末尾
條件更新:根據業務規則選擇性合并

??State??? 更新時會先讀取當前的 ??State???,經過相應的處理之后,僅僅是返回增量更新,也就是僅僅對部分字段進行修改,并不會對整個 ??State??? 進行覆蓋。LangGraph自動將節點返回的字典淺合并到全局??State??中,避免手動處理字段沖突
在每一步執行完畢之后,??State?? 都會自動進行保存,這樣一來,在面對需要暫停、恢復、回滾(例如在錯誤恢復或是人工干預的情況下)等操作時,系統能夠有著更為出色的應對能力,大大增強了整個工作流的靈活性和可靠性。
圖的執行流程
在??LangGraph??框架中,圖的執行流程如下:
- 每個節點的函數會被調用,并接收前一個節點返回的狀態作為輸入。
- 節點函數對狀態進行處理后,輸出一個新的狀態,傳遞給下一個節點。

在 LangGraph 框架中,每個節點都被賦予了對狀態(State)的訪問、讀取和寫入權限。當節點對狀態進行修改時,這些變化會隨著圖的執行流程自然地傳播到后續節點,從而實現一種隱式的“廣播”效果。這種設計允許后續節點根據前序節點的狀態變更,動態調整自身行為。
本文轉載自???????AI探索時代??????? 作者:DFires

















