Pular para o conteúdo principal

Utilize a Pesquisa Vetorial com tokens OAuth

Este notebook mostra como chamar um endpoint do Vector Search usando o SDK do Vector Search ou HTTP com tokens OAuth novos. Em ambos os casos, é utilizado o caminho otimizado pela rede, conforme recomendado para qualquer carga de trabalho de produção.

As chamadas HTTP para criar tokens e acessar o endpoint podem ser implementadas na linguagem de sua escolha. Para aplicações em produção, lembre-se de que os tokens devem ser atualizados a cada 60 minutos. Para evitar erros devido a tokens desatualizados, Databricks recomenda atualizá-los em intervalos inferiores a 60 minutos.

Configurar

Python
%pip install databricks-sdk
%pip install databricks-vectorsearch
dbutils.library.restartPython()
Python
import requests
import json
import random
from databricks.sdk import WorkspaceClient
import logging

Constantes de configuração

Para obter detalhes sobre como criar uma entidade de serviço, consulte a documentação do Databricks.

Python
# Define the secret ID and secret for the service principal
CLIENT_ID = dbutils.secrets.get(scope="scope", key="service_principal_client_id")
CLIENT_SECRET = dbutils.secrets.get(scope="scope", key="service_principal_client_secret")

# You can get it by clicking the copy button next to the index name
INDEX_NAME="UC_CATALOG_INDEX_NAME"
ENDPOINT_NAME="ENDPOINT_NAME"

workspace_url = f"https://{spark.conf.get('spark.databricks.workspaceUrl')}"

Pesquisa vetorial de consulta usando o cliente Python

Para obter detalhes, consulte a documentação da API.

Python
from databricks.vector_search.client import VectorSearchClient

vsc_dp = VectorSearchClient(
service_principal_client_id=CLIENT_ID,
service_principal_client_secret=CLIENT_SECRET,
workspace_url=workspace_url)

index = vsc_dp.get_index(endpoint_name=ENDPOINT_NAME, index_name=INDEX_NAME)
index.similarity_search(["text"], query_vector=[0]*2560, num_results=5, debug_level=0)

Chamada de pesquisa vetorial usando uma solicitação HTTP

Esta seção mostra como chamar um índice de pesquisa vetorial usando HTTP, que você poderá implementar em uma ferramenta ou linguagem de sua escolha.

Gere tokens OAuth usando uma chamada API .

Para acessar um endpoint usando um caminho otimizado para rede, você precisa de um token OAuth . O código a seguir cria os tokens.

Python
url = f"{workspace_url}/oidc/v1/token"
deets = json.dumps([
{
"type": "unity_catalog_permission",
"securable_type": "table",
"securable_object_name": INDEX_NAME,
"operation": ("ReadVectorIndex"),
},
])
payload = { 'grant_type': 'client_credentials', 'scope': 'all-apis', 'authorization_details': deets}

response = requests.post(
url=url,
auth=(CLIENT_ID, CLIENT_SECRET),
headers={"Content-Type": "application/x-www-form-urlencoded"},
data=payload,
)
if response.status_code != 200:
logging.error(f"OAuth token request failed: {response.status_code} - {response.text}")
response.raise_for_status()

token_data = response.json()
access_token = token_data.get("access_token")
if not access_token:
raise ValueError("Failed to get access token")

Pesquisa vetorial de consulta usando cliente Python

Para usar JavaScript ou alguma outra ferramenta para consultar a busca vetorial, crie a consulta e envie-a para o endpoint de busca vetorial.

Python
index = vsc_dp.get_index(endpoint_name=ENDPOINT_NAME, index_name=INDEX_NAME)
index_url = index.index_url
print(index_url)

headers = {"Authorization": f"Bearer {access_token}"}
payload = {
"query_vector": [0]*2560,
"num_results": 5,
"columns": ["text"]}

response = requests.post(index_url+"/query", headers=headers, data=json.dumps(payload))
print(response.status_code)
print(json.dumps(response.json(), indent=2))

Exemplo de caderno

Utilize a Pesquisa Vetorial com tokens OAuth

Abrir notebook em uma nova aba