nikkie-ftnextの日記

イベントレポートや読書メモを発信

Agent Development Kit (Python) は Agent2Agent サーバのエージェントに session service として Agent Engine をまだ使えない

はじめに

七尾百合子さん、お誕生日 322日目 おめでとうございます! nikkieです。

ADK で A2A の理想と現実のお話です。

目次

ADK で A2A のサンプル

Google の Agent Development Kit (ADK) の Python 版は、Agent2Agent Protocol を(実験的に)サポートしています。

adk-pythonリポジトリには、A2A のサンプルがいくつかあります。
今回は一番基本のサンプルを動かします。
https://github.com/google/adk-python/tree/v1.23.0/contributing/samples/a2a_basic

3つのエージェントが登場します(コードは抜粋です)

root_agent = Agent(
    instruction="""
      1. If the user asks to roll a die, delegate to the roll_agent.
      2. If the user asks to check primes, delegate to the prime_agent.
      3. If the user asks to roll a die and then check if the result is prime, call roll_agent first, then pass the result to prime_agent.
    """,
    sub_agents=[roll_agent, prime_agent],
)
  • root_agent: ユーザーとやり取りする。roll_agentprime_agentに処理を委譲できる
  • roll_agent: サイコロを振る
  • prime_agent: 数値が素数かどうかを判定する(A2A
prime_agent = RemoteA2aAgent(
    # 略
    agent_card=(
        f"http://localhost:8001/a2a/check_prime_agent{AGENT_CARD_WELL_KNOWN_PATH}"
    ),
)

A2A Protocol では、root_agentがクライアント、prime_agentがサーバです。
このとき、A2A サーバには session service に Agent Engine を指定できません(DB の指定では動作します)

A2A サーバの session service を Agent Engine にして、a2a_basic を動かす

adk-python を clone してきて、uv sync --extra a2aします。
私の環境は Python 3.13.8 です。

Vertex AI を使うよう、2箇所に.envを置きました。

  • contributing/samples/a2a_basic/.env
  • contributing/samples/a2a_basic/remote_a2a/check_prime_agent/.env
GOOGLE_GENAI_USE_VERTEXAI=true
GOOGLE_CLOUD_PROJECT=adk-practice-480404
GOOGLE_CLOUD_LOCATION=global

(1) root_agentを起動します。

% uv run adk web contributing/samples/

ブラウザで http://127.0.0.1:8000 を開いて a2a_basic を選びます

(2) 別のターミナルでprime_agent(A2A サーバ)を起動します。

% uv run adk api_server --a2a --port 8001 contributing/samples/a2a_basic/remote_a2a --session_service_uri agentengine://projects/748276364070/locations/asia-northeast1/reasoningEngines/6740841907103989760

README にある「Is 7 a prime number?」をブラウザから送ります。
期待値は

  1. root_agentprime_agentに transfer
  2. prime_agentが「7は素数」と回答

です。

transfer までは期待通りでしたが、prime_agentのレスポンスがエラーメッセージです。

google.genai.errors.ClientError: 400 INVALID_ARGUMENT. {'error': {'code': 400, 'message': 'Request contains an invalid argument.', 'status': 'INVALID_ARGUMENT'}}

なお A2A としては 200 を返しています。

INFO:     127.0.0.1:56661 - "POST /a2a/check_prime_agent HTTP/1.1" 200 OK

この件は2025年8月に issue を出しています。
issue を出した時点から前進していますが、執筆時最新の v1.23.0 でもまだ修正できていません。

なぜ A2A サーバの session service に Agent Engine を使えないのか

ログです

2026-01-31 18:37:39,940 - INFO - task_manager.py:179 - Task not found or task_id not set. Creating new task for event (task_id: 9b707452-c7de-4535-b648-5ddd77d98d09, context_id: 1c2f42bf-b659-4046-b6fd-5e44381204da).
2026-01-31 18:37:40,620 - ERROR - a2a_agent_executor.py:157 - Error handling A2A request: 400 INVALID_ARGUMENT. {'error': {'code': 400, 'message': 'Request contains an invalid argument.', 'status': 'INVALID_ARGUMENT'}}

「Error handling A2A request:」はawait self._handle_request(context, event_queue)での例外送出を意味します。
ref: https://github.com/google/adk-python/blob/v1.23.0/src/google/adk/a2a/executor/a2a_agent_executor.py#L155

例外送出箇所は_prepare_sessionのこちら:
https://github.com/google/adk-python/blob/v1.23.0/src/google/adk/a2a/executor/a2a_agent_executor.py#L291-L295

session = await runner.session_service.get_session(
    app_name=runner.app_name,
    user_id=user_id,
    session_id=session_id,
)

https://github.com/google/adk-python/issues/2727#issuecomment-3670016282 に解説があります

This UUID is then used as session_id for VertexAI (request_converter.py:111), which VertexAI rejects.

https://github.com/google/adk-python/blob/v1.23.0/src/google/adk/a2a/converters/request_converter.py#L109-L117

  return AgentRunRequest(
      # 略
      session_id=request.context_id,  # 上述のログで UUID になっています
      # 略
  )

解説コメント時点と比べて、実験的なapi_client.agent_engines.sessions.events.list()を使うように変わっていました。
しかし、依然として Vertex AI に対して(数字並びの ID ではなく)UUID を session id として使ってしまう挙動が直っていないために例外送出されています。
Agent Engine には新しい session はできていません。

終わりに

ADK (Python) では、A2A サーバにするエージェントの session service に Agent Engine を(v1.23.0 でも)まだ使えません。
現在使えるのは DB のみです。

なお、DB を使って万事解決というわけでもなく、隔週のリリースサイクルの中で DB スキーマの変更がたびたび入る1(ときにはリリースノートに記載無く)のと向き合うことになります

P.S. プルリクエストを出しました

2026年を迎えても Google が対応完了しないので、gpt-5.2-codex に issue を見せて直してもらい、それをプルリクエストしました。

マージされるように、応援ください


  1. 申し訳程度のツール提供はあります