コンテンツにスキップ
LinkedInX

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

約10分

対象読者: AIエージェントの基本概念を理解しており、実際にエージェントを構築したい初中級者の方

AIエージェントフレームワークとは、エージェントの設計・実装を効率化するためのライブラリ・ツールキットです。ゼロから実装すると数百行必要なオーケストレーションロジック・ツール管理・メモリ管理を、フレームワークが提供するAPIで簡潔に記述できます。

ゼロから実装 vs フレームワーク活用

Section titled “ゼロから実装 vs フレームワーク活用”

エージェントを独自実装する場合、以下のすべてを自前で構築する必要があります。

  • ReActループの実装(Reason→Act→Observe のサイクル管理)
  • ツールの定義・呼び出し・エラーハンドリング
  • コンテキスト管理(長さの制御・要約)
  • エージェント間の情報受け渡し
  • Human-in-the-loopの承認フロー
  • 実行ログ・デバッグ機能

フレームワークはこれらをあらかじめ提供しており、開発者はタスク固有のロジックに集中できます。

観点ゼロから実装フレームワーク活用
柔軟性最大フレームワークの範囲内
開発速度遅い速い
学習コストフレームワーク不要フレームワーク学習が必要
メンテナンス自己管理フレームワーク更新に追従
推奨ケース独自要件が強い場合標準的なエージェントの構築

LangGraph は LangChain エコシステムの一部として開発された、グラフベースのエージェントフレームワークです。公式ドキュメントでは、長期実行・ステートフルなエージェントの構築に向いた基盤として説明されています。[1]

# Python - LangGraph の最小構成例(概念的)
from langgraph.graph import StateGraph, END
from typing import TypedDict

class AgentState(TypedDict):
    messages: list
    next_step: str

# グラフの定義
workflow = StateGraph(AgentState)

# ノード(処理ステップ)の追加
workflow.add_node("reason", reason_node)     # 思考ステップ
workflow.add_node("tool_use", tool_node)     # ツール実行
workflow.add_node("observe", observe_node)   # 結果観察

# エッジ(遷移)の定義
workflow.add_edge("reason", "tool_use")
workflow.add_conditional_edges(
    "observe",
    should_continue,  # 条件関数
    {"continue": "reason", "finish": END}
)

# グラフのコンパイル・実行
app = workflow.compile()
result = app.invoke({"messages": [("user", "調査タスクを実行してください")]})

StateGraph とは、エージェントの状態(State)を型定義し、各ノードが状態を更新する形式でワークフローを管理する仕組みです。[1] 複雑な条件分岐や状態管理が必要なエージェントに適しています。

向いている用途

  • 複雑な状態管理が必要なエージェント
  • 条件分岐・ループが多いワークフロー
  • LangChain エコシステムをすでに使用している場合

CrewAI は「クルー(チーム)」として複数エージェントを定義し、各エージェントに役割(Role)と目標(Goal)を設定するフレームワークです。公式ドキュメントは、agents、crews、flowsを中核概念として説明しています。[2]

# Python - CrewAI の最小構成例(概念的)
from crewai import Agent, Task, Crew

# エージェントの定義(役割・目標・バックストーリーを指定)
researcher = Agent(
    role="リサーチアナリスト",
    goal="最新のEV市場動向を包括的に調査する",
    backstory="10年の市場調査経験を持つアナリスト。データの正確性を重視する。",
    tools=[web_search_tool, data_analysis_tool],
    verbose=True
)

writer = Agent(
    role="テクニカルライター",
    goal="調査結果を分かりやすいレポートにまとめる",
    backstory="技術文書の専門家。複雑な情報を明確に伝えることが得意。",
    tools=[file_write_tool]
)

# タスクの定義
research_task = Task(
    description="EV市場の最新データを収集・分析する",
    agent=researcher,
    expected_output="市場シェア・成長率・主要プレイヤーを含む分析レポート"
)

writing_task = Task(
    description="調査結果をもとに読みやすいレポートを作成する",
    agent=writer,
    expected_output="1500字程度の市場動向レポート",
    context=[research_task]  # research_taskの結果を入力として使用
)

# クルーの組成・実行
crew = Crew(
    agents=[researcher, writer],
    tasks=[research_task, writing_task],
    verbose=True
)
result = crew.kickoff()

向いている用途

  • 役割分担が明確なマルチエージェント(リサーチ→ライティング→レビューなど)
  • ビジネスプロセスの自動化
  • コンテンツ生成パイプライン

