ADK でマルチエージェント システムを作成し、Agent Engine にデプロイして、A2A プロトコルを使用する

1. このラボの目的

このハンズオン ラボでは、ADK(Agent Development Kit) を使用して、プロンプトに基づいて画像を生成し、プロンプトに対して評価するマルチエージェント アプリケーションを構築します。画像がプロンプトに記載されている要件を十分に満たしていない場合、エージェントは要件を満たす画像が生成されるまで画像を生成し続けます。このハンズオンの各エージェントには単一の目的があり、エージェントは互いに協力して全体的な目標を達成します。アプリケーションをローカルでテストし、Vertex AI Agent Engine にデプロイする方法を学習します。

学習内容

2. プロジェクトの設定

  • 使用できるプロジェクトがまだない場合は、GCP コンソールで新しいプロジェクトを作成する必要があります。
  • このラボでは、GCP Cloud Shell を使用してタスクを実行します。Cloud Shell を開き、Cloud Shell を使用してプロジェクトを設定します。
  • Cloud Shell をクリックして、GCP Cloud Shell を開きます。[シェルを承認] ポップアップが表示されたら、クリックして Cloud Shell エディタを承認します。
  • プロジェクトがすでに認証されているかどうかは、Cloud Shell ターミナルで次のコマンドを使用して確認できます。
gcloud auth list
  • Cloud Shell で次のコマンドを実行して、プロジェクトを確認します。
gcloud config list project
  • プロジェクト ID をコピーし、次のコマンドを使用して設定します。
gcloud config set project <YOUR_PROJECT_ID>
  • プロジェクト ID がわからない場合は、次のコマンドを使用してすべてのプロジェクト ID を一覧表示できます。
gcloud projects list

3. API を有効にする

このラボを実行するには、いくつかの API サービスを有効にする必要があります。Cloud Shell で次のコマンドを実行します。

gcloud services enable aiplatform.googleapis.com
gcloud services enable cloudresourcemanager.googleapis.com

API の概要

  • Vertex AI API(aiplatform.googleapis.com)を使用すると、Vertex AI プラットフォームにアクセスできます。これにより、アプリケーションはテキスト生成、チャット セッション、関数呼び出しのために Gemini モデルを操作できます。
  • Cloud Resource Manager API(cloudresourcemanager.googleapis.com)を使用すると、プロジェクト ID や名前など、Google Cloud プロジェクトのメタデータをプログラムで管理できます。これは、プロジェクトの ID と権限を確認するために他のツールや SDK で必要になることがよくあります。

4. Agent Development Kit の概要

Agent Development Kit には、エージェント アプリケーションを構築するデベロッパーにとって、次のような重要なメリットがあります。

  1. マルチエージェント システム: 階層構造で複数の専門エージェントを構成して、モジュール型のスケーラブルなアプリケーションを構築します。複雑な調整と委任が可能です。
  2. 充実したツール エコシステム: エージェントに、多様な機能を装備させることができます。たとえば、事前構築済みのツール(検索、コード実行など)の使用、カスタム関数の作成、サードパーティのエージェント フレームワーク(LangChain、CrewAI)のツールの統合、他のエージェントのツールとしての使用などです。
  3. 柔軟なオーケストレーション: ワークフロー エージェント(SequentialAgentParallelAgentLoopAgent)を使用して、予測可能なパイプラインのワークフローを定義します。また、LLM による動的ルーティング(LlmAgent 転送)を活用して適応性のある動作を実現します。
  4. 統合されたデベロッパー エクスペリエンス: 強力な CLI とインタラクティブな開発 UI を使用して、ローカルで開発、テスト、デバッグを行います。イベント、状態、エージェントの実行をステップごとに検証します。
  5. 組み込みの評価: 最終的な回答の質と、定義済みのテストケースに対する段階的な実行軌跡の両方を評価することで、エージェントのパフォーマンスを体系的に測定します。
  6. デプロイの準備: エージェントをコンテナ化してどこにでもデプロイできます。ローカルでの実行、Vertex AI Agent Engine でのスケーリング、Cloud Run や Docker を使用したカスタム インフラストラクチャへの統合が可能です。

