DIVX テックブログ

catch-img

ADK(Agent Development Kit)〜入門編〜     スケジュール管理チャットボットを簡単に作ってみた

はじめに

こんにちは、DIVXの堀次です。

DIVXでは、クライアントの業務要件に応じて、エージェント機能を取り入れたプロトタイプやPoCを素早く立ち上げる取り組みを行っています。

エージェント開発というと、複雑な設定やインフラ構築が必要なイメージをお持ちではないでしょうか?しかし、ADKを使えば、そのような心配は不要で、数分で動くチャットボットが作れて、ローカル環境でサクッと試すことができます。

この記事では、スケジュール管理チャットボットを例に、ADKの簡単さを実感してもらう事ができます。

今回は簡単に作成してみたアプリと共にご紹介させていただければと思います。

最小限のセットアップ(ローカル環境で準備)

ADKを使い始めるのに必要な準備は、驚くほどシンプルです。

ADKのインストール

まず、仮想環境を作成してADKをインストールします。

python3 -m venv .venv
source .venv/bin/activate  # Windowsの場合は .venv\Scripts\activate
pip install google-adk

プロジェクト構成の作成

次に、プロジェクト用のディレクトリを作成し、必要なファイルを用意します。

task_manager/
	__init__.py
	agent.py
	tools.py
	tasks.json
	.env

環境変数の設定

Google AI StudioからAPIキーを取得して、.envファイルに設定する

// 今回はローカル環境での検証のため、Google AI StudioのAPIキーを使用します。Vertex AI を使う場合は、GOOGLE_GENAI_USE_VERTEX=TRUEを設定し、Google Cloudの認証情報を設定する必要があります。
// GOOGLE_GENAI_USE_VERTEX=FALSE
GOOGLE_API_KEY=YOUR_API_KEY

準備はこれだけで完了です!

ADKを使ったアプリケーションの基本的な構成は以下の通りです。

graph TB
    User[ユーザー] -->|自然言語で質問| WebUI[ADK Web UI]
    WebUI -->|リクエスト| Agent[Agent]
    Agent -->|ツール呼び出し| Tools[Tools<br/>Python関数]
    Tools -->|データ操作| Storage[DB]
    Tools -->|結果返却| Agent
    Agent -->|応答生成| LLM[Gemini API]
    LLM -->|応答| Agent
    Agent -->|応答| WebUI
    WebUI -->|表示| User

各コンポーネント役割

1. Agent: ユーザーの意図を理解し、適切なツールを選択・実行

  • ただし、どのツールをどう使わせるかの精度は「プロンプトと設計」に大きく依存します。

  • ADKは「ツール呼び出しの仕組み」を提供しますが、「正しく使わせるためのルール設計」は開発者側の責任です。

2. Tools: 実際の処理を行うPython関数(スケジュールの追加・削除など)

  • ADKは関数をツールとして公開してくれますが、ビジネスロジック自体は通常のアプリ開発と同じく自分で実装します。

3. Storage: データの保存先(今回はJSONファイル、本番環境ではPostgreSQLやMySQLなどのDBを使用可能)

  • ローカル検証では JSON で十分ですが複数ユーザー対応や本番運用を見据える場合は、早い段階でDB設計(PostgreSQL/MySQLなど)を検討するのがおすすめです。

4. LLM: 自然言語の理解と応答生成(Gemini API)

  • どこまで任せるか、どの程度厳密な制御が必要かはユースケースによって変わります。

実装の詳細

基本的な実装の流れ

ADKを使った実装は、以下の3ステップで完了します。

sequenceDiagram
    participant User as ユーザー
    participant WebUI as ADK Web UI
    participant Agent as Agent
    participant Tools as Tools
    participant Storage as Storage

    User->>WebUI: 「来週の研修を追加して」
    WebUI->>Agent: リクエスト送信
    Agent->>Agent: 意図を理解<br/>(スケジュール追加)
    Agent->>Tools: add_task("来週の研修")
    Tools->>Storage: スケジュール保存
    Storage-->>Tools: 保存完了
    Tools-->>Agent: 「スケジュールを追加しました」
    Agent->>Agent: 応答生成
    Agent-->>WebUI: 応答返却
    WebUI-->>User: 「来週の研修を追加しました」

ここではきれいに「Agent が意図を判断して Tools を呼ぶ」という責務分離の形で描いていますが、実際のプロジェクトでは、要件が増えるにつれて Agent と Tools の境界は少しずつ揺らぎがちです。

