一句話說明
LangGraph 是一個讓你用「畫流程圖」的方式來設計 AI Agent 工作流程的框架,每個節點做一件事,邊決定下一步走哪裡。
什麼是 LangGraph?
假設你要做一個客服 AI:收到客戶問題後,先判斷問題類型,如果是退貨就走退貨流程,如果是技術問題就查知識庫,查不到就轉人工。這個流程有分支、有迴圈、有不同路徑,用一條直線串不起來。
LangChain 最早的 Chain 是線性的:A → B → C,一路走到底。這對簡單任務夠用,但一旦流程需要根據條件走不同路徑、需要重試、需要等人類確認,線性的 Chain 就力不從心了。
LangGraph 解決的就是這個問題。它讓你用圖形(Graph)來定義工作流程。每個步驟是一個節點(Node),步驟之間的連接是邊(Edge),邊可以帶條件。整個流程還有一個共用的狀態(State),每個節點都能讀取和更新狀態。
LangGraph 由 LangChain 團隊在 2024 年初推出,目前已經成為 LangChain 生態系中建構 AI Agent 的主要方式。
核心概念
LangGraph 的設計圍繞幾個關鍵概念:
State(狀態):整個工作流程共用的資料結構。每個節點都能讀取狀態,也能回傳更新。你可以用 TypedDict 或 Pydantic 來定義狀態的結構,確保資料格式一致。
Node(節點):工作流程中的每個步驟。一個節點通常是一個 Python 函式,接收當前狀態,做一些處理,回傳狀態更新。節點可以是呼叫 LLM、查資料庫、呼叫 API,或任何你需要的操作。
Edge(邊):連接節點的線。普通邊固定從 A 到 B。條件邊(Conditional Edge)會根據狀態的值決定下一步走哪個節點,這就是分支的實現方式。
Graph(圖):把節點和邊組合起來的完整工作流程。有一個起始節點和一個或多個結束節點。
一段簡單的 LangGraph 程式碼長這樣:
from langgraph.graph import StateGraph, START, END
from typing import TypedDict
# 定義狀態
class State(TypedDict):
question: str
category: str
answer: str
# 定義節點
def classify(state: State) -> dict:
# 用 LLM 判斷問題類型
category = llm.invoke(f"分類這個問題:{state['question']}")
return {"category": category}
def handle_tech(state: State) -> dict:
answer = llm.invoke(f"回答這個技術問題:{state['question']}")
return {"answer": answer}
def handle_billing(state: State) -> dict:
answer = llm.invoke(f"回答這個帳務問題:{state['question']}")
return {"answer": answer}
# 條件分支
def route(state: State) -> str:
if state["category"] == "tech":
return "tech"
return "billing"
# 建構圖
graph = StateGraph(State)
graph.add_node("classify", classify)
graph.add_node("tech", handle_tech)
graph.add_node("billing", handle_billing)
graph.add_edge(START, "classify")
graph.add_conditional_edges("classify", route, {"tech": "tech", "billing": "billing"})
graph.add_edge("tech", END)
graph.add_edge("billing", END)
app = graph.compile()
result = app.invoke({"question": "我的 API key 無法使用"})
這段程式碼建立了一個簡單的客服分流系統:先分類問題,再根據分類結果走不同的處理路徑。
LangGraph vs LangChain Chain
| 比較項目 | LangChain Chain | LangGraph |
|---|---|---|
| 流程結構 | 線性(A → B → C) | 圖形(支援分支、迴圈) |
| 狀態管理 | 有限,主要靠輸入輸出傳遞 | 內建共用狀態,所有節點可讀寫 |
| 條件分支 | 需要自己寫邏輯 | 原生支援條件邊 |
| 迴圈 | 不支援 | 原生支援 |
| 人工介入 | 需要額外實作 | 內建 Human-in-the-loop |
| 持久化 | 需要外接 | 內建 Checkpoint 機制 |
| 適合場景 | 簡單的串接流程 | 複雜的 Agent 工作流程 |
簡單來說,如果你的任務是「收到輸入 → 處理 → 回傳結果」,用 Chain 就夠了。如果流程有條件判斷、需要重試、需要人類確認、有多個 Agent 協作,用 LangGraph 更合適。
進階功能
LangGraph 有幾個特別實用的進階功能:
Human-in-the-loop:在特定節點暫停流程,等待人類確認或修改後再繼續。例如 AI 草擬一封客戶回覆信,暫停讓客服人員檢查修改後才發送。這在企業環境中特別重要,因為很多決策不適合完全交給 AI。
from langgraph.checkpoint.memory import MemorySaver
checkpointer = MemorySaver()
app = graph.compile(checkpointer=checkpointer, interrupt_before=["send_email"])
# 執行到 send_email 節點前會暫停
result = app.invoke(input_data, config={"configurable": {"thread_id": "1"}})
# 人類檢查後繼續
app.invoke(None, config={"configurable": {"thread_id": "1"}})
Checkpoint(檢查點):自動儲存每個節點執行後的狀態。如果流程中斷(例如 API 錯誤),可以從最後一個檢查點恢復,不需要從頭跑。
Subgraph(子圖):把一個複雜的圖拆成多個子圖,每個子圖處理一個子任務。這讓你可以把大型工作流程模組化,也方便不同團隊各自開發和測試自己負責的部分。
Streaming(串流):即時串流每個節點的執行狀態和輸出。使用者可以看到 AI 正在做什麼,提升使用體驗。
LangGraph vs 其他 Agent 框架
| 比較項目 | LangGraph | CrewAI | AutoGen |
|---|---|---|---|
| 開發者 | LangChain 團隊 | CrewAI Inc. | Microsoft |
| 控制粒度 | 高,每個節點和邊都可自訂 | 中,以角色和任務為主 | 中,以對話為主 |
| 學習曲線 | 中高 | 低,直覺的角色設定 | 中 |
| 適合場景 | 複雜的自訂工作流程 | 團隊協作模擬 | 多 Agent 對話 |
| 狀態管理 | 內建,細粒度 | 有限 | 以對話歷史為主 |
| 和 LangChain 整合 | 原生整合 | 獨立,可搭配 | 獨立 |
| 視覺化工具 | LangGraph Studio | 內建日誌 | AutoGen Studio |
| 授權 | MIT(langgraph-api 為 Elastic License 2.0) | MIT | MIT |
選擇哪個框架取決於你的需求。如果你已經在用 LangChain 生態系,LangGraph 是自然的選擇。如果你想快速讓多個 AI「角色」協作完成任務,CrewAI 上手最快。如果你的場景是多個 Agent 之間的對話協商,AutoGen 的設計比較貼合。
實際應用場景
客服 Agent:根據問題類型分流到不同處理流程,複雜問題自動升級到人工客服,處理完後記錄到 CRM。整個流程有多個分支和迴圈(確認客戶身分 → 查詢問題 → 提供方案 → 客戶不滿意 → 換方案)。
研究 Agent:給一個研究主題,自動搜尋資料、閱讀文獻、提取重點、交叉比對、產生報告。每個步驟可能需要迴圈(搜尋結果不夠 → 換關鍵字再搜尋),也可能需要人工確認(報告草稿完成後讓研究員審核)。
程式碼審查 Agent:收到 Pull Request 後,自動檢查程式碼風格、安全漏洞、效能問題。如果發現高風險問題,暫停流程通知開發者;低風險問題直接留 comment。
資料處理管線:從多個來源收集資料,清洗、轉換、驗證,如果驗證失敗就回到清洗步驟重試。每個步驟的結果存在共用狀態中,方便追蹤和除錯。
多 Agent 系統:多個專門化的 Agent 各自負責不同子任務,透過一個 Supervisor Agent 協調。LangGraph 的子圖功能讓每個 Agent 有自己的工作流程,同時共用整體狀態。
LangGraph Studio
LangGraph Studio 是官方提供的視覺化開發工具。它讓你在圖形介面上看到整個工作流程的結構,即時觀察每個節點的執行狀態和資料流動。
主要功能包括:即時視覺化圖形結構、逐步執行和除錯、查看每個節點的輸入輸出、修改狀態後從任意節點重跑。
LangGraph Studio 目前提供免費使用。早期只有 macOS 桌面版,但桌面版已停止維護,改為透過 CLI 指令 langgraph dev 啟動,支援 macOS、Windows 和 Linux。搭配 LangSmith 可以做更完整的監控和除錯。
台灣使用情境
台灣企業在導入 AI Agent 工作流程時,LangGraph 有幾個實用的應用方向:
金融業合規流程:銀行的貸款審核需要經過多個步驟(信用查詢 → 風險評估 → 主管審核 → 通知客戶),每個步驟可能需要人工介入,也可能需要根據條件走不同路徑。LangGraph 的 Human-in-the-loop 和條件邊功能很適合這類場景。
製造業品質管控:工廠的品質檢測流程常常有迴圈(不合格 → 調整參數 → 重新檢測),也有分支(不同產品走不同檢測流程)。用 LangGraph 建模這些流程,再搭配 AI 做智慧判斷,可以提升效率。
政府標案文件處理:處理標案文件需要多步驟的資料擷取、格式驗證、交叉比對。LangGraph 的 Checkpoint 機制確保處理大量文件時,如果中途出錯不需要從頭再來。
安全考量與限制
使用 LangGraph 開發 AI 工作流程時,有幾個需要注意的面向:
授權問題:LangGraph 核心套件(langgraph)使用 MIT 授權,可以自由使用。但 langgraph-api(部署伺服器)使用 Elastic License 2.0,這個授權限制你提供與 LangGraph Platform 競爭的託管服務。如果你是自己內部使用,Elastic License 2.0 通常不是問題;但如果你打算用它來提供 Agent 平台服務給外部客戶,需要仔細檢查授權條款。
工具呼叫的安全性:Agent 在執行過程中可能呼叫多種外部工具(資料庫查詢、API 呼叫、檔案操作)。每個工具都需要適當的權限控制和輸入驗證。特別是當 Agent 的行為受到使用者輸入影響時,要防範 Prompt Injection 導致 Agent 執行未預期的操作。
狀態安全:LangGraph 的共用狀態可能包含機敏資訊(使用者個資、商業資料)。使用 Checkpoint 持久化時,確保儲存的位置有適當的存取控制和加密。
迴圈控制:圖形結構允許迴圈,但如果條件設定不當,可能產生無限迴圈。務必在迴圈中設定最大次數限制,避免消耗過多的 API 呼叫和 Token。
除錯複雜度:圖形結構比線性流程難除錯。當流程出問題,你需要追蹤狀態在多個節點之間的變化。LangSmith 的追蹤功能可以幫忙,但它是付費服務。
版本管理:和 LangChain 一樣,LangGraph 的 API 更新頻率很高。實際專案建議鎖定版本,升級前先在測試環境驗證。
怎麼開始?
- 安裝套件:
pip install langgraph langchain-openai
-
從最簡單的線性圖開始。先建一個只有兩三個節點的工作流程,熟悉 State、Node、Edge 的概念。
-
加入條件邊。在流程中加上分支邏輯,讓圖根據狀態走不同路徑。
-
試試 Human-in-the-loop。在某個節點前設定
interrupt_before,體驗暫停和恢復的機制。 -
閱讀官方教學。LangGraph 的文件有完整的 Tutorials,從基礎到多 Agent 協作都有。
-
進階:用 LangGraph 搭配 RAG 建構一個可以查詢文件並回答問題的 Agent,過程中加入「搜尋結果不夠 → 換關鍵字重搜」的迴圈邏輯。
知識檢測
讀完文章後,測試一下你對這個主題的理解。
常見問題
LangGraph 和 LangChain 是什麼關係?
LangGraph 是 LangChain 團隊推出的獨立套件,專門用來建構有狀態的工作流程。它和 LangChain 是互補的:LangChain 提供基礎元件(LLM 呼叫、Prompt 管理、工具定義),LangGraph 提供流程編排。你可以把 LangChain 的元件當成 LangGraph 節點裡的積木來用。
不用 LangChain 可以用 LangGraph 嗎?
可以。LangGraph 的核心不依賴 LangChain 的特定功能。你可以在節點裡直接用 OpenAI 或 Anthropic 的 SDK,不需要透過 LangChain 的抽象層。但如果你已經在用 LangChain,兩者搭配會更方便。
LangGraph 適合生產環境嗎?
可以用在生產環境。LangGraph 提供了 Checkpoint 持久化(支援 PostgreSQL、SQLite 等後端)、Streaming 和 Human-in-the-loop 等生產級功能。但要注意 langgraph-api 的授權限制,以及做好錯誤處理和迴圈保護。
CrewAI 和 LangGraph 怎麼選?
如果你需要精細控制每個步驟的邏輯(條件分支、狀態管理、檢查點),LangGraph 更適合。如果你想快速讓幾個 AI「角色」協作完成任務(例如一個研究員、一個作家、一個編輯),CrewAI 的角色導向設計上手更快。兩者也可以搭配使用——用 CrewAI 管理 Agent 角色,用 LangGraph 管理單一 Agent 內部的工作流程。
總結
LangGraph 是用圖形結構建構 AI Agent 工作流程的框架。它解決了線性 Chain 無法處理的場景:條件分支、迴圈、人工介入、狀態持久化。
如果你的 AI 應用只需要簡單的輸入輸出,不需要 LangGraph。但如果你在建構需要多步驟決策、多 Agent 協作、或需要人類參與的工作流程,LangGraph 提供了結構化的方式來設計和管理這些複雜流程。
參考資料
- LangGraph Documentation — LangGraph 官方文件
- LangGraph GitHub Repository — LangGraph 原始碼
- LangGraph Studio — LangGraph 視覺化開發工具
- LangChain Blog — LangGraph — LangChain 官方部落格的 LangGraph 介紹