🤖

[ADK] What's new in 1.21.0 - Interactions API Support -

に公開

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

本記事は ADK Advent Calendar 2025 のシリーズ 2 の 2025/12/12 の記事です。
ADK Advent Calendar 2025 (シリーズ 1) は埋まっていますが、シリーズ 2 はまだまだ募集中なのでぜひ参加してください。

さて、2025/12/12 に Agent Development Kit (ADK) 1.21.0 がリリースされました。
先週 1.20.0 の記事を書いたばっかりなのに...
今回は 1.21.0 のリリースノートを元に、以下のアップデートについてピックアップして説明します。

  • Interactions API Support
  • BigQueryAgentAnalyticsPlugin v2.0

リリースノートはこちらです。
https://github.com/google/adk-python/releases/tag/v1.21.0

対象

  • ADK を触ったことがある Python ユーザー
  • AI Agentを作ってみたい人

なお本記事中では ADK の Agent をAgent、それ以外の AI エージェントをエージェントと表記します。

What's new in 1.21.0

まずは 1.21.0 のリリースノートを見てみましょう。

リリースノート全文(原文と和訳)を見る

Features

  • [Interactions API Support]

    • The newly released Gemini Interactions API is supported in ADK Now. To use it:
      • 新しくリリースされた Gemini Interactions API が ADK でサポートされました。使用するには以下のようにします:
    Agent(
      model=Gemini(
          model="gemini-3-pro-preview",
          use_interactions_api=True,
      ),
      name="...",
      description="...",
      instruction="...",
    )
    

    see samples for details

  • [Services]

    • Add add_session_to_memory to CallbackContext and ToolContext to explicitly save the current session to memory (7b356dd)
      • 現在のセッションを明示的にメモリに保存するために、CallbackContextToolContextadd_session_to_memory を追加しました。
  • [Plugins]

    • Add location for table in agent events in plugin BigQueryAgentAnalytics (507424a)
      • プラグイン BigQueryAgentAnalytics のエージェントイベント内テーブルにロケーションを追加しました。
    • Upgrade BigQueryAgentAnalyticsPlugin to v2.0 with improved performance, multimodal support, and reliability (7b2fe14)
      • パフォーマンスの向上、マルチモーダルサポート、信頼性の向上を含む BigQueryAgentAnalyticsPlugin v2.0 へのアップグレードを行いました。
  • [A2A]

    • Adds ADK EventActions to A2A response (32e87f6)
      • A2A レスポンスに ADK EventActions を追加しました。
  • [Tools]

    • Add header_provider to OpenAPIToolset and RestApiTool (e1a7593)
      • OpenAPIToolsetRestApiToolheader_provider を追加しました。
    • Allow overriding connection template (cde7f7c)
      • 接続テンプレートのオーバーライドを許可しました。
    • Add SSL certificate verification configuration to OpenAPI tools using the verify parameter (9d2388a)
      • verify パラメータを使用して、OpenAPI ツールに SSL 証明書検証設定を追加しました。
    • Use json schema for function tool declaration when feature enabled (cb3244b)
      • 機能が有効な場合、関数ツール宣言に JSON スキーマを使用するようにしました。
  • [Models]

    • Add Gemma3Ollama model integration and a sample (e9182e5)
      • Gemma3Ollama モデルの統合とサンプルを追加しました。

Bug Fixes

  • Install dependencies for py 3.10 (9cccab4)
    • py 3.10 用の依存関係をインストールしました。
  • Refactor LiteLLM response schema formatting for different models (894d8c6)
    • 異なるモデルの LiteLLM レスポンススキーマのフォーマットをリファクタリングしました。
  • Resolve project and credentials before creating Spanner client (99f893a)
    • Spanner クライアントを作成する前にプロジェクトと資格情報を解決するようにしました。
  • Avoid false positive "App name mismatch" warnings in Runner (6388ba3)
    • Runner での誤検知 "App name mismatch" 警告を回避しました。
  • Update the code to work with either 1 event or more than 1 events (4f54660)
    • 1 つのイベントまたは複数のイベントのいずれでも動作するようにコードを更新しました。
  • OpenAPI schema generation by skipping JSON schema for judge_model_config (56775af)
    • judge_model_config の JSON スキーマをスキップして OpenAPI スキーマを生成するようにしました。
  • Add tool_name_prefix support to OpenAPIToolset (82e6623)
    • OpenAPIToolsettool_name_prefix サポートを追加しました。
  • Pass context to client interceptors (143ad44)
    • クライアントインターセプターにコンテキストを渡すようにしました。
  • Yield event with error code when agent run raised A2AClientHTTPError (b7ce5e1)
    • AGENT の実行で A2AClientHTTPError が発生した場合にエラーコード付きのイベントを yield するようにしました。
  • Handle string function responses in LiteLLM conversion (2b64715)
    • LiteLLM 変換で文字列関数レスポンスを処理するようにしました。
  • ApigeeLLM support for Built-in tools like GoogleSearch, BuiltInCodeExecutor when calling Gemini models through Apigee (a9b853f)
    • Apigee 経由で Gemini モデルを呼び出す際に、GoogleSearch や BuiltInCodeExecutor などの組み込みツールの ApigeeLLM サポートを追加しました。
  • Extract and propagate task_id in RemoteA2aAgent (82bd4f3)
    • RemoteA2aAgenttask_id を抽出して伝播するようにしました。
  • Update FastAPI and Starlette to fix CVE-2025-62727 (ReDoS vulnerability) (c557b0a)
    • CVE-2025-62727 (ReDoS 脆弱性) を修正するために FastAPI と Starlette を更新しました。
  • Add client id to token exchange (f273517)
    • トークン交換にクライアント ID を追加しました。

