LangGraphとは
LangGraphは、LangChain社が2024年1月に公開したLLMエージェントのワークフロー構築ライブラリである。LLMエージェントの実行フローを有向グラフ(ノード=処理ステップ、エッジ=遷移条件)として定義し、複雑なマルチステップ推論を制御可能にする。LangChainエコシステムの中核として、LangSmith(監視)・LangServe(デプロイ)と統合される。
主な特徴
- 有向グラフベース: ノード(関数/LLM呼び出し/ツール)とエッジ(条件分岐/無条件遷移)でワークフローを定義。DAG(非巡回)だけでなくサイクル(ループ)もサポート
- ステート管理: TypedDictまたはPydanticモデルでグラフ全体の状態を型安全に管理。各ノードは状態の一部を読み書きする
- Human-in-the-Loop: グラフの任意のノードで人間の承認・修正を待つ「中断→再開」パターンを組み込み可能
- チェックポイント: 実行状態をSQLite/PostgreSQL/Redisに永続化。障害時の再開や中断後の継続が可能
- ストリーミング: トークン単位・ノード完了単位のストリーミング出力。リアルタイムUIに対応
- マルチエージェント: 複数のサブグラフを組み合わせてマルチエージェントシステムを構築。Supervisor/Worker パターン等
- LangSmith統合: 実行トレースをLangSmithに自動送信。デバッグ・パフォーマンス分析・A/Bテストが可能
- Python/JS対応: Python(langgraph)とJavaScript/TypeScript(@langchain/langgraph)の2言語で提供
コード例
from langgraph.graph import StateGraph, END
from typing import TypedDict
class AgentState(TypedDict):
messages: list
next_action: str
def call_llm(state: AgentState) -> AgentState:
# LLM呼び出しロジック
return {"messages": state["messages"] + [response], "next_action": "tool"}
def call_tool(state: AgentState) -> AgentState:
# ツール実行ロジック
return {"messages": state["messages"] + [result], "next_action": "end"}
def should_continue(state: AgentState) -> str:
return state["next_action"]
graph = StateGraph(AgentState)
graph.add_node("llm", call_llm)
graph.add_node("tool", call_tool)
graph.add_edge("__start__", "llm")
graph.add_conditional_edges("llm", should_continue, {"tool": "tool", "end": END})
graph.add_edge("tool", "llm")
app = graph.compile()
result = app.invoke({"messages": ["ユーザーの質問"], "next_action": ""})
他フレームワークとの比較