AutoGen は Microsoft のエージェント構築フレームワークです。現行ドキュメントでは、AgentChatを会話型の単一・マルチエージェントアプリを構築するためのプログラミングフレームワークとして説明しています。[3]

# Python - AutoGen の最小構成例(概念的)
import autogen

# LLM設定
llm_config = {"model": "MODEL_NAME", "api_key": "YOUR_API_KEY"}

# エージェントの定義
assistant = autogen.AssistantAgent(
    name="コーディングアシスタント",
    llm_config=llm_config,
    system_message="Python コードを書いて問題を解決するエージェントです。"
)

# 人間プロキシエージェント(Human-in-the-loop を実現)
user_proxy = autogen.UserProxyAgent(
    name="ユーザープロキシ",
    human_input_mode="TERMINATE",  # 終了条件が満たされたら人間に確認
    code_execution_config={"work_dir": "workspace"}
)

# 会話の開始(エージェント同士が対話してタスクを解決)
user_proxy.initiate_chat(
    assistant,
    message="フィボナッチ数列を計算するPythonスクリプトを書いてテストしてください"
)

このコードは旧系統のAutoGen APIを使った概念例です。現行のAutoGenはAgentChat、Core、Extensionsに分かれているため、実装時は利用バージョンの公式ドキュメントを確認してください。[3]

向いている用途

  • 対話型のタスク解決
  • コード生成・実行・デバッグの自動化
  • 研究目的のマルチエージェント実験

Mastra は TypeScript スタック上でAIアプリやエージェントを構築するためのフレームワークです。公式ドキュメントは、agents、workflows、tools、memory、evalsなどを扱うTypeScript向け基盤として説明しています。[4]

// TypeScript - Mastra の最小構成例(概念的)
import { Mastra, Agent } from "@mastra/core";

// エージェントの定義
const researchAgent = new Agent({
  name: "ResearchAgent",
  instructions: "Web検索を使って最新情報を収集する専門エージェント。",
  model: {
    provider: "ANTHROPIC",
    name: "claude-sonnet-4-5",
  },
  tools: {
    webSearch: webSearchTool,
    fileWrite: fileWriteTool,
  },
});

// Mastraインスタンスの作成
const mastra = new Mastra({
  agents: { researchAgent },
});

// エージェントの実行
const agent = mastra.getAgent("researchAgent");
const result = await agent.generate(
  "AIエージェント市場の最新規模を調査してください"
);

console.log(result.text);

向いている用途

  • Next.js・Nuxt などのWebフレームワークへの組み込み
  • TypeScript プロジェクトでのエージェント開発
  • フロントエンドとエージェントを密結合させたいケース

OpenAI Agents SDK は OpenAI が提供するエージェントSDKです。ドキュメントでは、Agents、Tools、Handoffs、Guardrails、Tracingなどを中核機能として案内しています。[5]

# Python - OpenAI Agents SDK の最小構成例(概念的)
from openai import OpenAI
from agents import Agent, Runner, handoff

client = OpenAI()

# 各専門エージェントの定義
triage_agent = Agent(
    name="トリアージエージェント",
    instructions="ユーザーの質問を分析して、適切な専門エージェントに転送する。",
    model="MODEL_NAME"
)

coding_agent = Agent(
    name="コーディングエージェント",
    instructions="コードに関する質問を担当する。",
    model="MODEL_NAME",
    handoffs=[handoff(triage_agent)]  # 処理完了後にトリアージに戻す
)

research_agent = Agent(
    name="リサーチエージェント",
    instructions="情報収集・調査タスクを担当する。",
    model="MODEL_NAME",
    handoffs=[handoff(triage_agent)]
)

# トリアージエージェントにハンドオフ先を設定
triage_agent.handoffs = [
    handoff(coding_agent),
    handoff(research_agent)
]

# 実行
result = Runner.run_sync(triage_agent, "Pythonでソートアルゴリズムを実装してください")

ハンドオフ(Handoff)とは、あるエージェントから別のエージェントへ会話や制御を委譲する仕組みです。[6] コールセンターで担当部署を転送するイメージに近く、専門性に応じて適切なエージェントが処理を引き継ぎます。

向いている用途

  • OpenAI APIを中心に使うプロジェクト
  • シンプルなマルチエージェントのハンドオフ実装
  • カスタマーサポート・トリアージシステム

Claude Code は Anthropic が提供するコーディング向けAIエージェントです。公式ドキュメントでは、ターミナルから使うエージェント型コーディングツールとして案内されています。[7]