Improvements

  • Normalize multipart content for LiteLLM's ollama_chat provider (055dfc7)
    • LiteLLM の ollama_chat プロバイダー用にマルチパートコンテンツを正規化しました。
  • Update adk web, fixes image not rendering, state not updating, update drop down box width and trace icons (df86847)
    • ADK web を更新し、画像が表示されない問題、状態が更新されない問題を修正し、ドロップダウンボックスの幅とトレースアイコンを更新しました。
  • Add sample agent for interaction api integration (68d7048)
    • Interactions API 統合のサンプルエージェントを追加しました。
  • Update genAI SDK version (f0bdcab)
    • genAI SDK のバージョンを更新しました。
  • Introduce build_function_declaration_with_json_schema to use pydantic to generate json schema for FunctionTool (51a638b)
    • FunctionTool 用に Pydantic を使用して JSON スキーマを生成する build_function_declaration_with_json_schema を導入しました。
  • Update component definition for triaging agent (ee743bd)
    • トリアージエージェントのコンポーネント定義を更新しました。
  • Migrate Google tools to use the new feature decorator (bab5729)
    • 新しい機能デコレータを使用するように Google ツールを移行しました。
  • Migrate computer to use the new feature decorator (1ae944b)
    • 新しい機能デコレータを使用するように computer を移行しました。
  • Add Spanner execute sql query result mode using list of dictionaries (f22bac0)
    • 辞書のリストを使用して Spanner SQL クエリ結果モードを追加しました。
  • Improve error message for missing invocation_id and new_message in run_async (de841a4)
    • run_asyncinvocation_idnew_message が欠落している場合のエラーメッセージを改善しました。

Pick up Feature

今回はこの中からいくつか機能をピックアップして詳細を説明します。

1. Interactions API Support

Google が新たに発表した Interactions API が ADK でサポートされました。

Interactions API とは、Gemini モデルやエージェントと対話するための統一されたインターフェースです。
これまでモデルと対話するには generateContent API を使用していましたが、Interactions API を使用することで、複雑な状態管理やエージェント同士の対話がよりスムーズに行えるようになります。

具体的には以下のような特徴があります:

  • 統一されたアクセス: モデル(例: gemini-3-pro-preview)もエージェント(例: Gemini Deep Research エージェント)も同じエンドポイントで扱えます。
  • 状態管理のサーバー側での一元化: 会話履歴やインタラクション ID をサーバー側で管理できるため、クライアント側(ADK)でのボイラープレートコードが削減できます。
  • バックグラウンド実行: 時間のかかるタスク(Deep Research など)を非同期で実行し、クライアントがタイムアウトすることなく結果をポーリングできます。
  • 思考(Thought)の明示的な扱い: 最終的なレスポンスだけでなく、モデルの「思考」プロセスも明示的に扱えます。

これにより、ADK の機能(ツール、ルーティングなど)と Interactions API の堅牢な状態管理やバックグラウンド実行を組み合わせて利用できるようになります。

実際にサンプルコードを書いて試してみましょう。
適当な Agent を作成するためのプロジェクトを作成します。

mkdir interaction-api-agent
cd interaction-api-agent

個人的にツールのバージョン管理には mise を利用しているので mise を利用して python や uv を整備します。

mise use python@3.12
mise use uv@latest
uv python pin 3.12
uv init --app .

ADK Python をインストールします。

uv add "google-adk"
uv sync

次に Agent を作成します。
なお Interactions API はまだ Vertex AI には対応していないようなので、Gemini API を利用します。

