🤖

Agent Development Kit 1.8.0 で追加された AgentのA2A ASGI Application化

に公開

こんにちは、サントリーこと大橋です。

今日(2025/07/24)Agent Development Kit 1.8.0がリリースされました。

https://github.com/google/adk-python/releases/tag/v1.8.0

主な更新内容は

  • AgentのA2A ASGI Application化する機能追加 (今回の記事で紹介します。)
  • Agent Card Builderの追加 (※本記事で紹介する機能と関連がありそうです)
  • Vertex AI Model Optimizerサポート
  • ComputeUseToolsetの追加 (ただし、まだ実装クラスが存在しないため、現時点では利用できないようです)
    • ブラウザやコンピュータの操作を行うためのツールを提供する機能のようです
    • まだ試験的な(Experimental)段階

今回はこの内の「AgentのA2A ASGI Application化する機能追加」について解説していきます。

これまでのADKにおけるA2Aの課題

これまでADKでA2Aサーバーを構築するには、大まかに2つの手段がありました。

  1. 自前でA2A SDKを利用してADKを接続する
  2. 1.6.2で追加された adk api_server --a2aを利用してA2Aサーバーを立てる

1.の方法はサンプルがあるものの、手間がかかる、2.の方法は手軽なものの、adk api_serverの各種エンドポイントが利用可能な状態になってしまい、純粋なA2Aサーバではありませんでした。

1.8.0で追加されたto_a2a

今回リリースされた ADK 1.8.0で追加された google.adk.a2a.utils.agent_to_a2a.to_a2aはこの課題を解決する機能と思われましたが、コードを確認したところ、まだ完全な解決には至っていないようです。

利用方法自体は以下の様にADKで定義したagentとhostやportを渡すだけです。

a2a.py
from google.adk.agents import Agent

root_agent = Agent(
   model="gemini-2.5-flash",
   name="good_agent",
   description='A helpful agent for user questions.',
   instruction='A helpful agent for user questions.',
)
a2a_app = to_a2a(root_agent)

あとはuvicornなどから呼び出せば簡単にa2aサーバーを起動できます。

uvicorn a2a:a2a_app --host localhost --port 8000

ADKのクライアント側でこのリモートエージェントを利用する場合は1.6.1で追加されたRemoteA2AAgentを利用します。

agent.py
from a2a.utils.constants import AGENT_CARD_WELL_KNOWN_PATH
from google.adk.agents.remote_a2a_agent import RemoteA2aAgent

root_agent = RemoteA2aAgent(
    name="good_agent",
    description=(
        "A helpful agent for user questions."
    ),
    agent_card=f"http://localhost:8000/{AGENT_CARD_WELL_KNOWN_PATH}",
)

あとは クライアント側のAgentを起動すればA2Aを利用したAgentが作成できます。

adk web --host 8001

これだけ見ると
とても簡単にa2aサーバーが利用可能だということがわかります。
ただ...

現状の to_a2aの課題

現状この to_a2aではin-memoryサービスを使った、runnerを定義して利用します。

https://github.com/google/adk-python/blob/main/src/google/adk/a2a/utils/agent_to_a2a.py#L66-L76

つまりちょっと本番環境では使えなさそうですね。。。。
このただto_a2aの実装自体は簡単ですし、上記のAgentCardBuilderも内部で利用しているので、参照実装として有用ですね。

card_builder = AgentCardBuilder(
      agent=agent,
      rpc_url=rpc_url,
  ))

今後 createRunner に相当する関数を渡せるようになるといいのですが...

まとめ

簡単ですが、 ADK 1.8.0 で追加された to_a2a について書きました。
まだちょっと本番環境では使えなそうですが、今後こういう方向性でAgentをA2A化できるのであれば、非常に楽しみですね。

お知らせ/宣伝

先日、ADKユーザー向けのイベント「ADK UG #0」が開催され、ADK開発者が集う日本語のDiscordコミュニティが誕生しました。ADKに関する情報交換や議論に興味がある方は、ぜひご参加ください!

https://discord.gg/BKpGRzjtqZ

また、ADKの最新のコミットログやリリースノートを分かりやすく解説するPodcastを、月・水・金に配信しています。ADKの動向を追いかけたい方は、ぜひ聴いてみてください。

https://www.youtube.com/playlist?list=PL0Zc2RFDZsM_MkHOzWNJpaT4EH5fQxA8n

Discussion