As ferramentas da OpenAPI permitem que o coach de IA obtenha dinamicamente dados de APIs remotas com base no contexto da conversa.
Antes de começar
Se tiver dificuldades com APIs pré-existentes, use a seguinte abordagem flexível:
- Crie funções do Cloud Run como um wrapper da API pré-existente. As funções do Cloud Run preenchem parâmetros obrigatórios adicionais e realizam o pós-processamento das respostas da API.
- Crie uma ferramenta OpenAPI para chamar as suas funções do Cloud Run.
Embora a API Datastore possa exigir parâmetros de entrada adicionais, como a definição do modo de resultado da pesquisa, uma função do Cloud Run requer apenas um parâmetro (consulta), que o treinador de IA pode extrair do contexto da conversa. Em termos de processamento de respostas, as funções do Cloud Run devolvem apenas o resultado mais relevante em vez de todos os resultados.
Siga estes passos para aceder ao Datastore.
Passo 1: crie a app de pesquisa e o Datastore
- Siga os passos em Datastore para criar o Datastore.
- Siga os passos para criar uma app de pesquisa.
- Verifique a app de pesquisa e o Datastore através da API para confirmar o respetivo tipo de solução, nível de pesquisa e se a divisão em partes está ativada.
Execute o seguinte comando para obter a divisão em partes.
gcurl -sX GET \ "https://discoveryengine.googleapis.com/v1alpha/projects/${project_id}/locations/global/collections/default_collection/dataStores/${data_store_id}/documentProcessingConfig"
O exemplo seguinte mostra que a divisão em blocos está ativada.
{ "name": "projects/${project_id}/locations/global/collections/default_collection/dataStores/${data_store_id}/documentProcessingConfig", "chunkingConfig": { "layoutBasedChunkingConfig": { "chunkSize": 500, "includeAncestorHeadings": true } }, "defaultParsingConfig": { "digitalParsingConfig": {} } }
Execute o seguinte comando para obter o tipo de solução e o nível de pesquisa.
gcurl -X GET \ "https://discoveryengine.googleapis.com/v1alpha/projects/${project_id}/locations/global/collections/default_collection/engines/${data_store_id}"
O exemplo seguinte mostra que o tipo de solução e o nível de pesquisa estão validados.
{ "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" }
Passo 2: crie funções do Cloud Run para chamar o Armazenamento de Dados
Para autenticar, configure as suas funções do Cloud Run para exigirem um token de identidade. As funções do Cloud Run ajudam a encapsular APIs complexas em APIs básicas. Realizam as seguintes ações:
- Preenche campos adicionais no pedido.
- Chama a API Datastore para realizar a pesquisa.
- Processa a resposta da API e devolve os principais resultados.
Depois de criar funções do Cloud Run, crie uma ferramenta OpenAPI para invocar as suas funções do Cloud Run.
No exemplo seguinte, as funções do Cloud Run convertem a API Datastore para realizar pesquisas e fornecer-lhe uma lista de resultados da pesquisa.
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
Use o Shell para testar as funções do Cloud Run. Experimente enviar uma consulta como qual é o preço do iphone 13, conforme mostrado no exemplo seguinte.
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"
Deve receber uma resposta semelhante à seguinte:
{"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"}
Passo 3: crie uma ferramenta OpenAPI
Siga os passos nas ferramentas OpenAPI e Integration Connectors para criar uma ferramenta OpenAPI.
O exemplo seguinte ilustra como a ferramenta OpenAPI interage com a nova API fornecida pelas suas funções do Cloud Run.
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."
Passo 4: crie um gerador
Siga os passos na ferramenta OpenAPI para criar um gerador de treinadores de IA. Use o conteúdo do gerador de treinadores de IA para criar comandos de MDIs.