TECH:

エージェンティック・ワークフロー実践ガイド:LangGraph・CrewAI・AutoGen 徹底比較

AIエージェントを使いこなすための実践ガイド。LangGraph、CrewAI、AutoGenの3大サービスを、具体的な設定例・ワークフロー図・評価方法とともに解説。

エージェンティック・ワークフロー実践ガイド:LangGraph・CrewAI・AutoGen 徹底比較

「AIエージェントって、結局どう使えばいいの?」

ChatGPTやClaudeを使ってみたけど、もっと複雑なタスクを自動化したい。でも「エージェント」「マルチエージェント」という言葉が飛び交うものの、どのツールを使えばいいのか分からない。

この記事では、2025年現在で最も注目されている 3つのエージェンティック・ワークフロー・サービス を、実際のコード例とワークフロー図を交えて徹底解説します。

この記事で学べること:
  • 視覚化:各サービスのワークフロー構造を図で理解
  • 設定:実際に動くコード例で設定方法を習得
  • 評価:どのサービスが自分のユースケースに合うか判断

はじめに:エージェンティック・ワークフローとは?

前回の記事「エージェンティック vs デターミニスティック」でも解説しましたが、エージェンティック・ワークフローとは、AIが自律的に判断・行動・自己修正を行うワークフローのことです。

Andrew Ng氏が提唱する4つのパターン:

  1. Reflection(自己反省): 自分の出力を評価し、修正する
  2. Tool Use(道具利用): 外部ツールを選んで使う
  3. Planning(計画): タスクを分解し、順序立てて実行
  4. Multi-agent Collaboration(協調): 複数のエージェントが協力

では、これを実現する具体的なサービスを見ていきましょう。


1. LangGraph:グラフベースのワークフロー制御

概要

LangGraph は、LangChain社が開発したグラフベースのワークフローエンジンです。「ノード(処理)」と「エッジ(遷移)」でワークフローを定義し、条件分岐やループを自在に制御できます。

ワークフロー図

┌─────────────────────────────────────────────────────────────┐
│                    LangGraph ワークフロー                    │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   ┌──────────┐                                              │
│   │  START   │                                              │
│   └────┬─────┘                                              │
│        │                                                    │
│        ▼                                                    │
│   ┌──────────┐    ┌──────────┐    ┌──────────┐             │
│   │ Agent    │───▶│  Tools   │───▶│ Evaluate │             │
│   │ (LLM)    │    │ (Search) │    │ (Grade)  │             │
│   └──────────┘    └──────────┘    └────┬─────┘             │
│        ▲                               │                    │
│        │              ┌────────────────┼────────────┐       │
│        │              ▼                ▼            │       │
│        │         ┌─────────┐    ┌─────────┐        │       │
│        │         │ 再検索   │    │ 回答生成 │        │       │
│        │         │ (Retry) │    │ (Answer)│        │       │
│        │         └────┬────┘    └────┬────┘        │       │
│        │              │              │             │       │
│        └──────────────┘              ▼             │       │
│                                 ┌──────────┐       │       │
│                                 │   END    │       │       │
│                                 └──────────┘       │       │
│                                                             │
└─────────────────────────────────────────────────────────────┘

設定例(Python)

from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI

# 1. 状態の定義
class AgentState(TypedDict):
    messages: list
    documents: list
    grade: str

# 2. ノード(処理)の定義
def retrieve_documents(state: AgentState) -> AgentState:
    """検索ノード:関連ドキュメントを取得"""
    query = state["messages"][-1]
    docs = retriever.invoke(query)
    return {"documents": docs}

def grade_documents(state: AgentState) -> AgentState:
    """評価ノード:ドキュメントの関連性を判定"""
    docs = state["documents"]
    grade = "relevant" if is_relevant(docs) else "not_relevant"
    return {"grade": grade}

def generate_answer(state: AgentState) -> AgentState:
    """回答生成ノード"""
    answer = llm.invoke(state["messages"], context=state["documents"])
    return {"messages": state["messages"] + [answer]}

# 3. グラフの構築
graph = StateGraph(AgentState)
graph.add_node("retrieve", retrieve_documents)
graph.add_node("grade", grade_documents)
graph.add_node("generate", generate_answer)

# 4. エッジ(遷移)の定義
graph.add_edge("retrieve", "grade")
graph.add_conditional_edges(
    "grade",
    lambda state: state["grade"],
    {
        "relevant": "generate",      # 関連性あり → 回答生成
        "not_relevant": "retrieve",  # 関連性なし → 再検索
    }
)
graph.add_edge("generate", END)

