Rufen Sie REST-APIs direkt aus dem Agentencode auf

Verwenden Sie den Unity Catalog Connections-Proxyendpunkt mit dem eigenen Client-SDK des externen Diensts, um REST-APIs direkt aus dem Agentcode aufzurufen. Verweisen Sie die Basis-URL des SDK auf den Proxyendpunkt, und verwenden Sie Ihr Azure Databricks-Token als API-Schlüssel. Azure Databricks authentifiziert die Anforderung und fügt automatisch die Anmeldeinformationen des externen Diensts aus der Unity-Katalogverbindung ein. Ihr Code behandelt die Token des externen Diensts nicht direkt.

Anforderungen

  • Python 3.12 und Workspace-Anmeldung.
  • Eine Unity Catalog HTTP-Verbindung für den externen Dienst. Der Proxy-Endpunkt nutzt diese Verbindung, um die Zugangsdaten des Dienstes zu authentifizieren und einzuschleusen.
  • USE CONNECTION für das Verbindungsobjekt.

OpenAI

Verwenden Sie DatabricksOpenAI, um Anrufe an externe OpenAI über den Unity Catalog-Verbindungsproxy weiterzuleiten. Erstellen Sie zunächst eine Unity-Katalog-HTTP-Verbindung mit Ihrem OpenAI-API-Schlüssel, der als Databricks-Schlüssel gespeichert ist:

CREATE CONNECTION openai_connection TYPE HTTP
OPTIONS (
  host 'https://api.openai.com',
  base_path '/v1',
  bearer_token secret ('<secret-scope>', '<secret-key>')
);

Installieren Sie dann das databricks-openai Paket, und verwenden Sie den Proxy-URL- und Arbeitsbereichsclient in Ihrem Agentcode:

pip install --upgrade databricks-openai
from databricks_openai import DatabricksOpenAI
from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

client = DatabricksOpenAI(
    workspace_client=w,
    base_url=f"{w.config.host}/api/2.0/unity-catalog/connections/openai_connection/proxy/",
)

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Hello!"}],
)
print(response.choices[0].message.content)

Slack

Konfigurieren Sie das Slack-SDK, um den Unity Catalog-Verbindungsproxy zu durchlaufen. Erstelle eine Unity Catalog HTTP-Verbindung mit Host https://slack.com und Basispfad /apiund verwende dann die Proxy-URL als SDK-Basis-URL. Benenne die Verbindung slack_connection und konfiguriere die Provider-Zugangsdaten für deine Slack-App.

Installieren Sie die Bibliotheken:

pip install --upgrade slack-sdk databricks-sdk

Ersetze <channel-id> durch einen Kanal, auf dem deine Slack-App posten kann. Das Ausführen dieses Beispiels sendet eine Nachricht:

from slack_sdk import WebClient
from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

client = WebClient(
    token=w.config.authenticate()["Authorization"].split(" ")[1],
    base_url=f"{w.config.host}/api/2.0/unity-catalog/connections/slack_connection/proxy/",
)

result = client.chat_postMessage(channel="<channel-id>", text="Hello from Databricks!")
print(result["message"]["text"])

Generisches HTTP

Für Dienste ohne dediziertes SDK verwenden Sie die requests Bibliothek mit der Proxy-URL direkt. Ersetze den Verbindungsnamen, den Ressourcenpfad und den JSON-Körper durch Werte für deine API.

pip install --upgrade requests databricks-sdk
import requests
from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

response = requests.post(
    f"{w.config.host}/api/2.0/unity-catalog/connections/my_connection/proxy/api/v1/resource",
    headers={
        **w.config.authenticate(),
        "Content-Type": "application/json",
    },
    json={"key": "value"},
    timeout=30,
)
response.raise_for_status()
print(response.text)

Ausführliche Informationen zum Proxyendpunkt, unterstützten Authentifizierungsmethoden und Verbindungseinrichtung finden Sie unter Weiterleitungsanforderungen über den HTTP-Verbindungsproxy.

Verpacken von http_request() in eine Unity Catalog-Funktion (Legacy)

Note

Azure Databricks empfiehlt den oben gezeigten Connections-Proxy oder MCPs, um Agenten mit externen Diensten zu verbinden. Unity-Catalog-Funktions-Tools, die http_request umschließen, werden weiterhin unterstützt, sind aber nicht mehr die empfohlene Vorgehensweise.

Sie können auch eine Unity-Catalog-Funktion erstellen, die http_request() kapselt, um externe Dienste aufzurufen, was für SQL-basierte Tooldefinitionen nützlich ist. Die Funktion verwendet dieselbe Unity Catalog HTTP-Verbindung wie der Proxy-Ansatz, der im Parameter conn nach Namen referenziert wird.

Das folgende Beispiel verwendet das obige slack_connection, dessen Basispfad /api ist. Ersetze <channel-id> durch deine Slack-Kanal-ID. Die Funktion postet eine Nachricht, wenn sie aufgerufen wird:

CREATE OR REPLACE FUNCTION main.default.slack_post_message(
  text STRING COMMENT 'message content'
)
RETURNS STRING
COMMENT 'Sends a Slack message by passing in the message and returns the response received from the external service.'
RETURN (http_request(
  conn => 'slack_connection',
  method => 'POST',
  path => '/chat.postMessage',
  json => to_json(named_struct(
    'channel', '<channel-id>',
    'text', text
  ))
)).text;

Siehe CREATE FUNCTION (SQL, Python, Scala und Java).

Note

SQL-Zugriff mit http_request ist für die Verbindungstypen "Benutzer-zu-Maschine pro Benutzer" und "Dynamische Clientregistrierung" blockiert. Verwenden Sie stattdessen das Python Azure Databricks SDK.