Enable the APIs

進行状況を確認

/ 10

Deploy the Agent

進行状況を確認

/ 90

このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。

GSP1350

Google Cloud セルフペース ラボ

概要

このラボでは、Agent Development Kit(ADK)を使用して、クライアント エージェント サービスを実装およびデプロイする方法を中心に説明します。ADK を使用して、Model Context Protocol(MCP)サーバーなどのリモートツールを利用する AI エージェントを構築します。ここで重要なのが、アーキテクチャの基本原則である「責任の分担」です。これは、安全な API を介して推論レイヤ(エージェント)が、明確に分離されたツールレイヤ(MCP サーバー)と通信する仕組みによって実現します。

このラボでは、事前に MCP サーバーがデプロイされています。このサーバーは、架空の動物園に登場する動物データを LLM に提供します。ラボの目標は、Python アプリケーションを使用して、架空の動物園のツアーガイド エージェントを構築することです。このエージェントは MCP サーバーを通じて動物園の動物に関する詳細情報にアクセスし、Wikipedia の情報も使用して、優れたツアーガイド体験を実現します。

ロケットが空に打ち上げられるのを見ている動物とサファリガイドの漫画イラスト

最後に、構築したツアーガイド エージェントを Google Cloud Run にデプロイします。これにより、ローカルで実行するだけでなく、動物園のすべての来園者がアクセスできるようになります。

学習内容

このラボでは、次のタスクの実行方法について学びます。

  • ADK デプロイ用に Python プロジェクトを構造化する。
  • google-adk を使って、ツールを使用するエージェントを実装する。
  • ツールセットを利用するために、エージェントをリモートの MCP サーバーに接続する。
  • Python アプリケーションをサーバーレス コンテナとして Cloud Run にデプロイする。
  • IAM ロールを使用して、サービス間の安全な認証を構成する。
  • 今後の費用発生を防ぐために、Cloud リソースを削除する。

Cloud Run にデプロイする理由

Cloud Run はサーバーレス プラットフォームであり、ADK エージェントのホスティングに最適です。基盤となるインフラストラクチャを管理する必要がないため、開発者はコードに集中できます。運用作業は Cloud Run が行います。

ポップアップ ショップ(期間限定の店舗)のように、顧客(リクエスト)が来たときにのみオープンしてリソースを使用するというイメージです。顧客がいないときは完全に閉店します。そのため、使用していないリソースに対して料金は発生しません。

Cloud Run の主な特長

コンテナをどこでも実行可能

  • アプリを格納したコンテナ(Docker イメージ)を用意します。
  • Cloud Run は Google のインフラストラクチャ上でコンテナを実行します。
  • OS のパッチ適用、VM の設定、スケーリングなどの管理作業から解放されます。

自動スケーリング

  • アプリのユーザーが 0 人の場合 → 実行されるインスタンスも 0 となり、アイドル状態のときは料金は発生しません。
  • リクエスト数が 1,000 件になった場合 → 必要に応じてコピーがスピンアップされます。

デフォルトでステートレス

  • 各リクエストは異なるインスタンスに振り分けられる場合があります。
  • ステートを保存する必要がある場合は、Cloud SQL、Firestore、Redis などの外部サービスを使用します。

あらゆる言語やフレームワークをサポート

  • Cloud Run では、Linux コンテナで実行可能であれば、Python、Go、Node.js、Java、.Net など、あらゆる言語やフレームワークを利用できます。

使用した分だけのお支払い

  • リクエスト数とコンピューティング時間(100 ミリ秒単位)に基づいて課金されます。
  • 従来の VM のように、アイドル状態のリソースに対して料金を支払う必要はありません。

設定と要件

[ラボを開始] ボタンをクリックする前に

こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。

このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。

このラボを完了するためには、下記が必要です。

  • 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モード(推奨)またはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生しないようにすることができます。
  • ラボを完了するための時間(開始後は一時停止できません)
注: このラボでは、受講者アカウントのみを使用してください。別の Google Cloud アカウントを使用すると、そのアカウントに料金が発生する可能性があります。