最初は「Agent=調整役」「Tools=ビジネスロジック」と分けておくと整理しやすい

実装が進む中で、「このチェックは Agent 側でやるか? Tools 側でやるか?」という判断が増えていくといった現実的な変化が起きます。その前提で読み進めてもらえると、実務とのギャップが小さくなると思います。

コード例(最小限)

1. Tools

def add_task(task_description: str) -> str:
    """スケジュールを追加する"""
    # スケジュールを保存する処理
    return f"スケジュール「{task_description}」を追加しました。"

def list_tasks() -> str:
    """スケジュール一覧を取得する"""
    # スケジュール一覧を返す処理
    return "現在のスケジュール一覧:\n..."

特別なライブラリや複雑な実装は必要ありません。

2. Agent

from google.adk import Agent
from task_manager.tools import add_task, list_tasks

root_agent = Agent(
    name="task_manager",
    model="gemini-2.5-flash-lite",
    instruction="あなたはスケジュール管理をサポートするアシスタントです...",
    tools=[add_task, list_tasks, ...]
)

エージェントの設定は、モデル名、指示文、ツールのリストを指定するだけです。

ここで重要なのは、ツール選択の精度や、どのようなタイミングでツールを使うかは instruction(プロンプト)の設計に大きく依存するという点です。

  • ADK:ツール呼び出しの枠組みを提供

  • 設計者:モデルに「どう振る舞ってほしいか」を具体的に書く

という役割分担になります。

ローカル環境で動作確認してみる

 サーバー起動

adk web .

実際の会話例

ユーザー:  “12/15 月曜日午前は健康診断、午後は研修”を追加して
エージェント: はい、承知いたしました。「12/15 月曜日午前は健康診断、午後は研修」をスケジュールとして追加しました。

ユーザー: 12月と1月のスケジュールを時系列に表示して?
エージェント: 今月のスケジュール一覧:
○ [1] 12/15 月曜日午前は健康診断、午後は研修
○ [2] 12/31~1/2 は旅行
○ [3] 1/3 は初蹴り
○ [4] 12/25 休み
○ [5] 12/26 仕事納め
○ [6] 12/28 大掃除

自然な会話でスケジュール管理が行えています。エージェントが適切に関数を選択し、実行していることが分かります。

まとめ

ADKはローカル環境で簡単に検証できる!

  • セットアップが簡単:数分で準備完了

  • 実装もシンプル:普通のPython関数を定義するだけ

  • デプロイ不要:ローカルであれば、すぐに試せる

  • 複雑な設定不要:インフラ構築や複雑な設定は一切不要

カスタムツールを追加するだけで、エージェントに機能を持たせられる。これがADKの強みです。ADKは、エージェント開発を驚くほど簡単にしてくれます。 ローカル環境でサクッと試せるので、ぜひ一度触ってみてください。

今後ADKを使って何ができるか

ここから先は、入門編から一歩進んだ「実務展開・発展例」の話になります。  

「まずはローカルで触ってみる」段階から、「実際の業務でどう使うか」をイメージするための材料として読んでいただければと思います。

実務での展望

1. マルチエージェントシステム

複数のエージェントを連携させて、より複雑なワークフローを構築できます。

sequenceDiagram
    participant User as ユーザー
    participant Router as Router Agent
    participant ScheduleAgent as スケジュール管理<br/>Agent
    participant ReminderAgent as リマインダー<br/>Agent
    participant NotificationAgent as 通知<br/>Agent

    User->>Router: 「来週の会議を追加して、前日にリマインダーを設定」
    Router->>Router: 意図を分析
    Router->>ScheduleAgent: スケジュール追加
    ScheduleAgent-->>Router: 追加完了
    Router->>ReminderAgent: リマインダー設定
    ReminderAgent-->>Router: 設定完了
    Router->>NotificationAgent: 通知送信
    NotificationAgent-->>Router: 送信完了
    Router-->>User: 「会議を追加し、リマインダーを設定しました」

活用例

  • 問い合わせ内容に応じて、適切な専門エージェントに振り分け

  • 複数のエージェントが協調して、統合的なサービスを提供

  • 各エージェントが独立して動作し、拡張性が高い

 2. Google Cloud Vertex AIとの連携

本番環境では、Vertex AIを活用してスケーラブルなシステムを構築できます。