他の生成 AI SDK やエージェント フレームワークでも、モデルのクエリやツールによるモデルの強化は可能ですが、複数のモデル間の動的な調整には、開発者によるかなりの作業が必要になります。

Agent Development Kit は、これらのツールよりも高レベルのフレームワークを提供します。これにより、複数のエージェントを簡単に連携させて、複雑ながらも保守が容易なワークフローを実現できます。

e97ad3e26ceb7a2f.png

図 1: ADK(Agent Development Kit)の位置付け

5. Vertex AI Agent Engine の概要

Vertex AI Agent Engine は、Google Cloud にエージェントをデプロイするためのフルマネージド サービスです。Vertex AI Agent Engine を使用すると、デベロッパーは Vertex AI で OSS AI エージェント(ADK(Agent Development Kit) 、LangChain、LangGraph、CrewAI、AutoGen など)の開発、カスタマイズ、デプロイ、サービング、管理を行うことができます。

Agent Engine は、エージェント メモリとも呼ばれるユーザーデータを処理するサービスも提供します。現在、2 種類のメモリ サービスを利用できます。

  • 短期記憶: Agent Engine Sessions を使用すると、単一のセッション内の進行中の会話履歴(状態)を短期記憶として保存、管理、取得できます。
  • 長期記憶: Agent Engine Memory Bank を使用して、特に複数のセッションにわたって、メモリ(状態)を長期記憶として保存、変換、取得します。

エージェントは、Cloud Run や GKE などの他の Google Cloud サービスにもデプロイできますが、次のユースケースでは Vertex AI Agent Engine の使用を検討する必要があります。

  • ステートフル マネージド ランタイム: エージェントのデプロイにステートフルなフルマネージド ランタイムが必要な場合は、Vertex AI Agent Engine が適しています。これは、セッション管理や AI エージェントの永続性などの一般的なタスクを抽象化するためです。
  • コード実行: ユーザー セッション中に動的に生成されたコードをエージェントが実行する必要がある場合、Agent Engine はコードを実行できる安全なサンドボックスを提供します。
  • 柔軟な長期記憶: エージェントに柔軟な長期記憶が必要な場合は、Vertex AI Agent Engine で使用できる Vertex AI Memory Bank を使用すると、セッション間で利用できるユーザーに関する情報を柔軟に記憶できます。

Vertex AI Agent EngineCloud Run などの他のランタイムと組み合わせて、柔軟なアプリケーション アーキテクチャを作成することもできます。以下は、さまざまなサービスを使用してエージェントを構築するリファレンス アーキテクチャの例です。

d8eb74a6d8a055f9.png

図 2: 複数のサービスを使用してエージェントを構築するためのリファレンス アーキテクチャの例。

6. A2A の概要

Agent2Agent(A2A) プロトコルは、異なるフレームワーク、ベンダー、ドメインの自律型 AI エージェント間のシームレスで安全な通信とコラボレーションを可能にするように設計されたオープン スタンダードです。

  1. ユニバーサルな相互運用性: A2A を使用すると、基盤となるテクノロジーに関係なくエージェントが連携して動作できるため、真のマルチエージェント エコシステムが実現します。つまり、異なるプラットフォームで異なる企業が構築したエージェントが通信して連携できます。
  2. 機能の検出: エージェントは、ID、サポートされている A2A 機能、スキル、認証要件を記述した「エージェント カード」(JSON ドキュメント)を使用して、機能をアドバタイズできます。これにより、他のエージェントは特定のタスクに最適なエージェントを検出して選択できます。
  3. デフォルトで保護: セキュリティは中核となる原則です。A2A にはエンタープライズ グレードの認証メカニズムと認可メカニズムが組み込まれており、HTTPS/TLS、JWT、OIDC、API キーなどの標準を使用して、安全なインタラクションを確保し、機密データを保護します。
  4. モダリティに依存しない: このプロトコルは、テキスト、音声、動画のストリーミング、インタラクティブ フォーム、埋め込み iframe など、さまざまな通信モダリティをサポートしています。この柔軟性により、エージェントはタスクとユーザーに最適な形式で情報を交換できます。
  5. 構造化されたタスク管理: A2A は、タスクの委任、モニタリング、完了に関する明確なプロトコルを定義します。関連するタスクをグループ化し、一意のタスク ID を使用してさまざまなエージェント間で管理できます。タスクは、定義されたライフサイクル(送信済み、処理中、完了など)を移行できます。
  6. 不透明な実行: エージェントは、内部の推論プロセス、メモリ、特定のツールを他のエージェントに開示する必要がないことが重要な特徴です。呼び出し可能なサービスのみを公開し、モジュール性とプライバシーを促進します。
  7. 既存の標準に基づく: A2A は、HTTP、リアルタイム ストリーミング用のサーバー送信イベント(SSE)、構造化データ交換用の JSON-RPC などの確立されたウェブ テクノロジーを活用しているため、既存の IT インフラストラクチャとの統合が容易になります。
  8. 非同期通信: このプロトコルは、非同期通信を主な考慮事項として設計されており、柔軟なタスクの進行を容易にし、接続が永続的に維持されていない場合でも更新のプッシュ通知を可能にします。

