第20章. エージェント / ツール利用 / MCP
この章の目的
本章では、大規模言語モデル(LLM)を単なるテキスト生成器としてではなく、より複雑なタスクを実行するための「知的な主体」として活用する上で不可欠な概念である「エージェント」「ツール利用」「マルチモーダル連携(MCP)」について深く掘り下げます。これらの概念は、LLMの応用範囲を飛躍的に広げ、現実世界の課題解決に役立つAIアプリケーションを構築するための基盤となります。
この章で覚えるべきこと
- エージェントの基本的な考え方と、それがLLMとどのように連携するか。
- ツール利用(Tool Calling / Function Calling)がLLMの能力をどのように拡張するか。
- MCP(Multi-modal Co-Pilot)がマルチモーダル情報をどのように統合し、活用するか。
- ワークフローとオーケストレーションが、複雑なAIシステムをどのように構築・管理するか。
導入
LLMは驚くべき言語理解と生成能力を持っていますが、それ単体ではインターネット検索やデータベース操作、外部APIの呼び出しといった特定のアクションを実行することはできません。しかし、これらの外部機能をLLMに「道具」として与えることで、LLMはより高度で実用的なタスクを自律的にこなせるようになります。この「道具を使うLLM」という考え方が「エージェント」であり、「ツール利用」はその実現手段です。さらに、テキストだけでなく画像や音声といった多様な情報を扱う「マルチモーダル」なAIシステムを構築する上で、「MCP」という概念が重要になります。本章では、これらの概念がどのように連携し、現代のAIアプリケーションを形作っているのかを解説します。
基本概念
エージェント (Agent)
ひとことで言うと: 目標達成のために自律的に思考し、行動するAIシステム。 何のカテゴリか: AIシステム、LLM応用アーキテクチャ 何に使うのか: 複雑なタスクの自動化、人間とのインタラクションを通じた問題解決 代表例: AutoGPT, BabyAGI, LangChain Agents よく混同される用語: LLM、チャットボット 初心者向け注意点: エージェントはLLMそのものではなく、LLMを「脳」として利用し、外部ツールや記憶、計画能力などを組み合わせた上位のシステムです。
エージェントは、特定の目標を達成するために、環境を観察し、思考し、行動を計画し、実行する能力を持つAIシステムを指します。LLMはエージェントの「脳」として機能し、自然言語による指示を理解し、次の行動を決定します。エージェントは通常、以下の要素で構成されます。
- プロンプト(Prompt): エージェントの目標や役割、利用可能なツールなどを定義する。
- LLM(Large Language Model): 思考、計画、ツール選択、応答生成を行う。
- ツール(Tools): 外部システムやAPIと連携し、特定のアクションを実行する機能(例: 検索エンジン、計算機、コード実行環境)。
- 記憶(Memory): 過去の対話履歴や学習内容を保持し、長期的なコンテキストを維持する。
- プランニング(Planning): 複雑なタスクを小さなステップに分解し、実行順序を決定する。
- リフレクション(Reflection): 自身の行動結果を評価し、次の行動や計画を改善する。
エージェントの動作は、ReAct (Reasoning and Acting) や CoT (Chain-of-Thought) といったプロンプティング技術と密接に関連しており、LLMが思考プロセスを言語化することで、より複雑な推論や行動選択を可能にします。
エージェントの構成要素とフロー:
graph TD
subgraph "Agent System"
A
B
C
D
E
F
E
B
G
end
この図は、エージェントがユーザーからのプロンプト(目標)を受け取り、LLMを「脳」として思考・計画し、ツールを利用して行動し、その結果を記憶に保存しつつ、最終的な応答を生成する一連のプロセスを示しています。
ツール利用 (Tool Calling / Function Calling)
ひとことで言うと: LLMが外部の機能やAPIを呼び出して利用する能力。 何のカテゴリか: LLMの拡張機能、API連携技術 何に使うのか: LLMにリアルタイム情報検索、計算、データ操作などの外部機能を使わせる 代表例: OpenAI Function Calling, Google Gemini Tool Calling, LangChain Tools よく混同される用語: API呼び出し、プラグイン 初心者向け注意点: LLMが直接コードを実行するわけではなく、LLMが「どのツールを、どのような引数で使うべきか」を判断し、その情報をアプリケーションが受け取って実際のツール実行を行うのが一般的です。
ツール利用は、LLMが自身の知識範囲外の情報を取得したり、特定の操作を実行したりするために、外部の「ツール」を呼び出すメカニズムです。これは、LLMが特定の形式(通常はJSON)でツール名と引数を生成し、その出力をアプリケーションが解析して実際のツールを実行する、という流れで実現されます。
Function Calling
Function Callingは、ツール利用の一種であり、特にLLMが利用可能な関数(APIエンドポイントなど)の定義を受け取り、ユーザーのプロンプトに基づいて最適な関数とその引数を生成する能力を指します。
Function Callingの仕組み:
- 関数定義の提供: 開発者は、LLMに利用させたい関数の名前、説明、引数のスキーマ(JSON Schema形式など)をLLMに提供します。
- ユーザープロンプト: ユーザーがLLMに質問や指示を与えます。
- LLMの判断: LLMはプロンプトと関数定義を基に、どの関数を呼び出すべきか、どのような引数を渡すべきかを判断し、JSON形式でその情報を出力します。
- アプリケーションの実行: アプリケーションはこのJSON出力を解析し、実際にその関数を実行します。
- 結果のフィードバック: 関数の実行結果をLLMに再度入力し、LLMがその結果に基づいて最終的な応答を生成します。
Mermaid図でのFunction Callingのフロー:
graph TD
A[ユーザープロンプト] --> B{LLM}
B -- 関数定義 --> C[LLMの判断]
C -- "JSON出力 (関数名, 引数)" --> D[アプリケーション]
D -- 関数実行 --> E[外部ツール/API]
E -- 実行結果 --> D
D -- 実行結果 --> B
B -- 最終応答 --> F[ユーザー]
Function CallingにおけるLLMの役割は、与えられたプロンプト $P$ と利用可能な関数定義 $F = {f_1, f_2, ..., f_n}$ から、最適な関数 $f_i$ とその引数 $args_i$ を選択することです。これは、条件付き確率 $P(f_i, args_i | P, F)$ を最大化する問題として捉えることができます。 $$ (f^, args^) = \underset{f_i \in F, args_i}{\operatorname{argmax}} P(f_i, args_i | P, F) $$ ここで、$f^$ は選択された関数、$args^$ はその引数です。LLMはこの確率に基づいて、JSON形式の出力を生成します。
MCP (Multi-modal Co-Pilot)
ひとことで言うと: 複数のモダリティ(テキスト、画像、音声など)を統合的に理解・生成し、ユーザーを支援するAIシステム。 何のカテゴリか: マルチモーダルAI、アシスタントシステム 何に使うのか: 複雑なマルチモーダル情報の分析、デザイン支援、医療診断支援など 代表例: Google Gemini, OpenAI GPT-4V, Microsoft Co-Pilot よく混同される用語: マルチモーダルLLM、エージェント 初心者向け注意点: MCPは単に複数のモダリティを扱えるだけでなく、それらを統合的に理解し、ユーザーの意図を汲み取って協調的に作業を進める「コパイロット」としての役割を強調します。
MCPは、テキストだけでなく、画像、音声、動画などの複数のモダリティ(情報形式)を同時に処理し、理解し、生成する能力を持つAIシステムです。特に「Co-Pilot」という名称が示すように、ユーザーの隣に座って協調的に作業を進めるアシスタントとしての役割を重視します。
MCPの主な特徴:
- マルチモーダル理解: テキストと画像を同時に分析し、両者の関係性を理解する。
- マルチモーダル生成: テキスト指示に基づいて画像を生成したり、画像の内容を説明するテキストを生成したりする。
- コンテキスト認識: ユーザーの作業内容や意図を複数のモダリティから推測し、適切な支援を提供する。
- 協調的インタラクション: ユーザーとの対話を通じて、タスクの進捗に合わせて柔軟に支援内容を調整する。
MCPのアーキテクチャ概要:
graph TD
subgraph "User Interaction"
A
C
D
end
subgraph "MCP Core"
B
E
F
G
E
E
E
end
この図は、MCPがテキスト、画像、音声などの複数のモダリティからの入力を受け取り、マルチモーダルLLMを中核として統合的に理解し、必要に応じて外部ツールやAPIと連携して情報を取得・処理し、最終的に複数のモダリティで応答を生成するプロセスを示しています。
ワークフロー (Workflow)
ひとことで言うと: 特定のタスクを達成するための一連のステップや処理の流れ。 何のカテゴリか: プロセス管理、システム設計 何に使うのか: 複雑なタスクの自動化、処理の標準化、エラーハンドリング 代表例: データ処理パイプライン、ビジネスプロセス自動化、AIエージェントのタスク実行手順 よく混同される用語: プログラム、アルゴリズム 初心者向け注意点: ワークフローは単なるコードの羅列ではなく、各ステップの目的、入力、出力、条件分岐、エラー処理などを含む、より高レベルな処理の設計図です。
ワークフローは、ある目標を達成するために必要な一連の活動やステップを定義したものです。AIの文脈では、特にエージェントが複雑なタスクをこなす際に、どのような順序でツールを呼び出し、情報を処理し、意思決定を行うかを示す設計図として機能します。
ワークフローの要素:
- ステップ(Tasks): ワークフローを構成する個々の処理単位。
- 順序(Sequence): ステップが実行される順番。
- 条件分岐(Conditional Logic): 特定の条件に基づいて異なるパスに進む。
- ループ(Loops): 特定のステップを繰り返し実行する。
- 入力と出力(Inputs/Outputs): 各ステップが受け取る情報と生成する情報。
- エラーハンドリング(Error Handling): 予期せぬ問題が発生した場合の対処方法。
オーケストレーション (Orchestration)
ひとことで言うと: 複数の独立したコンポーネントやサービスを連携させ、全体として一つの目標を達成するように調整・管理すること。 何のカテゴリか: システム管理、分散システム 何に使うのか: 複雑なAIシステムやマイクロサービスアーキテクチャの構築と運用 代表例: Kubernetes, Apache Airflow, LangChain Orchestrator よく混同される用語: ワークフロー、自動化 初心者向け注意点: オーケストレーションはワークフローを実行するための「指揮者」のような役割です。ワークフローが「何をすべきか」を定義するのに対し、オーケストレーションは「どのようにそれを実行し、管理するか」を扱います。
オーケストレーションは、複数の独立したサービスやコンポーネント(例えば、LLM、データベース、外部API、ツールなど)を統合し、それらが協調して動作するように調整・管理するプロセスです。AIシステムにおいては、エージェントが複数のツールやモデル、記憶モジュールなどを組み合わせて複雑なタスクを実行する際に、これらのコンポーネント間の連携を円滑に行う役割を担います。
オーケストレーションの主な機能:
- コンポーネント管理: どのコンポーネントが利用可能か、どのように呼び出すかを管理する。
- ワークフロー実行: 定義されたワークフローに従って、各ステップを適切な順序で実行する。
- 状態管理: ワークフローの現在の状態や、各コンポーネントの実行結果を追跡する。
- エラーリカバリ: コンポーネントの障害やエラー発生時に、適切なリカバリ処理を実行する。
- スケーラビリティ: システム全体の負荷に応じて、コンポーネントの数を調整する。
具体例
エージェントとツール利用の具体例: 旅行計画アシスタント
ユーザーが「来月、東京で桜が見たいんだけど、おすすめのホテルと交通手段を教えて。予算は1泊2万円までで、新幹線で行きたいな。」と指示したとします。
- エージェントの起動: 旅行計画エージェントがユーザーのプロンプトを受け取ります。
- LLMの思考: LLMはプロンプトを解析し、「桜の開花時期」「東京のホテル検索」「新幹線予約」という複数のタスクが必要だと判断します。
- ツール利用(Function Calling):
- ステップ1: 桜の開花時期検索: LLMは「桜の開花時期を検索するツール」を呼び出す必要があると判断し、
search_web(query="東京 桜 開花時期 来月")のようなJSONを生成します。 - アプリケーションの実行: アプリケーションがこのJSONを受け取り、実際にウェブ検索ツールを実行します。結果として「東京の桜は3月下旬から4月上旬が見頃」という情報が得られます。
- 結果のフィードバック: この情報がLLMに返されます。
- ステップ2: ホテル検索: LLMは「東京、4月上旬、1泊2万円以下、桜スポットに近い」という条件でホテルを検索する必要があると判断し、
search_hotel(location="東京", check_in="2024-04-05", check_out="2024-04-06", max_price=20000, amenities=["桜スポットに近い"])のようなJSONを生成します。 - アプリケーションの実行: アプリケーションがホテル予約APIを呼び出し、結果としていくつかのホテル候補(例: 上野公園近くのホテルA、千鳥ヶ淵近くのホテルB)が得られます。
- 結果のフィードバック: この情報がLLMに返されます。
- ステップ3: 新幹線予約情報検索: LLMは「東京までの新幹線予約方法」を検索する必要があると判断し、
search_web(query="新幹線 東京 予約方法")のようなJSONを生成します。 - アプリケーションの実行: アプリケーションがウェブ検索ツールを実行し、結果として「JR東海のウェブサイトや駅の窓口で予約可能」といった情報が得られます。
- 結果のフィードバック: この情報がLLMに返されます。
- ステップ1: 桜の開花時期検索: LLMは「桜の開花時期を検索するツール」を呼び出す必要があると判断し、
- 最終応答の生成: LLMは得られたすべての情報(桜の見頃、ホテル候補、新幹線予約方法)を統合し、ユーザーに対して自然な言葉で旅行計画を提案します。
MCPの具体例: 画像からの情報抽出と質問応答
ユーザーが「この写真に写っている植物の名前と、その育て方を教えて」と、植物の画像と共に質問したとします。
- MCPの入力: MCPシステムは、ユーザーのテキストプロンプトと植物の画像を同時に受け取ります。
- マルチモーダル理解:
- 画像分析モジュール: 画像から植物の特徴(葉の形、花の色、全体の形状など)を抽出し、植物の種類を特定します(例: 「サクラソウ」)。
- テキスト理解モジュール: テキストプロンプトから「植物の名前」「育て方」という質問意図を抽出します。
- 統合モジュール: 画像分析の結果とテキストの質問意図を統合し、「サクラソウの育て方」に関する情報が必要だと判断します。
- 情報検索と生成:
- ツール利用: MCPは「植物データベース検索ツール」や「ウェブ検索ツール」を呼び出し、特定された植物(サクラソウ)の育て方に関する情報を収集します。
- LLMの生成: 収集した情報を基に、LLMがサクラソウの育て方(水やり、日当たり、肥料など)を分かりやすく説明するテキストを生成します。
- 最終応答: MCPシステムは、特定された植物の名前と、その育て方に関する詳細な説明をユーザーに提供します。
ワークフローとオーケストレーションの具体例: データ分析パイプライン
ある企業が、顧客からのフィードバック(テキストデータ)を分析し、感情分析とキーワード抽出を行い、結果をダッシュボードに表示するシステムを構築するとします。
ワークフローの定義:
- ステップ1: 顧客フィードバックの収集(データベースから取得)
- ステップ2: テキストの前処理(クリーニング、正規化)
- ステップ3: 感情分析(ポジティブ/ネガティブ/中立)
- ステップ4: キーワード抽出(主要なトピックの特定)
- ステップ5: 結果の集計と保存(データベースに書き込み)
- ステップ6: ダッシュボードの更新(BIツールAPIを呼び出し)
オーケストレーションの役割:
- トリガー: 新しいフィードバックがデータベースに追加されたことを検知し、ワークフローを開始します。
コンポーネント呼び出し:
- ステップ1では、データベース接続ツールを呼び出してデータを取得します。
- ステップ2では、テキスト処理ライブラリを実行します。
- ステップ3では、感情分析LLM(またはAPI)を呼び出します。
- ステップ4では、キーワード抽出LLM(またはAPI)を呼び出します。
- ステップ5では、データベース書き込みツールを呼び出して結果を保存します。
- ステップ6では、BIツールのAPIを呼び出してダッシュボードを更新します。
- 状態管理: 各ステップの実行状況(成功、失敗、進行中)を監視し、ログを記録します。
- エラーハンドリング: 感情分析LLMの呼び出しが失敗した場合、自動的に再試行したり、管理者に通知したりします。
- 並列処理: 複数のフィードバックが同時に発生した場合、複数のワークフローインスタンスを並列で実行し、処理能力を最大化します。
- トリガー: 新しいフィードバックがデータベースに追加されたことを検知し、ワークフローを開始します。
コンポーネント呼び出し:
この例では、ワークフローが「何をすべきか」を定義し、オーケストレーションが「それをどのように効率的かつ堅牢に実行するか」を管理していることがわかります。
よく混同される用語との比較
| 用語 | ひとことで言うと | LLMとの関係性 | 主な目的 |
|---|---|---|---|
| エージェント | 目標達成のために自律的に思考し、行動するAIシステム。 | LLMを「脳」として利用し、思考・計画・行動決定を行う。 | 複雑なタスクの自動化、自律的な問題解決 |
| LLM | 大規模なテキストデータで学習された言語モデル。 | エージェントのコアコンポーネント。ツール利用の判断や応答生成を行う。 | 自然言語理解・生成、推論 |
| ツール利用 | LLMが外部の機能やAPIを呼び出して利用する能力。 | LLMが外部ツールを呼び出すためのメカニズム。エージェントの「手足」。 | LLMの能力拡張、リアルタイム情報アクセス、外部操作 |
| Function Calling | ツール利用の一種で、LLMが関数名と引数を生成する。 | ツール利用の具体的な実装方法。LLMがツール呼び出しの意図を構造化する。 | 外部APIとのシームレスな連携 |
| MCP | 複数のモダリティを統合的に理解・生成し、ユーザーを支援するAIシステム。 | マルチモーダルLLMを中核に、複数のモダリティを統合的に扱う。 | マルチモーダル情報の分析・生成、協調的作業支援 |
| ワークフロー | 特定のタスクを達成するための一連のステップや処理の流れ。 | エージェントが実行するタスクの計画や手順を定義する。 | 処理の標準化、タスクの構造化 |
| オーケストレーション | 複数の独立したコンポーネントを連携させ、全体を調整・管理すること。 | エージェントシステム内の各コンポーネント(LLM、ツール、記憶など)の連携を管理する。 | 複雑なシステムの構築・運用、堅牢性の確保 |
実務での位置づけ
これらの概念は、現代のAIアプリケーション開発において中心的な役割を担っています。
- エージェント: カスタマーサポートの自動化、データ分析の自動化、ソフトウェア開発支援など、自律的な意思決定と行動が求められる場面で活用されます。例えば、ユーザーの質問に応じて適切な情報を検索し、必要であれば外部システムに問い合わせて回答を生成するようなチャットボットは、エージェントの一種と言えます。
- ツール利用/Function Calling: LLMの能力を現実世界に接続するための「橋渡し」として不可欠です。これにより、LLMは最新の情報を取得したり、計算を実行したり、外部サービス(カレンダー、メール、CRMなど)を操作したりできるようになります。これにより、LLMは単なる情報提供者から、具体的なアクションを実行できる「実行者」へと進化します。
- MCP: テキストだけでなく、画像や音声、動画といった多様な情報を扱う必要があるアプリケーションで重要ですす。例えば、医療画像診断支援、デザインレビュー、物理世界の監視と応答など、よりリッチなインタラクションと理解が求められる分野でその真価を発揮します。
- ワークフローとオーケストレーション: 複雑なAIシステムを構築し、運用するための基盤技術です。特に、複数のLLM、ツール、データベース、APIなどが連携する大規模なAIアプリケーションでは、ワークフローで処理の流れを定義し、オーケストレーションでその実行を管理することが不可欠となります。これにより、システムの堅牢性、スケーラビリティ、保守性が向上します。
これらの技術を組み合わせることで、LLMは単なる言語モデルの枠を超え、現実世界の複雑な問題を解決するための強力なプラットフォームへと変貌を遂げます。
まとめ
3行まとめ
- エージェントはLLMを「脳」として、外部ツールを「手足」として利用し、自律的に目標達成を目指すAIシステムです。
- **ツール利用(Function Calling)**は、LLMが外部APIを呼び出す具体的なメカニズムであり、LLMの能力を現実世界に接続します。
- MCPはマルチモーダルな情報を統合的に扱い、ユーザーを協調的に支援するシステムであり、ワークフローとオーケストレーションは、これらの複雑なAIシステムの設計と実行を管理する基盤技術です。
混同しやすい用語
- エージェントとLLM: エージェントはLLMを含む上位システム。
- ツール利用とAPI呼び出し: ツール利用はLLMがAPI呼び出しを「判断・指示」する能力。
- ワークフローとオーケストレーション: ワークフローは「手順」、オーケストレーションは「手順の実行管理」。
次に読むべき章
- 第19章: RAG / embedding / vector DB (エージェントが情報を検索する際の基盤技術)
- 第21章: プロンプトエンジニアリングの応用 (エージェントの思考やツール利用を制御する技術)
- 第22章: LLMアプリケーションフレームワーク (LangChain, LlamaIndexなど、エージェントやツール利用を実装するためのフレームワーク)