本文へスキップ

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 フィールド。詳細は英語版を参照してください。