graph TB
    User[ユーザー] -->|リクエスト| LoadBalancer[ロードバランサー]
    LoadBalancer -->|分散| Agent1[Agent Instance 1]
    LoadBalancer -->|分散| Agent2[Agent Instance 2]
    LoadBalancer -->|分散| Agent3[Agent Instance 3]
    Agent1 -->|セッション管理| VertexAI[Vertex AI<br/>SessionService]
    Agent2 -->|セッション管理| VertexAI
    Agent3 -->|セッション管理| VertexAI
    VertexAI -->|データ保存| CloudSQL[Cloud SQL]
    VertexAI -->|モデル呼び出し| GeminiAPI[Gemini API]

メリット

  • 自動スケーリングによる負荷分散

  • 高可用性の確保

  • セッション管理の一元化

3. データベース連携による本格運用

現在はJSONファイルを使っていますが、ADKは以下のデータベースと連携できます。

sequenceDiagram
    participant User as ユーザー
    participant Agent as Agent
    participant SessionService as SessionService
    participant DB as PostgreSQL/MySQL

    User->>Agent: リクエスト
    Agent->>SessionService: セッション取得
    SessionService->>DB: クエリ実行
    DB-->>SessionService: データ取得
    SessionService-->>Agent: セッション返却
    Agent-->>User: 応答

実装例

- DatabaseSessionServiceを使用してPostgreSQLやMySQLに接続

- 複数ユーザー対応や大規模なデータ処理が可能

- 会話履歴を永続化して、過去の会話を参照可能

4. 会話履歴の活用とパーソナライゼーション

ADKのMemoryServiceを活用して、過去の会話から学習し、パーソナライズされた応答を実現できます。

graph LR
    User[ユーザー] -->|会話| Agent[Agent]
    Agent -->|会話履歴保存| SessionService[SessionService]
    SessionService -->|長期記憶化| MemoryService[MemoryService]
    MemoryService -->|知識検索| VectorDB[Vector Database]
    VectorDB -->|関連情報| MemoryService
    MemoryService -->|文脈提供| Agent
    Agent -->|パーソナライズ| User

活用例

  • 過去の会話からユーザーの好みを学習

  • 「いつもこの時間にスケジュールを作る」→自動提案

  • 会話履歴を分析して、行動パターンを可視化

ADKの実用例

ADKは様々な本番環境で活用されています。以下は代表的な使用例です。

1. カスタマーサポートの自動化

  • 問い合わせ対応エージェント:企業のナレッジベースと統合し、よくある質問に自動回答

  • エスカレーション機能:複雑な問題は人間の担当者に自動的に引き継ぎ

  • 24時間対応:人間が不在でも基本的な問い合わせに対応可能

2. コンテンツ生成・要約

  • レポート要約エージェント:長文のレポートを要約し、エグゼクティブ向けの簡潔なブリーフを生成

  • 翻訳・多言語対応:複数言語でのコンテンツ生成や翻訳を自動化

3. データ抽出・分析

  • データ抽出エージェント:非構造化データから構造化データを抽出

  • 競合分析エージェント:ECサイトから商品情報を抽出し、競合価格を監視

4. マルチエージェントワークフロー

  • 研究パイプライン:データ収集エージェント、分析エージェント、レポート生成エージェントを連携

  • 複雑なタスクの分割実行:各エージェントが専門的な役割を担い、協調して作業

5. インタラクティブアプリケーション

  • 旅行コンシェルジュエージェント:目的地の提案、宿泊施設の予約、旅程の作成を支援

  • パーソナライズされた体験:ユーザーの好みを学習し、個別最適化されたサービスを提供

次のステップ

ADKは、ローカル環境で簡単に検証できることが最大の強みです。 

今回のように、まずはローカル環境で動作確認を行い、その後、本番環境での要件に合わせて段階的に拡張していくことができます。

  • ローカル:JSON + 単一エージェントで素早く検証

  • 小規模プロダクション:DB連携 + 単一または少数のエージェント

  • 大規模:マルチエージェント + Vertex AI / Cloud SQL などと連携

エージェント開発の世界は、思っているよりもずっと身近で、実用的です。ぜひ、ADKを活用して、あなたのプロジェクトにエージェント機能を楽しみながら、組み込んでみてください!

参考資料

https://google.github.io/adk-docs/

お気軽にご相談ください


ご不明な点はお気軽に
お問い合わせください

サービス資料や
お役立ち資料はこちら

DIVXブログ

テックブログ タグ一覧

人気記事ランキング

関連記事