Claude CodeはMCP連携をサポートし、カスタムサブエージェントで専門化した作業単位を定義できます。[8][9]

# Claude Code の基本的な使い方(コマンドライン)

# 単一タスクの実行
claude -p "src/auth.ts のバグを調査して修正してください"

# サブエージェントを使った並列タスク(概念的な例)
claude -p "以下を並列で実行してください:
  1. フロントエンドのユニットテストを書く
  2. バックエンドのAPIドキュメントを生成する
  3. CIの設定ファイルを最適化する"

# MCP サーバーと連携した操作
# (MCPサーバーを設定済みの場合)
claude -p "GitHubのissue #123を参照して、対応するコードを修正してください"

Claude Code SDK を使うと、自分のアプリケーションからClaude Codeのエージェント機能を呼び出すことも可能です。[7]

向いている用途

  • ソフトウェア開発・コードベース操作
  • 大規模リファクタリング・テスト自動生成
  • MCP経由での外部サービス連携
フレームワーク言語主な特徴学習コスト向いている用途
LangGraphPythonグラフ定義、状態管理複雑なワークフロー
CrewAIPython役割・目標ベース設計低〜中役割分担型マルチエージェント
AutoGenPython対話型エージェント研究・コード実行自動化
MastraTypeScriptWeb統合、型安全Webアプリ統合
OpenAI Agents SDKPythonハンドオフ、シンプルOpenAI中心のマルチエージェント
Claude CodeCLI/Python/TSコーディング特化、MCP統合ソフトウェア開発

フレームワーク選び方フローチャート

Section titled “フレームワーク選び方フローチャート”
graph TD
    Start["フレームワーク選択"] --> Lang{"主な開発言語は?"}

    Lang -->|"TypeScript"| TS["Mastra\n(TypeScript-first)"]
    Lang -->|"Python"| Python{"主なユースケースは?"}

    Python -->|"コーディング・開発支援"| Claude["Claude Code\n(コーディング特化)"]
    Python -->|"OpenAI APIを使いたい"| OpenAI["OpenAI Agents SDK\n(シンプルなマルチエージェント)"]
    Python -->|"複雑なワークフロー・状態管理"| LangGraph["LangGraph\n(グラフベース)"]
    Python -->|"役割分担が明確なチーム型"| CrewAI["CrewAI\n(役割・目標ベース)"]
    Python -->|"研究目的・対話型"| AutoGen["AutoGen\n(対話型エージェント)"]
  • フレームワークを使うと、ReActループ・ツール管理・エージェント間通信を自前実装せずに済む
  • 6つのフレームワークにはそれぞれ設計思想と得意な用途がある
  • TypeScriptプロジェクトには Mastra、コーディング支援には Claude Code、複雑なワークフローには LangGraph、役割分担型には CrewAI が適している
  • まず小さなプロトタイプで試してから本番導入を判断することを推奨する

Q: 初心者に最も入門しやすいフレームワークはどれですか?

A: CrewAI または OpenAI Agents SDK が入門向きです。役割(Role)とゴール(Goal)を自然言語で定義するだけでマルチエージェントを構築できるCrewAIは、特に直感的です。LangGraphは機能が豊富ですが、グラフの概念に慣れるまでに時間がかかります。

Q: LangChainとLangGraphは何が違いますか?

A: LangChain はLLMアプリケーション全般のための汎用フレームワークです。LangGraph はLangChainの上に構築されたエージェント特化のフレームワークで、グラフ構造によるフロー制御が中心です。エージェントを構築する場合は LangGraph が推奨されています。

Q: 複数のフレームワークを組み合わせて使えますか?

A: 技術的には可能ですが、複雑になるため推奨しません。まず1つのフレームワークで要件を満たせるか検討し、どうしても足りない場合にのみ組み合わせを検討してください。

Q: フレームワークを使わずに直接Anthropic APIを呼び出す方法はありますか?

A: はい、可能です。Anthropic Python SDK(anthropic パッケージ)を使えば、フレームワークなしでエージェントを構築できます。シンプルなエージェントや独自要件が強い場合はこの方法が適しています。詳細はAIエージェントとMCPを参照してください。

  1. LangChain, LangGraph overview
  2. CrewAI, Agents
  3. Microsoft, AutoGen
  4. Mastra, Get started with Mastra
  5. OpenAI, OpenAI Agents SDK
  6. OpenAI, Handoffs
  7. Anthropic, Claude Code overview
  8. Anthropic, Connect Claude Code to tools via MCP
  9. Anthropic, Create custom subagents
クイズ