Cloud Shell をアクティブにする

Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。

  1. Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン 「Cloud Shell をアクティブにする」アイコン をクリックします。

  2. ウィンドウで次の操作を行います。

    • Cloud Shell 情報ウィンドウで操作を進めます。
    • Cloud Shell が認証情報を使用して Google Cloud API を呼び出すことを承認します。

接続した時点で認証が完了しており、プロジェクトに各自の Project_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。

Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。

  1. (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
  1. [承認] をクリックします。

出力:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project

出力:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 注: Google Cloud における gcloud ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。

タスク 1. ADK をダウンロードしてインストールし、プロジェクト フォルダを作成する

このタスクでは、関連する API を有効にします。さらに、Python プロジェクトをデプロイするために、ソースコードを保存するプロジェクト フォルダを作成します。

API を有効にして環境変数を設定する

  1. Cloud Shell で [エディタを開く] をクリックし、ホーム ディレクトリで Cloud Shell エディタを開きます。
  2. Cloud Shell エディタのアクションバーで、[表示] > [ターミナル] をクリックします。
注: [表示] メニュー オプションが表示されていない場合は、ブラウザ ウィンドウを広げる必要があります。

このラボの後半では、このウィンドウを Cloud Shell エディタ(上)と Cloud Shell ターミナル(下)を備えた IDE として使用します。

画面の右側に表示される追加のチュートリアルや Gemini のパネルを閉じると、コードエディタのウィンドウをより広く使用できます。

  1. ターミナルで次のコマンドを入力してプロジェクトを設定します。

    gcloud config set project {{{project_0.project_id | filled in at lab start}}}

想定される出力: 更新されたプロパティを確認する出力メッセージが表示されます。

注: Cloud Shell がタイムアウトまたは再起動した場合は、プロジェクトを再度設定する必要があります。
  1. 次のコマンドを実行して、必要なサービスをすべて有効にします。

    gcloud services enable \ run.googleapis.com \ artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ aiplatform.googleapis.com \ compute.googleapis.com

想定される出力: オペレーションが成功したことを確認する出力メッセージが表示されます。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 API を有効にする

プロジェクト ディレクトリを作成する

  1. 次のコマンドを実行して、エージェントのソースコード用に、ラボで使用するメインフォルダを作成します。

    mkdir zoo_guide_agent && cd zoo_guide_agent

これで、requirements.txt ファイルを作成する準備が整いました。このファイルには、動物園エージェントに必要な Python ライブラリの一覧を記述します。

  1. 次のコマンドを実行して zoo_guide_agent ディレクトリ内にファイルを作成し、Cloud Shell エディタで編集できるように開きます。

    cloudshell edit requirements.txt
  2. requirements.txt ファイルに次の内容を追加し、Ctrl+S キーを押して変更を保存します。

    google-adk==1.28.0 langchain==1.2.14 langchain-community==0.4.1 wikipedia
  3. ターミナルで次のコマンドを実行して、Python パッケージをインストールし、PATH を更新します。

    export PATH=$PATH:~/.local/bin pip3 install -r requirements.txt --user
  4. 次のコマンドを実行して、現在のプロジェクト、リージョン、ユーザー用に変数を設定します。

    export PROJECT_ID=$(gcloud config get-value project) export REGION=$(gcloud compute project-info describe \ --format="value(commonInstanceMetadata.items[google-compute-default-region])") export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)") export SERVICE_ACCOUNT="${PROJECT_NUMBER}-compute@developer.gserviceaccount.com"
注: Cloud Shell がタイムアウトまたは再起動した場合は、上記の変数を再初期化する必要があります。
  1. 次のコマンドを実行して、zoo_guide_agent ディレクトリ内に、エージェントを認証するための .env ファイルを作成して開きます。

    cloudshell edit .env

Cloud Shell エディタで、.env ファイルを含むディレクトリが開きます。

  1. .env ファイルに次のコードを追加し、変更を保存します。

    MODEL="{{{ project_0.startup_script.gemini_flash_model_id | filled in at lab start }}}" SERVICE_ACCOUNT="${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" GOOGLE_GENAI_USE_ENTERPRISE=true GOOGLE_CLOUD_LOCATION=global

セキュアな MCP サーバーのエンドポイントに接続する

