LangGraph(ランググラフ)
LangChainが開発した、LLMエージェントをグラフ構造で定義・実行するフレームワーク。StateGraphを用いてノード(処理ステップ)とエッジ(遷移条件)を定義し、複雑なマルチエージェントワークフローを構築できる。
LangGraph とは
LangGraphはLangChainチームが開発した、LLMエージェントをグラフ(有向グラフ)として定義・実行するフレームワークです。2024年に本格的に採用が広がり、複雑なエージェントワークフローの実装標準として注目されています。
コアコンセプト: StateGraph
LangGraphの中心概念は StateGraph です。エージェントの状態(State)を型安全なTypedDictで定義し、ノードとエッジでワークフローを構成します。
from langgraph.graph import StateGraph, END
from typing import TypedDict, Annotated
import operator
class AgentState(TypedDict):
messages: Annotated[list, operator.add]
next: str
graph = StateGraph(AgentState)
graph.add_node("agent", agent_node)
graph.add_node("tools", tool_node)
graph.add_edge("tools", "agent")
graph.add_conditional_edges("agent", router, {"tools": "tools", "end": END})
graph.set_entry_point("agent")
app = graph.compile()
ノード は個々の処理ステップ、エッジ は遷移条件を定義します。条件付きエッジでルーティング関数を使い、動的に次ノードを選択できます。
Human-in-the-loop (HITL)
LangGraphの重要機能がHuman-in-the-loopサポートです。チェックポイントで実行を一時停止し、ユーザーの承認後に再開できます。
from langgraph.checkpoint.memory import MemorySaver
memory = MemorySaver()
app = graph.compile(checkpointer=memory, interrupt_before=["tools"])
result = app.invoke(state, config={"configurable": {"thread_id": "1"}})
# ツール実行前に停止 → ユーザーが確認
app.invoke(None, config={"configurable": {"thread_id": "1"}}) # 再開
マルチエージェント
スーパーバイザーパターンとサブグラフで複数エージェントを協調させます。スーパーバイザーLLMがワーカーエージェントにタスクを振り分け、サブグラフで入れ子構造も構成可能です。Send APIで並列実行も可能。
Streaming
for chunk in app.stream(inputs):
for node, values in chunk.items():
print(f"Node {node}: {values}")
stream_mode="values" で状態全体、"updates" で差分のみストリーミングできます。
適するユースケース
| ユースケース | 理由 |
|---|---|
| 複雑なReActエージェント | サイクリックグラフで自然に表現 |
| HITL承認フロー | チェックポイント+interrupt機能 |
| マルチエージェント協調 | スーパーバイザーパターン標準搭載 |
| 長時間ワークフロー | 永続化で耐障害性確保 |
LangGraph Platform
LangSmithと統合した LangGraph Platform は、本番デプロイ・スケーリング・モニタリングを提供します(セルフホスト版あり)。
まとめ
LangGraphはステートフル・サイクリックなエージェントワークフローを型安全に構築できる実用的フレームワークです。2025年時点でLLMエージェント実装の最有力選択肢のひとつとして広く採用されています。