拡張機能は、外部 API との接続です。リアルタイム データを処理し、外部 API に接続して現実世界のアクションを実行できます。Vertex AI は、拡張機能のインポート、管理、実行を行う拡張機能サービスを提供します。
この拡張機能サービスは、ユーザークエリを処理し、LLM と通信するアプリにリンクできます。拡張機能サービスは、拡張機能のセットと、拡張機能が実行できるオペレーションをアプリに提供できます。アプリは、ユーザークエリを受信するたびに、この情報を LLM に提供します。モデルがクエリ処理を拡張機能に委任する必要があることを判断した場合、リクエストされた拡張機能の呼び出しと関連するパラメータ値が提供されます。アプリはこのリクエストを拡張機能サービスにリレーし、拡張機能が実行されます。最後に、拡張機能サービスがこのオペレーションの結果をアプリに送信し、アプリがそれをモデルにリレーします。
このドキュメントでは、Vertex AI 拡張サービスの主な機能について説明します。
- 拡張機能の作成とインポートの方法。
- 拡張機能を管理する方法。
- 拡張機能を実行する方法。
Google が提供する拡張機能をインポートして実行する方法については、以下をご覧ください。
- コード インタープリタ拡張機能を使用すると、コードを生成して実行できます。
- Vertex AI Search 拡張機能を使用すると、ウェブサイト コーパスと非構造化データにアクセスして検索し、自然言語の質問に対する回答を得ることができます。
拡張機能の作成とインポート
このドキュメントでは、拡張機能をサポートできる API サービスがすでに実行されていることを前提としています。拡張機能を作成するには、API 仕様ファイルで外部 API のインターフェースを定義する必要があります。この仕様ファイルを Cloud Storage バケットにアップロードするか、文字列に変換する必要があります。次に、拡張機能のマニフェストを定義し、仕様ファイルを含めて、拡張機能サービスに登録リクエストを送信します。
API 仕様ファイルを作成する
拡張機能は、拡張機能の API エンドポイントを定義および記述するファイルを使用することで誰でも作成できます。API エンドポイントは公開または非公開にでき、任意のクラウドまたはオンプレミスにホストできます。
API 仕様ファイルには、API サービスのインターフェースを記述します。OpenAPI 3.0 と互換性のある YAML 形式の API 仕様ファイルを指定する必要があります。この仕様ファイルで、以下を定義する必要があります。
サーバー オブジェクト。このオブジェクトで API サーバー URL を定義する必要があります。Vertex AI 拡張サービスは複数のサーバーをサポートしていません。
servers: - url: API_SERVICE_URL
パス オブジェクト。このオブジェクトには、API サービスによって提供されるさまざまなオペレーションと、各オペレーションに対応する入力パラメータを記述する必要があります。各オペレーションには、一意の識別子とレスポンスが必要です。
paths: ... get: operationId: API_SERVICE_OPERATION_ID ... parameters: - name: API_SERVICE_INPUT_VAR ... responses: ...
コンポーネント オブジェクト。このオブジェクトは省略可能です。コンポーネント オブジェクトを使用すると、再利用可能なオブジェクトを定義できます。たとえば、コンポーネント オブジェクトを使用して、パス オブジェクトで定義されているオブジェクト スキーマの定義を指定できます。コンポーネント オブジェクトを使用して、API サービスの出力パラメータを記述することもできます。
components: schemas: Result: ... properties: API_SERVICE_OUTPUT_VAR: ...
OpenAPI の詳細については、OpenAPI 仕様をご覧ください。
次の例は、リクエストされた言語で「hello」と表示する API サービスの API 仕様ファイルです。
openapi: "3.0.0"
info:
version: 1.0.0
title: Hello Extension
description: Learn to build Vertex AI extensions
servers:
- url: [API_SERVICE_URL]
paths:
/hello:
get:
operationId: say_hello
description: Say hello in prompted language.
parameters:
- name: apiServicePrompt
in: query
description: Language
required: true
schema:
type: string
responses:
'200':
description: Successful operation.
content:
application/json:
schema:
$ref: "#/components/schemas/Result"
components:
schemas:
Result:
description: Hello in the requested language.
properties:
apiServiceOutput:
type: string
仕様ファイルをアップロードする
仕様ファイルを Cloud Storage バケットにアップロードするか、文字列に変換します。
仕様ファイルを Cloud Storage バケットにアップロードする場合は、Vertex AI Extension Service Agent
サービス アカウント(service-PROJECT_NUMBER@gcp-sa-vertex-ex.iam.gserviceaccount.com
)にストレージ オブジェクト閲覧者のロールを付与します。プロジェクト内のバケットを一覧表示する方法については、バケットの一覧表示をご覧ください。オブジェクトを Cloud Storage バケットにコピーする方法については、オブジェクトのコピー、名前の変更、移動をご覧ください。
拡張機能のインポート リクエストを定義する
API 仕様ファイルを作成したら、JSON ファイルで拡張機能のインポート リクエストを定義できます。拡張機能のインポート リクエストには、API 仕様ファイル(apiSpec
)と認証構成(authConfig
)への参照を含める必要があります。拡張機能を大規模言語モデル(LLM)に接続して拡張機能の動作を確認するには、オプションの toolUseExamples
パラメータを追加します。拡張機能のみを実行する場合は、toolUseExamples
パラメータを指定しないでください。
拡張機能のインポート リクエストの形式は次のとおりです。
{
"displayName": "DISPLAY_NAME_HUMAN",
"description": "DESCRIPTION_HUMAN",
"manifest": {
"name": "EXTENSION_NAME_LLM",
"description": "DESCRIPTION_LLM",
"apiSpec": { ... },
"authConfig": { ... },
}
"toolUseExamples": [ ... ],
}
- DISPLAY_NAME_HUMAN: ユーザーに表示される拡張機能の名前。
- DESCRIPTION_HUMAN: ユーザーに表示される拡張機能の説明。
- EXTENSION_NAME_LLM: LLM が推論に使用する拡張機能の名前。
- DESCRIPTION_LLM: LLM が推論に使用する拡張機能の説明。意味があり、参考になる説明を入力する必要があります。
API 仕様ファイルへの参照
拡張機能のインポート リクエストには、API 仕様ファイルへの参照を含める必要があります。仕様ファイルは、次の 2 つの方法で指定できます。
openApiGcsUri
を使用して、YAML ファイルの Cloud Storage URI を渡す。"apiSpec": { "openApiGcsUri": "gs://BUCKET_NAME/SPECIFICATION_FILE_NAME.yaml" },
- BUCKET_NAME: 仕様ファイルを格納する Cloud Storage バケットの名前。
- SPECIFICATION_FILE_NAME: API 仕様ファイルの名前。
openApiYaml
を使用して、YAML ファイルに文字列として渡す。
認証構成
拡張機能は、一般公開(すべてのユーザーが使用可能)にすることも、限定公開(1 つ以上の組織内の承認済みユーザーのみが使用可能)にすることもできます。
拡張機能のインポート リクエストには、認証構成を含める必要があります。認証方法は、次の中から選択できます。
NO_AUTH
: 認証なしAPI_KEY_AUTH
: API キー認証HTTP_BASIC_AUTH
: HTTP 基本認証OAUTH
: OAuth 認証OIDC_AUTH
: OIDC 認証
認証構成の詳細については、認証構成を指定するをご覧ください。
拡張機能の仕組みを示す例
最良の結果を得るには、拡張機能のインポート リクエストに、拡張機能の動作を示すサンプルを含める必要があります。この例では、toolUseExamples
パラメータを使用します。
次のコードは、単一の入力パラメータと単一の出力パラメータを持つ単一の例の toolUseExamples
の形式を示しています。この例では、リクエスト パラメータとレスポンス パラメータの両方が string
型です。
"toolUseExamples": [
{
"extensionOperation": {
"operationId": "API_SERVICE_OPERATION_ID",
},
"displayName": "EXAMPLE_DISPLAY_NAME",
"query": "EXAMPLE_QUERY",
"requestParams": {
"fields": [
{
"key": "API_SERVICE_INPUT_VAR",
"value": {
"string_value": "EXAMPLE_INPUT",
}
}
]
},
"responseParams": {
"fields": [
{
"key": "API_SERVICE_OUTPUT_VAR",
"value": {
"string_value": "EXAMPLE_OUTPUT",
},
}
],
},
"responseSummary": "EXAMPLE_SUMMARY"
}
],
query
: この拡張機能を利用できるクエリの例。EXAMPLE_QUERY を使用してクエリテキストを指定します。extensionOperation
:query
に回答するのに適した拡張オペレーション。API_SERVICE_OPERATION_ID を使用して、API 仕様ファイルで定義されている拡張機能オペレーションの ID を指定します。displayName
: 例の表示名。簡単な説明を入力するには EXAMPLE_DISPLAY_NAME を使用します。requestParams
:extensionOperation
に必要なリクエスト パラメータとその値の例(Key-Value 形式)。API_SERVICE_INPUT_VAR を使用して、API 仕様ファイルで定義された、API_SERVICE_OPERATION_ID に対応する入力パラメータを指定します。EXAMPLE_INPUT を使用して、EXAMPLE_QUERY に対応する入力値の例を指定します。responseParams
:extensionOperation
のレスポンス パラメータと Key-Value 形式の例の値。API_SERVICE_OUTPUT_VAR を使用して、API 仕様ファイルで定義された、API サービスに対応する出力パラメータを指定します。EXAMPLE_OUTPUT を使用して、EXAMPLE_INPUT に対応する出力値の例を指定します。responseSummary
:query
に応じてアプリが提供する可能性のある概要の例。EXAMPLE_SUMMARY を使用して概要テキストを指定します。
以下は、リクエストされた言語で「hello」と返す API サービスの toolUseExamples
の例です。
"toolUseExamples": [
{
"extensionOperation": {
"operationId": "say_hello",
},
"displayName": "Say hello in the requested language",
"query": "Say hello in French",
"requestParams": {
"fields": [
{
"key": "apiServicePrompt",
"value": {
"string_value": "French",
}
}
]
},
"responseParams": {
"fields": [
{
"key": "apiServiceOutput",
"value": {
"string_value": "bonjour",
},
}
],
},
"responseSummary": "Bonjour"
}
],
認証構成を指定する
拡張機能のインポート リクエストを定義するときに、認証構成を指定する必要があります。
拡張機能で認証が不要な場合は、authType
変数を NO_AUTH
に設定します。
"authConfig": {
"authType": "NO_AUTH"
}
拡張機能に認証が必要な場合は、authType
変数で認証タイプを設定して認証構成を指定する必要があります。認証方法は、次の中から選択できます。
API キー認証
API キー認証をサポートするため、Vertex AI は SecretManager と統合してシークレットの保存とアクセスを行います。Vertex AI Extensions プラットフォームは、シークレット データを直接保存しません。SecretManager
リソースのライフサイクルはお客様が管理する責任があります。
authConfig
は次のように指定します。
"authConfig": {
"authType": "API_KEY_AUTH",
"apiKeyConfig": {
"name": "API_KEY_CONFIG_NAME",
"apiKeySecret": "API_KEY_SECRET",
"httpElementLocation": "HTTP_ELEMENT_LOCATION",
},
}
- API_KEY_CONFIG_NAME: API キーの名前。たとえば、API リクエスト
https://example.com/act?api_key=<API KEY>
では、API_KEY_CONFIG_NAME はapi_key
に対応します。 - API_KEY_SECRET: キーを保存する
SecretManager
シークレット バージョン リソース。このパラメータの形式はprojects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
です。 HTTP_ELEMENT_LOCATION: HTTP リクエスト内の API キーの場所。指定できる値は次のとおりです。
HTTP_IN_QUERY
HTTP_IN_HEADER
HTTP_IN_PATH
HTTP_IN_BODY
HTTP_IN_COOKIE
詳細については、パラメータの記述をご覧ください。
HTTP 基本認証
HTTP 基本認証をサポートするために、Vertex AI は SecretManager と統合してシークレットの保存とアクセスを行います。Vertex AI Extensions プラットフォームは、シークレット データを直接保存しません。SecretManager
リソースのライフサイクルはユーザー自身で管理する必要があります。
authConfig
は次のように指定します。
"authConfig": {
"authType": "HTTP_BASIC_AUTH",
"httpBasicAuthConfig": {
"credentialSecret": "CREDENTIAL_SECRET"
},
}
- CREDENTIAL_SECRET: base64 エンコードされた認証情報を保存する
SecretManager
シークレット バージョンのリソース。このパラメータの形式はprojects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
です。
OAuth 認証
Vertex AI は、アクセス トークンとサービス アカウントの 2 つの OAuth 認証方法をサポートしています。
アクセス トークン
authConfig
は次のように指定します。
"authConfig": {
"authType": "OAUTH",
"oauthConfig": {}
}
拡張機能をインポートする際は、oauthConfig
フィールドを空白のままにします。登録済みの拡張機能を実行する場合は、実行リクエストの oauthConfig
フィールドにアクセス トークンを指定する必要があります。詳しくは、拡張機能を実行するをご覧ください。
サービス アカウント
authConfig
は次のように指定します。
"authConfig": {
"authType": "OAUTH",
"oauthConfig": {"service_account": "SERVICE_ACCOUNT_NAME"}
}
- SERVICE_ACCOUNT_NAME: Vertex AI はこのサービス アカウントを使用してアクセス トークンを生成します。
次の手順で、Vertex AI Extension Service Agent
が SERVICE_ACCOUNT_NAME からアクセス トークンを取得できるようにします。
[IAM] ページに移動します。
[サービス アカウント] タブを選択します。
サービス アカウントをクリックします。
authConfig
のSERVICE_ACCOUNT_NAME
の値は、サービス アカウントの名前と一致する必要があります。[権限] タブをクリックします。
[アクセス権を付与] をクリックします。
[プリンシパルの追加] セクションの [新しいプリンシパル] フィールドに「
service-PROJECT_NUMBER@gcp-sa-vertex-ex.iam.gserviceaccount.com
」と入力します。このプリンシパルはVertex AI Extension Service Agent
サービス アカウントに対応しています。[ロールを割り当てる] セクションで、
Service Account Token Creator
ロールを見つけて選択します。このロールには権限iam.serviceAccounts.getAccessToken
が含まれています。[保存] をクリックします。
OIDC 認証
Vertex AI は、ID トークンとサービス アカウントの 2 つの OIDC 認証方法をサポートしています。
ID トークン
authConfig
は次のように指定します。
"authConfig": {
"authType": "OIDC_AUTH",
"oidcConfig": {}
}
拡張機能をインポートする際は、oidcConfig
フィールドを空白のままにします。登録済みの拡張機能を実行する場合は、実行リクエストの oidcConfig
フィールドに ID トークンを指定する必要があります。詳しくは、拡張機能を実行するをご覧ください。
サービス アカウント
authConfig
は次のように指定します。
"authConfig": {
"authType": "OIDC_AUTH",
"oidcConfig": {"service_account": "SERVICE_ACCOUNT_NAME"}
}
- SERVICE_ACCOUNT_NAME: Vertex AI は、このサービス アカウントを使用して OpenID Connect(OIDC)トークンを生成します。Vertex AI は、API 仕様ファイルで定義されているように、トークンのオーディエンスを API_SERVICE_URL に設定します。
次の手順で、Vertex AI Extension Service Agent
が SERVICE_ACCOUNT_NAME からアクセス トークンを取得できるようにします。
[IAM] ページに移動します。
[サービス アカウント] タブを選択します。
サービス アカウントをクリックします。
authConfig
のSERVICE_ACCOUNT_NAME
の値は、サービス アカウントの名前と一致する必要があります。[権限] タブをクリックします。
[アクセス権を付与] をクリックします。
[プリンシパルの追加] セクションの [新しいプリンシパル] フィールドに「
service-PROJECT_NUMBER@gcp-sa-vertex-ex.iam.gserviceaccount.com
」と入力します。このプリンシパルはVertex AI Extension Service Agent
サービス アカウントに対応しています。[ロールを割り当てる] セクションで、
Service Account Token Creator
ロールを見つけて選択します。このロールには権限iam.serviceAccounts.getOpenIdToken
が含まれています。[保存] をクリックします。
Vertex AI で拡張機能をインポートする
拡張機能のインポート リクエストを定義したら、Vertex AI で拡張機能をインポートできます。
次のシェル変数を設定します。
ENDPOINT="LOCATION-aiplatform.googleapis.com" URL="https://${ENDPOINT}/v1beta1/projects/PROJECT_ID/locations/LOCATION"
- PROJECT_ID: プロジェクト。
- LOCATION: 選択したリージョン。不明な場合は、
us-central1
を選択します。
次の
curl
コマンドを実行して、インポート リクエストを送信します。curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @IMPORT_REQUEST.json "${URL}/extensions:import"
- IMPORT_REQUEST: 拡張機能のインポート リクエストを含む JSON ファイルの名前。
レスポンスの形式は次のとおりです。
{ "name": "projects/[PROJECT_NUMBER]/locations/[LOCATION]/extensions/[EXTENSION_ID]/operations/[IMPORT_OPERATION_ID]", "metadata": { "@type": "type.googleapis.com/google.cloud.aiplatform.v1beta1.ImportExtensionOperationMetadata", "genericMetadata": { "createTime": "[CREATE_TIME]", "updateTime": "[UPDATE_TIME]" } } }
インポート リクエストの出力に基づいてシェル変数を設定します。
EXTENSION_ID=EXTENSION_ID IMPORT_OPERATION_ID=IMPORT_OPERATION_ID
インポートのステータスを確認するには、次の
curl
コマンドを実行します。curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ "${URL}/operations/${IMPORT_OPERATION_ID}"
拡張機能を管理する
登録されているすべての拡張機能を一覧表示するには、次の curl
コマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
"${URL}/extensions"
拡張機能を取得するには、次の curl
コマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
"${URL}/extensions/${EXTENSION_ID}"
拡張機能の displayName
、description
、または toolUseExamples
を更新できます。拡張機能を更新するときに toolUseExamples
を指定すると、更新によってサンプルが置き換えられます。たとえば、a
と b
のサンプルがあり、c
のサンプルで拡張機能を更新すると、更新された拡張機能には c
のサンプルのみが含まれます。拡張機能の説明を更新するには、次の curl
コマンドを実行します。
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
${URL}/extensions/${EXTENSION_ID}?update_mask="description" \
-d '{
"description": "A nice tool.",
}'
拡張機能を削除するには、次の curl
コマンドを実行します。
curl \
-X DELETE \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
${URL}/extensions/${EXTENSION_ID}
拡張機能を実行する
拡張機能で OAuth 認証とアクセス トークンを使用している場合は、OAuth 認証とアクセス トークンを使用して拡張機能を実行するをご覧ください。
拡張機能で OIDC 認証と ID トークンを使用している場合は、OIDC 認証と ID トークンを使用して拡張機能を実行するをご覧ください。
そうでない場合は、次の手順で実行できます。
次の内容のファイルを
execute-extension.json
という名前で作成します。{ "operation_id": "API_SERVICE_OPERATION_ID", "operation_params": { "API_SERVICE_INPUT_VAR": "API_SERVICE_INPUT_VALUE" } }
- API_SERVICE_OPERATION_ID: 実行する API サービス オペレーションの ID。API サービス オペレーションは、API 仕様ファイルで定義されています。
- API_SERVICE_INPUT_VAR: API_SERVICE_OPERATION_ID に対応し、API 仕様ファイルで定義されている入力変数。
- API_SERVICE_INPUT_VALUE: 拡張機能の入力値。
次の
curl
コマンドを実行します。curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" -d @execute-extension.json \ "${URL}/extensions/${EXTENSION_ID}:execute"
レスポンスの形式は次のとおりです。
{ "output": { "content": "{\"API_SERVICE_OUTPUT_VAR\": \"API_SERVICE_OUTPUT_VALUE\"}" } }
- API_SERVICE_OUTPUT_VAR: API 仕様ファイルで定義された、API サービスに対応する出力パラメータ。
- API_SERVICE_OUTPUT_VALUE: レスポンス オブジェクトのシリアル化である文字列値。API 仕様ファイルで JSON レスポンス スキーマを定義している場合は、この出力文字列を自分で解析して JSON に変換する必要があります。
OAuth 認証とアクセス トークンを使用して拡張機能を実行する
拡張機能で OAuth 認証とアクセス トークンを使用する場合は、次の手順で実行できます。
次の内容のファイルを
execute-extension.json
という名前で作成します。{ "operation_id": "API_SERVICE_OPERATION_ID", "operation_params": {...}, "runtime_auth_config": { "authType": "OAUTH", "oauth_config": {"access_token": "'$(gcloud auth print-access-token)'"} } }
- API_SERVICE_OPERATION_ID: 実行する API サービス オペレーションの ID。API サービス オペレーションは、API 仕様ファイルで定義されています。
次の
curl
コマンドを実行します。curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" -d @execute-extension.json \ "${URL}/extensions/${EXTENSION_ID}:execute"
OIDC 認証と ID トークンを使用して拡張機能を実行する
拡張機能で OIDC 認証と ID トークンを使用する場合は、次の手順で実行できます。
次の内容のファイルを
execute-extension.json
という名前で作成します。{ "operation_id": "API_SERVICE_OPERATION_ID", "operation_params": {...}, "runtime_auth_config": { "authType": "OIDC_AUTH", "oidc_config": {"id_token": "$(gcloud auth print-identity-token)"} } }
- API_SERVICE_OPERATION_ID: 実行する API サービス オペレーションの ID。API サービス オペレーションは、API 仕様ファイルで定義されています。
次の
curl
コマンドを実行します。curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" -d @execute-extension.json \ "${URL}/extensions/${EXTENSION_ID}:execute"