LangGraph (LangChain から) は、状態を持つエージェントのワークフローを有向グラフとして構築するための低レベルフレームワークです。ノードは関数、エッジは遷移、状態は明示的です。
アーキテクチャ
LangGraph はエージェントのワークフローをグラフとしてモデル化します:
- State: グラフ全体を通して流れる型付き辞書
- Nodes: 状態を読み取り、更新する関数
- Edges: ノード間の接続(条件付きまたは無条件)
- Checkpointers: 永続化と再開のための状態保存
from langgraph.graph import StateGraph, END
from typing import TypedDict
class AgentState(TypedDict):
messages: list
next_step: str
def research_node(state: AgentState):
# Run research, update state
return {"messages": state["messages"] + [research_result], "next_step": "write"}
def write_node(state: AgentState):
# Write content, update state
return {"messages": state["messages"] + [draft], "next_step": "done"}
def router(state: AgentState):
return state["next_step"]
workflow = StateGraph(AgentState)
workflow.add_node("research", research_node)
workflow.add_node("write", write_node)
workflow.add_conditional_edges("research", router, {"write": "write", "done": END})
workflow.add_edge("write", END)
app = workflow.compile()
Strengths
- エージェントのフローと状態を極めて細かく制御できる
- 組み込みの永続化とチェックポイント機能
- ループ、再試行、条件分岐をすっきりと扱える
- 割り込みを介したヒューマン・イン・ザ・ループのサポート
- 本番環境水準の信頼性
Weaknesses
- 学習曲線が急で、自分で作る量が増える
- 単純なケースでは CrewAI より冗長になる
- グラフ概念の理解が必要
- デバッグには状態遷移の理解が必要
Best for
- 一時停止と再開が必要な長時間実行のエージェント
- 分岐ロジックを含む複雑な条件付きワークフロー
- 信頼性とデバッグ性が重要な本番システム
- 適切な抽象化に投資できるエンジニアリングリソースを持つチーム
Direct Comparison
| 指標 | CrewAI | AutoGen | LangGraph |
|---|---|---|---|
| 学習曲線 | 低い | 中程度 | 高い |
| プロトタイピングの速度 | 速い | 中程度 | 遅い |
| 本番運用の信頼性 | 中程度 | 中程度 | 高い |
| 状態制御 | 限定的 | 中程度 | 完全 |
| ヒューマン-in-the-loop | 限定的 | 優れている | 良い |
| コード実行 | ツール経由 | ネイティブ | ノード経由 |
| 最適モデル | 役割ベースの協働 | 対話的ループ | 状態を持つワークフロー |
| コミュニティ規模 | 大規模 | 大規模 | 大規模 |
How to Choose
Choose CrewAI if:
- プロトタイピング中で、迅速な結果が必要な場合
- ワークフローが役割とタスクに自然に対応する場合
- ボイラープレートを最小限にしたい場合
Choose AutoGen if:
- ワークフローが本質的に対話型である場合
- 強力なコード実行機能が必要な場合
- 人間によるレビューと反復がワークフローの中心である場合
Choose LangGraph if:
- 本番運用に向けて構築しており、制御が必要な場合
- ワークフローに複雑な条件分岐ロジックがある場合
- 状態の永続化が必要(一時停止して再開するエージェント)
- 適切なアーキテクチャに投資できるエンジニアリングリソースがある場合
The Honest Take
ソロの開発者や小規模チームには、速度を優先してCrewAIから始め、抽象化の限界を感じたら LangGraph へ移行します。対話型でコード実行のパターンが特定の用途に適している場合は AutoGen が最適な選択です。
すべての3つは現在も活発にメンテナンスされています。どれも間違った答えではありません。間違いは、構築する代わりに選択に2週間を費やすことです。(あなたが誰か分かります。)