🤖

[ADK] What's new in 1.18.0 ~ 公式ADK Visual Agent Builder登場 ~

に公開

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

本日(2025/11/06)、Agent Development Kit(以降ADK) 1.18.0がリリースされました。

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

今回のリリースは、ADKリリース歴の中でも特に大きなマイルストーンと言えるかもしれません。ついに、GUIでAgentを構築できる「ADK Visual Agent Builder」が adk web に統合されました。

この記事では、リリース全体の概要を説明しつつ、特に注目すべき以下の機能をピックアップして詳しく解説していきます。

  • ADK Visual Agent Builder: GUIでAgentとSub-Agentsを構築できるビジュアルワークフローデザイナー。
  • run_debug() helper method: Agentの実験を迅速に行うためのヘルパーメソッド。
  • Support MCP prompts: McpInstructionProviderによるMCPプロンプトのサポート。

対象

  • ADKを触ったことがあるPythonユーザー
  • AIエージェント向けのUIを作成したいと思っている開発者

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

What's new in 1.18.0

まずは1.18.0のリリースノートを見てみましょう。
ただとても長いので、興味がある方のみ参照してください。

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

Features

  • [ADK Visual Agent Builder]

    • Core Features
      • Visual workflow designer for agent creation
      • Support for multiple agent types (LLM, Sequential, Parallel, Loop, Workflow)
      • Agent tool support with nested agent tools
      • Built-in and custom tool integration
      • Callback management for all ADK callback types (before/after agent, model, tool)
      • Assistant to help you build your agents with natural language
      • Assistant proposes and writes agent configuration yaml files for you
      • Save to test with chat interfaces as normal
      • Build and debug at the same time in adk web!
  • [Core]

    • Add support for extracting cache-related token counts from LiteLLM usage (4f85e86)
    • Expose the Python code run by the code interpreter in the logs (a2c6a8a)
    • Add run_debug() helper method for quick agent experimentation (0487eea)
    • Allow injecting a custom Runner into agent_to_a2a (156d235)
    • Support MCP prompts via the McpInstructionProvider class (88032cf)
  • [Models]

    • Add model tracking to LiteLlm and introduce a LiteLLM with fallbacks demo (d4c63fc)
    • Add ApigeeLlm as a model that lets ADK Agent developers to connect with an Apigee proxy (87dcb3f)
  • [Integrations]

    • Add example and fix for loading and upgrading old ADK session databases (338c3c8)
    • Add support for specifying logging level for adk eval cli command (b1ff85f)
    • Propagate LiteLLM finish_reason to LlmResponse for use in callbacks (71aa564)
    • Allow LLM request to override the model used in the generate content async method in LiteLLM (ce8f674)
    • Add api key argument to Vertex Session and Memory services for Express Mode support (9014a84)
    • Added support for enums as arguments for function tools (240ef5b)
    • Implement artifact_version related methods in GcsArtifactService (e194ebb)
  • [Services]

    • Add support for Vertex AI Express Mode when deploying to Agent Engine (d4b2a8b)
    • Remove custom polling logic for Vertex AI Session Service since LRO polling is supported in express mode (546c2a6)
    • Make VertexAiSessionService fully asynchronous (f7e2a7a)
  • [Tools]

    • Add Bigquery detect_anomalies tool (9851340)
    • Extend Bigquery detect_anomalies tool to support future data anomaly detection (38ea749)
    • Add get_job_info tool to BigQuery toolset (6429457)
  • [Evals]

    • Add "final_session_state" to the EvalCase data model (2274c4f)
    • Marked expected_invocation as optional field on evaluator interface (b17c8f1)
    • Adds LLM-backed user simulator (54c4ecc)
  • [Observability]

    • Add BigQueryLoggingPlugin for event logging to BigQuery (b7dbfed)
  • [Live]

    • Add token usage to live events for bidi streaming (6e5c0eb)

