Dela via


Köra frågor mot routningsoptimerade serverslutpunkter

Den här artikeln beskriver hur du hämtar lämpliga autentiseringsuppgifter och webbadress så att du kan fråga din ruttoptimerade modellbetjänings eller funktionsbetjänings slutpunkt.

Kravspecifikation

  • En modell som betjänar slutpunkt eller funktionsserverslutpunkt som har routningsoptimering aktiverat. Se Ruttoptimering på serverändpunkter.
  • Det går bara att göra förfrågningar mot rout-optimerade slutpunkter med OAuth-tokens. Personliga åtkomsttoken stöds inte.

Hämta den ruttoptimerade URL:en

Varning

Från och med den 22 september 2025 måste alla nyskapade routningsoptimerade slutpunkter endast frågas via den routningsoptimerade URL:en. Slutpunkter som skapats efter det här datumet stöder inte frågor via arbetsytans URL.

Om din routningsoptimerade slutpunkt skapades före den 22 september 2025:

  • URL för standardarbetsyta kan också användas för att göra förfrågningar till slutpunkten. URL-sökvägen till standardarbetsytan ger inte fördelarna med ruttoptimering.

    https://<databricks-workspace>/serving-endpoints/<endpoint-name>/invocations

  • Routningsoptimerade slutpunkter som skapats före det här datumet fortsätter att stödja url:er för både anrop: den routningsoptimerade URL-sökvägen och url-sökvägen för standardarbetsytan.

När du skapar en vägoptimerad slutpunkt skapas följande routningsoptimerade URL för slutpunkten.

https://<unique-id>.<shard>.serving.azuredatabricks.net/<workspace-id>/serving-endpoints/<endpoint-name>/invocations

Du kan hämta den här URL:en från följande:

Serveringsgränssnitt

routningsoptimerad slutpunkts-URL

REST-API

Använd API-anropet GET /api/2.0/serving-endpoints/{name} . URL:en finns i svarsobjektet för slutpunkten som endpoint_url. Det här fältet fylls bara i om slutpunkten är routningsoptimerad.

GET /api/2.0/serving-endpoints/my-endpoint
{
  "name": "my-endpoint"
}

Databricks SDK

Använd samtalet Serving Endpoints API get . URL:en finns i svarsobjektet för slutpunkten som endpoint_url. Det här fältet fylls bara i om slutpunkten är routningsoptimerad.

from databricks.sdk import WorkspaceClient

workspace = WorkspaceClient()

workspace.serving_endpoints.get("my-endpoint")

Hämta en OAuth-token och anropa slutpunkten

Om du vill köra frågor mot din routningsoptimerade slutpunkt måste du använda en OAuth-token. Databricks rekommenderar att du använder tjänstens huvudnamn i dina produktionsprogram för att hämta OAuth-token programmatiskt. I följande avsnitt beskrivs rekommenderad vägledning om hur du hämtar en OAuth-token för test- och produktionsscenarier.

Hämta en OAuth-token med hjälp av användargränssnittet för servering

Följande steg visar hur du hämtar en token i användargränssnittet för servering. De här stegen rekommenderas för utveckling och testning av slutpunkten.

För användning i produktion, som att använda din ruttoptimerade slutpunkt i en applikation, hämtas din token med hjälp av ett tjänsthuvud. Se Hämta en OAuth-token programmatiskt för rekommenderad vägledning för att hämta din OAuth-token för produktionsanvändningsfall.

Från arbetsytans serveringsgränssnitt :

  1. På sidan Serveringsslutpunkter väljer du din routningsoptimerade slutpunkt för att se slutpunktsinformation.
  2. På sidan slutpunktsinformation väljer du knappen Använd .
  3. Välj fliken Hämta token.
  4. Välj knappen 'Hämta OAuth-token' . Den här token är giltig i 1 timme. Hämta en ny token om din aktuella token upphör att gälla.

När du har hämtat OAuth-token skickar du en förfrågan till slutpunkten med hjälp av slutpunkts-URL och OAuth-token.

REST-API

Följande är ett REST API-exempel:


URL="<endpoint-url>"
OAUTH_TOKEN="<token>"

curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OAUTH_TOKEN" \
  --data "@data.json" \
  "$URL"

python

Följande är ett Python-exempel:


import requests
import json

url = "<url>"
oauth_token = "<token>"

data = {
    "dataframe_split": {
        "columns": ["feature_1", "feature_2"],
        "data": [
            [0.12, 0.34],
            [0.56, 0.78],
            [0.90, 0.11]
        ]
    }
}

headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {oauth_token}"
}

response = requests.post(url, headers=headers, json=data)

# Print the response
print("Status Code:", response.status_code)
print("Response Body:", response.text)

Hämta en OAuth-token programmatiskt

För produktionssyften rekommenderar Databricks att du konfigurerar tjänstekonton för att integrera med ditt program och hämta OAuth-token på ett automatiserat sätt. Dessa hämtade token används för att skicka frågor till ruttoptimerade slutpunkter.

Följ stegen i Auktorisera tjänstens huvudnamnsåtkomst till Azure Databricks med OAuth via steg 2 för att skapa tjänstens huvudnamn, tilldela behörigheter och skapa en OAuth-hemlighet för tjänstens huvudnamn. När tjänstehuvudkontot har skapats måste du ge tjänstehuvudkontot minst begärandebehörighet på slutpunkten. Se Hantera behörigheter för en modell som betjänar slutpunkten.

