Las herramientas de OpenAPI permiten que el entrenador de IA recupere datos de forma dinámica de APIs remotas según el contexto de la conversación.
Antes de comenzar
Si tienes dificultades con las APIs existentes, usa el siguiente enfoque flexible:
- Crea Cloud Run Functions como wrapper de la API preexistente. Las Cloud Run Functions completan los parámetros obligatorios adicionales y realizan el procesamiento posterior de las respuestas de la API.
- Crea una herramienta de OpenAPI para llamar a tus Cloud Run Functions.
Si bien la API de Datastore puede requerir parámetros de entrada adicionales, como configurar el modo de resultado de la búsqueda, una función de Cloud Run solo requiere un parámetro (consulta), que el entrenador de IA puede extraer del contexto de la conversación. En cuanto al procesamiento de respuestas, las funciones de Cloud Run solo devuelven el resultado más relevante en lugar de todos los resultados.
Sigue estos pasos para acceder a Datastore.
Paso 1: Crea un almacén de datos y una app de búsqueda
- Sigue los pasos que se indican en Datastore para crear Datastore.
- Sigue los pasos para crear una app de búsqueda.
- Verifica la app de Datastore y de búsqueda con la API para verificar su tipo de solución, nivel de búsqueda y si la fragmentación está habilitada.
Ejecuta el siguiente comando para recuperar la fragmentación.
gcurl -sX GET \
"https://discoveryengine.googleapis.com/v1alpha/projects/${project_id}/locations/global/collections/default_collection/dataStores/${data_store_id}/documentProcessingConfig"
En el siguiente ejemplo, se muestra que la fragmentación está habilitada.
{
"name": "projects/${project_id}/locations/global/collections/default_collection/dataStores/${data_store_id}/documentProcessingConfig",
"chunkingConfig": {
"layoutBasedChunkingConfig": {
"chunkSize": 500,
"includeAncestorHeadings": true
}
},
"defaultParsingConfig": {
"digitalParsingConfig": {}
}
}
Ejecuta el siguiente comando para recuperar el tipo de solución y el nivel de búsqueda.
gcurl -X GET \
"https://discoveryengine.googleapis.com/v1alpha/projects/${project_id}/locations/global/collections/default_collection/engines/${data_store_id}"
En el siguiente ejemplo, se muestra que se verifican el tipo de solución y el nivel de búsqueda.
{
"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"
}
Paso 2: Crea funciones de Cloud Run para llamar a Datastore
Para autenticarte, configura tus funciones de Cloud Run para que requieran un token de identidad. Las funciones de Cloud Run ayudan a encapsular APIs complejas en APIs básicas. Realizan las siguientes acciones:
- Completa los campos adicionales de la solicitud.
- Llama a la API de Datastore para realizar la búsqueda.
- Procesa la respuesta de la API y devuelve los resultados principales.
Después de crear Cloud Run Functions, crea una herramienta de OpenAPI para invocar tus Cloud Run Functions.
En el siguiente ejemplo, las Cloud Run Functions convierten la API de Datastore para realizar búsquedas y brindarte una lista de resultados de la búsqueda.
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
Usa Shell para probar las Cloud Run Functions. Intenta enviar una búsqueda como cuál es el precio del iPhone 13, como se muestra en el siguiente ejemplo.
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"
Deberías recibir una respuesta como la siguiente:
{"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"}
Paso 3: Crea una herramienta de OpenAPI
Sigue los pasos que se indican en las herramientas OpenAPI y Integration Connectors para crear una herramienta de OpenAPI.
En el siguiente ejemplo, se ilustra cómo la herramienta de OpenAPI interactúa con la nueva API que proporcionan tus Cloud Run Functions.
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."
Paso 4: Crea un generador
Sigue los pasos que se indican en la herramienta de OpenAPI para crear un generador de entrenadores de IA. Usa el contenido del generador de entrenadores de IA para crear instrucciones para el LLM.