さとまたwiki
AIエージェント開発 / フレームワーク比較

AIエージェントフレームワーク比較

LangChain/LangGraph、CrewAI、AutoGenの特徴と使い分けを徹底解説

フレームワーク概要比較

項目LangGraphCrewAIAutoGen
開発元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製品との統合