7. エージェントのアーキテクチャ

このラボでは、仕様に従って画像を生成し、画像を評価してからユーザーに提示するマルチエージェント アプリケーションを作成します。

このシステムは、プロセス全体をオーケストレートする image_scoring というメイン エージェントで構成されています。このメイン エージェントには image_generation_scoring_agent というサブエージェントがあり、このサブエージェントには、より具体的なタスクを行うための独自のサブエージェントがあります。これにより、メインのエージェントがサブエージェントにタスクを委任する階層関係が作成されます。bfed5e21e0b66d26.png

図 3: エージェントの全体的なフロー。

すべてのエージェントのリスト

エージェント

目的

サブエージェント

image_scoring(メイン エージェント)

これは、ワークフロー全体を管理するルート エージェントです。終了条件が満たされるまで、image_generation_scoring_agentchecker_agent をループで繰り返し実行します。

image_generation_scoring_agent
checker_agent_instance

image_generation_scoring_agent(image_scoring のサブエージェント)

このエージェントは、画像の生成とスコアリングのコアロジックを担当します。このために、3 つのサブエージェントのシーケンスを実行します。

image_generation_prompt_agent
image_generation_agent
scoring_images_prompt

checker_agent_instance(image_scoring のサブエージェント)

このエージェントは、画像スコアリング プロセスを続行するか終了するかを確認します。check_tool_condition ツールを使用して終了条件を評価します。

-

checker_agent_instance(image_scoring のサブエージェント)

このエージェントは、画像生成用のプロンプトの作成に精通しています。入力テキストを受け取り、画像生成モデルに適した詳細なプロンプトを生成します。

-

image_generation_prompt_agent(image_generation_scoring_agent のサブエージェント)

このエージェントは、画像生成用のプロンプトの作成に精通しています。入力テキストを受け取り、画像生成モデルに適した詳細なプロンプトを生成します。

-

scoring_images_prompt (image_generation_scoring_agent のサブエージェント):

このエージェントは、さまざまな基準に基づいて画像を評価し、スコアを付けることに特化しています。生成された画像を受け取り、スコアを割り当てます。

-

使用したすべてのツールのリスト

ツール

説明

ユーザー エージェント

check_tool_condition

このツールは、ループ終了条件が満たされているかどうか、または最大反復回数に達したかどうかを確認します。いずれかに該当する場合、ループは停止します。

checker_agent_instance

generate_images

このツールは、Imagen 3 モデルを使用して画像を生成します。生成された画像を Google Cloud Storage バケットに保存することもできます。

image_generation_agent

get_policy

このツールは、JSON ファイルからポリシーを取得します。このポリシーは、image_generation_prompt_agent が画像生成プロンプトを作成するために使用し、scoring_images_prompt が画像をスコアリングするために使用します。

image_generation_agent

get_image

このツールは、生成されたイメージ アーティファクトを読み込んで、スコアリングできるようにします。

scoring_images_prompt

set_score

このツールは、生成された画像の合計スコアをセッション状態に設定します。

scoring_images_prompt

