在前面的幾天中,我們從 Prompt、Context、Structured Output 一路走到 Tool Calling。此時你可能已經可以用簡單的 while 迴圈寫出一個基本的自主 Agent:模型思考 ➔ 呼叫工具 ➔ 取得結果 ➔ 再次思考。
然而,當你嘗試將這種簡單架構推進到企業級真實業務時,很快會遇到難以跨越的瓶頸:
為了徹底解決複雜 Agent 系統的控制力問題,LangChain 團隊推出了專門針對 Agent 的編排框架——LangGraph。
今天我們就來拆解:甚麼是 LangGraph?它的底層「圖(Graph)」模型是如何運作的?它又憑什麼成為現代生產級 Agent 的標準架構?
在傳統的軟體工程中,處理高複雜度、長週期的業務流程(如訂單狀態變更、審批工作流),最穩固的模式就是有限狀態機(Finite State Machine, FSM)。
LangGraph 的核心思想就是:
將 LLM 的決策流、工具調用與外部互動,全部抽象為一個具備「全域狀態(Global State)」的「有向圖(Directed Graph)」。
┌───────────────┐
│ __start__ │
└───────┬───────┘
│
▼
┌───────────────┐
│ agent (LLM) │ ◄─────────────┐
└───────┬───────┘ │
│ (條件邊判斷) │
[需要使用工具?] │ (循環執行)
├── 是 ──> ┌───────────────┐ │
│ │ tools (Node) │ ──┘
│ └───────────────┘
└── 否 ──> ┌───────────────┐
│ __end__ │
└───────────────┘
這意味著 Agent 不再是黑盒子般的隨機漫遊,而是每一步都發生在明確定義的節點(Node)與邊(Edge)之上,具備極高的可觀察性(Observability)與確定性控制力。
要理解 LangGraph 的架構,只需要掌握三個核心概念:
TypedDict 或 Pydantic)。圖中的每一個節點在執行時都會接收當前的 State,並回傳需要更新的欄位。add_edge("node_a", "node_b"))。tools 節點,若無則轉跳至 END(add_conditional_edges(...))。相較於傳統的 Agent 腳本或線性鏈,LangGraph 提供了四大關鍵能力:
真實世界的問題很少能一條線走到底。Agent 往往需要「嘗試 ➔ 檢查結果 ➔ 發現錯誤 ➔ 重新修正 ➔ 再嘗試」。LangGraph 原生支援循環與條件跳轉,這是傳統 DAG(有向無環圖)工作流框架(如 Airflow)難以自然實現的。
LangGraph 內建 Checkpointer 機制(如 SQLite、Postgres、Redis)。每當一個節點執行完畢,系統會自動將當前 State 快照寫入儲存庫。
在進行敏感操作(如匯款、發送郵件、修改資料庫)前,LangGraph 支援設定 interrupt_before 或 interrupt_after。工作流會自動在指定節點前暫停掛起,等待人工在管理後台點擊審批或修改 State 後,再繼續向下執行。
由於所有歷史 State 都有 Checkpoint,開發者可以任意「回滾(Fork/Rewind)」到先前的任一步驟,手動修正錯誤的上下文或狀態,再讓 Agent 從該點重新分支執行。
| 比較維度 | 線性鏈路 (LCEL / Chains) | 傳統 Agent (ReAct Loop) | 狀態圖架構 (LangGraph) |
|---|---|---|---|
| 拓撲結構 | 嚴格單向線性 (DAG) | 單一黑盒子 while 迴圈 | 可自訂的有向圖 (支援循環與多分支) |
| 狀態可控性 | 低(資料隨管道傳遞) | 中(依靠 Context 堆疊) | 極高(顯式定義的 Typed State) |
| 人工介入 | 極難實作 | 需自行撰寫中斷邏輯 | 原生支援中斷與狀態審批 (Human-in-the-loop) |
| 除錯與回溯 | 僅能重新執行 | 難以定位中途狀態 | 支援 Checkpoint 與 Time Travel 回滾 |
| 適用場景 | 單次資料轉換、簡單問答 | 簡單開放式工具調用 | 複雜業務工作流、多 Agent 協作、企業級系統 |
LangGraph 將生成式 AI 的「隨機推論」與傳統軟體架構的「確定性狀態控制」完美融合。它不再把 Agent 當成不受控的魔法,而是將其規範在清晰、可觀測、可干預的狀態圖網絡中。
理解了 LangGraph 的圖模型架構後,在實務中我們該如何動手搭建第一個 Graph?如何定義 State、綁定 Node 與設定條件分支?
明天 【Day 11】怎麼應用 LangGraph,我們將進入實戰篇,透過 Python 程式碼從零構建一個具備條件路由、工具循環調用與持久化儲存的標準 LangGraph 狀態機!