Google A2A Agent Example について
Python と Flask で Google A2A プロトコルを実装したサンプルです。タスクを受け付けるサーバーと、サーバーを検出して呼び出すクライアントで構成されます。サーバーは OpenAI の GPT-4o-mini を使い、ウェブ検索が必要な場合は MCP 経由で Brave Search を利用します。
主な機能
- 01A2A の主要エンドポイントを実装
- 02Agent Card によるエージェント検出
- 03HTTP 経由のタスク受付
- 04GPT-4o-mini による応答生成
- 05Brave Search によるウェブ検索
活用シーン
- 01エージェント間のタスク交換の検証
- 02エージェント検出とタスク送信のテスト
- 03A2A エージェントへのウェブ検索追加
MCP 対応
ウェブ検索が必要な場合、サーバーは `MCPServerStdio` を通じて Brave Search MCP サーバーを利用します。MCP により外部検索ツールに接続します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Google A2A エージェントの例
このリポジトリでは、Google の A2A プロトコルに基づく、シンプルなエージェント間(A2A)通信の例を実装しています。A2A は、標準化された API を通じて AI エージェント同士が通信できるようにする、Google が提案する標準規格です。
概要
この実装は、次の 2 つの主要なコンポーネントで構成されています。
-
サーバー(
server.py):AI エージェントとして動作する Flask ベースのサーバーです。A2A プロトコルの主要なエンドポイントを実装しています。/.well-known/agent.json:エージェントの機能と URL を記述したメタデータ(エージェントカード)を提供します。/tasks/send:ほかのエージェント(またはclient.pyのようなクライアント)からタスクを受け取り、AI モデル(OpenAI の GPT-4o-mini)と外部ツール(MCP 経由の Brave Search)を使って処理し、結果を返します。
-
クライアント(
client.py):A2A サーバーとのやり取りを実演する、シンプルな Python スクリプトです。- エージェントカードを取得して、エージェントを検出します。
- エージェントの
/tasks/sendエンドポイントにタスク(ユーザーからの質問)を送信します。 - エージェントの応答を受け取り、表示します。
アーキテクチャ
やり取りの流れは、次のように図示できます。
sequenceDiagram
participant C as Client (client.py)
participant S as A2A Server (server.py)
participant MCP as Brave MCP Server
participant OAI as OpenAI API
C->>S: GET /.well-known/agent.json (Discover Agent)
S-->>C: Agent Card JSON
C->>S: POST /tasks/send (Task Request with User Query)
S->>OAI: Process Query (Initial processing)
Note right of S: Agent decides to use Brave Search
S->>MCP: Search Request
MCP-->>S: Search Results
S->>OAI: Process Query + Search Results
OAI-->>S: Final Response Text
S-->>C: Task Response (with Agent's Final Message)
- クライアントがA2A サーバーを検出して、通信を開始します。
- クライアントがタスク(例:「Google A2A とは何ですか?」)をサーバーに送信します。
- サーバーは
pydantic-aiライブラリを使用し、次のコンポーネントと連携します。- リクエストを理解して応答を生成するためのOpenAI API。
- ウェブ検索が必要な場合に使用する、Brave Search MCP サーバー(
MCPServerStdioを介して管理されます)。MCP(Model Context Protocol)は、AI モデルが外部ツールやデータソースとやり取りする方法を標準化します。
- サーバーが最終的な応答をクライアントに返します。
セットアップ
-
リポジトリをクローンします。
git clone <repository_url> cd <repository_directory> -
仮想環境を作成して有効化します。
- Windows:
python -m venv venv .\venv\Scripts\activate - macOS/Linux:
python3 -m venv venv source venv/bin/activate
- Windows:
-
.envファイルを作成します。 ルートディレクトリに.envという名前のファイルを作成し、API キーを追加します。OPENAI_API_KEY=your_openai_api_key BRAVE_API_KEY=your_brave_api_key(
your_openai_api_keyとyour_brave_api_keyを実際のキーに置き換えてください) -
依存関係をインストールします。
pip install -r requirements.txt -
サーバーを起動します。 ターミナルを開いて仮想環境を有効化し、次のコマンドを実行します。
python server.pyサーバーは通常、
http://localhost:5000で起動します。 -
クライアントを実行します。 別のターミナルを開いて仮想環境を有効化し、次のコマンドを実行します。
python client.pyクライアントがサーバーを検出し、あらかじめ定義された質問を送信して、エージェントの応答を表示します。
A2A プロトコルの詳細
Google の A2A プロトコルは、エージェントが HTTP 経由で通信するための標準的な方法を定義しています。主な概念は次のとおりです。
- エージェントカード(
/.well-known/agent.json):エージェントの ID、機能(ストリーミング対応など)、API エンドポイントを記述した標準的な JSON ドキュメントです。 - タスク API(
/tasks/send、/tasks/receiveなど):タスクやメッセージを交換するためのエンドポイントです。この例では、必須の/tasks/sendのみを実装しています。 - 標準化されたメッセージ形式:エージェント間で交換されるメッセージの、一貫性のある JSON 構造です。通常、役割(
user、agent)とコンテンツパートが含まれます。
詳細については、Google A2A プロトコルの公式ドキュメントを参照してください(リンクがある場合)。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。