Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo notebook illustra come chiamare un endpoint di Ricerca vettoriale usando l'SDK di ricerca vettoriale o HTTP con un nuovo token OAuth. In entrambi i casi viene usato il percorso ottimizzato per la rete, come consigliato per qualsiasi carico di lavoro di produzione.
Le chiamate HTTP per la creazione di un token e la chiamata dell'endpoint possono essere implementate in un linguaggio di propria scelta. Per le applicazioni di produzione, tenere presente che il token deve essere aggiornato ogni 60 minuti. Per evitare errori dovuti a un token non aggiornato, Databricks consiglia di aggiornarlo a intervalli inferiori a 60 minuti.
Setup
%pip install databricks-sdk
%pip install databricks-vectorsearch
dbutils.library.restartPython()
import requests
import json
import random
from databricks.sdk import WorkspaceClient
import logging
Costanti di configurazione
Per informazioni dettagliate su come creare un Principal del Servizio, consultare la documentazione di 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')}"
Ricerca vettoriale di query usando il client Python
Per informazioni dettagliate, vedere la documentazione dell'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)
Chiamare La ricerca vettoriale usando una richiesta HTTP
Questa sezione illustra come chiamare un indice di ricerca vettoriale usando HTTP, che è quindi possibile implementare in uno strumento o in un linguaggio di propria scelta.
Generare un token OAuth usando una chiamata API
Per chiamare un endpoint usando un percorso ottimizzato per la rete, è necessario un token OAuth. Il codice seguente crea il 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")
Ricerca vettoriale con query utilizzando il client Python
Per usare JavaScript o altri strumenti per eseguire query sulla ricerca vettoriale, creare la query e inviarla all'endpoint di ricerca vettoriale.
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))