Bug Fixes

  • Reduce logging spam for MCP tools without authentication (11571c3)
  • Fix typo in several files (d2888a3)
  • Disable SetModelResponseTool workaround for Vertex AI Gemini 2+ models (6a94af2)
  • Bug when callback_context_invocation_context is missing in GlobalInstructionPlugin (f81ebdb)
  • Support models slash prefix in model name extraction (8dff850)
  • Do not consider events with state delta and no content as final response (1ee93c8)
  • Parameter filtering for CrewAI functions with **kwargs (74a3500)
  • Do not treat FinishReason.STOP as error case for LLM responses containing candidates with empty contents (2f72ceb)
  • Fixes null check for reflect_retry plugin sample (86f0155)
  • Creates evalset directory on evalset create (6c3882f)
  • Add ADK_DISABLE_LOAD_DOTENV environment variable that disables automatic loading of .env when running ADK cli, if set to true or 1 (15afbcd)
  • Allow tenacity 9.0.0 (ee8acc5)
  • Output file uploading to artifact service should handle both base64 encoded and raw bytes (496f8cd)
  • Correct message part ordering in A2A history (5eca72f)
  • Change instruction insertion to respect tool call/response pairs (1e6a9da)
  • DynamicPickleType to support MySQL dialect (fc15c9a)
  • Enable usage metadata in LiteLLM streaming (f9569bb)
  • Fix issue with MCP tools throwing an error (1a4261a)
  • Remove redundant format field from LiteLLM content objects (489c39d)
  • Update the contribution analysis tool to use original write mode (54db3d4)

Improvements

  • Add Community Repo section to README (432d30a)
  • Undo adding MCP tools output schema to FunctionDeclaration (92a7d19)
  • Refactor ADK README for clarity and consistency (b0017ae)
  • Add support for reversed proxy in adk web (a0df75b)
  • Avoid rendering empty columns as part of detailed results rendering of eval results (5cb35db)
  • Clear the behavior of disallow_transfer_to_parent (48ddd07)
  • Disable the scheduled execution for issue triage workflow (a02f321)
  • Include delimiter when matching events from parent nodes in content processor (b8a2b6c)
  • Improve Tau-bench ADK colab stability (04dbc42)
  • Implement ADK-based agent factory for Tau-bench (c0c67c8)
  • Add util to run ADK LLM Agent with simulation environment (87f415a)
  • Demonstrate CodeExecutor customization for environment setup (8eeff35)
  • Add sample agent for VertexAiCodeExecutor (edfe553)
  • Adds a new sample agent that demonstrates how to integrate PostgreSQL databases using the Model Context Protocol (MCP) (45a2168)
  • Add example for using ADK with Fast MCP sampling (d3796f9)

主な和訳は以下の通りです。

機能 (Features)

  • [ADK Visual Agent Builder]

    • Agent作成のためのビジュアルワークフローデザイナー
    • 複数のAgentタイプ(LLM, Sequential, Parallel, Loop, Workflow)をサポート
    • ネストされたAgentツールを含むAgentツールをサポート
    • 組み込みツールとカスタムツールの統合
    • すべてのADKコールバックタイプ(before/after agent, model, tool)の管理
    • 自然言語でAgent構築を支援するアシスタント機能
    • アシスタントがAgent設定のYAMLファイルを提案・作成
    • 通常通りチャットインターフェースでテストするために保存可能
    • adk web内でビルドとデバッグを同時に実行可能
  • [Core]

    • LiteLLMの使用状況からキャッシュ関連のトークン数を抽出するサポートを追加
    • コードインタープリターによって実行されたPythonコードをログに出力
    • Agentの迅速な実験のためのrun_debug()ヘルパーメソッドを追加
    • agent_to_a2aにカスタムRunnerを注入可能に
    • McpInstructionProviderクラスを介してMCPプロンプトをサポート
  • [Models]

    • LiteLLMにモデル追跡を追加し、フォールバック付きLiteLLMのデモを導入
    • ADK Agent開発者がApigeeプロキシに接続できるモデルとしてApigeeLlmを追加
  • [Integrations]

    • 古いADKセッションデータベースの読み込みとアップグレードのためのサンプルと修正を追加
    • adk eval CLIコマンドのロギングレベルを指定するサポートを追加
    • LiteLLMのfinish_reasonをコールバックで使用するためにLlmResponseに伝播
    • LiteLLMのgenerate_content_asyncメソッドで使用されるモデルをLLMリクエストが上書きできるようにする
    • Express Modeサポートのため、Vertex SessionおよびMemoryサービスにAPIキー引数を追加
    • 関数ツールの引数としてenumをサポート
    • GcsArtifactServiceにartifact_version関連のメソッドを実装
  • [Services]

    • Agent Engineへのデプロイ時にVertex AI Express Modeをサポート
    • Express ModeでLROポーリングがサポートされたため、Vertex AI Session Serviceのカスタムポーリングロジックを削除
    • VertexAiSessionServiceを完全に非同期化
  • [Tools]

    • BigQueryの異常検知ツールを追加
    • 将来のデータ異常検知をサポートするためにBigQuery異常検知ツールを拡張
    • BigQueryツールセットにget_job_infoツールを追加
  • [Evals]

    • EvalCaseデータモデルにfinal_session_stateを追加
    • 評価者インターフェースでexpected_invocationをオプショナルなフィールドとしてマーク
    • LLMによるユーザーシミュレーターを追加
  • [Observability]

    • BigQueryへのイベントロギングのためのBigQueryLoggingPluginを追加
  • [Live]

    • 双方向ストリーミングのライブイベントにトークン使用量を追加

