エージェントをデプロイする
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
Vertex AI Agent Engine にエージェントをデプロイする手順は次のとおりです。
前提条件を満たしている 。
(省略可)デプロイ用にエージェントを構成します 。
AgentEngine
インスタンスを作成します 。
(省略可)エージェントのリソース ID を取得します 。
(省略可)サポートされているオペレーションを一覧表示 します。
(省略可)デプロイされたエージェントに権限を付与します 。
デプロイには、Agent Starter Pack テンプレートを使用することもできます。
注: Vertex AI Agent Engine のデプロイは Python のみをサポートしています。 前提条件
エージェントをデプロイする前に、次のタスクが完了していることを確認してください。
環境を設定する 。
エージェントを開発する 。
エージェントに対して次のオプションの構成を行うことができます。
パッケージの要件を定義する
エージェントのデプロイに必要なパッケージのセットを指定します。パッケージのセットは、pip によってインストールされるアイテムのリストか、要件ファイル形式 に準拠したファイルのパスのいずれかです。次のベスト プラクティスを使用します。
再現可能なビルドのためにパッケージ バージョンを固定します。追跡する一般的なパッケージには、google-cloud-aiplatform
、cloudpickle
、langchain
、langchain-core
、langchain-google-vertexai
、pydantic
などがあります。
エージェントの依存関係の数を最小限に抑えます。これにより、依存関係とエージェントを更新する際の破壊的変更の数を減らすことができます。
エージェントに依存関係がない場合は、requirements
を None
に設定できます。
requirements = None
エージェントがフレームワーク固有のテンプレートを使用している場合は、エージェントを開発するときに、インポートする SDK バージョン(1.112.0
など)を指定する必要があります。
ADK
requirements = [
"google-cloud-aiplatform[agent_engines,adk]" ,
# any other dependencies
]
A2A
Preview
This feature is
subject to the "Pre-GA Offerings Terms" in the General Service Terms section of the
Service Specific
Terms .
Pre-GA features are available "as is" and might have limited support.
For more information, see the
launch stage descriptions .
requirements = [
"google-cloud-aiplatform[agent_engines]" ,
"a2a-sdk>=0.3.4"
# any other dependencies
]
LangChain
requirements = [
"google-cloud-aiplatform[agent_engines,langchain]" ,
# any other dependencies
]
LangGraph
requirements = [
"google-cloud-aiplatform[agent_engines,langgraph]" ,
# any other dependencies
]
AG2
requirements = [
"google-cloud-aiplatform[agent_engines,ag2]" ,
# any other dependencies
]
LlamaIndex
プレビュー版
この機能は
サービス固有の規約 の対象となります。
一般提供前の機能は「現状のまま」で提供されるものであり、サポートが制限されることがあります。
詳細については、リリース ステージの説明 をご覧ください。
次の手順は、LlamaIndex Query Pipeline を対象としています。
requirements = [
"google-cloud-aiplatform[agent_engines,llama_index]" ,
# any other dependencies
]
パッケージ requirements
では、次のこともできます。
追加のパッケージを定義する
必要なローカル Python ソースファイルを含むローカル ファイルまたはディレクトリを含めることができます。パッケージの要件 と比較すると、PyPI や GitHub では利用できない、独自に開発したプライベート ユーティリティを使用できます。
エージェントに追加のパッケージが不要な場合は、extra_packages
を None
に設定できます。
extra_packages = None
extra_packages
では、次のこともできます。
単一のファイル(agents/agent.py
など)を含める:
extra_packages = [ "agents/agent.py" ]
ディレクトリ全体(agents/
など)のファイルセットを含めます。
extra_packages = [ "agents" ] # directory that includes agents/agent.py
Python wheel バイナリ (path/to/python_package.whl
など)を指定します。
requirements = [
"google-cloud-aiplatform[agent_engines,adk]" ,
"cloudpickle==3.0" ,
"python_package.whl" , # install from the whl file that was uploaded
]
extra_packages = [ "path/to/python_package.whl" ] # bundle the whl file for uploading
環境変数を定義する
エージェントが依存する環境変数がある場合は、env_vars=
引数で指定できます。エージェントが環境変数に依存していない場合は、None
に設定できます。
env_vars = None
警告: 次の環境変数は設定しないでください。GOOGLE_CLOUD_PROJECT
、GOOGLE_CLOUD_QUOTA_PROJECT
、GOOGLE_CLOUD_LOCATION
、PORT
、K_SERVICE
、K_REVISION
、K_CONFIGURATION
、GOOGLE_APPLICATION_CREDENTIALS
。また、Vertex AI Agent Engine 環境変数との名前の競合を避けるため、接頭辞 GOOGLE_CLOUD_AGENT_ENGINE
は使用しないでください。
環境変数を指定するには、次のオプションを使用できます。
辞書
env_vars = {
"VARIABLE_1" : "VALUE_1" ,
"VARIABLE_2" : "VALUE_2" ,
}
# These environment variables will become available in Vertex AI Agent Engine
# through `os.environ`, e.g.
#
# import os
# os.environ["VARIABLE_1"] # will have the value "VALUE_1"
#
# and
#
# os.environ["VARIABLE_2"] # will have the value "VALUE_2"
#
Secret Manager のシークレットを参照して環境変数(CLOUD_SQL_CREDENTIALS_SECRET
など)として使用できるようにするには、まず、プロジェクト で CLOUD_SQL_CREDENTIALS_SECRET
の シークレットを作成 してから、次のように環境変数を指定します。
env_vars = {
# ... (other environment variables and their values)
"CLOUD_SQL_CREDENTIALS_SECRET" : { "secret" : SECRET_ID
, "version" : SECRET_VERSION_ID
},
}
ここで
SECRET_VERSION_ID
は、シークレット バージョンの ID です。
SECRET_ID
は、シークレットの ID です。
注: 参照できるのは、デプロイされたエージェントと同じプロジェクトで管理されているシークレット(とそのバージョン)のみです。
エージェント コード で、次のようにシークレットを参照できます。
secret = os . environ . get ( "CLOUD_SQL_CREDENTIALS_SECRET" )
if secret :
# Secrets are stored as strings, so use json.loads to parse JSON
# payloads.
return json . loads ( secret )
リスト
注: このオプションは Secret Manager の統合をサポートしていません。マネージド シークレットを指定する必要がある場合は、環境変数をディクショナリとして指定する必要があります。
env_vars = [ "VARIABLE_1" , "VARIABLE_2" ]
# This corresponds to the following code snippet:
#
# import os
#
# env_vars = {
# "VARIABLE_1": os.environ["VARIABLE_1"],
# "VARIABLE_2": os.environ["VARIABLE_2"],
# }
また、エージェントの ID と権限を設定する の手順に沿って、エージェントに Secret Manager のシークレット アクセサー(roles/secretmanager.secretAccessor
)権限を付与する必要があります。
カスタマイズされたリソース制御を定義する
プレビュー版
この機能は
サービス固有の規約 の対象となります。
一般提供前の機能は「現状のまま」で提供されるものであり、サポートが制限されることがあります。
詳細については、リリース ステージの説明 をご覧ください。
エージェントのランタイム リソース制御(アプリケーション インスタンスの最小数と最大数、各コンテナのリソース上限、各コンテナの同時実行など)を指定できます。
min_instances
: 常に実行し続けるアプリケーション インスタンスの最小数。範囲は [0, 10]
です。デフォルト値は 1 です。
注: この機能がプレビュー版である間は、最小インスタンス数を多く構成しても、エージェントがアイドル状態の時間は課金されません。この請求の動作は、今後変更される可能性があります。
max_instances
: トラフィックの増加に対応するために起動できるアプリケーション インスタンスの最大数。範囲は [1, 1000]
です。デフォルト値は 100 です。VPC-SC または PSC-I が有効になっている場合、許容範囲は [1, 100]
です。
resource_limits
: 各コンテナのリソース上限。cpu
キーと memory
キーのみがサポートされています。デフォルト値は {"cpu": "4", "memory": "4Gi"}
です。
cpu
でサポートされている値は 1
、2
、4
、6
、8
のみです。詳細については、CPU 割り当てを構成する をご覧ください。
memory
でサポートされている値は、1Gi
、2Gi
、... 32Gi
のみです。
さまざまなメモリ値に必要な CPU については、メモリ上限を構成する をご覧ください。
container_concurrency
: 各コンテナとエージェント サーバーの同時実行。推奨値は 2 * cpu
+ 1 です。デフォルト値は 9
です。
remote_agent = client . agent_engines . create (
agent = local_agent ,
config = {
"min_instances" : 1 ,
"max_instances" : 10 ,
"resource_limits" : { "cpu" : "4" , "memory" : "8Gi" },
"container_concurrency" : 9 ,
# ... other configs
}
)
ビルド オプションを定義する
エージェントのコンテナ イメージのビルド時に実行するインストール スクリプトなど、エージェントのビルド オプションを指定できます。これは、システム依存関係(gcloud cli
、npx
など)やその他のカスタム設定をインストールする場合に便利です。スクリプトはルート権限で実行されます。
インストール スクリプトを使用するには、installation_scripts
という名前のディレクトリを作成し、そのディレクトリ内にシェル スクリプトを配置します。
.
├── ...
└── installation_scripts/
└── install.sh
次に、extra_packages
で installation_scripts
ディレクトリを指定し、build_options
でスクリプトのパスを指定します。
extra_packages = [ ..., "installation_scripts/install.sh" ]
build_options = { "installation_scripts" : [ "installation_scripts/install.sh" ]}
次の一般的なインストール スクリプトのいずれかを使用できます。
install_npx.sh
#!/bin/bash
# Exit immediately if a command exits with a non-zero status.
set -e
echo "--- Installing System-Wide Node.js v20.x ---"
# 1. Install prerequisites
apt-get update
apt-get install -y ca-certificates curl gnupg
# 2. Add the NodeSource repository GPG key
mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
# 3. Add the NodeSource repository for Node.js v20
NODE_MAJOR = 20
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_ $NODE_MAJOR .x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list
# 4. Update package lists again and install Node.js
apt-get update
apt-get install nodejs -y
echo "--- System-wide Node.js installation complete ---"
echo "Verifying versions:"
# These commands will now work for ANY user because node and npx
# are installed in /usr/bin/ which is in everyone's default PATH.
node -v
npm -v
npx -v
install_uvx.sh
#!/bin/bash
# Exit immediately if a command exits with a non-zero status.
set -e
echo "Starting setup..."
# Install uv
apt-get update
apt-get install -y curl
curl -LsSf https://astral.sh/uv/install.sh | env UV_INSTALL_DIR = "/usr/local/bin" sh
# These commands will now work for ANY user because uv and uvx
# are installed in /usr/local/bin/ which is in everyone's default PATH.
uv --version
uvx --version
install_gcloud_cli.sh
#!/bin/bash
# Exit immediately if a command exits with a non-zero status.
set -e
apt-get install -y curl gpg
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
apt-get update -y && apt-get install google-cloud-cli -y
gcloud --version
Cloud Storage フォルダを定義する
ステージング アーティファクトが Cloud Storage バケット内の既存のフォルダ に対応している場合、上書きされます。必要に応じて、ステージング アーティファクトの Cloud Storage フォルダを指定できます。デフォルト フォルダ内のファイルを上書きしても問題ない場合は、gcs_dir_name
を None
に設定します。
gcs_dir_name = None
ファイルの上書きを回避するには(開発、ステージング、本番環境など環境が異なる場合など)、対応するフォルダを設定し、アーティファクトのステージングに使用するフォルダを指定します。
gcs_dir_name = "dev" # or "staging" or "prod"
競合を回避するには、ランダムな uuid
を生成します。
import uuid
gcs_dir_name = str ( uuid . uuid4 ())
表示名を定義する
ReasoningEngine
リソースの表示名を設定できます。
display_name = "Currency Exchange Rate Agent (Staging)"
説明を定義する
ReasoningEngine
リソースの説明を設定できます。
description = """
An agent that has access to tools for looking up the exchange rate.
If you run into any issues, please contact the dev team.
"""
ラベルを定義する
ReasoningEngine
リソースのラベルは、Key-Value 文字列ペアのディクショナリとして設定できます。次に例を示します。
labels = { "author" : "username" , "version" : "latest" }
デフォルトの ID の代わりに、デプロイされたエージェントの ID としてカスタム サービス アカウントを構成できます。
これを行うには、Agent Engine インスタンスの作成時または更新時に、カスタム サービス アカウントのメールアドレスを service_account
として指定します。次に例を示します。
# Create a new instance
client . agent_engines . create (
agent = local_agent ,
config = {
"service_account" : "my-custom-service-account@my-project.iam.gserviceaccount.com" ,
# ...
},
)
# Update an existing instance
resource_name = "projects/ {project_id} /locations/ {location} /reasoningEngines/ {reasoning_engine_id} "
client . agent_engines . update (
name = resource_name ,
agent = local_agent ,
config = {
"service_account" : "my-new-custom-service-account@my-project.iam.gserviceaccount.com" ,
# ...
},
)
注: projects/{project_id}/serviceAccounts/{service_account_email}
などの完全なリソース URI ではなく、サービス アカウントのメールアドレスのみを指定します。
Private Service Connect インターフェースと DNS ピアリング が設定されている場合は、エージェントのデプロイ時にネットワーク アタッチメントとプライベート DNS ピアリングを指定できます。
remote_agent = client . agent_engines . create (
agent = local_agent ,
config = {
"psc_interface_config" : {
"network_attachment" : "NETWORK_ATTACHMENT " ,
"dns_peering_configs" : [
{
"domain" : "DOMAIN_SUFFIX " ,
"target_project" : "TARGET_PROJECT " ,
"target_network" : "TARGET_NETWORK " ,
},
],
},
},
)
ここで
NETWORK_ATTACHMENT
は、ネットワーク アタッチメントの名前またはフルパスです。ネットワーク アタッチメントが Agent Engine を使用するプロジェクト(共有 VPC ホスト プロジェクトなど)とは異なるプロジェクトで作成されている場合は、ネットワーク アタッチメントの完全パスを渡す必要があります。
DOMAIN_SUFFIX
は、プライベート DNS ピアリングの設定時に作成したプライベート Cloud DNS ゾーンの DNS 名です。
TARGET_PROJECT
は、VPC ネットワークをホストするプロジェクトです。ネットワーク アタッチメント プロジェクトとは異なる場合があります。
TARGET_NETWORK
は VPC ネットワーク名です。
複数のエージェントが、単一の共有ネットワーク アタッチメントまたは一意の専用ネットワーク アタッチメントを使用するように構成できます。共有ネットワーク アタッチメントを使用するには、作成する各エージェントの psc_interface_config
で同じネットワーク アタッチメントを指定します。
カスタム鍵を使用して、エージェントの保存データを暗号化できます。詳細については、Agent Engine の顧客管理の暗号鍵(CMEK) をご覧ください。
エージェントのカスタム鍵(CMEK)を構成するには、Agent Engine インスタンスの作成時に encryption_spec
パラメータに鍵リソース名を指定する必要があります。
# The fully qualified key name
kms_key_name = "projects/PROJECT_ID
/locations/LOCATION
/keyRings/KEY_RING
/cryptoKeys/KEY_NAME
"
remote_agent = client . agent_engines . create (
agent = local_agent ,
config = {
"encryption_spec" : { "kms_key_name" : kms_key_name },
# ... other parameters
},
)
AgentEngine
インスタンスを作成する
Vertex AI にエージェントをデプロイするには、client.agent_engines.create
を使用して local_agent
オブジェクトとオプションの構成 を渡します。
remote_agent = client . agent_engines . create (
agent = local_agent , # Optional.
config = {
"requirements" : requirements , # Optional.
"extra_packages" : extra_packages , # Optional.
"gcs_dir_name" : gcs_dir_name , # Optional.
"display_name" : display_name , # Optional.
"description" : description , # Optional.
"labels" : labels , # Optional.
"env_vars" : env_vars , # Optional.
"build_options" : build_options , # Optional.
"service_account" : service_account , # Optional.
"min_instances" : min_instances , # Optional.
"max_instances" : max_instances , # Optional.
"resource_limits" : resource_limits , # Optional.
"container_concurrency" : container_concurrency , # Optional
"encryption_spec" : encryption_spec , # Optional.
},
)
デプロイには数分かかります。この間、バックグラウンドで次の手順が実行されます。
次のアーティファクトのバンドルがローカルに生成されます。
*.pkl
: local_agent に対応する pickle ファイル。
requirements.txt
: パッケージ要件 を含むテキスト ファイル。
dependencies.tar.gz
: 追加のパッケージ を含む tar ファイル。
アーティファクトのステージングのために、バンドルが Cloud Storage(対応するフォルダ )にアップロードされます。
それぞれのアーティファクトの Cloud Storage URI は PackageSpec で指定します。
Vertex AI Agent Engine サービスがリクエストを受け取り、コンテナをビルドしてバックエンドで HTTP サーバーを起動します。
デプロイのレイテンシは、必要なパッケージのインストールにかかった合計時間によって異なります。デプロイされると、remote_agent
は Vertex AI で実行されている local_agent
のインスタンスに対応し、クエリまたは削除が可能になります。エージェントのローカル インスタンスとは別のものです。
remote_agent
オブジェクトは、次の属性を含む AgentEngine
クラスに対応します。
(省略可)エージェントのリソース ID を取得する
デプロイされた各エージェントには固有識別子があります。次のコマンドを実行して、デプロイされたエージェントのリソース名を取得できます。
remote_agent . api_resource . name
レスポンスは次の文字列のようになります。
"projects/PROJECT_NUMBER /locations/LOCATION /reasoningEngines/RESOURCE_ID "
ここで
(省略可)サポートされているオペレーションを一覧表示する
デプロイされた各エージェントには、サポートされているオペレーションのリストがあります。次のコマンドを実行して、デプロイされたエージェントでサポートされているオペレーションのリストを取得できます。
remote_agent . operation_schemas ()
各オペレーションのスキーマは、呼び出せるエージェントのメソッドに関する情報をドキュメント化したディクショナリです。サポートされているオペレーションのセットは、エージェントの開発に使用したフレームワークによって異なります。
(省略可)デプロイされたエージェントに権限を付与する
デプロイされたエージェントに追加の権限を付与する必要がある場合は、エージェントの ID と権限を設定する の手順に沿って操作します。
次のステップ