「AIエージェントキャッチアップ #29 - Agent Development Kit (ADK)」を開催しました

ジェネラティブエージェンツの大嶋です。

「AIエージェントキャッチアップ #29 - Agent Development Kit (ADK)」という勉強会を開催しました。

generative-agents.connpass.com

アーカイブ動画はこちらです。

youtube.com

Agent Development Kit (ADK)

今回は、Googleが公開したAIエージェントのフレームワーク「Agent Development Kit (ADK)」について、公式ドキュメントを読んだり動かしたりしてみました。

ADKのGitHubリポジトリはこちらです。

github.com

公式ドキュメントはこちらです。

google.github.io

今回のポイント

ADKの概要

Agent Development Kit (ADK) は、Googleが公開したAIエージェントのフレームワークです。

ツールを使用するシンプルなAIエージェントから、ワークフロー、マルチエージェントなど、様々な構成をサポートしています。

Memory機能やデプロイ、評価といった機能も備えており、LLMアプリケーションのフルスタックなフレームワークと言えます。

基本的な使い方

ADKはpipコマンドでインストールできます。

pip install google-adk

基本的なエージェントの実装例は以下のようになります。

from google.adk.agents import Agent

def get_weather(location: str) -> str:
    ...

root_agent = Agent(
    name="weather_agent",
    model="gemini-2.0-flash",
    description=(
        "Agent to answer questions about the weather in a city."
    ),
    instruction=(
        "You are a helpful agent who can answer user questions about the weather in a city."
    ),
    tools=[get_weather],
)

作成したエージェントは、コマンドラインから対話的に実行したり、ウェブインターフェースで利用したり、APIサーバーとして起動したりできます。

# コマンドライン実行
adk run <ディレクトリ名>

# ウェブインターフェース起動
adk web

# APIサーバー起動
adk api_server

ウェブインターフェース

ADKには組み込みのウェブインターフェースが用意されており、adk webコマンドで起動できます。

このインターフェースでは、テキストでのチャットや、LLMやツールの呼び出しの可視化などができます。

音声機能に対応したモデル(gemini-2.0-flash-live-001など)を使用することで、ブラウザ上での音声対話も可能です。

エージェントのプログラム上での実行

ADKが提供しているCLIコマンド、Web UI、APIサーバーではなく、Pythonのコード上からエージェントを実行する場合は、以下のようになります。

session_service = InMemorySessionService()

APP_NAME = "weather_tutorial_app"
USER_ID = "user_1"
SESSION_ID = "session_001"

session = session_service.create_session(
    app_name=APP_NAME,
    user_id=USER_ID,
    session_id=SESSION_ID
)

runner = Runner(
    agent=root_agent,
    app_name=APP_NAME,
    session_service=session_service
)

content = types.Content(role='user', parts=[types.Part(text="What is the weather like in London?")])

final_response_text = "Agent did not produce a final response."

async for event in runner.run_async(user_id=USER_ID, session_id=SESSION_ID, new_message=content):
    if event.is_final_response():
        if event.content and event.content.parts:
            final_response_text = event.content.parts[0].text
        break

print(final_response_text)

まず、セッション(チャットのスレッドのようなもの)を管理するsession_serviceを準備してsessionを作成します。 その後、agentとsession_serviceをもとにrunnerを作成してrunner.run_asyncのようにしてエージェントを実行します。

マルチエージェント機能

ADKはマルチエージェントもサポートしています。 以下のようにsub_agentsを指定することで、必要に応じてサブエージェントが呼び出されます。

from google.adk.agents import Agent

agent_team = Agent(
        :
    sub_agents=[sub_agent_1, sub_agent_2]
)

ワークフローの実装

ADKでは、ワークフローの実装もサポートしています。

google.github.io

以下のようにしてワークフローを組むことができるとのことです。

from google.adk.agents.sequential_agent import SequentialAgent

SequentialAgent(sub_agents=[sub_agent_1, sub_agent_2])

LangChain v0の頃に提供されていたSequentialChainを思い出しますね。

直列でのエージェントの連結以外にも、ループ・並列もサポートされており、カスタムのワークフローも実装できるようです。

その他

ADKでは「イベント」を基本単位として様々な処理が実行されているようです。

google.github.io

今回はこの「イベント」についてしっかり理解する時間はとれませんでしたが、実際にADKをうまく使う場合は重要かもしれません。

また、ADKにはエージェントの評価の機能もあります。

google.github.io

こちらも今回詳細まで確認できませんでしたが、さわってみると面白いかもしれません。

次回のご案内

以上、今回は「Agent Development Kit (ADK)」をキャッチアップしました。

次回は「AIエージェントキャッチアップ #30 - A2A (Agent2Agent)」ということで、エージェント連携のプロトコル「A2A (Agent2Agent)」がテーマです!

generative-agents.connpass.com

ご興味・お時間ある方はぜひご参加ください!

また、その次の回以降のテーマも募集しているので、気になるエージェントのOSSなどあれば教えてください!