AIエージェント開発フレームワークは、状態管理の柔軟性が必要ならLangGraph、ロールベースで直感的にマルチエージェントを組み立てたいならCrewAI、会話駆動型の協調が主役ならAutoGenが第一候補となります。プロトタイプから本番へ移行する際にはフレームワーク選定を見直すことが多いため、最初から成熟度と保守性を視野に入れておくのが賢明です。
AIエージェントフレームワークの全体像
AIエージェントを素手で実装するのは、自動車をネジから作るようなものです。状態管理、ツール呼び出し、ループ検出、エラーハンドリング、メモリ管理――これらを毎回ゼロから書いていたら、本題のビジネスロジックに辿り着く前に疲弊します。そこで登場したのがエージェント開発フレームワークです。2024年以降、LangGraph、CrewAI、AutoGen、Semantic Kernel、Agno、Mastraなど多くの選択肢が生まれ、それぞれが異なる思想と強みを持っています。
選定を誤ると、あとからのリファクタリングコストが莫大になります。フレームワークは「LLMを呼び出す薄いラッパー」ではなく、アーキテクチャそのものを規定する存在です。以降では代表的な3つを実装例とともに比較していきます。
LangGraph
LangGraphは、LangChainの開発元であるLangChain社が提供する、グラフベースのエージェントフレームワークです。エージェントの処理を有向グラフとして表現し、各ノードが状態を更新しながら次のノードへ遷移していきます。特徴的なのは、循環グラフを許容している点です。ReActループのような「Thought→Action→Observation」の繰り返し構造を素直に表現できます。
from langgraph.graph import StateGraph, END
from typing import TypedDict
from langchain_openai import ChatOpenAI
class AgentState(TypedDict):
input: str
output: str
iterations: int
llm = ChatOpenAI(model="gpt-4o")
def think(state: AgentState):
response = llm.invoke(state["input"]).content
return {"output": response, "iterations": state["iterations"] + 1}
def should_continue(state: AgentState):
if state["iterations"] >= 3:
return END
return "think"
graph = StateGraph(AgentState)
graph.add_node("think", think)
graph.set_entry_point("think")
graph.add_conditional_edges("think", should_continue)
app = graph.compile()
result = app.invoke({"input": "売上予測モデルの設計", "output": "", "iterations": 0})
print(result["output"])
LangGraphの強みは、状態の型安全性と、条件分岐・ループを明示的に扱える点です。一方で、学習コストはやや高く、シンプルなタスクではオーバースペックに感じられる場合があります。複雑なワークフローや、本番運用での観測可能性を重視するなら第一候補です。
CrewAI
CrewAIは、マルチエージェントの構築を「人間のチーム編成」のメタファーで抽象化したフレームワークです。エージェントに役割(role)、目標(goal)、背景(backstory)を与えるだけで、驚くほど直感的にマルチエージェントが組み上がります。LangGraphが「グラフを書く」のに対し、CrewAIは「チームを作る」感覚です。
from crewai import Agent, Task, Crew, Process
analyst = Agent(
role="Data Analyst",
goal="売上データから改善ポイントを抽出",
backstory="BIツールに精通したアナリスト",
allow_delegation=False
)
strategist = Agent(
role="Business Strategist",
goal="分析結果から施策を提案",
backstory="マーケティング戦略のベテラン",
allow_delegation=False
)
analyze_task = Task(
description="Q3の売上データを分析",
agent=analyst,
expected_output="改善ポイント3点"
)
strategy_task = Task(
description="改善ポイントから施策を3つ提案",
agent=strategist,
expected_output="実行可能な施策リスト"
)
crew = Crew(
agents=[analyst, strategist],
tasks=[analyze_task, strategy_task],
process=Process.sequential
)
result = crew.kickoff()
CrewAIは書き味が非常に軽く、プロトタイプを数十分で作れる点が魅力です。ただし、細かい状態管理や複雑な条件分岐は苦手で、エージェントが勝手に暴走することもあります。小〜中規模のマルチエージェントを素早く立ち上げたい場合に最適です。
AutoGen(Microsoft)
AutoGenはMicrosoft Researchが開発した、会話ベースのマルチエージェントフレームワークです。エージェント同士が自然言語で会話しながらタスクを進めるという、非常にユニークなアプローチを採用しています。人間も会話の途中に介入できる「Human-in-the-loop」の設計が組み込まれており、実験的なエージェント設計や、人間の判断を挟みたい業務に向いています。
from autogen import AssistantAgent, UserProxyAgent
config_list = [{"model": "gpt-4o", "api_key": "YOUR_KEY"}]
assistant = AssistantAgent(
name="assistant",
llm_config={"config_list": config_list}
)
user_proxy = UserProxyAgent(
name="user_proxy",
human_input_mode="NEVER",
max_consecutive_auto_reply=5,
code_execution_config={"work_dir": "coding", "use_docker": False}
)
user_proxy.initiate_chat(
assistant,
message="Pythonで売上データのCSVを読み込み、月次集計してグラフに出力してください"
)
AutoGenは会話駆動の柔軟さが強みですが、裏を返せば「どこで処理が終わるかコードから読みにくい」欠点も抱えています。本番運用には追加の制御層が必要です。
その他のフレームワーク
3大フレームワークの他にも有力な選択肢があります。Semantic Kernelは.NET/Java/Pythonに対応し、エンタープライズ環境で採用が広がっています。Agnoは軽量・高速を謳うPythonフレームワークで、ミニマルな構成が魅力です。MastraはTypeScript製で、フロントエンドエンジニアに馴染みやすい開発体験を提供します。
| 名前 | 提供元 | 言語 | マルチエージェント | 状態管理 | ツール連携 | 学習コスト | 成熟度 | 特徴 |
|---|---|---|---|---|---|---|---|---|
| LangGraph | LangChain | Python/JS | 対応 | 強力 | 豊富 | 高 | 高 | グラフベース |
| CrewAI | CrewAI Inc. | Python | 特化 | 中 | 中 | 低 | 中 | ロールベース |
| AutoGen | Microsoft | Python | 対応 | 中 | 中 | 中 | 中 | 会話駆動 |
| Semantic Kernel | Microsoft | C#/Py/Java | 対応 | 中 | 豊富 | 中 | 高 | エンタープライズ |
| Agno | Agno Inc. | Python | 対応 | 軽量 | 中 | 低 | 低 | 高速・軽量 |
| Mastra | Mastra | TypeScript | 対応 | 中 | 中 | 低 | 低 | TS特化 |
| ユースケース | 推奨FW | 理由 |
|---|---|---|
| 複雑な分岐・ループ・本番運用 | LangGraph | 状態管理と観測可能性が強力 |
| マルチエージェントの素早い試作 | CrewAI | ロール記述だけで動く直感性 |
| Human-in-the-loopの実験 | AutoGen | 会話駆動設計が柔軟 |
| エンタープライズ.NET環境 | Semantic Kernel | MSエコシステムと親和性 |
| 軽量・低レイテンシ要件 | Agno | 最小限のオーバーヘッド |
| フロントエンド統合 | Mastra | TypeScriptネイティブ |
フレームワーク選定の判断基準
選定は、ユースケース・チームスキル・運用要件の3軸で決まります。下記はその判断フローです。
Q1. 主要言語は何ですか?
├── TypeScript → Mastra
├── C#/.NET → Semantic Kernel
└── Python → Q2へ
Q2. マルチエージェントが必須ですか?
├── Yes → Q3へ
└── No → LangGraph(単一エージェントでも高機能)
Q3. 複雑な状態管理や本番運用の観測性が必要ですか?
├── Yes → LangGraph
└── No → Q4へ
Q4. ロール記述で素早くプロトタイプしたいですか?
├── Yes → CrewAI
└── No → Q5へ
Q5. 会話駆動やHuman-in-the-loopが主目的ですか?
├── Yes → AutoGen
└── No → Agno(軽量シンプル構成)
最初から完璧を目指す必要はありません。多くの実プロジェクトは、プロトタイプをCrewAIで作り、本番移行時にLangGraphへ載せ替える、という二段構えで進んでいます。
まとめ
- LangGraphは複雑なワークフローと本番運用に強く、選定の第一候補になりやすい
- CrewAIはロール記述で直感的に書けるため、プロトタイプ段階で圧倒的な生産性を発揮する
- AutoGenは会話駆動とHuman-in-the-loopの柔軟性が魅力だが、本番制御には追加工夫が必要
- フレームワーク選定はチームの言語スキルと運用要件を軸に、プロトタイプと本番で分けて考えるのが現実的
よくある質問
AIエージェント開発に最適なフレームワークは
用途により異なります。柔軟なワークフローが必要ならLangGraph、マルチエージェントを直感的に構築したいならCrewAI、会話ベースの協調が必要ならAutoGenが適しています。
LangGraphとLangChainの違いは
LangChainはLLMアプリケーション全般の開発フレームワーク、LangGraphはLangChainの上に構築されたエージェント特化のフレームワークです。LangGraphはグラフベースの状態管理により、複雑なエージェントワークフローを定義できます。
フレームワークなしでAIエージェントを構築できますか
技術的には可能ですが、状態管理、ツール連携、エラーハンドリング、ループ検出など多くの機能を自前実装する必要があります。プロトタイプではフレームワークなしでも良いですが、本番システムではフレームワークの利用を推奨します。