As ferramentas da OpenAPI permitem que o coach de IA recupere dados de APIs remotas de forma dinâmica com base no contexto da conversa.
Antes de começar
Se você tiver dificuldades com APIs preexistentes, use a seguinte abordagem flexível:
- Crie funções do Cloud Run como um wrapper da API preexistente. As funções do Cloud Run preenchem outros parâmetros obrigatórios e realizam o pós-processamento das respostas da API.
- criar uma ferramenta do OpenAPI para chamar 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 exige apenas um parâmetro (consulta), que o coach de IA pode extrair do contexto da conversa. Em termos de processamento de respostas, as funções do Cloud Run retornam apenas o principal resultado em vez de todos os resultados.
Siga estas etapas para acessar o Datastore.
Etapa 1: criar um repositório de dados e um app de pesquisa
- Siga as etapas em Datastore para criar o Datastore.
- Siga as etapas para criar um app de pesquisa.
- Verifique o app de pesquisa e o Datastore usando a API para verificar o tipo de solução, o nível de pesquisa e se o chunking está ativado.
Execute o comando a seguir para recuperar o chunking.
gcurl -sX GET \ "https://discoveryengine.googleapis.com/v1alpha/projects/${project_id}/locations/global/collections/default_collection/dataStores/${data_store_id}/documentProcessingConfig"
O exemplo a seguir mostra que o encadeamento está ativado.
{ "name": "projects/${project_id}/locations/global/collections/default_collection/dataStores/${data_store_id}/documentProcessingConfig", "chunkingConfig": { "layoutBasedChunkingConfig": { "chunkSize": 500, "includeAncestorHeadings": true } }, "defaultParsingConfig": { "digitalParsingConfig": {} } }
Execute o comando a seguir para recuperar 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 a seguir mostra que o tipo de solução e o nível de pesquisa são verificados.
{ "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" }
Etapa 2: criar funções do Cloud Run para chamar o Datastore
Para autenticar, configure as funções do Cloud Run para exigir um token de identidade. As funções do Cloud Run ajudam a encapsular APIs complexas em APIs básicas. Eles realizam as seguintes ações:
- Preenche outros campos na solicitação.
- Chama a API Datastore para realizar a pesquisa.
- Processa a resposta da API e retorna os principais resultados.
Depois de criar as funções do Cloud Run, crie uma ferramenta do OpenAPI para invocar essas funções.
No exemplo a seguir, as funções do Cloud Run convertem a API Datastore para realizar pesquisas e fornecer uma lista de resultados.
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. Envie uma consulta como qual é o preço do iphone 13, conforme mostrado no exemplo a seguir.
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"
Você vai receber uma resposta como esta:
{"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"}
Etapa 3: criar uma ferramenta do OpenAPI
Siga as etapas nas ferramentas OpenAPI e Integration Connectors para criar uma ferramenta OpenAPI.
O exemplo a seguir ilustra como a ferramenta OpenAPI interage com a nova API fornecida pelas 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."
Etapa 4: criar um gerador
Siga as etapas na ferramenta OpenAPI para criar um gerador de coach de IA. Use o conteúdo do gerador de coach de IA para criar comandos de LLM.