ai-agents-for-beginners

エージェントプロトコルの使用(MCP、A2A、NLWeb)

エージェントプロトコル

(上の画像をクリックしてこのレッスンのビデオを視聴してください)

AIエージェントの利用が拡大するにつれて、標準化、セキュリティ、およびオープンなイノベーションを支えるプロトコルの必要性も高まっています。このレッスンでは、このニーズに応えることを目指す3つのプロトコル、Model Context Protocol(MCP)、Agent to Agent(A2A)、および Natural Language Web(NLWeb)について説明します。

はじめに

このレッスンでは、以下をカバーします:

MCP がAIエージェントに外部ツールやデータへのアクセスを提供し、ユーザーのタスクを完了させる方法。

A2A が異なるAIエージェント間の通信と協調をどのように可能にするか。

NLWeb がどのようにあらゆるウェブサイトに自然言語インターフェースをもたらし、AIエージェントがコンテンツを発見・操作できるようにするか。

学習目標

識別する:AIエージェントの文脈でのMCP、A2A、およびNLWebの主要な目的と利点。

説明する:各プロトコルがどのようにLLM、ツール、および他のエージェント間の通信と相互作用を促進するか。

認識する:複雑なエージェントシステムを構築する上で、各プロトコルが果たす異なる役割。

Model Context Protocol

Model Context Protocol(MCP) は、アプリケーションがLLMにコンテキストやツールを提供するための標準化された方法を提供するオープンスタンダードです。これにより、AIエージェントが一貫した方法で接続できる「汎用アダプタ」として、さまざまなデータソースやツールに対応できます。

ここではMCPの構成要素、直接APIを使用する場合と比較した利点、そしてAIエージェントがMCPサーバーをどのように使用するかの例を見ていきます。

MCPのコアコンポーネント

MCPはクライアント-サーバーアーキテクチャで動作し、コアコンポーネントは以下の通りです:

ホスト(Hosts) はMCPサーバーへの接続を開始するLLMアプリケーション(例えばVSCodeのようなコードエディタ)です。

クライアント(Clients) は、ホストアプリケーション内のコンポーネントで、サーバーと一対一の接続を維持します。

サーバー(Servers) は特定の機能を公開する軽量プログラムです。

プロトコルには、MCPサーバーの機能である3つのコアプリミティブが含まれます:

ツール(Tools):AIエージェントがアクションを実行するために呼び出せる個別の操作や関数です。例えば、天気サービスが「天気を取得する」ツールを公開したり、eコマースサーバーが「商品を購入する」ツールを公開したりします。MCPサーバーは能力一覧で各ツールの名前、説明、および入出力スキーマを広告します。

リソース(Resources):MCPサーバーが提供できる読み取り専用のデータ項目やドキュメントで、クライアントはそれらをオンデマンドで取得できます。例としてはファイル内容、データベースレコード、ログファイルなどがあります。リソースはテキスト(コードやJSONなど)やバイナリ(画像やPDFなど)であり得ます。

プロンプト(Prompts):推奨プロンプトを提供する事前定義されたテンプレートで、より複雑なワークフローを可能にします。

MCPの利点

MCPはAIエージェントに対して重要な利点を提供します:

動的なツール検出:エージェントはサーバーから利用可能なツールの一覧とその説明を動的に受け取ることができます。これは統合のために静的なコーディングを必要とする従来のAPIとは対照的で、APIの変更があればコードの更新が必要になることが多いです。MCPは「一度統合する」アプローチを提供し、適応性を高めます。

LLM間の相互運用性:MCPは異なるLLMで動作し、性能向上を評価するためにコアモデルを切り替える柔軟性を提供します。

標準化されたセキュリティ:MCPには標準的な認証方法が含まれており、追加のMCPサーバーへのアクセスを追加する際のスケーラビリティを向上させます。これは、さまざまな従来型APIに対して異なるキーや認証タイプを管理するよりも簡便です。

MCPの例

MCP ダイアグラム