# 5. 実行
app = graph.compile()
result = app.invoke({"messages": ["LangGraphとは何ですか?"]})

評価ポイント

項目評価コメント
制御性⭐⭐⭐⭐⭐条件分岐・ループを細かく制御可能
学習曲線⭐⭐⭐グラフ概念の理解が必要
可視化⭐⭐⭐⭐LangSmithで実行トレースを可視化
本番運用⭐⭐⭐⭐⭐Replit, Elasticなどが採用

こんな人におすすめ: RAGの精度を上げたい人、ワークフローを細かく制御したい開発者


2. CrewAI:役割ベースのマルチエージェント

概要

CrewAI は、「チーム」としてAIエージェントを編成できるフレームワークです。各エージェントに「役割」「目標」「バックストーリー」を設定し、まるで人間のチームのように協力させます。

ワークフロー図

┌─────────────────────────────────────────────────────────────┐
│                   CrewAI チーム構成                          │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │                    CREW (チーム)                     │   │
│  ├─────────────────────────────────────────────────────┤   │
│  │                                                     │   │
│  │   ┌───────────┐   ┌───────────┐   ┌───────────┐    │   │
│  │   │ Researcher│──▶│  Writer   │──▶│  Editor   │    │   │
│  │   │ (調査役)  │   │ (執筆役)  │   │ (編集役)  │    │   │
│  │   │           │   │           │   │           │    │   │
│  │   │ Goal:     │   │ Goal:     │   │ Goal:     │    │   │
│  │   │ 情報収集  │   │ 記事作成  │   │ 品質向上  │    │   │
│  │   │           │   │           │   │           │    │   │
│  │   │ Tools:    │   │ Tools:    │   │ Tools:    │    │   │
│  │   │ - Search  │   │ - None    │   │ - None    │    │   │
│  │   │ - Scrape  │   │           │   │           │    │   │
│  │   └───────────┘   └───────────┘   └───────────┘    │   │
│  │                                                     │   │
│  │   実行モード: Sequential(順次実行)                 │   │
│  │                                                     │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

設定例(Python)

from crewai import Agent, Task, Crew
from crewai_tools import SerperDevTool

# 1. ツールの定義
search_tool = SerperDevTool()

# 2. エージェントの定義
researcher = Agent(
    role="Senior Research Analyst",
    goal="Uncover cutting-edge developments in AI",
    backstory="You are an expert researcher with years of experience.",
    tools=[search_tool],
    verbose=True
)

writer = Agent(
    role="Tech Content Writer",
    goal="Write engaging articles about AI trends",
    backstory="You are a skilled writer who makes complex topics accessible.",
    verbose=True
)

editor = Agent(
    role="Quality Editor",
    goal="Ensure content is polished and error-free",
    backstory="You have a keen eye for detail and consistency.",
    verbose=True
)

# 3. タスクの定義
research_task = Task(
    description="Research the latest trends in AI agents for 2025",
    agent=researcher,
    expected_output="A comprehensive report on AI agent trends"
)

writing_task = Task(
    description="Write a blog post based on the research",
    agent=writer,
    expected_output="A 1000-word blog post",
    context=[research_task]  # 前のタスクの結果を受け取る
)

editing_task = Task(
    description="Review and polish the blog post",
    agent=editor,
    expected_output="A final, polished blog post",
    context=[writing_task]
)

# 4. クルーの編成と実行
crew = Crew(
    agents=[researcher, writer, editor],
    tasks=[research_task, writing_task, editing_task],
    process="sequential"  # 順次実行
)

result = crew.kickoff()
print(result)

評価ポイント

項目評価コメント
直感性⭐⭐⭐⭐⭐「チーム」のメタファーで理解しやすい
設定の簡潔さ⭐⭐⭐⭐⭐少ないコードで複雑なワークフロー
拡張性⭐⭐⭐⭐カスタムツールの追加が容易
デバッグ⭐⭐⭐中間結果の確認がやや難しい

こんな人におすすめ: コンテンツ制作を自動化したい人、チームワークのアナロジーが好きな人


3. AutoGen:Microsoftの会話型マルチエージェント

概要

AutoGen は、Microsoftが開発した会話ベースのマルチエージェントフレームワークです。エージェント同士が「チャット」することでタスクを解決するアプローチが特徴で、Human-in-the-Loop(人間の承認) を簡単に組み込めます。

