AIエージェントフレームワーク比較
LangChain/LangGraph、CrewAI、AutoGenの特徴と使い分けを徹底解説
フレームワーク概要比較
| 項目 | LangGraph | CrewAI | AutoGen |
|---|---|---|---|
| 開発元 | LangChain Inc. | CrewAI Inc. | Microsoft Research |
| アーキテクチャ | グラフベース | 役割ベース | 会話ベース |
| 学習コスト | 高い | 低い | 中程度 |
| 柔軟性 | 非常に高い | 中程度 | 高い |
| 状態管理 | チェックポイント付き | RAGサポート | 会話履歴ベース |
| 最適な用途 | 複雑なワークフロー | シーケンシャル処理 | 対話・ブレスト |
LangChain / LangGraph
最も人気 2022年登場
LangChainはLLMアプリ開発の標準フレームワーク。LangGraphはその拡張で、状態管理とサイクリックなグラフ構造をサポート。
長所
- - 豊富なインテグレーション(ほぼ全LLMプロバイダー対応)
- - グラフベースで複雑なワークフローを表現
- - 状態のチェックポイント保存・復元
- - 大規模コミュニティとドキュメント
短所
- - 学習曲線が急
- - 抽象化が多くデバッグが難しい場合も
- - シンプルなタスクにはオーバーヘッド
LangGraphでのReActエージェント実装
python
from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_react_agent
from langchain.tools import tool
from typing import TypedDict, Annotated
import operator
# OpenRouter経由でClaude使用
llm = ChatOpenAI(
model="anthropic/claude-sonnet-4",
base_url="https://openrouter.ai/api/v1",
api_key=os.getenv("OPENROUTER_API_KEY")
)
# ツール定義
@tool
def calculate(expression: str) -> str:
"""数式を計算します"""
return str(eval(expression))
@tool
def search(query: str) -> str:
"""Web検索を実行します"""
return f"{query}の検索結果..."
tools = [calculate, search]
# 状態定義
class AgentState(TypedDict):
messages: Annotated[list, operator.add]
next_action: str
# グラフ構築
def create_react_graph():
graph = StateGraph(AgentState)
# ノード追加
graph.add_node("reason", reason_node)
graph.add_node("act", act_node)
graph.add_node("observe", observe_node)
# エッジ追加
graph.add_edge("reason", "act")
graph.add_edge("act", "observe")
graph.add_conditional_edges(
"observe",
should_continue,
{"continue": "reason", "end": END}
)
graph.set_entry_point("reason")
return graph.compile()
# 実行
agent = create_react_graph()
result = agent.invoke({"messages": ["100 * 25を計算して"]})CrewAI
初心者向け 急成長中
チーム・役割ベースのマルチエージェントフレームワーク。実際の組織構造をモデル化して、複数エージェントが協調して作業を進める。
長所
- - 直感的なAPI(Agent, Task, Crew)
- - 学習コストが低い
- - ドキュメントが充実
- - 役割ベースで理解しやすい
短所
- - 複雑な条件分岐には不向き
- - LangGraphほどの柔軟性はない
- - 主にシーケンシャル処理向け
CrewAIでのマルチエージェント実装
python
from crewai import Agent, Task, Crew, Process
from langchain_openai import ChatOpenAI
# OpenRouter経由でLLM設定
llm = ChatOpenAI(
model="anthropic/claude-sonnet-4",
base_url="https://openrouter.ai/api/v1",
api_key=os.getenv("OPENROUTER_API_KEY")
)
# エージェント定義
researcher = Agent(
role="リサーチャー",
goal="最新のAIトレンドを調査する",
backstory="あなたは経験豊富なテクノロジーリサーチャーです",
llm=llm,
verbose=True
)
writer = Agent(
role="ライター",
goal="調査結果を魅力的な記事にまとめる",
backstory="あなたはテックライターで、複雑な内容をわかりやすく伝えます",
llm=llm,
verbose=True
)
editor = Agent(
role="編集者",
goal="記事の品質を最終チェックする",
backstory="あなたは編集長で、高い品質基準を持っています",
llm=llm,
verbose=True
)
# タスク定義
research_task = Task(
description="2026年のAIエージェントトレンドを調査してください",
agent=researcher,
expected_output="主要トレンド5つのリスト"
)
writing_task = Task(
description="調査結果を元にブログ記事を書いてください",
agent=writer,
expected_output="1000文字程度のブログ記事"
)
editing_task = Task(
description="記事を校正し、改善点を指摘してください",
agent=editor,
expected_output="最終版の記事"
)
# クルー作成と実行
crew = Crew(
agents=[researcher, writer, editor],
tasks=[research_task, writing_task, editing_task],
process=Process.sequential, # 順次実行
verbose=True
)
result = crew.kickoff()
print(result)AutoGen (Microsoft)
Microsoft製 急成長中
会話ベースのマルチエージェントフレームワーク。エージェント間のメッセージパッシングでタスクを進める。対話的なシナリオに強い。
長所
- - 非同期処理に強い
- - 会話ベースで自然な協調
- - コード実行エージェントが組み込み
- - Microsoft Researchの信頼性
短所
- - 構造化されたワークフローには不向き
- - 会話が予測しにくい場合も
- - 設定がやや複雑
AutoGenでの会話エージェント実装
python
from autogen import AssistantAgent, UserProxyAgent, GroupChat, GroupChatManager
import os
# OpenRouter設定
config_list = [{
"model": "anthropic/claude-sonnet-4",
"base_url": "https://openrouter.ai/api/v1",
"api_key": os.getenv("OPENROUTER_API_KEY")
}]
# アシスタントエージェント
coder = AssistantAgent(
name="Coder",
system_message="あなたはPythonの専門家です。コードを書いて問題を解決します。",
llm_config={"config_list": config_list}
)
reviewer = AssistantAgent(
name="Reviewer",
system_message="あなたはコードレビューの専門家です。コードの品質を確認します。",
llm_config={"config_list": config_list}
)
# ユーザープロキシ(コード実行可能)
user_proxy = UserProxyAgent(
name="User",
human_input_mode="NEVER",
code_execution_config={"work_dir": "workspace"},
max_consecutive_auto_reply=10
)
# グループチャット設定
group_chat = GroupChat(
agents=[user_proxy, coder, reviewer],
messages=[],
max_round=10
)
manager = GroupChatManager(
groupchat=group_chat,
llm_config={"config_list": config_list}
)
# 会話開始
user_proxy.initiate_chat(
manager,
message="フィボナッチ数列を計算する効率的な関数を書いてください"
)フレームワーク選択ガイド
LangGraphを選ぶべき場合
- - 複雑な条件分岐やループが必要
- - 状態の保存・復元が重要
- - 高度なカスタマイズが必要
- - 本番環境での堅牢性を重視
CrewAIを選ぶべき場合
- - 素早くプロトタイプを作りたい
- - チームのような協調処理
- - シーケンシャルなワークフロー
- - 学習コストを最小限にしたい
AutoGenを選ぶべき場合
- - 対話的なブレスト・議論
- - コード生成と実行を組み合わせる
- - 非同期処理が必要
- - Microsoft製品との統合