Databricks Python SDK tillhandahåller ett API för att direkt fråga en routningsoptimerad slutpunkt.

Anmärkning

Databricks SDK är också tillgängligt i Go, se Databricks SDK för Go.

Nästa exempel kräver följande för att köra frågor mot en routningsoptimerad slutpunkt med hjälp av Databricks SDK:

  • Serverdelsnamn (SDK hämtar rätt slutpunkts-URL baserat på det här namnet)
  • Klient-ID för tjänstens huvudnamn
  • Tjänstens huvudnamnshemlighet
  • Värdnamn för arbetsyta
from databricks.sdk import WorkspaceClient
import databricks.sdk.core as client

endpoint_name = "<Serving-Endpoint-Name>" ## Insert the endpoint name here

# Initialize Databricks SDK
c = client.Config(
    host="<Workspace-Host>", ## For example, my-workspace.cloud.databricks.com
    client_id="<Client-Id>", ## Service principal ID
    client_secret="<Secret>"   ## Service principal secret
)
w = WorkspaceClient(
    config = c
)

response = w.serving_endpoints_data_plane.query(endpoint_name, dataframe_records = ....)

Hämta OAuth-tokenen manuellt

För scenarier där Databricks SDK eller serveringsgränssnittet inte kan användas för att hämta din OAuth-token kan du manuellt hämta en OAuth-token. Vägledningen i det här avsnittet gäller främst scenarier där användare har en anpassad klient som de vill använda för att köra frågor mot slutpunkten i produktionen.

När du hämtar en OAuth-token manuellt måste du ange authorization_details i begäran.

  • Skapa <token-endpoint-URL> genom att ersätta https://<databricks-instance> med arbetsytans URL för din Databricks-distribution i https://<databricks-instance>/oidc/v1/token. Till exempel: https://my-workspace.0.azuredatabricks.net/oidc/v1/token
  • Ersätt <client-id> med tjänstens huvudnamns klient-ID, som även kallas program-ID.
  • Ersätt <client-secret> med tjänstens huvudnamns OAuth-hemlighet som du skapade.
  • Ersätt <endpoint-id> med slutpunkts-ID för den routningsoptimerade slutpunkten. Det här är det alfanumeriska ID:t för slutpunkten som du hittar i hostName slutpunkts-URL:en. Om serverdelsslutpunkten till exempel är https://abcdefg.0.serving.azuredatabricks.net/9999999/serving-endpoints/test, är slutpunkts-ID:t abcdefg.
  • Ersätt <action> med åtgärdsbehörigheten som ges till tjänstens huvudnamn. Åtgärden kan vara query_inference_endpoint eller manage_inference_endpoint.

REST-API

Följande är ett REST API-exempel:



export CLIENT_ID=<client-id>
export CLIENT_SECRET=<client-secret>
export ENDPOINT_ID=<endpoint-id>
export ACTION=<action>  # for example, 'query_inference_endpoint'

curl --request POST \
--url <token-endpoint-URL> \
--user "$CLIENT_ID:$CLIENT_SECRET" \
--data 'grant_type=client_credentials&scope=all-apis'
--data-urlencode 'authorization_details=[{"type":"workspace_permission","object_type":"serving-endpoints","object_path":"'"/serving-endpoints/$ENDPOINT_ID"'","actions": ["'"$ACTION"'"]}]'

python

Följande är ett Python-exempel:

import os
import requests

# Set your environment variables or replace them directly here
CLIENT_ID = os.getenv("CLIENT_ID")
CLIENT_SECRET = os.getenv("CLIENT_SECRET")
ENDPOINT_ID = os.getenv("ENDPOINT_ID")
ACTION = "query_inference_endpoint" # Can also be `manage_inference_endpoint`

# Token endpoint URL
TOKEN_URL = "<token-endpoint-URL>"

# Build the payload, note the creation of authorization_details
payload = { 'grant_type': 'client_credentials', 'scope': 'all-apis', 'authorization_details': f'''[{{"type":"workspace_permission","object_type":"serving-endpoints","object_path":"/serving-endpoints/{ENDPOINT_ID}","actions":["{ACTION}"]}}]''' }

# Make the POST request with basic auth
response = requests.post( TOKEN_URL, auth=(CLIENT_ID, CLIENT_SECRET), data=payload )

# Check the response
if response.ok:
  token_response = response.json()
  access_token = token_response.get("access_token")
  if access_token:
    print(f"Access Token: {access_token}")
  else:
    print("access_token not found in response.")
else: print(f"Failed to fetch token: {response.status_code} {response.text}")

När du har hämtat OAuth-token skickar du en förfrågan till slutpunkten med hjälp av slutpunkts-URL och OAuth-token.

REST-API

Följande är ett REST API-exempel:


URL="<endpoint-url>"
OAUTH_TOKEN="<token>"

curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OAUTH_TOKEN" \
  --data "@data.json" \
  "$URL"

python

Följande är ett Python-exempel:


import requests
import json

url = "<url>"
oauth_token = "<token>"

data = {
    "dataframe_split": {
        "columns": ["feature_1", "feature_2"],
        "data": [
            [0.12, 0.34],
            [0.56, 0.78],
            [0.90, 0.11]
        ]
    }
}

headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {oauth_token}"
}

response = requests.post(url, headers=headers, json=data)

# Print the response
print("Status Code:", response.status_code)
print("Response Body:", response.text)