Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este cuaderno se muestra cómo llamar a un punto de conexión de búsqueda vectorial mediante el SDK de búsqueda vectorial o HTTP con un token de OAuth nuevo. En ambos casos, se usa la ruta de acceso optimizada de la red, como se recomienda para cualquier carga de trabajo de producción.
Las llamadas HTTP para crear un token y llamar al punto de conexión se pueden implementar en un lenguaje de su elección. En el caso de las aplicaciones de producción, tenga en cuenta que el token debe actualizarse cada 60 minutos. Para evitar errores debido a un token obsoleto, Databricks recomienda actualizarlo en un intervalo de menos de 60 minutos.
Configuración
%pip install databricks-sdk
%pip install databricks-vectorsearch
dbutils.library.restartPython()
import requests
import json
import random
from databricks.sdk import WorkspaceClient
import logging
Constantes de configuración
Para obtener más detalles sobre cómo crear un principal de servicio, consulte la documentación de Databricks.
# 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')}"
Búsqueda de vectores de consulta usando el cliente de Python
Para más información, consulte la documentación de api.
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)
Búsqueda de vectores de llamada mediante una solicitud HTTP
En esta sección se muestra cómo llamar a un índice de búsqueda vectorial mediante HTTP, que luego puede implementar en una herramienta o idioma de su elección.
Generación de un token de OAuth mediante una llamada API
Para llamar a un punto de conexión mediante una ruta de acceso optimizada para red, necesita un token de OAuth. El código siguiente crea el token.
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")
Búsqueda de vectores de consulta mediante cliente de Python
Para usar JavaScript u otra herramienta para consultar la búsqueda de vectores, cree la consulta y envíela al punto de conexión de búsqueda vectorial.
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))