このセクションでは、リモート MCP サーバーへの接続を確立します。

  1. Cloud Shell ターミナルに戻り、次のコマンドを実行して、Cloud Run サービス ID にリモート MCP サーバーを呼び出す権限を付与します。

    gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$SERVICE_ACCOUNT" \ --role="roles/run.invoker"
  2. 次のコマンドを実行して、MCP サーバーの URL を環境変数に保存します。

    echo -e "\nMCP_SERVER_URL=https://zoo-mcp-server-${PROJECT_NUMBER}.${REGION}.run.app/mcp/" >> .env
  3. 次に、以下のコマンドを実行して __init__.py ファイルを作成します。このファイルは、zoo_guide_agent ディレクトリがパッケージであることを Python に認識させます。

    cloudshell edit __init__.py
  4. 開いた Cloud Shell エディタで、__init__.py に次のコードを追加し、変更を保存します。

    from . import agent

タスク 2. エージェントのワークフローを作成する

このタスクでは、動物園ツアーガイド エージェントのワークフローを構成します。まず、初期設定に必要なライブラリをインポートします。次に、動物園エージェントの機能(使用するツール)と、専門エージェントを定義します。さらにワークフロー エージェントを定義し、最後にメインのワークフローを組み立てます。

メインの agent.py ファイルを作成する

  • Cloud Shell ターミナルに戻り、次のコマンドを実行してメインの agent.py ファイルを作成します。作成したファイルは Cloud Shell エディタで開かれるので、次のステップでマルチエージェント システムの完全なコードを貼り付けます。

    cloudshell edit agent.py

ライブラリをインポートして初期設定を行う

最初のブロックでは、ADK と Google Cloud から必要なライブラリをすべて取り込みます。また、ロギングを設定し、.env ファイルから環境変数を読み込みます。これは、モデルやサーバーの URL にアクセスするために必要です。

  • 次のコードを agent.py ファイルに追加します。

    import os import sys import logging import google.cloud.logging from dotenv import load_dotenv # Add current directory for workspace utilities sys.path.append(os.path.dirname(os.path.abspath(__file__))) from google.adk import Agent from google.adk.agents import SequentialAgent from google.adk.tools.mcp_tool.mcp_toolset import MCPToolset, StreamableHTTPConnectionParams from google.adk.tools.tool_context import ToolContext from google.adk.tools.langchain_tool import LangchainTool from langchain_community.tools import WikipediaQueryRun from langchain_community.utilities import WikipediaAPIWrapper import google.auth import google.auth.transport.requests import google.oauth2.id_token # --- Setup Logging and Environment --- cloud_logging_client = google.cloud.logging.Client() cloud_logging_client.setup_logging() load_dotenv() model_name = os.getenv("MODEL")

ツールを定義する

Zoobot Adventures 動物園の入り口でクリップボードを手に持ち、来園者に笑顔で挨拶するロボットのツアーガイドのイラスト

エージェントの能力は、使用できるツールによって決まります。このセクションでは、データを保存するカスタム関数、セキュアな MCP サーバーに接続する MCP ツール、Wikipedia ツールなど、エージェントが利用できるすべての機能を定義します。

  • 次のコードを agent.py の末尾に追加します。

    # Greet user and save their prompt def add_prompt_to_state( tool_context: ToolContext, prompt: str ) -> dict[str, str]: """Saves the user's initial prompt to the state.""" tool_context.state["PROMPT"] = prompt logging.info(f"[State updated] Added to PROMPT: {prompt}") return {"status": "success"} # Configuring the MCP Tool to connect to the Zoo MCP server mcp_server_url = os.getenv("MCP_SERVER_URL") if not mcp_server_url: raise ValueError("The environment variable MCP_SERVER_URL is not set.") def get_id_token(): """Get an ID token to authenticate with the MCP server.""" target_url = os.getenv("MCP_SERVER_URL") audience = target_url.split('/mcp/')[0] request = google.auth.transport.requests.Request() id_token = google.oauth2.id_token.fetch_id_token(request, audience) return id_token """ ## Use this code if you are using the public MCP Server and comment out the code below defining mcp_tools mcp_tools = MCPToolset( connection_params=StreamableHTTPConnectionParams( url=mcp_server_url ) ) """ mcp_tools = MCPToolset( connection_params=StreamableHTTPConnectionParams( url=mcp_server_url, headers={ "Authorization": f"Bearer {get_id_token()}", }, ), ) # Configuring the Wikipedia Tool wikipedia_tool = LangchainTool( tool=WikipediaQueryRun(api_wrapper=WikipediaAPIWrapper()) )

