- AIエージェントは「受動的な質問応答」から「環境を能動的に認識し、ステップを計画し、ツールを呼び出し、自己省察する」自律システムへと進化しています。推論と行動を交互に行うReActフレームワークは、現在最も普及しているエージェント設計パターンです
- LangGraphは有向グラフ状態マシンを中心に構築され、最も細かい制御粒度を提供し、精密に定義された実行フローを必要とするプロダクショングレードのアプリケーションに最適です。CrewAIはロールプレイとタスク委任を中心に、最速の開発スピードを実現しますが、柔軟性は低くなります
- AutoGen(現AG2)は会話駆動型マルチエージェントアーキテクチャを採用し、エージェント間の深い交渉が必要なシナリオに優れていますが、学習曲線が急でデバッグの難易度が高くなります
- 本記事には2つの完全なGoogle Colab実装を収録しています:LangGraphでReActツール呼び出しエージェントを構築する方法と、CrewAIでマルチエージェント研究チームを構築する方法 — どちらもワンクリックで実行可能です
1. チャットボットから自律エージェントへ:AIエージェントのパラダイムシフト
2023年、大規模言語モデル(LLM)は驚異的なスピードであらゆる産業に浸透しました。しかし、ほとんどのアプリケーションは「人間が質問し、AIが答える」という会話パラダイムに留まっており、利用パターンの本質は従来の検索エンジンと変わりませんでした。真のブレークスルーは、LLMに環境認識、ステップ計画、外部ツール呼び出し、結果に基づく自己修正の能力を付与し、受動的な言語モデルから自律型AIエージェントへと変革する時に訪れます[1]。
Wangらは2024年の調査[1]において、LLMベースのエージェントを、LLMを認知コアとし、認識(Perception)、計画(Planning)、行動(Action)、記憶(Memory)の4つの主要モジュールで構成される自律システムと定義しました。この定義は、エージェントと従来のチャットボットの根本的な違いを的確に捉えています — エージェントは質問に答えるだけでなく、外部世界と能動的にインタラクションしてマルチステップタスクを完了できるのです。
産業実践の観点から見ると、エージェントの価値は、人間を反復的な認知労働から解放する能力にあります。適切に設計されたエージェントは、市場調査、データ分析、レポート作成、コード生成といった複雑なタスクを自律的に完了できます — アナリストが数時間かかる作業を、エージェントなら数分で完了できるのです。Parkらによる「生成エージェント」研究[7]は、エージェント間のソーシャルインタラクション能力をさらに実証し、マルチエージェント協調の巨大なポテンシャルを予見させました。
しかし、信頼性の高いAIエージェントの構築は、単に「LLMにいくつかのAPIを接続する」だけでは到底実現できません。エージェントの核心的課題には次のようなものがあります:マルチステップ推論におけるLLMの一貫性をどう確保するか?ツール呼び出しの失敗やリトライをどう優雅に処理するか?複数のエージェント間の情報フローと意思決定権限をどう調整するか?これらのエンジニアリング課題が、一連のエージェント開発フレームワークの誕生を促し、LangGraph、CrewAI、AutoGenが現在最も代表的な3つの選択肢となっています。
2. コアエージェントアーキテクチャ:認識、計画、行動、省察
3大フレームワークの比較に入る前に、まずAIエージェントの普遍的なアーキテクチャパターンを理解する必要があります。どのフレームワークを使用するかに関わらず、完全なエージェントシステムは4つのコアステージを包含しています[1]:
2.1 認識(Perceive)
エージェントはまず、現在のタスク環境を理解する必要があります。これには、ユーザーの自然言語入力の解析、外部データソース(データベース、API、ドキュメント)の読み取り、過去の会話ターンからのコンテキストメモリの取得が含まれます。認識モジュールの品質が、エージェントの後続の意思決定の精度を直接左右します。
2.2 計画(Plan)
これはエージェントアーキテクチャにおいて最も重要なコンポーネントです。認識された情報に基づき、LLMはタスクを完了するためのステップシーケンスを計画します。Weiらが提唱したChain-of-Thought(CoT)推論[3]が計画の基盤を形成しています — ステップバイステップの推論を通じて、LLMは複雑なタスクを実行可能なサブタスクに分解できます。Yaoらが提唱したReActフレームワーク[2]はさらに一歩進み、推論(Reasoning)と行動(Acting)を交互に行い、「思考 → 行動 → 観察 → 再思考」のループを形成します。
ReActの核心的洞察は、LLMがすべてのステップを一度に計画する必要はなく、各行動の後に観察された結果に基づいて後続の計画を動的に調整できるということです。この「やりながら考える」戦略は、不確実な環境におけるエージェントの堅牢性を劇的に向上させます。
2.3 行動(Act)
計画の後、エージェントは行動を実行する必要があります。LLMベースのエージェントの文脈では、「行動」とは通常、外部ツールの呼び出し(Tool Calling / Function Calling)を意味します。Qinら[8]の研究とSchickらによるToolformerシステム[9]は、LLMのツール使用能力を体系的に探求しました。代表的なツールには、検索エンジン、計算機、コード実行器、データベースクエリ、API呼び出しなどがあります。
ツール呼び出しの主要な課題は、LLMがツールが要求する構造化入力(例:JSON形式の関数パラメータ)を正確に生成し、ツールの戻り値を正しく解析しなければならないことです。PatilらのGorilla研究[13]は、ファインチューニングによるLLMのツール呼び出し精度の向上の実現可能性を実証しました。
2.4 省察(Reflect)
最後に、成熟したエージェントは自己省察能力を備えるべきです。Shinnらが提唱したReflexionフレームワーク[4]は、言語化された自己フィードバックメカニズムを通じて、エージェントが失敗から学び、後続の試行で同じ過ちを繰り返さないようにします。この「言語的強化学習」アプローチはモデルの重み更新を必要とせず、純粋にプロンプトエンジニアリングで実装でき、極めて高い実用的エンジニアリング価値を持っています。
以下の図は、典型的なReActエージェントの実行フローを示しています:
ユーザーの質問:「TSMCの2025年第4四半期の売上高はいくらですか?前四半期と比べてどのくらい成長しましたか?」
[思考] TSMCの財務データを調べる必要があります。まず最新の売上レポートを検索しましょう。
[行動] search_tool("TSMC 2025 Q4 revenue report")を呼び出し
[観察] 検索結果:TSMC 2025年第4四半期の売上高は8,684億台湾ドル。
[思考] Q4の売上高が判明しました。成長率を計算するためにQ3のデータが必要です。
[行動] search_tool("TSMC 2025 Q3 revenue")を呼び出し
[観察] 検索結果:TSMC 2025年第3四半期の売上高は7,596億台湾ドル。
[思考] これで成長率を計算できます:(8684 - 7596) / 7596 = 14.3%。
[行動] calculator(expression="(8684 - 7596) / 7596 * 100")を呼び出し
[観察] 計算結果:14.32%
[最終回答] TSMCの2025年第4四半期の売上高は8,684億台湾ドルで、第3四半期の7,596億台湾ドルから約14.3%の成長でした。
3. LangGraph徹底解説:グラフ中心の状態マシンアーキテクチャ
LangGraphは、LangChainチーム[10]が開発したエージェントオーケストレーションフレームワークで、次の深い洞察に基づいています:エージェントの実行フローは本質的に有向グラフであり、ノードは計算ステップを、エッジは制御フローの遷移を表すということです。
3.1 コアアーキテクチャ:StateGraph
LangGraphのコア抽象化はStateGraph — 共有状態を中心とした有向グラフです。各ノードは現在の状態を受け取り、計算を行い、状態の更新を返す関数です。エッジはノード間の遷移ロジックを定義し、無条件(固定方向)または条件付き(状態に基づいて次のステップを決定)にすることができます。
from langgraph.graph import StateGraph, START, END
from typing import TypedDict, Annotated
from operator import add
# 共有状態構造を定義
class AgentState(TypedDict):
messages: Annotated[list, add] # メッセージ累積
next_action: str
# グラフを構築
graph = StateGraph(AgentState)
# ノードを追加
graph.add_node("reason", reasoning_node)
graph.add_node("act", action_node)
graph.add_node("observe", observation_node)
# エッジを定義(制御フロー)
graph.add_edge(START, "reason")
graph.add_conditional_edges(
"reason",
should_continue, # 条件関数
{"continue": "act", "end": END}
)
graph.add_edge("act", "observe")
graph.add_edge("observe", "reason") # 推論ノードにループバック
agent = graph.compile()
3.2 状態管理と永続化
LangGraphの大きな利点の一つは、組み込みの状態管理メカニズムです。Checkpointerを通じて、各ステップの状態をデータベース(SQLite、PostgreSQL)に永続化でき、エージェントが中断後に最後の状態から実行を再開することが可能になります。これは長時間実行タスクにとって極めて重要です。
さらに、LangGraphはHuman-in-the-Loopモードをサポートしています:グラフ内の特定のノードにブレークポイントを設定し、実行を一時停止して人間のレビューを待ってから続行できます。これは機密性の高い操作(メール送信、データベース変更など)を処理するエージェントにとって特に重要です。
3.3 サブグラフとモジュール化
複雑なエージェントシステムは、サブグラフを通じてモジュール化を実現できます。例えば、メイングラフが全体的なタスク調整を処理し、「データ収集」「分析推論」「レポート作成」はそれぞれ独立したサブグラフで処理されます。サブグラフは独自の状態空間を持ち、明確に定義されたインターフェースを通じてのみメイングラフとやり取りし、関心の分離を実現します。
3.4 ユースケース
- プロダクショングレードアプリケーション:実行ロジックの各ステップを精密に制御する必要があるシナリオ
- ステートフルな長い会話:カスタマーサービスシステム、インタラクティブデータ分析
- Human-in-the-Loop:レビュー、確認、修正を伴うワークフロー
- 高い可観測性の要件:すべての意思決定の完全なトレースが必要なエンタープライズアプリケーション