バグ修正 (Bug Fixes)

  • 認証なしのMCPツールのログスパムを削減
  • いくつかのファイルのタイポを修正
  • Vertex AI Gemini 2+モデルのSetModelResponseToolのワークアラウンドを無効化
  • GlobalInstructionPlugincallback_context_invocation_contextが欠落しているバグを修正
  • モデル名抽出でモデルのスラッシュプレフィックスをサポート
  • stateデルタがありコンテンツがないイベントを最終応答と見なさないようにする
  • **kwargsを持つCrewAI関数のパラメータフィルタリング
  • 空のコンテンツを持つ候補を含むLLM応答でFinishReason.STOPをエラーケースとして扱わないようにする
  • reflect_retryプラグインサンプルのnullチェックを修正
  • evalset create時にevalsetディレクトリを作成
  • ADK_DISABLE_LOAD_DOTENV環境変数を追加し、trueまたは1に設定するとADK CLI実行時の.env自動読み込みを無効化
  • tenacity 9.0.0を許可
  • アーティファクトサービスへの出力ファイルアップロードがbase64エンコードと生のバイトの両方を処理できるようにする
  • A2A履歴のメッセージパートの順序を修正
  • ツールコール/レスポンスのペアを尊重するようにインストラクションの挿入を変更
  • DynamicPickleTypeがMySQLダイアレクトをサポートするようにする
  • LiteLLMストリーミングで利用状況メタデータを有効化
  • MCPツールがエラーをスローする問題を修正
  • LiteLLMコンテントオブジェクトから冗長なformatフィールドを削除
  • 貢献度分析ツールが元の書き込みモードを使用するように更新

改善 (Improvements)

  • READMEにコミュニティリポジトリのセクションを追加
  • FunctionDeclarationにMCPツールの出力スキーマを追加するのを元に戻す
  • ADKのREADMEを明確性と一貫性のためにリファクタリング
  • adk webでリバースプロキシをサポート
  • 評価結果の詳細表示の一部として空のカラムをレンダリングしないようにする
  • disallow_transfer_to_parentの挙動を明確化
  • Issueトリアージワークフローのスケジュール実行を無効化
  • コンテントプロセッサで親ノードからのイベントを照合する際にデリミタを含める
  • Tau-bench ADK colabの安定性を向上
  • Tau-bench用のADKベースのエージェントファクトリを実装
  • シミュレーション環境でADK LLM Agentを実行するユーティリティを追加
  • 環境設定のためのCodeExecutorのカスタマイズをデモ
  • VertexAiCodeExecutorのサンプルエージェントを追加
  • Model Context Protocol (MCP)を使用してPostgreSQLデータベースを統合する方法を示す新しいサンプルエージェントを追加
  • Fast MCPサンプリングでADKを使用する例を追加

Pick up Feature

1. ADK Visual Agent Builder

今回の目玉機能です。adk webコマンドで起動する開発UIに、AgentをGUIで構築するための「Visual workflow designer」が追加されました。

