Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Google ADK実用例:Travel Concierge徹底解説

Google ADK実用例:Travel Concierge徹底解説

# Google ADK実用例:Travel Concierge徹底解説
## ~コーディングのコツと実践的AIエージェント開発~

Avatar for MIKIO KUBO

MIKIO KUBO

June 02, 2025
Tweet

More Decks by MIKIO KUBO

Other Decks in Business

Transcript

  1. 目次 1. はじめに:Travel Conciergeとは? 2. Travel Conciergeのアーキテクチャ 3. 主要コンポーネントのコードリーディング (1/3)

    4. 主要コンポーネントのコードリーディング (2/3) 5. 主要コンポーネントのコードリーディング (3/3) 6. コーディングのコツ:エージェント定義 7. コーディングのコツ:ツール作成と利用 8. コーディングのコツ:プロンプトエンジニアリング 9. コーディングのコツ:状態管理とデバッグ 10. Travel Conciergeを動かしてみよう 11. まとめ:Travel Conciergeから学ぶADK開発 12. 質疑応答 2
  2. 1. はじめに:Travel Concierge とは? Travel Concierge Google ADK (Agent Development

    Kit) を用いて開発された、旅行手配のデモンストレーション用AIエージェ ントです。 旅行のアイデア出しから予約、旅行中・旅行後のサポートまで、一連の旅行体験をAIエージェントが支援する ことを想定しています。 マルチエージェントシステムの具体例として、ADKの様々な機能(エージェント連携、ツール利用、状態管理 など)を学ぶのに最適な教材です。 学習目標: travel-concierge の構造とコードを理解し、ADKを用いた実践的なAIエージェント開発のヒントを得 る。 3
  3. 2. Travel Concierge のアーキテクチャ Travel Conciergeは、 ルートエージェントが司令塔となり、複数の サブエージェントにタスクを委任する階層的な マルチエージェント構造です。 [User]

    | v {Root Agent TravelConcierge} +------------------------------------------------------------------+ | | | | | | | | | | | | | | R:TT R:PL R:BK R:PT R:IT R:PO v v v v v v [Inspiration] [Planning] [Booking] [Pre-trip] [In-trip] [Post-trip] (Agent) (Agent) (Agent) (Agent) (Agent) (Agent) | | | | | | `--------+---------' | v (These 3 agents use Tools) [Tools: Google Search, Places API etc.] (R: = Request:, TT=Travel Tips, PL=Planning, BK=Booking, PT=Pre-trip Prep, IT=In-trip Support, PO=Post-trip Follow-up) 各サブエージェントは特定の旅行フェーズやタスクに特化しています。 4
  4. 3. 主要コンポーネントのコードリーディング (1/3) travel-concierge のコード構成概要: travel_concierge/agent.py : ルートエージェントの定義 travel_concierge/prompt.py :

    ルートエージェント用のプロンプト travel_concierge/sub_agents/ : 各サブエージェントのディレクトリ 例: inspiration/agent.py , inspiration/prompt.py travel_concierge/tools/ : カスタムツールの定義 例: google_search_tool.py , memory.py 5
  5. 4. 主要コンポーネントのコードリーディング (2/3) ルートエージェント ( travel_concierge/agent.py ) の例 ( 簡略版)

    from google.adk.agents import Agent from travel_concierge import prompt from travel_concierge.sub_agents.inspiration.agent import inspiration_agent # ... 他のサブエージェントやツールをインポート ... travel_concierge_agent = Agent( name="travel_concierge_root_agent", model="gemini-1.5-flash", # 使用するLLMモデル description="A travel concierge agent...", instructions=prompt.ROOT_AGENT_INSTRUCTIONS, # エージェントへの指示 sub_agents=[inspiration_agent, /* ... */], # サブエージェントのリスト tools=[/* ... */], # 利用可能なツールのリスト ) Agent クラスのインスタンスとして定義します。 主要な設定項目: name , model , description , instructions , sub_agents , tools 。 6
  6. 5. 主要コンポーネントのコードリーディング (3/3) サブエージェント ( inspiration/agent.py ) の例 ( 簡略版)

    from google.adk.agents import Agent from travel_concierge.sub_agents.inspiration import prompt from travel_concierge.tools.google_search_tool import GoogleSearchTool inspiration_agent = Agent( name="inspiration_agent", model="gemini-1.5-flash", description="Provides travel inspiration and ideas...", instructions=prompt.INSPIRATION_AGENT_INSTRUCTIONS, tools=[GoogleSearchTool(), /* ... */], ) ルートエージェントと同様の構造で、特化された指示とツールを持ちます。 ツール ( tools/google_search_tool.py ) の概念コード from google.adk.tools import FunctionTool def search_google(query: str) -> dict: """Performs a Google search for the given query.""" # ... (API呼び出し等の実装) ... return {"status": "success", "results": f"Mock results for: {query}"} 7
  7. 6. コーディングのコツ:エージェント定義 明確な役割分担: 各エージェント(特にサブエージェント)には、限定的で明確な役割を持たせます。これに よりプロンプトが簡潔になり、LLMの推論精度が向上します。 適切なモデル選択: タスクの複雑さやコストに応じて、 model パラメータでLLM(例: gemini-1.5-flash

    , gemini-1.5-pro )を選択します。 詳細な description と instructions : description : ルートエージェントがサブエージェントを適切に選択するために重要です。 instructions : エージェントの思考プロセスを具体的にガイドします。出力形式の指定も有効です。 サブエージェントの活用: 複雑なタスクは複数のサブエージェントに分割し、ルートエージェントがそれらを 統括するように設計します。 8
  8. 7. コーディングのコツ:ツール作成と利用 関数ツールのDocstring: LLMはツールのDocstringを読んで使い方を理解します。引数、処理内容、戻り値を 正確かつ分かりやすく記述しましょう。 def get_flight_details(flight_number: str, date: str)

    -> dict: """ Retrieves flight details for a given flight number and date. Args: flight_number: The flight number (e.g., "NH123"). date: The date of the flight in YYYY-MM-DD format. Returns: A dictionary with flight status, departure/arrival times, or an error message if the flight is not found. """ # ... implementation ... pass 入力と出力の型定義: Pythonの型ヒントを使い、LLMが期待するデータ型を明確にします。 エラーハンドリング: ツール内で発生しうるエラーを適切に処理し、エラー情報をLLMに返します。 ADK 組み込みツールの活用: google_search , code_interpreter なども検討しましょう。 9
  9. 8. コーディングのコツ:プロンプトエンジニアリング 役割(Role) の明確化: 「あなたは〇〇のエキスパートです」のように、エージェントのペルソナを明確にしま す。 コンテキストの提供: 必要な背景情報、過去のやり取りの要約などをプロンプトに含めます。 タスクの分解 (Step-by-step):

    複雑な指示は、ステップに分けて記述します。 出力形式の指定: JSON、Markdownなど、期待する出力形式を具体的に指示します。 例: 「結果は以下のJSON形式で返してください: {"destination": "都市名", "activities": ["アクティビティ 1"]}」 制約条件の明示: 「〇〇はしないでください」「必ず〇〇を含めてください」といった制約を伝えます。 反復的な改善: プロンプトは一度作って終わりではなく、エージェントの動作を見ながら継続的に改善しま す。 10
  10. 9. コーディングのコツ:状態管理とデバッグ 状態管理 (Session / State) ADKでは、会話の文脈やユーザー情報をセッション間で記憶・活用できます。 Session: 一連のユーザーとエージェントの対話を表し、会話履歴や一時データを保持します。 State:

    セッション内で保持されるキーバリュー形式のデータストアです。ユーザーの好みや計画中の情報な どを保存し、 tool_context.state を介してツール内からアクセス・更新できます。 デバッグとテスト ADK CLI / Web UI: adk run . や adk web . コマンドでエージェントを起動し、動作確認やデバッグを行 います。Web UIではイベントログや状態の検査が可能です。 11
  11. 10. Travel Concierge を動かしてみよう 1. 前提条件: Python 3.9以上。 Google Cloud

    SDK (gcloud CLI) のセットアップと認証。 Gemini APIキーの取得と環境変数 GOOGLE_API_KEY への設定。 adk-samples リポジトリのクローン。 git clone https://github.com/google/adk-samples.git cd adk-samples/python/agents/travel-concierge 2. 環境設定と依存関係のインストール: .env.example を .env にコピーし、APIキー等を設定。 uv で依存関係をインストール: uv init . 3. 実行: Web UI: uv run adk web . (ブラウザで http://localhost:8501 を開く) CLI: uv run adk run . --agent-name travel_concierge_root_agent 12
  12. 11. まとめ:Travel Concierge から学ぶADK 開発 モジュール性: タスクごとにエージェントを分割することで、見通しが良く、再利用性の高いシステムを構築 できます。 明確な指示: エージェントとツールへの指示(プロンプトとDocstring)は、具体的かつ明確に記述すること

    が重要です。 ツールの活用: 外部API連携や複雑なロジックはツールとして切り出し、エージェントには推論と意思決定に 集中させます。 状態管理の設計: 会話の流れやユーザー情報を効果的に管理するために、セッションと状態を適切に設計しま す。 反復的な開発: シンプルなエージェントから始め、徐々に機能を追加し、テストと改善を繰り返しながら開発 を進めましょう。 travel-concierge は、これらのプラクティスを学ぶための優れた出発点です。 13