AI 代理框架詳細比較:Claude Agent SDK vs LangChain vs LangGraph vs Google ADK
0. 為什麼需要這篇比較?
2025 年,AI Agent 開發框架百花齊放。對於想要構建 AI Agent 應用的開發者來說,選擇合適的框架是第一個重要決策。本文將從架構設計、功能特性、代碼質量、擴展能力等多個維度,全面比較四大主流框架:
| 框架 | 開發者 | 版本 | 代碼規模 | 主要定位 |
|---|
| Claude Agent SDK | Anthropic | 0.1.17 | ~3K 行 | Claude 專屬 SDK |
| LangChain V1 | LangChain | 1.2.0 | ~11K 行 | 中間件驅動框架 |
| LangGraph | LangChain | latest | ~15K 行 | 圖編排引擎 |
| Google ADK | Google | 1.21.0 | ~79K 行 | 企業級全功能平台 |
1. 架構設計比較
1.1 核心架構模式
flowchart TD
subgraph Claude["Claude Agent SDK"]
C1["User API"] --> C2["Internal Layer"]
C2 --> C3["Transport"]
C3 --> C4["Claude Code CLI"]
end
subgraph LangChain["LangChain V1 + LangGraph"]
L1["create_agent()"] --> L2["AgentMiddleware"]
L2 --> L3["StateGraph"]
L3 --> L4["Pregel Engine"]
end
subgraph ADK["Google ADK"]
A1["App"] --> A2["Plugins"]
A2 --> A3["Agent Tree"]
A3 --> A4["Runner"]
end
| 特性 | Claude Agent SDK | LangChain V1 | LangGraph | Google ADK |
|---|
| 架構模式 | CLI 包裝器 | 中間件管道 | Pregel BSP 圖 | 無狀態編排引擎 |
| 執行引擎 | Claude Code CLI | 基於 LangGraph | Pregel 算法 | 自建 Runner |
| 狀態管理 | CLI 內部管理 | 委託給 LangGraph | 通道 + Checkpoint | 事件溯源 |
| 擴展方式 | Hook + MCP | 中間件組合 | 自定義節點/通道 | 插件系統 |
| 代理模式 | 單一代理 | 單一代理 + 工具 | 任意圖結構 | 多代理樹結構 |
1.2 LangChain V1 與 LangGraph 的關係
這是很多人容易混淆的點:
flowchart TD
LCV1["LangChain V1 (高層 API)"]
LG["LangGraph (低層編排)"]
LCC["LangChain Core (基礎組件)"]
LCV1 -->|"內部使用"| LG
LG -->|"調用"| LCC
LCV1_desc["提供 create_agent() 高層 API<br/>和中間件系統"]
LG_desc["提供底層圖編排、持久化<br/>人在迴圈"]
LCC_desc["LLM, Tools, Messages<br/>基礎組件"]
LCV1 --- LCV1_desc
LG --- LG_desc
LCC --- LCC_desc
關係總結:
- LangChain V1:提供
create_agent() 高層 API 和中間件系統
- LangGraph:提供底層圖編排、持久化、人在迴圈
- LangChain V1 是 LangGraph 之上的便利層
1.3 分層架構對比
| 層級 | Claude Agent SDK | LangChain V1 | LangGraph | Google ADK |
|---|
| 用戶 API | query(), Client | create_agent() | StateGraph | Agent, Runner |
| 中間層 | InternalClient | AgentMiddleware | CompiledGraph | Plugin, Flows |
| 執行層 | SubprocessTransport | LangGraph | Pregel + Loop | InvocationContext |
| 存儲層 | - | (委託) | Checkpointer, Store | SessionService |
| 模型層 | Claude Code CLI | BaseChatModel | BaseChatModel | BaseLlm |
2. 功能特性對比
2.1 基本功能
| 功能 | Claude Agent SDK | LangChain V1 | LangGraph | Google ADK |
|---|
| 同步執行 | ✓ | ✓ | ✓ | ✓ |
| 異步執行 | ✓ | ✓ | ✓ | ✓ |
| 流式輸出 | ✓ | ✓ | ✓ (5 種模式) | ✓ |
| 結構化輸出 | ✓ | ✓ | ✓ | ✓ |
| 工具調用 | ✓ | ✓ | ✓ | ✓ |
| 會話持久化 | ✓ (CLI) | ✓ | ✓ (核心功能) | ✓ |
2.2 高級功能
| 功能 | Claude Agent SDK | LangChain V1 | LangGraph | Google ADK |
|---|
| 多代理協作 | ✗ | ✗ | ✓ (子圖) | ✓ (代理樹) |
| 並行節點執行 | ✗ | ✗ | ✓ (BSP) | ✓ |
| 動態路由 | ✗ | ✓ | ✓ (Send/Command) | ✓ |
| 中間件/插件 | Hook 系統 | 14+ 中間件 | 自定義節點 | 6+ 插件 |
| 人在迴圈 | Hook | 中間件 | ✓ (interrupt) | 插件 |
| 時間旅行 | ✗ | ✗ | ✓ (狀態歷史) | ✗ |
| 循環圖支持 | ✗ | ✗ | ✓ (原生) | ✗ |
| 文件檢查點 | ✓ | ✗ | ✗ | ✗ |
| 代碼執行沙箱 | ✓ (CLI) | ✓ (Docker) | ✗ | ✓ (多種) |
| 實時音頻流 | ✗ | ✗ | ✗ | ✓ |
2.3 工具生態系統
| 工具類型 | Claude Agent SDK | LangChain V1 | LangGraph | Google ADK |
|---|
| 內建工具數量 | ~10 (CLI) | ~5 | ToolNode | 50+ |
| MCP 支持 | ✓ (核心) | ✗ | ✗ | ✓ |
| 自定義函數工具 | ✓ | ✓ | ✓ | ✓ |
| Google 服務集成 | ✗ | ✗ | ✗ | ✓ (原生) |
| LangChain 工具 | ✗ | ✓ (原生) | ✓ (原生) | ✓ (適配器) |
2.4 LLM 支持
| 提供者 | Claude Agent SDK | LangChain V1 | LangGraph | Google ADK |
|---|
| Claude | ✓ (唯一) | ✓ | ✓ | ✓ |
| Gemini | ✗ | ✓ | ✓ | ✓ (推薦) |
| GPT-4 | ✗ | ✓ | ✓ | ✓ (LiteLLM) |
| 開源模型 | ✗ | ✓ | ✓ | ✓ |
| 提供者數量 | 1 | 20+ | 20+ | 5+ |
3. 執行模型對比
3.1 LangGraph 的 Pregel BSP 模型
LangGraph 的執行模型基於 Google Pregel 論文的 BSP(Bulk Synchronous Parallel)算法:
flowchart TD
Start([開始])
subgraph SuperStep["Super-step 循環"]
Plan["1. Plan: 計算活躍節點<br/>(版本比較)"]
Execute["2. Execute: 並行執行<br/>(ThreadPoolExecutor)"]
Update["3. Update: 聚合通道更新<br/>(channel.update())"]
Checkpoint["4. Checkpoint: 保存狀態<br/>(sync/async)"]
end
Check{還有活躍節點?}
End([結束])
Start --> Plan
Plan --> Execute --> Update --> Checkpoint --> Check
Check -->|是| Plan
Check -->|否| End
特點:
- 確定性:版本追蹤保證相同輸入產生相同結果
- 並行性:節點天然並行執行
- 可恢復:任意超步都可作為檢查點恢復
3.2 Google ADK 的事件溯源模型
flowchart TD
Start([開始])
subgraph RunnerLoop["Runner Loop"]
Load["1. 加載 Session + 事件歷史"]
Loop["2. 代理推理-行動循環<br/>- 調用 LLM<br/>- 執行工具<br/>- 生成 Event"]
Persist["3. 持久化 Event 到 Session"]
Compress["4. 可選: 事件壓縮"]
end
End([結束])
Start --> Load --> Loop --> Persist --> Compress --> End
3.3 執行模型對比表
| 特性 | LangGraph (BSP) | Google ADK (事件溯源) |
|---|
| 確定性 | 高 (版本追蹤) | 中 (事件順序) |
| 並行性 | 原生並行節點 | 順序代理執行 |
| 恢復粒度 | 超步級 | 事件級 |
| 記憶體開銷 | 通道版本追蹤 | 事件累積 |
| 適用場景 | 複雜工作流 | 多代理系統 |
4. 持久化與狀態管理
4.1 Checkpoint 系統對比
| 特性 | Claude Agent SDK | LangChain V1 | LangGraph | Google ADK |
|---|
| 持久化方式 | CLI 內部 | 委託 LangGraph | 原生 Checkpoint | 事件存儲 |
| 粒度 | 會話級 | 步驟級 | 超步級 | 事件級 |
| 時間旅行 | ✗ | ✗ | ✓ | ✗ |
| 分支/合併 | ✗ | ✗ | ✓ | ✗ |
| 版本追蹤 | ✗ | ✗ | ✓ (通道版本) | ✗ |
4.2 存儲後端支持
| 後端 | Claude Agent SDK | LangChain V1 | LangGraph | Google ADK |
|---|
| 內存 | ✓ | ✓ | ✓ | ✓ |
| SQLite | ✗ | ✓ | ✓ | ✓ |
| PostgreSQL | ✗ | ✓ | ✓ | ✓ |
| Redis | ✗ | ✓ | ✗ | ✗ |
| Spanner | ✗ | ✗ | ✗ | ✓ |
| Vertex AI | ✗ | ✗ | ✗ | ✓ |
5. 人在迴圈 (Human-in-the-Loop)
5.1 實現方式對比
| 框架 | 實現方式 | 代碼示例 |
|---|
| Claude Agent SDK | Hook 系統 | hooks={"PreToolUse": [...]} |
| LangChain V1 | HumanInTheLoopMiddleware | middleware=[HumanInTheLoopMiddleware()] |
| LangGraph | interrupt() + Command | answer = interrupt("Approve?") |
| Google ADK | 插件回調 | await interrupt({"question": "..."}) |
5.2 LangGraph 的中斷機制
LangGraph 提供了最完整的人在迴圈支持:
from langgraph.types import interrupt, Command
def review_node(state: State):
# 動態中斷 - 等待人工輸入
approval = interrupt({
"question": "Approve this action?",
"data": state["pending_action"]
})
if approval:
return {"approved": True}
return {"approved": False}
# 靜態中斷點
graph = builder.compile(
checkpointer=checkpointer,
interrupt_before=["tools"], # 工具執行前中斷
interrupt_after=["chatbot"], # 聊天後中斷
)
# 恢復執行
result = graph.invoke(
Command(resume="approved"),
config={"configurable": {"thread_id": "1"}}
)
5.3 功能對比
| 特性 | Claude Agent SDK | LangChain V1 | LangGraph | Google ADK |
|---|
| 動態中斷 | ✓ (Hook) | ✓ | ✓ | ✓ |
| 靜態中斷點 | ✗ | ✗ | ✓ | ✗ |
| 恢復值傳遞 | ✓ | ✓ | ✓ (Command) | ✓ |
| 中斷 ID 追蹤 | ✗ | ✗ | ✓ | ✗ |
| 狀態編輯 | ✗ | ✗ | ✓ | ✗ |
6. 多代理架構
6.1 支持的模式
| 模式 | Claude Agent SDK | LangChain V1 | LangGraph | Google ADK |
|---|
| Network (全連接) | ✗ | ✗ | ✓ | ✗ |
| Supervisor (監督者) | ✗ | ✗ | ✓ | ✓ |
| Hierarchical (分層) | ✗ | ✗ | ✓ (子圖) | ✓ (代理樹) |
| Handoffs (切換) | ✗ | ✗ | ✓ (Command) | ✓ |
| Sequential (順序) | ✗ | ✗ | ✓ | ✓ |
| Parallel (並行) | ✗ | ✗ | ✓ (Send) | ✓ |
6.2 LangGraph 多代理示例
from langgraph.types import Command, Send
# Supervisor 模式
def supervisor(state: State):
response = llm.invoke(f"Route to: {agents}")
return Command(goto=response.agent_name)
# 動態並行 (Map-Reduce)
def route(state: State):
return [Send("process", {"item": item}) for item in state["items"]]
# 子圖嵌套
subgraph = create_subgraph()
builder.add_node("sub_workflow", subgraph)
6.3 Google ADK 多代理示例
from google.adk.agents import Agent, SequentialAgent, ParallelAgent
# 代理樹
root = Agent(
name="root",
sub_agents=[
SequentialAgent(name="pipeline", sub_agents=[a1, a2]),
ParallelAgent(name="parallel", sub_agents=[b1, b2]),
]
)
7. 流式處理
7.1 流模式對比
| 模式 | Claude Agent SDK | LangChain V1 | LangGraph | Google ADK |
|---|
| values (完整狀態) | ✓ | ✓ | ✓ | ✓ |
| updates (增量) | ✗ | ✓ | ✓ | ✓ |
| messages (LLM token) | ✓ | ✓ | ✓ | ✓ |
| custom (自定義) | ✗ | ✗ | ✓ | ✓ |
| debug (詳細) | ✗ | ✗ | ✓ | ✗ |
7.2 LangGraph 流式處理
LangGraph 提供了最豐富的流模式:
# 5 種流模式
for chunk in graph.stream(input, stream_mode="values"): # 完整狀態
print(chunk)
for chunk in graph.stream(input, stream_mode="updates"): # 增量更新
print(chunk)
for chunk in graph.stream(input, stream_mode="messages"): # LLM token
print(chunk)
for chunk in graph.stream(input, stream_mode="custom"): # 自定義
print(chunk)
for chunk in graph.stream(input, stream_mode="debug"): # 詳細追蹤
print(chunk)
# 自定義流寫入
from langgraph.config import get_stream_writer
def my_node(state):
writer = get_stream_writer()
writer({"progress": 50}) # 發送自定義信號
# 處理邏輯...
writer({"progress": 100})
return state
8. 開發體驗對比
8.1 快速開始代碼
Claude Agent SDK (最簡潔):
from claude_agent_sdk import query
async for msg in query(prompt="Hello"):
print(msg)
LangChain V1 (高層 API):
from langchain.agents import create_agent
agent = create_agent(
model="anthropic:claude-sonnet-4-5-20250929",
tools=[...]
)
result = agent.invoke({"messages": [...]})
LangGraph (低層控制):
from langgraph.graph import StateGraph, START, END
builder = StateGraph(State)
builder.add_node("chatbot", chatbot)
builder.add_edge(START, "chatbot")
builder.add_edge("chatbot", END)
graph = builder.compile()
result = graph.invoke({"messages": [...]})
Google ADK (企業級):
from google.adk import Agent, Runner
from google.adk.sessions import InMemorySessionService
runner = Runner(
app_name="app",
agent=Agent(name="assistant", model="gemini-2.5-flash"),
session_service=InMemorySessionService()
)
result = runner.run(user_id="u", session_id="s", new_message=content)
8.2 學習曲線
| 框架 | 學習曲線 | 文檔質量 | 示例數量 | 概念複雜度 |
|---|
| Claude Agent SDK | 低 | 良好 | 16 | 低 |
| LangChain V1 | 中 | 良好 | ~20 | 中 |
| LangGraph | 中-高 | 優秀 | 30+ | 高 (BSP, Channel) |
| Google ADK | 高 | 詳細 | 60+ | 中 |
9. 擴展能力對比
9.1 擴展點數量
| 擴展類型 | Claude Agent SDK | LangChain V1 | LangGraph | Google ADK |
|---|
| 自定義節點 | ✗ | 函數/Runnable | 函數/Runnable | Agent/Tool |
| 自定義通道 | ✗ | ✗ | BaseChannel | ✗ |
| 自定義存儲 | ✗ | ✗ | BaseCheckpointSaver | BaseSessionService |
| 中間件/插件 | Hook (6點) | AgentMiddleware | ✗ | BasePlugin (8點) |
| 工具權限 | can_use_tool | wrap_tool_call | 條件邊 | before_tool_callback |
| LLM 擴展 | ✗ | BaseChatModel (20+) | BaseChatModel | BaseLlm (5+) |
| 傳輸層擴展 | Transport ABC | ✗ | ✗ | ✗ |
擴展點總數: Claude SDK 8 | LangChain 生態 20+ | Google ADK 15+
9.2 擴展難度
| 擴展類型 | Claude Agent SDK | LangChain 生態 | Google ADK |
|---|
| 自定義工具 | 簡單 (@tool) | 簡單 (@tool) | 簡單 (函數) |
| 自定義節點 | N/A | 簡單 (函數) | 中等 (Agent) |
| 自定義通道 | N/A | 中等 (ABC) | N/A |
| 自定義存儲 | N/A | 中等 (ABC) | 中等 (ABC) |
| 自定義中間件 | 中等 (Hook) | 簡單 (裝飾器) | 中等 (Plugin) |
10. 部署和運維
10.1 部署選項
| 部署方式 | Claude Agent SDK | LangChain V1 | LangGraph | Google ADK |
|---|
| 本地開發 | ✓ | ✓ | ✓ | ✓ |
| Docker | ✗ | ✓ | ✓ | ✓ |
| Kubernetes | ✗ | ✓ | ✓ | ✓ |
| LangGraph Cloud | ✗ | ✗ | ✓ | ✗ |
| Vertex AI | ✗ | ✗ | ✗ | ✓ |
| 內建 CLI | ✗ | ✗ | ✗ | ✓ |
10.2 可觀測性
| 特性 | Claude Agent SDK | LangChain V1 | LangGraph | Google ADK |
|---|
| 日誌 | 基本 | 基本 | 基本 | 結構化 |
| 追蹤 | ✗ | LangSmith | LangSmith | OpenTelemetry |
| 指標 | ✗ | ✗ | ✗ | ✓ |
| 評估框架 | ✗ | ✗ | ✗ | ✓ (內建) |
11. 代碼質量與擴展度綜合評分
11.1 三方對比(將 LangChain V1 + LangGraph 合併為一個生態系統)
| 評估維度 | Claude Agent SDK | LangChain 生態 | Google ADK |
|---|
| 類型安全 | 4/5 | 5/5 | 4/5 |
| 架構清晰度 | 4/5 | 5/5 | 3/5 |
| 錯誤處理 | 3/5 | 5/5 | 4/5 |
| 測試質量 | 3/5 | 5/5 | 5/5 |
| 文檔質量 | 4/5 | 5/5 | 5/5 |
| 擴展點數量 | 2/5 | 5/5 | 4/5 |
| 擴展難度 | 4/5 | 4/5 | 3/5 |
| 組合能力 | 2/5 | 5/5 | 4/5 |
| 第三方集成 | 2/5 | 5/5 | 4/5 |
| 代碼簡潔度 | 5/5 | 3/5 | 2/5 |
| ─────────── | ─────────── | ─────────── | ─────────── |
| 代碼質量總分 | 3.6/5 | 4.6/5 | 3.9/5 |
| 擴展度總分 | 2.5/5 | 4.8/5 | 3.8/5 |
| 綜合評分 | 3.1/5 | 4.7/5 | 3.9/5 |
12. 適用場景分析
12.1 按框架選擇
| 框架 | 最適合場景 |
|---|
| Claude Agent SDK | Claude 專屬應用、快速原型、IDE 集成、簡單工作流 |
| LangChain V1 | 多模型支持、中間件密集、現有 LangChain 生態、結構化輸出 |
| LangGraph | 複雜工作流、需要持久化/恢復、人在迴圈、多代理協作、循環圖 |
| Google ADK | 企業級應用、Google Cloud 集成、實時音頻、完整平台需求 |
12.2 決策矩陣
| 需求 | 推薦框架 | 原因 |
|---|
| 只用 Claude | Claude Agent SDK | 最簡單直接 |
| 多模型 + 簡單工作流 | LangChain V1 | 高層 API |
| 複雜狀態管理 | LangGraph | 原生持久化 |
| 需要時間旅行 | LangGraph | 狀態歷史 |
| 人在迴圈 (高級) | LangGraph | interrupt/Command |
| 多代理協作 | LangGraph 或 ADK | 子圖/代理樹 |
| Google Cloud | Google ADK | 原生集成 |
| 企業部署 | Google ADK | 完整工具鏈 |
| MCP 工具 | Claude Agent SDK | 核心功能 |
12.3 組合使用建議
flowchart TD
subgraph Combo1["推薦組合 1: LangChain V1 + LangGraph"]
L1["LangChain V1<br/>高層 create_agent() API"]
L2["LangGraph<br/>底層持久化和人在迴圈"]
L1 --> L2
end
subgraph Combo2["推薦組合 2: LangGraph + LangChain Core"]
LG["LangGraph<br/>構建圖"]
LC["LangChain Core<br/>LLM 和工具"]
LG --> LC
end
subgraph Combo3["推薦組合 3: Google ADK (獨立)"]
ADK["Google ADK<br/>完整企業級平台"]
end
Combo1_use["適合: 需要中間件 + 持久化"]
Combo2_use["適合: 複雜工作流,最大控制"]
Combo3_use["適合: Google Cloud 用戶"]
Combo1 --- Combo1_use
Combo2 --- Combo2_use
Combo3 --- Combo3_use
13. 總結
13.1 核心差異一覽
| 維度 | Claude Agent SDK | LangChain V1 | LangGraph | Google ADK |
|---|
| 設計哲學 | 簡單直接 | 可組合中間件 | 圖編排引擎 | 企業級平台 |
| 代碼量 | 最少 | 中等 | 中等 | 最多 |
| 學習曲線 | 最低 | 中等 | 中-高 | 最高 |
| 靈活性 | 低 | 高 | 最高 | 中 |
| 功能完整度 | 基礎 | 中等 | 中等 | 完整 |
| 生產就緒 | 開發階段 | 生產可用 | 生產可用 | 企業級 |
| 狀態管理 | CLI 內部 | 委託 | 原生 (核心) | 事件溯源 |
13.2 選擇建議
-
選 Claude Agent SDK 如果:
- 只使用 Claude 模型
- 需要最快的開發速度
- 不需要複雜的狀態管理
- 想要使用 MCP 工具生態
-
選 LangChain V1 如果:
- 需要多模型支持
- 重視中間件架構
- 想要高層 API + LangGraph 底層能力
-
選 LangGraph 如果:
- 需要複雜的圖工作流
- 需要原生持久化和時間旅行
- 需要高級人在迴圈功能
- 需要最大的架構控制
-
選 Google ADK 如果:
- 構建企業級應用
- 使用 Google Cloud
- 需要完整的 DevOps 工具
- 需要多代理樹結構
附錄:快速參考
A. 安裝命令
# Claude Agent SDK
pip install claude-agent-sdk
# LangChain V1
pip install langchain langchain-anthropic
# LangGraph
pip install langgraph langgraph-checkpoint-sqlite
# Google ADK
pip install google-adk
B. 最小代碼範例
# === Claude Agent SDK ===
from claude_agent_sdk import query
async for msg in query(prompt="Hello"): print(msg)
# === LangChain V1 ===
from langchain.agents import create_agent
agent = create_agent(model="anthropic:claude-sonnet-4-5-20250929")
result = agent.invoke({"messages": [{"role": "user", "content": "Hello"}]})
# === LangGraph ===
from langgraph.graph import StateGraph, START, END
builder = StateGraph(dict)
builder.add_node("echo", lambda x: x)
builder.add_edge(START, "echo")
builder.add_edge("echo", END)
graph = builder.compile()
result = graph.invoke({"message": "Hello"})
# === Google ADK ===
from google.adk import Agent, Runner
from google.adk.sessions import InMemorySessionService
runner = Runner(
app_name="app",
agent=Agent(name="a", model="gemini-2.5-flash"),
session_service=InMemorySessionService()
)
result = runner.run(user_id="u", session_id="s", new_message=content)
C. 官方資源
| 框架 | 文檔 | 源碼 |
|---|
| Claude Agent SDK | claude.com/docs | github.com/anthropics/claude-agent-sdk-python |
| LangChain V1 | python.langchain.com | github.com/langchain-ai/langchain |
| LangGraph | langchain-ai.github.io/langgraph | github.com/langchain-ai/langgraph |
| Google ADK | cloud.google.com/adk | github.com/google/adk-python |