ワークフロー図

┌─────────────────────────────────────────────────────────────┐
│                 AutoGen 会話フロー                           │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   ┌───────────────────────────────────────────────────┐    │
│   │                 Group Chat                        │    │
│   ├───────────────────────────────────────────────────┤    │
│   │                                                   │    │
│   │  ┌─────────┐    ┌─────────┐    ┌─────────┐       │    │
│   │  │ User    │◀──▶│Assistant│◀──▶│ Coder   │       │    │
│   │  │ Proxy   │    │  Agent  │    │  Agent  │       │    │
│   │  │(人間代理) │    │ (指示役) │    │(実行役) │       │    │
│   │  └─────────┘    └─────────┘    └─────────┘       │    │
│   │       ▲              │              │            │    │
│   │       │              ▼              ▼            │    │
│   │       │         ┌─────────────────────────┐      │    │
│   │       │         │     Code Executor       │      │    │
│   │       │         │   (Dockerコンテナ)       │      │    │
│   │       │         └─────────────────────────┘      │    │
│   │       │                                          │    │
│   │  【Human-in-the-Loop】                           │    │
│   │  重要な決定時に人間の承認を要求可能               │    │
│   │                                                   │    │
│   └───────────────────────────────────────────────────┘    │
│                                                             │
└─────────────────────────────────────────────────────────────┘

設定例(Python)

from autogen import ConversableAgent, UserProxyAgent, GroupChat, GroupChatManager

# 1. エージェントの定義
assistant = ConversableAgent(
    name="Assistant",
    system_message="You are a helpful AI assistant.",
    llm_config={"model": "gpt-4"}
)

coder = ConversableAgent(
    name="Coder",
    system_message="You are a Python expert. Write clean, efficient code.",
    llm_config={"model": "gpt-4"}
)

# 2. 人間代理エージェント(Human-in-the-Loop)
user_proxy = UserProxyAgent(
    name="User",
    human_input_mode="TERMINATE",  # 終了時のみ人間入力
    code_execution_config={
        "work_dir": "coding",
        "use_docker": True  # 安全なコード実行
    }
)

# 3. グループチャットの設定
group_chat = GroupChat(
    agents=[user_proxy, assistant, coder],
    messages=[],
    max_round=10
)

manager = GroupChatManager(groupchat=group_chat)

# 4. 実行
user_proxy.initiate_chat(
    manager,
    message="株価データを取得して、過去1年のトレンドをグラフにしてください。"
)

評価ポイント

項目評価コメント
安全性⭐⭐⭐⭐⭐Docker実行、人間承認が組み込み
柔軟性⭐⭐⭐⭐会話形式で複雑なタスクを表現
エンタープライズ対応⭐⭐⭐⭐⭐Microsoft公式、Azure統合
学習リソース⭐⭐⭐⭐公式ドキュメントが充実

こんな人におすすめ: エンタープライズ環境で使いたい人、Human-in-the-Loopが必須の人


3サービス比較まとめ

項目LangGraphCrewAIAutoGen
開発元LangChainCrewAI Inc.Microsoft
設計思想グラフ(状態遷移)チーム(役割分担)会話(対話)
強み細かい制御直感的な設定安全性・承認機能
弱み学習曲線が高いデバッグが難しい設定が冗長になりがち
代表的ユースケースAgentic RAGコンテンツ制作コード生成・実行
本番採用企業Replit, Elastic多数のスタートアップ大手エンタープライズ

どれを選ぶべき?

選択ガイド:
  • RAGの精度を極めたい → LangGraph
  • コンテンツ制作を自動化したい → CrewAI
  • コード生成・実行を安全に行いたい → AutoGen
  • 既存のLangChainプロジェクトがある → LangGraph
  • Microsoft/Azure環境で運用する → AutoGen

Next Action

エージェンティック・ワークフローを始めるなら、まずは小さなプロジェクトから試してみましょう。

  1. LangGraph: 公式チュートリアル でAgentic RAGを構築
  2. CrewAI: 公式ドキュメント でブログ執筆チームを作成
  3. AutoGen: GitHub Examples で会話型エージェントを試す

「決められたレール」を超えて、AIに「考えさせる」ワークフローの世界へようこそ。


出典・参考資料

公式ドキュメント

技術記事

企業採用事例

  • Replit: LangGraphを使った本番AIエージェント
  • Netflix: Temporalベースのワークフロー(参考)
  • Elastic: LangGraphでのエージェント構築