9
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ADK 2.0 で変わったこと——ワークフローグラフで作る条件分岐マルチエージェント入門

9
Last updated at Posted at 2026-07-03

こんにちは!
KDDIアイレットの取り組みとして6月22日〜7月3日の期間で開催中の「Google Cloud Next '26 / Google I/O やってみた系ブログリレー」、最終日の投稿です。
今回は「ADK 2.0」を対象に、実際に検証してみた様子をお届けします!

前回の記事はこちらです。

はじめに

Agent Development Kit(ADK)2.0がリリースされました。最大の変更点はワークフローグラフの導入です。1.xでは直線的な処理しかできなかったエージェントの連携が、2.0では条件分岐・並列実行・ループといった複雑なフローを簡潔に記述できるようになりました。

この記事では、ADK 2.0のワークフローグラフを使って「文書を自動分類し、種類に応じた専門エージェントで要約する」マルチエージェントシステムを実装し、Gemini Enterprise Agent Platformまでデプロイする手順を解説します。

ADK 2.0の主な新機能:ワークフローグラフ

最大のアップデートはワークフローグラフです。
ワークフローグラフとは、エージェントの処理をノードと呼ばれるかたまりごとに分割してエッジと呼ばれる線で繋げて処理を制御する方法です。
メリットは、AIが予想外の挙動をするのを防ぎ、開発者が意図したルートへと処理を制限できるため、ビジネスでも安全に運用できる点にあります。

  • ノード:AIやツール、プログラムなど、作業を行う「一歩一歩のステップ」のこと
  • エッジ:ノードとノードを繋ぐ「矢印(進むルート)」のこと

今回作るもの

入力: テキスト(議事録・契約書・レポート等)
    ↓
[文書分類エージェント]
「議事録」  → [議事録要約エージェント] → 決定事項・アクション抽出
「契約書」  → [契約要約エージェント]  → 重要条項抽出
「レポート」 → [レポート要約エージェント] → エグゼクティブサマリー
「不明」    → エラーメッセージ

ADK 2.0の新機能を使う箇所は3点です:

  • output_schema — LLMの出力をPydanticモデルで構造化する
    • AIに自由な回答をさせずに、決まった回答をさせることができるので次のステップに確実に進むことが可能
  • Event(state={}) — ノード間でデータを受け渡す
    • 最初に指定しておけば、後続のノードがstateを読み込めばいちいち引き継ぐ処理を書く必要なしに読み込みが可能
  • Event(route=...) — 分類結果に応じて次のノードを動的に選択する
    • output_schema でAIが判定した結果を見て、「〇〇ならここへ(routeする)」といった条件に応じたルート変更が簡単に可能

インストール

  • Python 3.10以上(本記事では3.12.13)
python3 -m venv .venv
source .venv/bin/activate
pip install "google-adk>=2.0.0"

実装解説

ファイル構成

ADK-Learning/
├── .env
├── .gitignore
├── .venv/
└── doc_agent/
    ├── __init__.py    # 空ファイル(ADKのパッケージ認識用)
    └── agent.py       # エージェント定義

ADKは「フォルダ名 = エージェント名」として認識します。また、ワークフローの起点となるWorkflowオブジェクトをroot_agentという変数名で定義するのがADKの規約(エントリーポイント)となっています。

① 出力型の定義(output_schema)

分類エージェントがどの種類かを返す型を、Pydanticで定義します。

from typing import Literal
from pydantic import BaseModel, Field

class Classification(BaseModel):
    doc_type: Literal["議事録", "契約書", "レポート", "不明"] = Field(
        description="文書の種類"
    )
    reason: str = Field(description="判定理由")

Literal で返せる値を制限することで、後続の条件分岐が確実に動きます。

なぜ output_schema が必要か?

通常、LLMはテキストを返します。しかし条件分岐の判定には「議事録 という文字列が返ってくることが保証されている」必要があります。output_schema を指定することで、LLMの出力が指定したPydanticモデルに基づいて構造化(バリデーション)され、後続のノードで安全なPythonオブジェクトとして扱えるようになります。これによりAIの予想外な行動を制御することができます。

② ノード間のデータ受け渡し(state)

ユーザーの入力テキストを、後続エージェント全員が参照できるようにstateに保存します。

from google.adk import Event

def store_input(node_input: str):
    return Event(state={"document": node_input})

Event(state={...}) で辞書を渡すと、後続のエージェントのinstructionから {document} のように参照できます。

③ 文書分類エージェント

from google.adk import Agent

classify_agent = Agent(
    name="classify_agent",
    model="gemini-2.5-flash",
    instruction="""
以下の文書を分析し、種類を判定してください。

文書:
{document}

判定基準:
- 「議事録」: 会議の記録。参加者・決定事項・アクションアイテムなどが含まれる
- 「契約書」: 法的な契約。甲乙・条項・署名欄などが含まれる
- 「レポート」: 分析・調査・報告書。データや考察が含まれる
- 「不明」: 上記のいずれにも該当しない
""",
    output_schema=Classification,  # ← Pydanticモデルを指定
    output_key="classification",   # ← stateへの保存キー名
)

output_schema=Classification を指定すると、エージェントの出力が Classification オブジェクトとして後続ノードに渡されます。

④ 条件分岐(Event route)

分類結果を見て、次のノードを決定します。

def route_document(node_input: Classification):
    return Event(
        route=node_input.doc_type,  # "議事録" / "契約書" / "レポート" / "不明"
        message=f"📄 文書種別: **{node_input.doc_type}**\n理由: {node_input.reason}",
    )