8. ADK をインストールして環境を設定する

このハンズオンでは、Cloud Shell を使用してタスクを実行します。

Cloud Shell エディタタブを準備する

  1. このリンクをクリックすると、Cloud Shell エディタに直接移動します。
  2. [続行] をクリックします。
  3. Cloud Shell を承認するよう求められたら、[承認] をクリックします。
  4. このラボの残りの部分では、このウィンドウを Cloud Shell エディタと Cloud Shell ターミナルを備えた IDE として使用できます。
  5. Cloud Shell エディタで [ターミナル] > [新しいターミナル] を使用して、新しいターミナルを開きます。以下のコマンドはすべてこのターミナルで実行します。

ADK とこのラボのコードサンプルをダウンロードしてインストールする

  1. 次のコマンドを実行して、必要なソースを GitHub から複製し、必要なライブラリをインストールします。Cloud Shell エディタで開いたターミナルでコマンドを実行します。
#create the project directory
mkdir ~/imagescoring
cd ~/imagescoring
#clone the code in the local directory
git clone https://github.com/haren-bh/multiagenthandson.git
  1. uv を使用して Python 環境を作成します(Cloud Shell エディタのターミナルで実行)。
#Install uv if you do not have installed yet
pip install uv

#Create the virtual environment
uv venv .adkvenv

source .adkvenv/bin/activate

#go to the project directory
cd ~/imagescoring/multiagenthandson

#install dependencies
uv pip install -r pyproject.toml
  1. Cloud Storage バケットがない場合は、Google Cloud Storage で新しいバケットを作成します。gsutil コマンドを使用してバケットを作成することもできます。Agent Engine に Google Cloud Storage へのアクセス権を付与します(Cloud Shell エディタ ターミナルで実行)。
# First, make sure your PROJECT_ID variable is set
PROJECT_ID=$(gcloud config get-value project)

# Now, create the bucket with a unique name
# We'll use the project ID to help ensure uniqueness
gsutil mb gs://${PROJECT_ID}-imagescoring-bucket

#Now lets give Agent Engine the permission to access Cloud Storage
# 1. Get the current Project ID (text) and Project Number (numeric)
PROJECT_ID=$(gcloud config get-value project)
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")

# 2. Construct the Reasoning Engine Service Account email
SA_EMAIL="service-${PROJECT_NUMBER}@gcp-sa-aiplatform-re.iam.gserviceaccount.com"
# 3. Create Agent Engine Service account if not already created
gcloud beta services identity create --service=aiplatform.googleapis.com --project=${PROJECT_NUMBER}

# 3. Grant GCS Access
gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SA_EMAIL" --role="roles/storage.objectUser" --condition=None
  1. エディタで、[View] -> [Toggle hidden files] に移動します。また、image_scoring フォルダに次の内容の .env ファイルを作成します。プロジェクト名や Cloud Storage バケットなどの必要な詳細情報を追加します(Cloud Shell エディタ ターミナルで実行)。
#go to image_scoring folder
cd ~/imagescoring/multiagenthandson/image_scoring
cat <<EOF>> .env
GOOGLE_GENAI_USE_VERTEXAI=1
GOOGLE_CLOUD_PROJECT=$(gcloud config get-value project)
GOOGLE_CLOUD_LOCATION=us-central1
GOOGLE_CLOUD_STORAGE_BUCKET=$(gcloud config get-value project)-imagescoring-bucket
GCS_BUCKET_NAME=$(gcloud config get-value project)-imagescoring-bucket
SCORE_THRESHOLD=40
IMAGEN_MODEL="imagen-3.0-generate-002"
GENAI_MODEL="gemini-2.5-flash"
EOF
  1. Cloud Shell エディタのメニューで、[File] > [Open Folder] を選択します。
  2. ポップアップ表示されたボックスで、ユーザー名の後に imagescoring/ というフォルダ情報を追加します。[OK] をクリックします。左側のエクスプローラ ペインにプロジェクトの完全な構造が表示されます。
  3. エクスプローラ サイドペインで image_scoring フォルダに移動します。agent.py ファイルをクリックして開き、エージェントの構造を確認します。このエージェントには、他のサブエージェントに接続するルート エージェントが含まれています。bb0c3b10a31e9d14.png