これまでADKはコードファーストな開発体験を提供してきましたが、この機能により、LLMの支援を受けながら、ドラッグ&ドロップのような直感的な操作でAgentやSub-Agentsの連携(マルチエージェントシステム)を設計できるようになります。

主な特徴は以下の通りです。

  • GUI上でAgentの種別(LLM, Sequential, Loopなど)を選択し、プロパティを設定。
  • ツールやコールバックを視覚的に管理。
  • 自然言語でアシスタントに指示を出すことで、Agentの設定(YAML)を自動生成。
  • 作成したAgentはそのままUI上でテスト・デバッグが可能。

利用方法

まず google-adkの1.18.0 をインストールします。
※ Pythonパッケージマネージャーの uv を利用します。 高速なパッケージ管理ツールとして注目されており、必要に応じてインストールしてください。

uv add google-adk==1.18.0

次にいくつかオプション付きで adk web で開発UIを起動します。
オプションはなくても動作しますが、つけておくことを推奨します(後の開発がスムーズになります)。

uv run adk web --reload_agents .

開発UIが起動したら、左メニューの上部にある「+」ボタンをクリックします。

新しい+ボタン

作成するAgent名が聞かれるので、任意の名前を入力して、「Create」をクリックします。

Agentの作成

「ADK Web」の「Builder Mode」が表示されました。

ADK Web Builder Mode

UIは直感的で、見ればおおよそ想像がつくかと思いますが、真ん中のエリアで

  • Agentの選択
  • 新たなSub-Agentsの追加
  • ツール(Agent Tool含む)の設定修正
    が可能です。

左のエリアで

  • Agentの設定
  • ツールの追加
  • コールバックの追加
  • 作成したAgentの保存

右のエリアで

ができます。

Agentの作成結果

作成すると {agent_name}ディレクトリ以下にtmp ディレクトリが作成され、その中にAgent Config(YAMLファイル)が作成されます。

作成されるファイル

GUIでツールを作成した場合は、Pythonファイルは作成されず、設定のみが作成されます。
左メニュー下の「Save」ボタンをクリックすると、tmpディレクトリのファイルが、{agent_name}ディレクトリ直下にコピーされます。

ただし、現状だとこのままでは動作しません。対象の{agent_name}ディレクトリ直下に__init__.py.envを作成する必要があります。 ※追記 2025/11/06 13:59 .envを足しました。
また、ツールを設定しても、ツールの中身は作成されないため、自前でコードの実装が必要になります。

まだいくつか荒削りな点はありますが、GUIでAgentを作成し、比較的すぐに開発UIで試せる点は非常に期待が持てますね。

2. Add run_debug() helper method for quick agent experimentation

開発中のAgentを手軽にテストするためのヘルパーメソッド run_debug()InMemoryRunner に追加されました。

これまで、Agentの動作を少し確認するだけでも、RunnerやSessionServiceの初期化など、7〜8行の定型的なコードが必要でした。

変更前: 7〜8行のボイラープレートコード

from google.adk import Agent
from google.adk.runners import Runner
from google.adk.sessions import InMemorySessionService
from google.genai import types

# Agentを定義
agent = Agent(
    model="gemini-2.5-flash",
    instruction="You are a helpful assistant"
)

# Agentをテストするためにこれだけのコードが必要だった
APP_NAME = "default"
USER_ID = "default"
session_service = InMemorySessionService()
runner = Runner(agent=agent, app_name=APP_NAME, session_service=session_service)
session = await session_service.create_session(
    app_name=APP_NAME, user_id=USER_ID, session_id="default"
)
content = types.Content(role="user", parts=[types.Part.from_text("Hello")])
async for event in runner.run_async(
    user_id=USER_ID, session_id=session.id, new_message=content
):
    if event.content and event.content.parts:
        print(event.content.parts[0].text)

run_debug() を使えば、この定型コードがわずか2行に短縮されます。Jupyter Notebookでの実験や、ちょっとした動作確認が非常にスムーズになります。

変更後: run_debug() を使ってわずか2行に

from google.adk import Agent
from google.adk.runners import InMemoryRunner

# 同じAgentを定義
agent = Agent(
    model="gemini-2.5-flash",
    instruction="You are a helpful assistant"
)

# わずか2行でテスト可能!
runner = InMemoryRunner(agent=agent)
await runner.run_debug("Hello")