ユーザーがMCPで動作するAIアシスタントを使って飛行機を予約したいとします。

  1. 接続:AIアシスタント(MCPクライアント)が航空会社が提供するMCPサーバーに接続します。

  2. ツール検出:クライアントは航空会社のMCPサーバーに「どんなツールが利用可能ですか?」と尋ねます。サーバーは「フライト検索」や「フライト予約」のようなツールを返します。

  3. ツール呼び出し:次にユーザーが「ポートランドからホノルルへのフライトを検索して」とAIアシスタントに頼みます。AIアシスタントはそのタスクのために「フライト検索」ツールを呼び出す必要があるとLLMを使って判断し、関連するパラメータ(出発地、目的地)をMCPサーバーに渡します。

  4. 実行と応答:MCPサーバーはラッパーとして機能し、実際に航空会社の内部予約APIを呼び出します。サーバーはフライト情報(例:JSONデータ)を受け取り、それをAIアシスタントに返します。

  5. さらなるやり取り:AIアシスタントはフライトの選択肢を提示します。ユーザーがフライトを選択すると、アシスタントは同じMCPサーバーの「フライト予約」ツールを呼び出して予約を完了するかもしれません。

エージェント間プロトコル(A2A)

MCPがLLMとツールの接続に焦点を当てる一方で、Agent-to-Agent(A2A)プロトコルはさらに一歩進んで、異なるAIエージェント間の通信と協力を可能にします。A2Aは、異なる組織、環境、テックスタックにまたがるAIエージェントを接続して、共同でタスクを完了させます。

ここではA2Aのコンポーネントと利点を検討し、旅行アプリケーションでの適用例を示します。

A2Aのコアコンポーネント

A2Aはエージェント間の通信を可能にし、ユーザーのサブタスクを共同で完了させることに重点を置いています。プロトコルの各コンポーネントはこれに貢献します:

エージェントカード(Agent Card)

MCPサーバーがツールの一覧を共有するのと同様に、エージェントカードには以下が含まれます:

エージェント実行者(Agent Executor)

エージェント実行者はユーザーチャットのコンテキストをリモートエージェントに渡す役割を担います。リモートエージェントはこれを必要として、完了すべきタスクを理解します。A2Aサーバーでは、エージェントは独自の大規模言語モデル(LLM)を使用して受信リクエストを解析し、自身の内部ツールを使ってタスクを実行します。

アーティファクト(Artifact)

リモートエージェントが要求されたタスクを完了すると、その作業成果物はアーティファクトとして作成されます。アーティファクトはエージェントの作業結果完了した内容の説明、およびプロトコルを通じて送信されたテキストコンテキストを含みます。アーティファクトが送信された後、リモートエージェントとの接続は再度必要になるまで閉じられます。

イベントキュー(Event Queue)

このコンポーネントは更新の処理とメッセージの伝達に使用されます。特にプロダクション環境では、タスク完了に時間がかかる場合に、エージェント間の接続がタスク完了前に閉じられるのを防ぐために重要です。

A2Aの利点

協力の強化:異なるベンダーやプラットフォームのエージェントが相互にやり取りし、コンテキストを共有して協力できるようになり、従来は分断されていたシステム間でのシームレスな自動化を促進します。

モデル選択の柔軟性:各A2Aエージェントは自身のリクエストに対応するLLMを選択可能であり、エージェントごとに最適化またはファインチューニングされたモデルを使用できます。これは一部のMCPシナリオで見られる単一LLM接続とは異なります。

組み込みの認証:認証がA2Aプロトコルに直接組み込まれており、エージェント間のやり取りに対して堅牢なセキュリティフレームワークを提供します。

A2Aの例

A2A ダイアグラム

