メインコンテンツへスキップ

双方向エージェント間通信(A2A)

EKB は、オープンな Agent2Agent(A2A) プロトコルを双方向でサポートします:

方向意味設定場所
アウトバウンド内側の EKB エージェントが HTTPS 経由で外部 A2A エージェントを呼び出すエージェント → Toolkits → Agent Communication → ターゲットタイプ External(A2A)
インバウンドEKB 外のシステムが認証済み A2A エンドポイント経由で自分のエージェントを呼び出すエージェント → External Access タブ(エージェントカード URL + アクセスキー)

タスクは会話全体にわたって保持され、エージェントを所有するプロジェクトに分離されます。

これは EKB 内側の別のエージェントを呼ぶこと(同じツールキット、ターゲットタイプ In EKB)とは別のものです。内部のマルチエージェントパターンについては Agent Communication Toolkit をご覧ください。

前提条件​

方向必要なもの
アウトバウンドエージェントの編集権限;Agent Communication ツールキットの有効化;パートナーの HTTPS A2A ベース URL(必要に応じてベアラートークン)
インバウンドエージェントの編集権限;External Access キーの発行能力;パートナーがベアラートークンで HTTPS 経由で自分の API ホストを呼び出せる環境

アウトバウンド:外部 A2A エージェントの呼び出し​

パートナーやサードパーティシステムが、自分の EKB エージェントに委譲したい A2A 互換エージェントを公開しているときに使用します。

設定​

  1. エージェントを開きます → Toolkits → Agent Communication を有効にします。
  2. ヘルパーエージェント構成を追加します(UI ではこれをヘルパーまたはターゲットエージェントカードと呼ぶ場合があります)。
  3. Where this agent lives で **External(A2A)**を選択します(In EKB ではありません)。
  4. 外部エージェントのベース URL を入力します。HTTPS が必須です。
    • ベース URL または /.well-known/agent-card.json で終わる完全なエージェントカード URL を貼り付けられます — どちらも許容されます。
  5. 必要に応じてパートナーの API キー / ベアラートークン を提供します。共有構成にリテラルを貼り付ける代わりに Vault への保存を推奨します。
  6. Verify Connection をクリックして、保存前に EKB がエージェントカードを取得し、名前、説明、スキル、到達性を検証できるようにします。
  7. エージェント構成を保存します。

ランタイムで、自分のエージェントはプロジェクト内のヘルパーに渡すのと同じやり方でその外部エージェントにタスクを渡せます — コンテキストは A2A 経由で渡されます。

アウトバウンドのフィールドチェックリスト​

設定備考
ターゲットタイプ**External(A2A)**であること
URLHTTPS のみ;http:// は拒否
認証パートナーに応じて任意のベアラー / API キー
Verify Connection保存前に使用;失敗は多くの場合 DNS、TLS、SSRF ブロック、または非 A2A URL を意味

要件と制限​

  • 外部ターゲットは HTTPS を使用する必要があります。
  • ディスカバリと呼び出しは EKB バックエンドを経由します(SSRF 保護を含む)。検証済みの URL はバックエンドが実際に到達できる URL です — ノートブック上でのみホストされているホスト名は本番では動きません。
  • パートナーのトークンは他のシークレットと同様に扱ってください:貼り付けたリテラルより Vault 参照を推奨します。

インバウンド:他のシステムに自分の EKB エージェントを呼ばせる​

別の製品、パートナーのエージェント、カスタム A2A クライアントが、自分の EKB エージェントのいずれかを呼び出す必要があるときに使用します。

エージェントカード URL​

エージェントの External Access タブから次のような形の Agent Card URL を取得します:

https://<your-api-host>/a2a/agents/<agent_id>/.well-known/agent-card.json

これを相手に渡してください。彼らの A2A クライアントがカードを読み、エージェントが何ができて、リクエストをどこに送るべきかを把握します。

カード URL を共有するだけではアクセスは付与されません — 呼び出し側は依然として発行したキーを必要とします。

カードには、エージェントの名前、説明、スキル(デフォルトのチャットスキル)、JSON-RPC エンドポイントが記載されます。このエンドポイントのストリーミングはアドバタイズされません。

アクセスキー​

  1. エージェントを開きます → External Access。
  2. 後でキーを区別できるようにラベルを付けます(例:Acme partner integration)。
  3. キーを生成し、トークンをすぐにコピーしてください — ハッシュのみが保存され、シークレットは一度しか表示されません。
  4. パートナーに渡します:
    • Agent Card URL
    • ベアラートークン
  5. 不要になったキーは失効させます。シークレットを失った場合は失効させて新しいキーを発行します(元の平文は検索できません)。

キーはそのエージェントに限定されます。エージェント A 用の有効なトークンをエージェント B で使用することはできません。

外部呼び出し側から見えるもの​

リソースメソッド / パス目的
エージェントカードGET /a2a/agents/{agent_id}/.well-known/agent-card.jsonディスカバリ(認証済み)
JSON-RPCPOST /a2a/agents/{agent_id}/rpcmessage/send と関連する A2A メソッド

以下で認証します:

Authorization: Bearer <access-key>

パートナー向けチェックリスト(インバウンド)​

  1. ベアラートークンでエージェントカードを取得します。
  2. カードからアドバタイズされた JSON-RPC エンドポイントを読みます。
  3. 同じベアラートークンで A2A JSON-RPC リクエストを送信します。
  4. タスクがエージェントの所有プロジェクトに引き続き接続されることを想定します(下記参照)。

プロジェクトの分離​

インバウンド A2A の実行はエージェントを所有するプロジェクトで実行されます。複数のプロジェクトに存在するテンプレートエージェントが呼び出し側間で共有されることはありません:各呼び出しは正しいプロジェクトコンテキストに固定され、1テナントの会話が他のテナントに漏れません。

典型的な設定​

目標方向設定
EKB の「マネージャー」エージェントがパートナーの専門エージェントに質問アウトバウンドAgent Communication → External(A2A) + Verify Connection
パートナー製品が自分のサポートエージェントとチャットインバウンドExternal Access キー + カード URL
自分の EKB エージェント2体が協働内部(A2A ではない)Agent Communication → In EKB

トラブルシューティング​

症状確認すること
Verify Connection が失敗HTTPS URL;パートナーのカードパス;EKB バックエンドからのネットワーク経路;必要に応じてベアラートークン
http:// が拒否HTTPS を使用
パートナーが 401 を受信ベアラーの欠落/誤り;失効したキー;別のエージェント用に発行されたキー
パートナーがブラウザではカード URL を読めるが呼び出せないカードだけでは不十分 — Authorization: Bearer … を送信する必要
インバウンド呼び出しの誤ったプロジェクトデータエージェントの所有プロジェクトを確認;分離は所有プロジェクト単位
Public Chatbot / Interfaces との混同A2A はエージェント間プロトコル統合であり、Web サイトウィジェットや公開インターフェース URL ではない

関連ドキュメント​