A2A(Agent2Agent)連携
English: A2A Plugin(設定例とエラーコードを含む完全版)
Agent2Agent(A2A)は、Linux Foundationが管理するオープンなプロトコルです。 エージェントは Agent Card で互いを見つけ、JSON-RPCでメッセージとタスクをやり取りします。 KurahiのA2Aプラグインは同梱されていますが、既定では無効です。独立した2つの機能があります。
- サーバー: 指定したエージェントを、ゲートウェイのHTTPサーバー上でA2Aエージェントとして公開します。
- クライアント: 任意のツール
a2a_sendとa2a_get_taskで、設定した外部エージェントを名前で呼び出します。
同じゲートウェイ内のエージェント同士をつなぐ内部のツール(sessions_send など)とは別のものです。
A2Aは、自社で運用していないエージェントとの連携に使います。
対応するプロトコルのバージョン
「対応するプロトコルのバージョン」の見出しサーバーは同じエンドポイントでv1.0(現行仕様)とv0.3(広く普及している版)の両方に対応し、
呼び出しのメソッド名でバージョンを判別します。Agent Cardは、リクエストに A2A-Version: 1.0 があれば
v1.0の形式で、ヘッダーがなければv0.3の形式で返します。
サーバー
「サーバー」の見出し- エージェントごとに、
<basePath>/<slug>/.well-known/agent-card.jsonでAgent Cardを、POST <basePath>/<slug>でJSON-RPC 2.0のエンドポイントを提供します(basePathの既定は/a2a)。 - 内部のエージェントIDは公開せず、公開用の
slugを使います。 - 呼び出し元ごとにクライアントとトークンを設定し、トークンはシークレットストアに保存します。
- 既定ではループバックからの呼び出しだけを受け付けます。外部から受け付けるには
allowNonLoopbackの設定が必要です。 - 既定(
allowTools: false)では、ツールを使わずモデルの応答だけを返します。 apiKeyHeader: trueにすると、Authorization: Bearerの代わりにX-API-Keyヘッダーで同じクライアントトークンを受け付けます。 Agent Cardにはbearerの代替としてapiKeyが載ります(既定は無効)。rest: trueにすると、エージェントごとにPOST <basePath>/<slug>/ask(本文{ "message": "...", "contextId": "..." })と、 そのOpenAPI 3.0の記述GET <basePath>/<slug>/openapi.jsonを追加します。OpenAPIからツールを取り込む呼び出し元向けで、 ゲート、トークン、許可リスト、上限、分離されたセッション、信頼できないコンテンツの扱いはA2Aと同じです(既定は無効)。- エンタープライズのオーケストレーション基盤への登録手順は watsonx Orchestrate連携 を参照してください。
クライアントのツール
「クライアントのツール」の見出し- モデルが指定するのは 設定済みの名前 だけで、URLは指定できません。
- Agent CardのURLとエンドポイントは HTTPS が必須です(ループバックのみHTTP可)。
- カードのエンドポイントは、自分で
rpcUrlを設定しない限り カードと同じオリジン でなければなりません。 カードを使ってトークンを別のホストに送らせることはできません。 - HTTPのリダイレクトは拒否します。タイムアウトとサイズの上限があります。
- 外部から返された内容は、エラーメッセージも含めて 信頼できないコンテンツ のマーカーで囲んでモデルに渡します。
- 呼び出しごとに監査ログに記録します。トークンが監査ログ、ログ、ツールの出力に含まれることはありません。
セキュリティ上の注意
「セキュリティ上の注意」の見出し- 明示的に設定するまで、すべて無効です(プラグイン、
server.enabled、エージェントとクライアントの登録、 外部からの呼び出しを許可するallowNonLoopback)。 - 外部からの呼び出しを受け付ける場合は、ゲートウェイをTLSの背後に置き、
publicUrlにHTTPSのURLを設定してください。 - 呼び出し元ごとに別のクライアントとトークンを発行してください。1つだけを失効でき、監査ログにも呼び出し元が残ります。
allowTools: trueにすると、外部の相手が自社のエージェントに操作をさせられるようになります。必要な場合だけ有効にし、 そのエージェントのツールを絞り、副作用のある操作には承認を求めるポリシーを設定してください。 信頼できないコンテンツのマーカーはプロンプトインジェクションを減らしますが、防ぎきるものではありません。
未対応の機能
「未対応の機能」の見出しプッシュ通知、tasks/resubscribe と ListTasks、認証済みの拡張カード、ファイルパート、input-required と
auth-required の状態、逐次のストリーミング、gRPCとHTTP+JSON(REST)のバインディング、OAuth2・OpenID Connect・
mTLS・APIキー方式・署名付きAgent Card(ベアラートークンのみ対応)、タスクの永続化(タスクはメモリ上にあり、
ゲートウェイの再起動で失われます)、マルチテナントの tenant フィールド。詳細は英語版を参照してください。