エージェンティック・ワークフロー実践ガイド:LangGraph・CrewAI・AutoGen 徹底比較
AIエージェントを使いこなすための実践ガイド。LangGraph、CrewAI、AutoGenの3大サービスを、具体的な設定例・ワークフロー図・評価方法とともに解説。
「AIエージェントって、結局どう使えばいいの?」
ChatGPTやClaudeを使ってみたけど、もっと複雑なタスクを自動化したい。でも「エージェント」「マルチエージェント」という言葉が飛び交うものの、どのツールを使えばいいのか分からない。
この記事では、2025年現在で最も注目されている 3つのエージェンティック・ワークフロー・サービス を、実際のコード例とワークフロー図を交えて徹底解説します。
- 視覚化:各サービスのワークフロー構造を図で理解
- 設定:実際に動くコード例で設定方法を習得
- 評価:どのサービスが自分のユースケースに合うか判断
はじめに:エージェンティック・ワークフローとは?
前回の記事「エージェンティック vs デターミニスティック」でも解説しましたが、エージェンティック・ワークフローとは、AIが自律的に判断・行動・自己修正を行うワークフローのことです。
Andrew Ng氏が提唱する4つのパターン:
- Reflection(自己反省): 自分の出力を評価し、修正する
- Tool Use(道具利用): 外部ツールを選んで使う
- Planning(計画): タスクを分解し、順序立てて実行
- 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サービス比較まとめ
| 項目 | LangGraph | CrewAI | AutoGen |
|---|---|---|---|
| 開発元 | LangChain | CrewAI Inc. | Microsoft |
| 設計思想 | グラフ(状態遷移) | チーム(役割分担) | 会話(対話) |
| 強み | 細かい制御 | 直感的な設定 | 安全性・承認機能 |
| 弱み | 学習曲線が高い | デバッグが難しい | 設定が冗長になりがち |
| 代表的ユースケース | Agentic RAG | コンテンツ制作 | コード生成・実行 |
| 本番採用企業 | Replit, Elastic | 多数のスタートアップ | 大手エンタープライズ |
どれを選ぶべき?
- RAGの精度を極めたい → LangGraph
- コンテンツ制作を自動化したい → CrewAI
- コード生成・実行を安全に行いたい → AutoGen
- 既存のLangChainプロジェクトがある → LangGraph
- Microsoft/Azure環境で運用する → AutoGen
Next Action
エージェンティック・ワークフローを始めるなら、まずは小さなプロジェクトから試してみましょう。
- LangGraph: 公式チュートリアル でAgentic RAGを構築
- CrewAI: 公式ドキュメント でブログ執筆チームを作成
- AutoGen: GitHub Examples で会話型エージェントを試す
「決められたレール」を超えて、AIに「考えさせる」ワークフローの世界へようこそ。
出典・参考資料
公式ドキュメント
- LangGraph Documentation: LangChain公式
- CrewAI Documentation: CrewAI公式
- AutoGen Documentation: Microsoft公式
技術記事
- LangGraph for Agentic RAG: LangChain Blog
- CrewAI Multi-Agent Examples: GitHub Examples
- AutoGen Real-World Examples: Microsoft Examples
企業採用事例
- Replit: LangGraphを使った本番AIエージェント
- Netflix: Temporalベースのワークフロー(参考)
- Elastic: LangGraphでのエージェント構築