OpenAPI ツールを使用すると、AI コーチは会話のコンテキストに基づいてリモート API からデータを動的に取得できます。
始める前に
既存の API で問題が発生した場合は、次の柔軟なアプローチを使用します。
- 既存の API のラッパーとして Cloud Run functions を作成します。Cloud Run functions は、必要な追加パラメータを入力し、API レスポンスの後処理を行います。
- Cloud Run functions を呼び出す OpenAPI ツールを作成します。
Datastore API では、検索結果モードの設定など、追加の入力パラメータが必要になる場合がありますが、Cloud Run functions では 1 つのパラメータ(クエリ)のみが必要です。このパラメータは、AI コーチが会話コンテキストから抽出できます。レスポンス処理の面では、Cloud Run functions はすべての結果ではなく、上位のヒットのみを返します。
Datastore にアクセスする手順は次のとおりです。
ステップ 1: Datastore と検索アプリを作成する
- Datastore の手順に沿って、Datastore を作成します。
- 検索アプリを作成するの手順に沿って操作します。
- API を使用して Datastore と検索アプリをチェックし、ソリューション タイプ、検索階層、チャンク分割が有効になっているかどうかを確認します。
次のコマンドを実行してチャンクを取得します。
gcurl -sX GET \
"https://discoveryengine.googleapis.com/v1alpha/projects/${project_id}/locations/global/collections/default_collection/dataStores/${data_store_id}/documentProcessingConfig"
次の例は、チャンク分割が有効になっていることを示しています。
{
"name": "projects/${project_id}/locations/global/collections/default_collection/dataStores/${data_store_id}/documentProcessingConfig",
"chunkingConfig": {
"layoutBasedChunkingConfig": {
"chunkSize": 500,
"includeAncestorHeadings": true
}
},
"defaultParsingConfig": {
"digitalParsingConfig": {}
}
}
次のコマンドを実行して、ソリューション タイプと検索階層を取得します。
gcurl -X GET \
"https://discoveryengine.googleapis.com/v1alpha/projects/${project_id}/locations/global/collections/default_collection/engines/${data_store_id}"
次の例は、ソリューション タイプと検索階層が検証されていることを示しています。
{
"name": "projects/${project_id}/locations/global/collections/default_collection/engines/${data_store_id}",
"displayName": "iphone_",
"dataStoreIds": [
"${data_store_id}"
],
"solutionType": "SOLUTION_TYPE_SEARCH",
"searchEngineConfig": {
"searchTier": "SEARCH_TIER_ENTERPRISE"
},
"commonConfig": {
"companyName": "Google"
},
"industryVertical": "GENERIC"
}
ステップ 2: Datastore を呼び出す Cloud Run functions を作成する
認証を行うには、ID トークンを要求するように Cloud Run functions を構成します。Cloud Run functions は、複雑な API を基本的な API にラップするのに役立ちます。次の操作を行います。
- リクエストの追加フィールドに入力します。
- Datastore API を呼び出して検索を実行します。
- API レスポンスを処理し、上位の結果を返します。
Cloud Run functions を作成したら、Cloud Run functions を呼び出す OpenAPI ツールを作成します。
次の例では、Cloud Run functions が Datastore API を変換して検索を実行し、検索結果のリストを返します。
import os
import requests
import google.auth
import google.auth.transport.requests
import functions_framework
@functions_framework.http
def call_vertex_search(request):
"""
HTTP Cloud Function to invoke a Vertex AI Search endpoint.
"""
# --- Configuration - Tailor to your Vertex AI Search specifics ---
project_id = ${project_id}
engine_id = "${data_store_id}"
# Establish the Vertex AI Search endpoint URL
endpoint = f"https://discoveryengine.googleapis.com/v1alpha/projects/${project_id}/locations/global/collections/default_collection/engines/{engine_id}/servingConfigs/default_chat:search"
# --- Acquire Authentication Token ---
try:
credentials, project = google.auth.default()
auth_req = google.auth.transport.requests.Request()
credentials.refresh(auth_req)
token = credentials.token
except Exception as e:
print(f"Authentication token retrieval error: {e}")
return f"Authentication token retrieval error: {e}", 500
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json",
}
# --- Formulate Search Query ---
# Extract the query from the request; otherwise, employ a default.
request_json = request.get_json(silent=True)
query = "what is the price of iphone 13?" # Default query
if request_json and 'query' in request_json:
query = request_json['query']
payload = {
"query": query,
"page_size": 5,
"content_search_spec": {
"search_result_mode": "CHUNKS"
}
# Additional search parameters, such as filters or boost_spec, can be appended here.
# "filter": "some_attribute:ANY(\"value\")",
}
# --- Execute Vertex AI Search API Call ---
try:
response = requests.post(endpoint, headers=headers, json=payload)
response.raise_for_status() # Trigger an exception for unfavorable status codes.
search_results = response.json()
print(f"Search results: {search_results}")
extracted_data = search_results["results"][0]["chunk"]["content"]
if extracted_data is not None:
print(f"Extracted data: {extracted_data}")
return {"content": extracted_data}, 200
else:
print("Failed to extract search results from the response.")
return "Failed to extract search results from the response", 404
except requests.exceptions.RequestException as e:
print(f"Vertex AI Search invocation error: {e}")
if e.response is not None:
print(f"Error details: {e.response.text}")
return f"Vertex AI Search invocation error: {e.response.text}", e.response.status_code
return f"Vertex AI Search invocation error: {e}", 500
except Exception as e:
print(f"An unanticipated error transpired: {e}")
return f"An unanticipated error transpired: {e}", 500
Shell を使用して Cloud Run functions をテストします。次の例に示すように、「iphone 13 の価格はいくらですか」のようなクエリを送信してみてください。
export CLOUDSDK_CORE_PROJECT=${project_id}
curl -H "Authorization: Bearer "$(gcloud auth print-identity-token) -H "X-Goog-User-Project: ${CLOUDSDK_CORE_PROJECT}" -H "Content-Type: application/json; charset=utf-8" -X GET "https://${CLOUD_FUNCTION_ENDPOINT}/?query=what%20is%20the%20price%20of%20iphone%2013"
次のようなレスポンスが返されます。
{"content":"Table of contents\niPhone price history iPhone 4S (2011)\niPhone 4S original starting MSRP: $199\nInflation-adjusted iPhone 4S price: $280\niPhone 5 (2012)\niPhone 5 Original starting MSRP: $199\nInflation-adjusted iPhone 5 price: $276\niPhone 5S/5C (2013) iPhone 5S original starting MSRP: $199\niPhone 5C original starting MSRP: $99\nInflation-adjusted iPhone 5S price: $270\nInflation-adjusted iPhone 5C price: $134\niPhone 6/6 Plus (2014) Table of contents\niPhone price history iPhone 6 original starting MSRP: $199\niPhone 6 Plus original starting MSRP: $299\nInflation-adjusted iPhone 6 price: $266\nInflation-adjusted iPhone 6 Plus price: $398\niPhone 6S/6S Plus (2015)\niPhone 6S original starting MSRP: $199\niPhone 6S Plus original starting MSRP: $299\nInflation-adjusted iPhone 6S price: $265\nInflation-adjusted iPhone 6S Plus price: $397\niPhone 7/7 Plus (2016) Table of contents\niPhone price history iPhone 7 original starting MSRP: $649\niPhone 7 Plus original starting MSRP: $769\nInflation-adjusted iPhone 7 price: $854\nInflation-adjusted iPhone 7 Plus price: $1,011\niPhone 8/8 Plus (2017)\niPhone 8 original starting MSRP: $699\niPhone 8 Plus original starting MSRP: $799\nInflation-adjusted iPhone 8 price: $900\nInflation-adjusted iPhone 8 Plus price: $1,029\niPhone X (2017)\niPhone X original starting MSRP: $999\nInflation-adjusted iPhone X Plus price: $1,287\niPhone XR (2018)\niPhone XR original starting MSRP: $749\nInflation-adjusted iPhone XR Plus price: $942\niPhone XS/S Max (2018) Table of contents\niPhone price history iPhone XS original starting MSRP: $999\niPhone XS Max original starting MSRP: $1,099\nInflation-adjusted iPhone XS price: $1,254\nInflation-adjusted iPhone XS Plus price: $1,380\niPhone 11/Pro/Pro Max (2019)\niPhone 11 original starting MSRP: $699\niPhone 11 Pro original starting MSRP: $999\niPhone 11 Pro Max original starting MSRP: $1099\nInflation-adjusted iPhone 11 price: $863\nInflation-adjusted iPhone 11 Pro price: $1,232\nInflation-adjusted iPhone 11 Pro Max price: $1,355\niPhone 12/Mini/Pro/Pro Max (2020)\niPhone 12 original starting MSRP: $799 Table of contents\niPhone price history Login iPhone 12 Mini original starting MSRP: $699\niPhone 12 Pro original starting MSRP: $999\niPhone 12 Pro Max original starting MSRP: $1099\nInflation-adjusted iPhone 12 price: $976\nInflation-adjusted iPhone 12 Mini price: $853\nInflation-adjusted iPhone 12 Pro price: $1,218\nInflation-adjusted iPhone 12 Pro Max price: $1,340 iPhone 13/Mini/Pro/Pro Max (2021)\niPhone 13 original starting MSRP: $799\niPhone 13 Mini original starting MSRP: $699\niPhone 13 Pro original starting MSRP: $999\niPhone 13 Pro Max original starting MSRP: $1099\nInflation-adjusted iPhone 13 price: $931\nInflation-adjusted iPhone 13 Mini price: $814\nInflation-adjusted iPhone 13 Pro price: $1,163\nInflation-adjusted iPhone 13 Pro Max price: $1,279\niPhone 14/Plus/Pro/Pro Max (2022) Table of contents\niPhone price history Robert Triggs / Android Authority"}
ステップ 3: OpenAPI ツールを作成する
OpenAPI ツールと Integration Connectors ツールの手順に沿って、OpenAPI ツールを作成します。
次の例は、OpenAPI ツールが Cloud Run functions によって提供される新しい API と連携する方法を示しています。
openapi: 3.0.0
info:
title: iphone_price_tool
description: An API to search document about iPhone prices.
version: 1.0.0
servers:
- url: https://${CLOUD_FUNCTION_ENDPOINT}
paths:
/:
get:
summary: Search information about iphone prices
operationId: search
parameters:
- in: query
name: query
schema:
type: string
required: true
description: The user's question about iphone price
responses:
'200':
description: Retrieved information about iphone price
content:
application/json:
schema:
type: object
properties:
content:
type: string
description: Information about iphone price
'400':
description: Bad request, query parameter is missing.
content:
text/plain:
schema:
type: string
example: "Please provide a 'query' as a URL parameter for POST requests (e.g., ?query=your_question)."
'500':
description: Internal server error.
content:
text/plain:
schema:
type: string
example: "Error querying: An unexpected error occurred."
ステップ 4: 生成ツールを作成する
OpenAPI ツールの手順に沿って、AI コーチ ジェネレータを作成します。AI コーチの生成コンテンツを使用して、LLM プロンプトを作成します。