第一次看 LangGraph 的教學,我的印象是「一個很複雜的 AI 框架」。這個印象是錯的,而且這個錯誤讓我多花了不少時間。
LangGraph 本身跟 AI 無關。它是一台狀態機引擎。
TypedDict。所有節點讀寫同一份。就這四個。沒有一個跟模型有關。
我自己是換成一個報帳流程才真的看懂的:
表單在桌子之間傳遞,每張桌子改幾個欄位,號誌決定下一站去哪。
關鍵是:節點裡放純函式也能跑完整流程,不需要任何 LLM。 你可以先用 if amount > 10000: return {"需要主管簽核": True} 這種純機械版本把流程跑通,確認動線正確,之後再把某個節點換成模型呼叫。流程結構完全不用改。
流程可控性由你決定,智慧來源可替換。
你畫的圖決定了系統會走哪些步驟、什麼條件下重試、哪一步要停下來等人。這部分是確定性的,可以測試也可以印出來給人看。至於某個節點裡到底是呼叫 GPT 還是查資料庫還是跑一段 regex,那是節點自己的事。
反過來說,如果你的系統裡「會不會重試」這件事是由模型在 prompt 裡自己決定的,那你就沒有這個解耦。這是明天跟後天要討論的取捨。
compile()。藍圖與可執行體是兩個東西,畫完圖要編譯才能跑。第三點的錯誤訊息不太友善,值得先記起來。
講兩個真正讓它跟 chain 拉開差距的功能:conditional edge 的迴圈,以及 checkpointer。後者是要做 human-in-the-loop 系統時的硬需求。