図 4: エクスプローラ サイド ペインから確認できるフォルダ構造。ファイルをクリックするだけで、ファイルの内容を確認できます。

  1. ターミナルの最上位ディレクトリ multiagenthandson に戻り、次のコマンドを実行してエージェントをローカルで実行します(Cloud Shell エディタ ターミナルで実行)。
#go to the directory multiagenthandson
cd ~/imagescoring/multiagenthandson
# Run the following command to run agents locally
adk web

dfda0b40b44e9230.png

図 5: ADK アプリケーションの起動

  1. ターミナルに表示された http:// URL を Ctrl キーを押しながらクリック(MacOS の場合は CMD キーを押しながらクリック)して、ADK のブラウザベースの GUI クライアントを開きます。図 5 のようになります。
  2. 左上のプルダウン メニューで image_scoring を選択します(図 5 を参照)。それでは、画像を生成してみましょう。画像は Google Cloud Storage バケットにも保存されています。以下のプロンプトまたは独自のプロンプトを試してください。
  • 夕暮れの静かな山岳風景
  • 自転車に乗る猫

c159623ad45f37cf.png

図 6: 出力例

9. Agent Engine にデプロイする

次に、エージェントを Agent Engine にデプロイします。Agent Engine は、GCP にエージェントをデプロイするためのフルマネージド サービスです。Agent Engine は ADK(Agent Development Kit)と互換性があるため、ADK(Agent Development Kit) で構築されたエージェントを Agent Engine にデプロイできます。

  1. Cloud Shell エディタのターミナルで以下の手順に進む前に、Ctrl+C を使用して ADK サーバーをシャットダウンします。
  2. poetry を使用して requirements.txt ファイルを作成します。Poetry は pyproject.toml を使用して requirements.txt ファイルを作成します。コマンドを実行したら、requirements.txt ファイルが作成されたかどうかを確認します(Cloud Shell エディタ ターミナルで実行)。
# Go to the parent folder containing pyproject.toml file
cd ~/imagescoring/multiagenthandson

# install poetry-plugin-export
uv pip install poetry-plugin-export

#Create requirements.txt file
python3 -m poetry export -f requirements.txt --output requirements.txt --without-hashes
  1. パッケージを作成します。アプリを .whl Python パッケージにバンドルする必要があります。これには poetry を使用します。コマンドを実行したら、dist フォルダが作成され、そのフォルダに .whl ファイルが含まれていることを確認します(Cloud Shell エディタのターミナルで実行)。
# Go to the parent folder containing pyproject.toml file
cd ~/imagescoring/multiagenthandson

#Create python package, to create whl file
python3 -m poetry build
  1. 次に、イメージ スコアリング エージェントを Agent Engine サービスにデプロイするスクリプトを準備します。deploy ディレクトリ内で、Cloud Shell エディタのサイドペインで deploy.py を見つけてクリックし、開きます。コンテンツを次のように確認します
import vertexai
from image_scoring.agent import root_agent
import os
import glob # To easily find the wheel file
from dotenv import load_dotenv

# Load environment variables from image_scoring/.env
env_path = os.path.join(os.path.dirname(__file__), "..", "image_scoring", ".env")
load_dotenv(env_path)

PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")
LOCATION = os.getenv("GOOGLE_CLOUD_LOCATION", "us-central1")
STAGING_BUCKET = f"gs://{os.getenv('GOOGLE_CLOUD_STORAGE_BUCKET')}"

from vertexai import agent_engines

client=vertexai.Client(
    project=PROJECT_ID,
    location=LOCATION,
)
remote_app = client.agent_engines.create(
    agent=root_agent,
    config={
        "display_name": "image-scoring",
        "staging_bucket": STAGING_BUCKET,
        "requirements": open(os.path.join(os.getcwd(), "requirements.txt")).readlines() + ["./dist/image_scoring-0.1.0-py3-none-any.whl"],
        "extra_packages": [
            "./dist/image_scoring-0.1.0-py3-none-any.whl",
        ],     "env_vars":{"GCS_BUCKET_NAME":os.getenv('GOOGLE_CLOUD_STORAGE_BUCKET')}
    }
)
print(f"DEBUG: AgentEngine attributes: {dir(remote_app)}")
try:
    print(remote_app.api_resource.name)