uv run adk create interaction_sample
Choose a model for the root agent:
1. gemini-2.5-flash
2. Other models (fill later)
Choose model (1, 2): 1
1. Google AI
2. Vertex AI
Choose a backend (1, 2): 1

Don't have API Key? Create one in AI Studio: https://aistudio.google.com/apikey

Enter Google API key: {your key here}

Agent created in /path/to/interaction-api-agent/interaction_sample:
- .env
- __init__.py
- agent.py

agent.py を編集して、Interactions API に対応した Agent を作成します。
Interactions API を利用するには、Agent の model プロパティに Gemini クラスのインスタンスを指定して、
Gemini クラスのコンストラクタにuse_interactions_api=Trueを指定する必要があります。

今回は現在時刻の返却と、ウェブ検索を行うためのツールを利用する Agent を作成します。

from google.adk.agents.llm_agent import Agent
from google.adk.models.google_llm import Gemini
import datetime
from zoneinfo import ZoneInfo
from google.adk.tools.google_search_tool import GoogleSearchTool

def now_tool(timezone: str) -> str:
    """
    @param timezone: The timezone to use for the current time.
    @return: The current date and time.
    """
    tz = ZoneInfo(timezone)
    return datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S")

root_agent = Agent(
    model=Gemini(
        model="gemini-2.5-flash",
        use_interactions_api=True,
    ),
    name="interactions_agent",
    description="An agent using the new Interactions API.",
    instruction="""
You are a helpful assistant that can:

1. Search the web for information using google_search
2. Get current time information using  now_tool

When users ask for information that requires searching, use google_search.
When users ask about time, use now_tool.

Be concise and helpful in your responses. Always confirm what you did.
    """,
    tools=[now_tool, GoogleSearchTool(bypass_multi_tools_limit=True)],
)

では Agent を起動します。

uv run adk web .

ブラウザを開いて http://localhost:8000 にアクセスすると、ADK の UI が表示されます。
色々会話していってみて、trace を見てみましょう。

...

あれ...? 普通にすべて送信されているように見える....
コードを見たところ、trace 情報は llm_request をダンプしていて、実際に API リクエスト時に送信した内容を表示しているわけではないようです。

ただ prompt_token を見ると、Interactions api を利用した場合は、やり取りごとのトークン数の増加がなく、送信したトークンのみトークン数が数えられているように見えます。


use_interactions_api=Falseでこんにちはを8回話した場合のトークン数 トークンが多く消費されている。また会話ごとにトークン数が増加していく


use_interactions_api=Trueでこんにちはを8回話した場合のトークン数 トークン数は会話が増えても一定

通常の generateContent を呼び出す場合は、やり取りごとの過去のすべてのやり取りを含めて送信しているので、トークン数はあとの会話になればなるほど増えていきます。

Interactions API を利用した場合は、最後の会話のみを送信しているため、トークン数は過去の会話に依存しなくなります。このあたりが大きな違いと言えるでしょう。(他にも利点はあるはずですが、パット見わかるのはこれぐらいです。)

2. BigQueryAgentAnalyticsPlugin v2.0

Agentの実行ログや分析データを BigQuery に保存するための BigQueryAgentAnalyticsPlugin が v2.0 にアップデートされました。

主な変更点は以下の 2 点です。

  1. BigQuery Storage Write API (非同期) の採用によるパフォーマンス向上
    以前のバージョンよりも書き込みが高速化され、Agentのレイテンシへの影響が低減されました。

  2. マルチモーダルデータのサポート強化 (ObjectRef)
    これが今回の目玉機能の一つと言えます。画像や動画、長文テキストなどの大きなデータを BigQuery に直接保存しようとすると、サイズ制限に引っかかることがありました。
    v2.0 では ObjectRef を利用してこれらの大きなデータを自動的に Google Cloud Storage (GCS) にオフロードし、BigQuery 側にはその参照(ObjectRef)を保存することができるようになりました。

    これにより、マルチモーダル入力(画像を表示して質問するなど)を含むAgentのログも、データサイズを気にすることなく BigQuery で管理・分析できるようになります。

まとめ

今回は ADK 1.21.0 のリリースについて紹介しました。
Interactions API への対応は、今後のエージェント開発に大きな影響を与える重要なアップデートです。

また、BigQuery プラグインのアップデートも、実運用を見据えたログ分析基盤として非常に頼もしい進化を遂げています。

ぜひ皆さんも新しい ADK 1.21.0 を試してみてください。


お知らせ/宣伝

ADK 開発者が集う日本語の Discord コミュニティがあります。ADK に関する情報交換や議論に興味がある方は、ぜひご参加ください!

https://discord.gg/BKpGRzjtqZ

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

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

Discussion