旅行予約のシナリオをA2Aで拡張してみましょう。

  1. ユーザーからマルチエージェントへリクエスト:ユーザーが「来週ホノルルへの旅行を丸ごと予約してほしい。フライト、ホテル、レンタカーを含めて」といった形で「旅行エージェント」A2Aクライアント/エージェントに依頼します。

  2. 旅行エージェントによるオーケストレーション:旅行エージェントはこの複雑なリクエストを受け取り、LLMを使ってタスクを推論し、他の専門エージェントと連携する必要があると判断します。

  3. エージェント間通信:旅行エージェントはA2Aプロトコルを使って、異なる会社が作成した「航空会社エージェント」「ホテルエージェント」「レンタカーエージェント」などの下流エージェントに接続します。

  4. 委任されたタスク実行:旅行エージェントはこれらの専門エージェントに具体的なタスク(例:「ホノルルへのフライトを探して」「ホテルを予約して」「レンタカーを手配して」)を送ります。各専門エージェントは自身のLLMを稼働させ、独自のツール(それ自体がMCPサーバーであり得る)を利用して、担当部分の予約を実行します。

  5. 統合された応答:下流エージェントがすべてのタスクを完了すると、旅行エージェントは結果(フライトの詳細、ホテルの確認、レンタカーの予約)をまとめ、チャット形式の包括的な応答をユーザーに返します。

Natural Language Web(NLWeb)

ウェブサイトは長年にわたり、ユーザーがインターネット上の情報やデータにアクセスする主要な方法であり続けています。

ここではNLWebのさまざまなコンポーネント、NLWebの利点、および旅行アプリケーションでのNLWebの動作例を見ていきます。

NLWebのコンポーネント

NLWebの例

NLWeb 図

旅行予約ウェブサイトをもう一度考えてみましょう。今回はNLWebで駆動されているとします。

  1. データ取り込み:旅行サイトの既存の製品カタログ(例:フライトリスト、ホテル説明、ツアーパッケージ)はSchema.orgでフォーマットされるか、RSSフィード経由で読み込まれます。NLWebのツールはこの構造化データを取り込み、埋め込みを作成し、それらをローカルまたはリモートのベクトルデータベースに保存します。

  2. 自然言語での問い合わせ(人間):ユーザーがサイトを訪れ、メニューをたどる代わりにチャットインターフェースに「来週のホノルルでプール付きの家族向けホテルを探して」と入力します。

  3. NLWebの処理:NLWebアプリケーションはこの問い合わせを受け取ります。問い合わせを理解するためにLLMに送信し、同時に関連するホテルリストを見つけるためにベクトルデータベースを検索します。

  4. 正確な結果:LLMはデータベースからの検索結果を解釈し、「家族向け」「プール」「ホノルル」といった基準に基づいて最適な一致を特定し、自然な言語の応答にフォーマットします。重要なのは、応答がサイトのカタログにある実際のホテルを参照し、でっち上げの情報を避ける点です。

  5. AIエージェントとの相互作用:NLWebはMCPサーバーとして機能するため、外部のAI旅行エージェントがこのサイトのNLWebインスタンスに接続することもできます。AIエージェントは ask("Are there any vegan-friendly restaurants in the Honolulu area recommended by the hotel?") のように ask MCPメソッドを使用してサイトに直接問い合わせることができます。NLWebインスタンスは、レストラン情報のデータベース(読み込まれている場合)を活用してこれを処理し、構造化されたJSON応答を返します。

MCP/A2A/NLWebについてもっと質問がありますか?

Microsoft Foundry Discord に参加して、他の学習者と会ったり、オフィスアワーに参加したり、AIエージェントに関する質問に答えてもらいましょう。

リソース


免責事項: この文書はAI翻訳サービス「Co-op Translator」(https://github.com/Azure/co-op-translator) を使用して翻訳されました。正確性には努めておりますが、自動翻訳には誤りや不正確な箇所が含まれる可能性があることをご承知おきください。原文(原言語)の文書を正式な情報源としてご参照ください。重要な情報については、専門の翻訳者による人による翻訳を推奨します。本翻訳の利用に起因するいかなる誤解や解釈の相違についても、当社は責任を負いません。