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

State-狀態(tài)
Langgraph的本質(zhì)就是一個(gè)狀態(tài)圖,而狀態(tài)圖的體現(xiàn)就在于State狀態(tài),State本質(zhì)上是一個(gè)數(shù)據(jù)結(jié)構(gòu),其貫穿了Langgraph的整個(gè)生命周期。
定義圖時(shí),首先要定義圖的狀態(tài)??State???。??State?? 是貫穿 LangGraph 整個(gè)工作流的核心數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)和傳遞任務(wù)執(zhí)行過程中的關(guān)鍵信息,它反映了應(yīng)用在某一時(shí)刻的完整快照,例如用戶輸入、中間結(jié)果、工具調(diào)用日志等。

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

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

在 LangGraph 框架中,每個(gè)節(jié)點(diǎn)都被賦予了對(duì)狀態(tài)(State)的訪問、讀取和寫入權(quán)限。當(dāng)節(jié)點(diǎn)對(duì)狀態(tài)進(jìn)行修改時(shí),這些變化會(huì)隨著圖的執(zhí)行流程自然地傳播到后續(xù)節(jié)點(diǎn),從而實(shí)現(xiàn)一種隱式的“廣播”效果。這種設(shè)計(jì)允許后續(xù)節(jié)點(diǎn)根據(jù)前序節(jié)點(diǎn)的狀態(tài)變更,動(dòng)態(tài)調(diào)整自身行為。
本文轉(zhuǎn)載自???????AI探索時(shí)代??????? 作者:DFires


