なお、run_debugrun_async() を置き換えるものではなく、あくまで開発・実験フェーズの体験を向上させるためのヘルパー機能です。

3. Support MCP prompts via the McpInstructionProvider class

実はAgentのinstructionは通常、文字列を渡すと思いますが、InstructionProvider型(def instruction_provider(ctx: ReadonlyContext) -> str | Awaitable[str])の関数を渡すことも可能です。

https://github.com/google/adk-python/blob/main/src/google/adk/agents/llm_agent.py#L128C1-L128C20

記事の最後(お知らせ)で紹介しているPPPでも、Secret Managerからプロンプトを取得する、secret_instructionを定義して利用しています。

https://github.com/soundTricker/personalized-podcast-platform/blob/main/apps/radio-station/radio_station/utils/instruction_provider.py

Model Context Protocol (MCP) は、外部ツールやサービスとの連携を標準化するためのプロトコルですが、
MCPで定義されている機能(コンセプト)の一つにPromptsがあります。

https://modelcontextprotocol.info/docs/concepts/prompts/

PromptsはMCPサーバー側で、プロンプトテンプレートとワークフローを定義し、ユーザーはそれを用いてLLMに指示を与えることができます。
Gemini CLIやClaude Codeのカスタムコマンドが近いイメージですね。
MCP Promptsを利用することで、プロンプトの再利用性が向上、中央集約による一貫性、動的プロンプト生成など多くの利点が見込まれます。

今回のアップデートでは、MCP Promptsで定義されたプロンプトテンプレートをADK Agentinstructionとして利用できるようになりました。
これを実現するのが McpInstructionProvider クラスです。

MCPサーバーが提供する動的なプロンプト(例: /prompts/get?name=my_prompt&args=...)を、Agentの指示として直接利用できます。これにより、プロンプト自体を外部サービスとして管理・再利用することが容易になり、よりモジュール化されたエージェント開発が可能になります。

サンプルコードは以下のような感じです。

agents

from google.adk.agents.llm_agent import LlmAgent
from google.adk.agents.mcp_instruction_provider import McpInstructionProvider
from google.adk.tools.mcp_tool.mcp_session_manager import SseConnectionParams

# MCPの接続先定義
connection_params = SseConnectionParams(
    url='http://localhost:3000/sse',
    headers={'Accept': 'text/event-stream'},
)


root_agent = LlmAgent(
    model='gemini-2.0-flash',
    name='enterprise_assistant',
    # McpInstructionProviderの利用
    instruction=McpInstructionProvider(
        connection_params=connection_params,
        prompt_name='file_system_prompt',
    )
)

MCPサーバー側ではFastMCPであれば、@mcp.promptを利用してMCP Promptsを定義します。

@mcp.prompt(name="file_system_prompt")
def file_system_prompt() -> str:
  return f"""\
Help the user access their file systems."""

このサンプルコードではMCPサーバー自体が自分自身を利用するためのSystem InstructionをAgentに提供しています。
他には例えば、NotionのMCPサーバーが提供する「要約プロンプト」を、ADKエージェントが自身の指示として読み込んで実行する、といった連携が考えられます。

まとめ

ADK 1.18.0は、特に「ADK Visual Agent Builder」の登場により、ADKの開発生産性を新たなレベルに引き上げる画期的なリリースとなりました。コードファーストの柔軟性を維持しつつ、GUIによる直感的な開発も可能になり、初心者から上級者まで、より幅広い開発者がAIエージェントを構築しやすくなったと言えるでしょう。

run_debug() のような開発者体験を細やかに改善する機能も追加されており、ADKが着実に進化していることを感じさせます。

今回のリリースは「ADK Visual Agent Builder」が目立ちましたが、
他にもBigQueryの異常検知ツール、BigQueryへログを流すためのBigQueryLoggingPluginの追加、
ツールの引数でenumサポートなど、ADKのCore機能やツール周りで非常に多くの改善が行われています。

ADKで挙げられていたロードマップも、おおよそリリースされたため、そろそろ次のロードマップが発表されるかもしれませんね。


お知らせ/宣伝

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

https://discord.gg/BKpGRzjtqZ

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

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

Discussion