3 つのツールについて

  • add_prompt_to_state: 📝 このツールは、動物園の来園者からの質問内容を記憶します。たとえば、来園者が「ライオンはどこにいますか?」と尋ねると、その具体的な質問がエージェントのメモリに保存され、ワークフロー内の他のエージェントが次に調査すべきことを判断できるようになります。

    仕組み: このツールは Python 関数として実装されており、訪問者のプロンプトを共有の tool_context.state ディクショナリに書き込みます。このツールのコンテキストは、1 回の会話におけるエージェントの短期記憶を表します。あるエージェントが State に保存したデータは、ワークフロー内の次のエージェントで読み取ることができます。

  • MCPToolset: 🦁 このツールセットは、ツアーガイド エージェントを、ラボで事前にデプロイされた動物園の MCP サーバーに接続するために使用されます。このサーバーには、動物園の動物に関する具体的な情報(名前、年齢、飼育施設など)を検索できる専用のツールが用意されています。

    仕組み: このツールセットは、動物園のプライベート サーバーの URL に安全に接続します。さらに、get_id_token を使用してセキュアな「キーカード」(サービス アカウントの ID トークン)を自動的に取得し、そのトークンを使って身元を証明してアクセス権を取得します。

  • LangchainTool: 🌍 このツールは、ツアーガイド エージェントに世界の一般的な知識を提供します。たとえば、来園者が「野生のライオンは何を食べるの?」など、動物園のデータベースに含まれない質問をした場合、エージェントはこのツールを使用して Wikipedia で回答を検索できます。

    仕組み: このツールはアダプタとして機能し、エージェントが LangChain ライブラリの事前構築済み WikipediaQueryRun ツールを使用できるようにします。

関連情報:

専門エージェントを定義する

MCP Zoo サーバーと Wikipedia のコンテンツが表示された大きなモニターが置かれたパソコンデスクに座っているロボットのイラスト

このセクションでは、2 つの専門エージェント(リサーチャー エージェントと回答フォーマッタ エージェント)を定義します。リサーチャー エージェントは、オペレーション全体の「頭脳」として機能します。このエージェントは、共有された State からユーザーのプロンプトを受け取り、利用可能な強力なツール(動物園の MCP サーバーツールと Wikipedia ツール)のうち、どちらを使って回答を検索するかを判断します。

回答フォーマッタ エージェントは情報の提示を担当します。このエージェントは、新しい情報を検索するツールは使用せず、リサーチャー エージェントが収集した元データを State から取得します。そのデータを LLM の言語能力で整形し、フレンドリーな会話形式の回答へと変換します。

  • 次のコードを agent.py の末尾に追加します。

    # 1. Researcher Agent comprehensive_researcher = Agent( name="comprehensive_researcher", model=model_name, description="The primary researcher that can access both internal zoo data and external knowledge from Wikipedia.", instruction=""" You are a helpful research assistant. Your goal is to fully answer the user's PROMPT. You have access to two tools: 1. A tool for getting specific data about animals AT OUR ZOO (names, ages, locations). 2. A tool for searching Wikipedia for general knowledge (facts, lifespan, diet, habitat). First, analyze the user's PROMPT. - If the prompt can be answered by only one tool, use that tool. - If the prompt is complex and requires information from both the zoo's database AND Wikipedia, you MUST use both tools to gather all necessary information. - Synthesize the results from the tool(s) you use into preliminary data outputs. PROMPT: {{ PROMPT }} """, tools=[ mcp_tools, wikipedia_tool ], output_key="research_data" # A key to store the combined findings ) # 2. Response Formatter Agent response_formatter = Agent( name="response_formatter", model=model_name, description="Synthesizes all information into a friendly, readable response.", instruction=""" You are the friendly voice of the Zoo Tour Guide. Your task is to take the RESEARCH_DATA and present it to the user in a complete and helpful answer. - First, present the specific information from the zoo (like names, ages, and where to find them). - Then, add the interesting general facts from the research. - If some information is missing, just present the information you have. - Be conversational and engaging. RESEARCH_DATA: {{ research_data }} """ )