except AttributeError:
    print("Could not find resource_name, check DEBUG output above.")
  1. これで、デプロイ スクリプトを実行できます。まず、最上位フォルダ multiagenthandson に移動します(Cloud Shell エディタ ターミナルで実行)。
#go to multiagenthandson folder
cd ~/imagescoring/multiagenthandson

#run deploy script from the parent folder containing deploy.py
python3 -m deploy.deploy

デプロイ後、次のような画面が表示されます。57d86995465cdcda.png

図 7: 出力例

  1. デプロイしたエージェントをテストしましょう。リモートでデプロイされたエージェント エンジンをテストするには、まずターミナルのデプロイ出力からエージェントの場所をコピーします。projects/85469421903/locations/us-central1/reasoningEngines/7369674597261639680 のようになります。
    Cloud Shell エディタのサイドペインで testclient フォルダに移動し、remote_test.py をクリックして開いてから、次の行を編集します。
REASONING_ENGINE_ID = "projects/xxx/locations/us-central1/reasoningEngines/xxx"  # TODO: Change this
  1. multiagenthandson ルート ディレクトリから、Cloud Shell エディタ ターミナルで次のコマンドを実行します。出力は図 8 と一致します。
#go to multiagenthandson folder
cd ~/imagescoring/multiagenthandson

#execute remote_test.py
python3 -m testclient.remote_test

c612b8a79a7120ae.png

図 8: 出力例

10. A2A エージェントを作成する

このステップでは、前の手順で作成したエージェントに基づいて、シンプルな A2A エージェントを作成します。既存の ADK(Agent Development Kit)エージェントは、A2A プロトコルで公開できます。このステップでは、次のことを学びます。

  • A2A プロトコルの基本について学習します。
  • ADK と A2A プロトコルが連携する仕組みについて説明します。
  • A2A プロトコルを操作する方法について説明します。

このハンズオンでは、image_scoring_adk_a2a_server フォルダのコードを使用します。タスクを開始する前に、ディレクトリをこのフォルダに変更してください(Cloud Shell エディタのターミナルで実行)。

#change directory to image_scoring_adk_a2a_server
cd ~/imagescoring/multiagenthandson/image_scoring_adk_a2a_server

#copy the env file
cp ~/imagescoring/multiagenthandson/image_scoring/.env remote_a2a/image_scoring

1. A2A エージェントカードを作成する

A2A プロトコルでは、エージェントの機能やエージェントの使用ガイドなど、エージェントに関するすべての情報を含むエージェント カードが必要です。A2A エージェントがデプロイされると、「.well-known/agent-card.json」リンクを使用してエージェント カードを表示できます。クライアントはこの情報を参照して、エージェントにリクエストを送信できます。

remote_a2a/image_scoring ディレクトリに移動し、Cloud Shell エディタのサイドペインで agents.json を見つけます。ファイルをクリックして開き、内容が次のものと一致することを確認します。

{
 "name": "image_scoring",
 "description": "Agent that generates images based on user prompts and scores their adherence to the prompt.",
 "url": "http://localhost:8001/a2a/image_scoring",
 "version": "1.0.0",
 "defaultInputModes": ["text/plain"],
 "defaultOutputModes": ["image/png", "text/plain"],
 "capabilities": {
   "streaming": true,
   "functions": true
 },
 "skills": [
   {
     "id": "generate_and_score_image",
     "name": "Generate and Score Image",
     "description": "Generates an image from a given text prompt and then evaluates how well the generated image adheres to the original prompt, providing a score.",
     "tags": ["image generation", "image scoring", "evaluation", "AI art"],
     "examples": [
       "Generate an image of a futuristic city at sunset",
       "Create an image of a cat playing a piano",
       "Show me an image of a serene forest with a hidden waterfall"
     ]
   }
 ]
}

