ラボの設定手順と要件
アカウントと進行状況を保護します。このラボを実行するには、常にシークレット ブラウジング ウィンドウとラボの認証情報を使用してください。

AI エージェントを構築し、Cloud Run で MCP サーバーを構成する

ラボ 1時間 30分 universal_currency_alt クレジット: 3 show_chart 入門
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
このコンテンツはまだモバイル デバイス向けに最適化されていません。
快適にご利用いただくには、メールで送信されたリンクを使用して、デスクトップ パソコンでアクセスしてください。

GSP1350

Google Cloud セルフペース ラボのロゴ

概要

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

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

f8d4423edbfe993d.png

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

前提条件

  • Cloud Run で実行中の MCP サーバー、またはその関連サービスの URL。
  • 課金が有効になっている Google Cloud プロジェクト。

学習内容

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

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

必要なもの

  • Google Cloud アカウントと Google Cloud プロジェクト
  • ウェブブラウザ(Chrome など)

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
  2. 続いて、次のコマンドを実行して仮想環境を作成します。

    uv venv
  3. 次のコマンドを実行して、仮想環境を有効にします。

    source .venv/bin/activate

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

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

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

    google-adk==1.12.0 langchain-community wikipedia
  3. ターミナルで次のコマンドを実行して、パッケージ マネージャー uv を使って Python パッケージをインストールします。

    uv pip install -r requirements.txt
  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"

セキュアな 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 パッケージであることを 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

ステップ 1: ライブラリをインポートして初期設定を行う

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

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

    import os import logging import google.cloud.logging from dotenv import load_dotenv 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")

ステップ 2: ツール(エージェントの機能)を定義する

3eb9c6772576b906.jpeg

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

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

    # ユーザーに挨拶し、プロンプトを保存する def add_prompt_to_state( tool_context: ToolContext, prompt: str ) -> dict[str, str]: """ユーザーの最初のプロンプトを State に保存します。""" tool_context.state["PROMPT"] = prompt logging.info(f"[State updated] Added to PROMPT: {prompt}") return {"status": "success"} # 動物園 MCP サーバーに接続するために MCP ツールを構成する mcp_server_url = os.getenv("MCP_SERVER_URL") if not mcp_server_url: raise ValueError("環境変数 MCP_SERVER_URL が設定されていません。") def get_id_token(): """MCP サーバーで認証するための ID トークンを取得します。""" 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 """ # 公開 MCP サーバーを利用する場合はこのコードを使用し、下にある 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()}", }, ), ) # Wikipedia ツールを構成する wikipedia_tool = LangchainTool( tool=WikipediaQueryRun(api_wrapper=WikipediaAPIWrapper()) )

3 つのツールについて

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

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

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

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

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

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

関連情報:

ステップ 3: 専門エージェントを定義する

b8a9504b21920969.jpeg

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

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

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

    # 1. リサーチャー エージェント comprehensive_researcher = Agent( name="comprehensive_researcher", model=model_name, description="動物園の内部データと Wikipedia からの外部ナレッジの両方にアクセスできる一次リサーチを担当するエージェントです。", instruction=""" あなたは有能なリサーチ アシスタントとして振る舞います。ユーザーのプロンプトに完全に回答することが目標です。 次の 2 つのツールを利用できます。 1. 動物園にいる動物に関する具体的なデータ(名前、年齢、場所)を取得するツール。 2. 一般的な知識(事実、寿命、食生活、生息地)を Wikipedia で検索するツール。 まず、ユーザーのプロンプトを分析します。 - 1 つのツールのみでプロンプトに回答できる場合は、そのツールを使用します。 - プロンプトが複雑で、動物園のデータベースと Wikipedia の両方の情報が必要な場合は、 両方のツールを使用して必要な情報をすべて収集します。 - 使用したツールから得られた結果を統合して、暫定的なデータ出力を生成します。 プロンプト: {{ PROMPT }} """, tools=[ mcp_tools, wikipedia_tool ], output_key="research_data" # 組み合わせた検索結果を保存するための鍵 ) # 2. Response Formatter Agent response_formatter = Agent( name="response_formatter", model=model_name, description="すべての情報を統合して、フレンドリーでわかりやすい回答にします。", instruction=""" あなたはフレンドリーな声の動物園ツアーガイドとして振る舞います。あなたのタスクは、リサーチデータを取得し、完全で役立つ回答をユーザーに提示することです。 - まず、動物園の具体的な情報(名前、年齢、どこにいるかなど)を提示します。 - 次に、調査から得られた興味深い一般的な事実を追加します。 - 情報が不足している場合は、得られている情報のみを提示してください。 - 会話調で、来園者の興味を引くような回答にしてください。 リサーチデータ: {{ research_data }} """ )

ステップ 4: ワークフロー エージェントを定義する

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

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

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

    tour_guide_workflow = SequentialAgent( name="tour_guide_workflow", description="動物に関するユーザーのリクエストを処理するメインのワークフロー。", sub_agents=[ comprehensive_researcher, # ステップ 1: すべてのデータを収集する response_formatter, # ステップ 2: 最終的な回答を整形する ] )

ステップ 5: メインのワークフローを組み立てる

1000b9d20f4e134b.jpeg

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

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

    root_agent = Agent( name="greeter", model=model_name, description="動物園ツアーガイドのメインのエントリ ポイント。", instruction=""" - ユーザーに対して、動物園の動物について質問すると案内できると伝えてください。 - ユーザーが応答したら、その内容を「add_prompt_to_state」ツールを使用して保存します。 ツールを使用した後は、「tour_guide_workflow」エージェントに制御を移行します。 """, tools=[add_prompt_to_state], sub_agents=[tour_guide_workflow] )

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

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

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

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

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

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

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

    # サービス アカウントに「Vertex AI ユーザー」ロールを付与する 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. 次のコマンドを実行して、エージェントをデプロイします。

    # デプロイ コマンドを実行する 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

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

  • エージェントが Cloud Run に正常にデプロイされたら、Ctrl キーを押しながら出力内に表示されるサービス 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 をウェブブラウザで開くか、出力に表示された URL をクリックします(新しいブラウザタブで開きます)。ADK のデベロッパー UI が開きます。

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

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

  1. プロンプト ボックスに「hello」と入力して Enter キーを押すと、新しい会話が始まります。

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

    "こんにちは。私は動物園のツアーガイドです。この動物園にいる素晴らしい動物たちについてご案内します。知りたいことがあれば、何でも聞いてください。"
  2. 動物園ガイド エージェントと対話します。次のクエリを入力して、新しい会話を開始してください。

    ペンギンはどこにいる?

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

    3244d2f6c3b03088.png e135694253b1be41.png

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

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

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 にデプロイしました。

マニュアルの最終更新日: 2025 年 10 月 13 日

ラボの最終テスト日: 2025 年 10 月 13 日

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

始める前に

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

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

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

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

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

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

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

ありがとうございます。

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

1 回に 1 つのラボ

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

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

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