ワークフロー エージェントを定義する

ワークフロー エージェントは、動物園ツアー全体の「バックオフィス」を管理するマネージャーとして機能します。リサーチ リクエストを受け取り、ステップ 3 で定義した 2 つのエージェントが、必ず正しい順序(最初にリサーチ、次に整形)でジョブを実行できるように調整します。これにより、動物園の来園者の質問に一貫して回答できる、予測可能で信頼性の高いプロセスが作成されます。

仕組み: このエージェントは SequentialAgent として動作し、自身で推論を行わない特別なタイプのエージェントです。唯一の役割は、sub_agents(リサーチャー エージェントと回答フォーマッタ エージェント)のリストを、あらかじめ定められた順序で実行することです。実行時には、共有メモリを自動的に受け渡しながら処理を進めます。

  • 次のコードブロックを agent.py の末尾に追加します。

    tour_guide_workflow = SequentialAgent( name="tour_guide_workflow", description="The main workflow for handling a user's request about an animal.", sub_agents=[ comprehensive_researcher, # Step 1: Gather all data response_formatter, # Step 2: Format the final response ] )

メインのワークフローを組み立てる

3 体のロボットの図: Greeter-Bot がクエリを Researcher-Bot に渡し、Researcher-Bot が分析データを Presenter-Bot に渡す

メインのワークフローは root_agent によって指定されます。ADK フレームワークでは、この root_agent がすべての新規会話の開始点になります。このエージェントは、主にプロセス全体をオーケストレートする役割を担い、初期コントローラとして会話の最初のターンを管理します。

  • 次のコードブロックを agent.py の末尾に追加し、変更を保存します。

    root_agent = Agent( name="greeter", model=model_name, description="The main entry point for the Zoo Tour Guide.", instruction=""" - Let the user know you will help them learn about the animals we have in the zoo. - When the user responds, use the 'add_prompt_to_state' tool to save their response. After using the tool, transfer control to the 'tour_guide_workflow' agent. """, tools=[add_prompt_to_state], sub_agents=[tour_guide_workflow] )

これで agent.py ファイルが完成しました。

このように構築することで、各コンポーネント(ツール、ワーカー エージェント、マネージャー エージェント)が、最終的なインテリジェント システムの中で、それぞれ明確な役割を担っていることがわかります。それでは、デプロイに進みましょう。

タスク 3. デプロイに向けてアプリケーションを準備する

ローカル環境の準備が整ったら、動物園ツアーガイド エージェントをデプロイするために Google Cloud プロジェクトを準備します。

このステップでは、エージェントのファイル構造の最終チェックを行い、デプロイ コマンドに対応していることを確認します。さらに、デプロイされた Cloud Run サービスがユーザーに代わって Agent Platform モデルを呼び出すために必須の IAM 権限を構成します。これらの手順を完了すると、クラウド環境でエージェントを正常に実行できるようになります。

  1. Cloud Shell ターミナルに戻り、次のコマンドを実行して、変数をシェル セッションに読み込みます。

    source .env
  2. 次のコマンドを実行して、サービス アカウントに Agent Platform ユーザーロールを付与します。これにより、予測を行う権限と Google のモデルを呼び出す権限が、サービス アカウントに付与されます。

    # Grant the "Agent Platform User" role to your service account gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$SERVICE_ACCOUNT" \ --role="roles/aiplatform.user"

タスク 4. ADK CLI を使用してエージェントをデプロイする

ローカルコードの準備が整い、Google Cloud プロジェクトも用意できたので、次はエージェントをデプロイします。

このタスクでは adk deploy cloud_run コマンドを使用します。このコマンドは、デプロイ ワークフロー全体を自動化する便利なツールです。このコマンドを 1 回実行するだけで、コードのパッケージ化、コンテナ イメージのビルド、Artifact Registry への push、Cloud Run でのサービスの起動までがすべて行われ、ウェブからアクセスできる状態になります。

エージェントをデプロイする

  1. 次のコマンドを実行して、エージェントをデプロイします。

    # Run the deployment command adk deploy cloud_run \ --project=$PROJECT_ID \ --region=$REGION \ --service_name=zoo-tour-guide \ --with_ui \ .
  2. 続行するかどうか、または [zoo-tour-guide] への未認証の呼び出しを許可するかどうかを尋ねられた場合は、「Y」と入力して Enter キーを押してください。

注: このデプロイ コマンドは、実行が完了するまでに 5~10 分かかることがあります。
  1. 次のコマンドを実行して、既存の Cloud Run サービスの構成設定を変更します。

    gcloud run services update zoo-tour-guide \ --region=$REGION \ --update-labels=dev-tutorial=codelab-adk \ --set-env-vars="MODEL=$MODEL,MCP_SERVER_URL=$MCP_SERVER_URL,GOOGLE_CLOUD_LOCATION=global"

デプロイリンクを取得する

  • エージェントが Cloud Run に正常にデプロイされると、サービス URL が出力されます。この URL を使用して、新しいブラウザタブで開くことができます。

    次のような形式で表示されます。 サービス URL の出力:

    https://zoo-tour-guide-{{{project_0.startup_script.project_number | filled in at lab start}}}.{{{project_0.default_region | filled in at lab start}}}.run.app

Cloud Run にデプロイする際に --with_ui フラグを使用しているため、ADK のデベロッパー UI が表示されます。

注: この URL を知っている人は誰でもエージェントにアクセスできるため、この方法はテスト目的でのみ使用することをおすすめします。 注: デプロイが成功した後、アクティビティ トラッキングのチェックが完了するまでに数分かかることがあります。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 エージェントをデプロイする

タスク 5. デプロイしたエージェントをテストする

エージェントが Cloud Run で稼働するようになったので、このタスクではデプロイが成功したことと、エージェントが想定どおりに動作していることを確認するテストを行います。ADK のウェブ インターフェースにアクセスしてエージェントとやり取りするには、公開サービス URL を使用する必要があります。

  1. 前のタスクで出力された公開 Cloud Run サービス URL をウェブブラウザで開くか、Ctrl キーを押しながら出力に表示された URL をクリックします(新しいブラウザタブで開きます)。これにより、ADK のデベロッパー UI が開きます。

    Cloud Shell で外部ウェブサイトを開くかどうかを確認する通知が表示されたら、[開く] をクリックして確定します。

  2. ADK ツールバーの右上にある [トークンのストリーミング] を [オン] に切り替えます。

これで、動物園エージェントとやり取りできるようになりました。

  1. プロンプト ボックスに次のプロンプトを入力して Enter キーを押すと、新しい会話を開始します。
Hello

結果を確認します。エージェントは、次のような標準の挨拶をすぐに返してきます。

"Hello! I'm your Zoo Tour Guide. I can help you learn about the amazing animals we have here. What would you like to know or explore today?"
  1. 動物園ガイド エージェントと対話します。次のプロンプトを入力して、会話を再開します。
Where are the penguins located?

エージェントからは、次のような回答が返されます。

Zoo Bot との会話とツールの実行状況を示すチャット インターフェースのスクリーンショット

  1. エージェントが異なるツール(MCP と Wikipedia)をどのように使い分け、情報を組み合わせているのかを確認するには、次の追加のプロンプトを試してください。

一般知識をテストする(Wikipedia のみ):

What is the average lifespan of a penguin in the wild?

内部データと外部データを組み合わせてテストする:

What species are the penguins in our zoo, and what do they typically eat in the wild?

ライオンについて(両方のツールを再度テスト):

Where are the lions and what do they eat in the wild?

ホッキョクグマについて(動物園にいない可能性のある動物のテスト):

Do we have polar bears in this zoo?

エージェントのフローの説明

システムはインテリジェントなマルチエージェントのチームとして機能します。このプロセスは明確な順序で管理されているため、ユーザーの質問から最終的な詳細回答に至るまでのフローは、スムーズかつ効率的です。

1. 動物園の案内係(ウェルカム デスク)

プロセス全体は、案内係エージェントから始まります。

役割: 会話を始めることです。ユーザーに挨拶し、どの動物について知りたいかを尋ねるように指示されています。

ツール: ユーザーが応答すると、案内係は add_prompt_to_state ツールを使用して、ユーザーの発言(例: 「ライオンについて教えて」)をそのままキャプチャし、システムメモリに保存します。

引き継ぎ: プロンプトの保存後は直ちに、サブエージェントである tour_guide_workflow に制御が移ります。

2. 包括的リサーチャー(スーパー リサーチャー)

メイン ワークフローの最初のステップであり、オペレーション全体の「頭脳」として機能します。大規模なチームではなく、利用可能なすべての情報にアクセスできる、高いスキルを持つエージェントが 1 人いるイメージです。

役割: ユーザーの質問を分析し、インテリジェントな計画を立てます。言語モデルが持つツールを使用する高度な能力を活用して、次のどの情報源を使うべきかを判断します。

  • 動物園の記録からの内部データ(MCP サーバー経由)。
  • ウェブからの一般的な知識(Wikipedia API 経由)。
  • 複雑な質問の場合はその両方。

動作: 必要なツールを実行して、回答に必要な元データをすべて収集します。たとえば、ユーザーが「ライオンは何歳で、野生では何を食べているの?」と尋ねた場合、年齢の情報は MCP サーバーから取得し、食事に関する情報は Wikipedia ツールから取得します。

3. 回答フォーマッタ(プレゼンター)

包括的リサーチャーがすべての情報を収集した後、最後に実行されるエージェントです。

役割: 動物園ツアーガイドのフレンドリーな声として機能します。1 つまたは両方の情報源から収集した元データを取り込み、推敲します。

動作: すべての情報を統合し、一貫性があり、わかりやすく魅力的な回答へと仕上げます。指示に従い、まず動物園に固有の情報を提示し、次に興味深い一般的な事実を追加します。

最終結果: このエージェントによって生成されたテキストが、ユーザーのチャット ウィンドウに表示される、完全で詳細な回答となります。

タスク 6. 環境をクリーンアップする

このタスクでは、今後の費用発生を防ぐために、このラボで作成した Cloud リソースを削除します。

  • Cloud Shell ターミナルのタブに戻り、次のコマンドを実行します。

    gcloud run services delete zoo-tour-guide --region=$REGION --quiet gcloud artifacts repositories delete cloud-run-source-deploy --location=$REGION --quiet

次のステップと詳細情報

エージェントの構築について詳しくは、以下のリソースをご覧ください。

お疲れさまでした

このラボでは、ADK コマンドライン インターフェースを使用して、デプロイに向けた Python プロジェクトの構造化方法を学び、マルチエージェント ワークフローを実装しました。さらに、リモート MCP サーバーに接続してそのツールを利用し、Wikipedia API などの外部ツールを統合することで、内部データを拡張しました。最後に、エージェントをサーバーレス コンテナとして Cloud Run にデプロイしました。

マニュアルの最終更新日: 2026 年 7 月 21 日

ラボの最終テスト日: 2026 年 7 月 21 日

Copyright 2026 Google LLC. All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。

始める前に

  1. ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
  2. ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
  3. 画面左上の [ラボを開始] をクリックして開始します

シークレット ブラウジングを使用する

  1. ラボで使用するユーザー名パスワードをコピーします
  2. プライベート モードで [コンソールを開く] をクリックします

コンソールにログインする

    ラボの認証情報を使用して
  1. ログインします。他の認証情報を使用すると、エラーが発生したり、料金が発生したりする可能性があります。
  2. 利用規約に同意し、再設定用のリソースページをスキップします
  3. ラボを終了する場合や最初からやり直す場合を除き、[ラボを終了] はクリックしないでください。クリックすると、作業内容がクリアされ、プロジェクトが削除されます

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします

1 回に 1 つのラボ

既存のラボをすべて終了して、このラボを開始することを確認してください

シークレット ブラウジングを使用してラボを実行する

このラボを実行するには、シークレット モードまたはシークレット ブラウジング ウィンドウを使用することをおすすめします。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。