2. A2A エージェントを作成する image_scoring_adk_a2a_server ルート ディレクトリ内で、a2a_agent.py ファイルが存在することを確認します。Cloud Shell エディタのサイドペインでファイル名をクリックして開くことができます。このファイルは A2A エージェントのエントリ ポイントとして機能し、次の内容が含まれている必要があります。

#change directory to image_scoring_adk_a2a_server
cd ~/imagescoring/multiagenthandson/image_scoring_adk_a2a_server
from google.adk.agents.remote_a2a_agent import RemoteA2aAgent

root_agent = RemoteA2aAgent(
   name="image_scoring",
   description="Agent to give interesting facts.",
   agent_card="http://localhost:8001/a2a/image_scoring/.well-known/agent.json",
  
   # Optional configurations
   timeout=300.0,          # HTTP timeout (seconds)
   httpx_client=None,      # Custom HTTP client
)

3. A2A エージェントを実行する

これで、エージェントを実行する準備が整いました。エージェントを実行するには、最上位フォルダ image_scoring_adk_a2a_server の内部から次のコマンドを実行します(Cloud Shell エディタのターミナルで実行)。

#following command runs the ADK agent as a2a agent
adk api_server --a2a --port 8001 remote_a2a

4. A2A エージェントをテストする

エージェントが実行されたら、エージェントのテストに進みます。まず、エージェント カードを確認しましょう。[Terminal] > [New Terminal] を使用して新しいターミナルを開き、次のコマンドを実行します(新しく開いた Cloud Shell エディタ ターミナルで実行します)。

#Execute the following 
curl http://localhost:8001/a2a/image_scoring/.well-known/agent.json

上記を実行すると、A2A エージェントのエージェント カードが表示されます。これは主に、前の手順で作成した agent.json の内容です。

それでは、エージェントにリクエストを送信してみましょう。curl を使用してエージェントにリクエストを送信できます(新しく開いた Cloud Shell エディタ ターミナルで実行)。

curl -X POST   http://localhost:8001/a2a/image_scoring   -H 'Content-Type: application/json'   -d '{
    "id": "uuid-123",
    "params": {
      "message": {
        "messageId": "msg-456",
        "parts": [{"text": "Create an image of a cat"}],
        "role": "user"
      }
    }
  }'

上記のリクエストでは、「Create an image of a cat」の行を変更することで、プロンプトを変更できます。コマンドを実行したら、指定した Google Cloud Storage で出力イメージを確認できます。

11. クリーンアップ

作成したものをクリーンアップしましょう。

  1. 作成した Vertex AI Agent Engine サーバーを削除します。Google Cloud コンソールの検索バーに「Vertex AI」と入力して、Vertex AI に移動します。左側の [Agent Engine] をクリックします。削除をクリックしてエージェントを削除できます。98e8aac9efc8e32a.png

図 9: Google Cloud コンソールから Vertex AI Agent Engine インスタンスを削除できます

  1. Cloud Shell でファイルを削除する
#Execute the following to delete the files
cd ~
rm -R ~/imagescoring
  1. バケットを削除します。GCP コンソール -> Cloud Storage に移動し、バケットを選択して削除します。913625e5969c9104.png

図 10: バケットの削除

12. おわりに

おめでとうございます!マルチエージェントの ADK(Agent Development Kit)アプリケーションを Vertex AI Agent Engine にデプロイしました。これは、最新のクラウドネイティブ アプリケーションのコア ライフサイクルを網羅する重要な成果であり、独自の複雑なエージェント システムをデプロイするための強固な基盤となります。

内容のまとめ

このラボでは、次のことを学習しました。

  • ADK(Agent Development Kit)を使用してマルチエージェント アプリケーションを作成する
  • アプリケーションを Vertex AI Agent Engine にデプロイする
  • A2A プロトコルを使用して通信できるエージェントを作成します。

便利なリソース

プロトタイプから本番環境へ

このラボは、Google Cloud でのプロダクション レディな AI の開発学習プログラムの一部です。

  • カリキュラム全体を確認すると、プロトタイプから本番環境への移行に役立ちます。
  • ハッシュタグ #ProductionReadyAI を使用して進捗状況を共有しましょう。