Event(route=...) に文字列を渡すと、ADKはその文字列をキーにして次のノードを選びます。

⑤ 専門要約エージェント(3種類)

minutes_agent = Agent(
    name="minutes_agent",
    model="gemini-2.5-flash",
    instruction="""
以下の議事録を要約してください。

文書:
{document}

以下の形式で日本語で出力してください:

## 決定事項
(箇条書きで記載)

## アクションアイテム
(担当者・期限を含めて箇条書きで記載)

## 次回予定
(わかる範囲で記載)
""",
)

contract_agent = Agent(
    name="contract_agent",
    model="gemini-2.5-flash",
    instruction="""
以下の契約書の重要条項を抽出してください。

文書:
{document}

以下の形式で日本語で出力してください:

## 契約の目的
## 主要な権利・義務
## 注意すべき条項
""",
)

report_agent = Agent(
    name="report_agent",
    model="gemini-2.5-flash",
    instruction="""
以下のレポートのエグゼクティブサマリーを作成してください。

文書:
{document}

以下の形式で日本語で出力してください:

## エグゼクティブサマリー(3行以内)
## 主要な発見
## 推奨アクション
""",
)

def unknown_handler(node_input: Classification):
    return Event(
        message=(
            "⚠️ 文書の種類を判定できませんでした。\n"
            "議事録・契約書・レポートのいずれかを入力してください。"
        )
    )

各エージェントの instruction{document} と書くと、stateに保存したテキストが自動的に展開されます。

⑥ ワークフローグラフの定義

ここが2.0の最大のアップデートの1つです。すべてのノードをグラフとして接続します。

from google.adk import Workflow

root_agent = Workflow(
    name="doc_classifier",
    description="文書を自動分類し、種類に応じた要約を生成するマルチエージェントシステム",
    edges=[
        # 直線: START → store_input → classify_agent → route_document
        ("START", store_input, classify_agent, route_document),
        # 条件分岐: route値に応じてノードを選択
        (
            route_document,
            {
                "議事録": minutes_agent,
                "契約書": contract_agent,
                "レポート": report_agent,
                "不明": unknown_handler,
            },
        ),
    ],
)

edges の読み方:

  • タプル (A, B, C) → A → B → C と順番に実行
  • (node, {key: next_node})node が返した route 値でジャンプ先を決定
    • 上記ではnoderoute_document{key: next_node}"議事録": minutes_agentなど

この宣言だけで、ADKが実行順序・データ受け渡し・分岐処理をすべて管理してくれます。

⑦ 動作確認(adk web)

adk web

http://localhost:8000 をブラウザで開き、doc_agent を選択。左パネルにワークフローグラフが可視化されます(ADK 2.0の特徴)。スクリーンショット 2026-07-02 22.48.02.png

動作確認結果(3パターン):

入力 判定 振り分け先 出力形式
議事録テキスト 「議事録」 minutes_agent 決定事項・アクション・次回予定
契約書テキスト 「契約書」 contract_agent 契約の目的・権利義務・注意条項
レポートテキスト 「レポート」 report_agent エグゼクティブサマリー・主要な発見・推奨アクション

Gemini Enterprise Agent Platformへのデプロイ

事前準備

# GCPにログイン
gcloud auth login

# プロジェクト設定
gcloud config set project YOUR_PROJECT_ID

# ADCのquotaプロジェクトを合わせる
gcloud auth application-default set-quota-project YOUR_PROJECT_ID

# 必要なAPIを有効化
gcloud services enable aiplatform.googleapis.com --project YOUR_PROJECT_ID

# ADC認証
gcloud auth application-default login

# 必要パッケージ
pip install google-cloud-aiplatform

デプロイ

adk deploy agent_engine \
  --project YOUR_PROJECT_ID \
  --region asia-northeast1 \
  --display_name doc_agent \
  doc_agent

たったこれだけです。adk deploy が内部で以下を自動処理します:

  1. ソースコードをGCPにコピー
  2. requirements.txt を自動生成
  3. Dockerfile を自動生成
  4. Gemini Enterprise Agent Platformにデプロイ

デプロイ確認

GCP Consoleでplaygroundを開き、テキストを送信して動作確認します。ローカルと同じレスポンスが返ってくれば成功です。スクリーンショット 2026-07-03 10.48.47.png

まとめ

ADK 2.0のワークフローグラフで実現したこと:

実現したこと 実装方法/コマンド
LLMの出力を構造化 output_schema(Pydantic)
ノード間でテキストを共有 Event(state={...})
分類結果で処理を分岐 Event(route=...)
グラフ全体を宣言 Workflow(edges=[...])
クラウドにデプロイ adk deploy agent_engine

ADK 2.0ではこの他にも並列実行(複数エージェントを同時に動かす)やループ(条件が満たされるまで繰り返す)、A2Aプロトコル(異なるフレームワーク間でエージェントを連携する)なども実装されています。今回のワークフローグラフをベースに、より複雑なユースケースにも挑戦できます。

今回はADK 2.0のワークフローグラフについて学びました。次回は、並列実行の仕組みや実装方法について、実際に手を動かしながら掘り下げていく予定です。

先述しましたが、今回のアップデートでAIの挙動を開発者の思い通りに制御することができるようになりました。これにより、従来よりも安全にAIエージェントをビジネス業務へ組み込むことが可能になり、Google CloudのADKのアップデートの恩恵を強く実感しています。さらなる機能拡張に期待しつつ、今後のアップデートが楽しみです。

9
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?