Aller au contenu principal

Appeler des APIs REST directement depuis le code de l’agent

Utilisez l'Endpoint proxy de connexions Unity Catalog avec le SDK client propre au service externe pour appeler directement des APIs REST à partir du code de l'agent. Pointez l'URL de base du SDK vers l'endpoint proxy et utilisez votre jeton Databricks comme clé d'API. Databricks authentifie la requête et injecte automatiquement les identifiants du service externe à partir de la connexion Unity Catalog. Votre code ne gère pas directement les jetons du service externe.

Exigences​

  • Python 3.12 et connexion au workspace.
  • Une connexion HTTP Unity Catalog pour le service externe. L'Endpoint proxy utilise cette connexion pour s'authentifier et injecter les identifiants du service.
  • USE CONNECTION sur l’objet de connexion.

OpenAI​

Utilisez DatabricksOpenAI pour acheminer les appels vers OpenAI externe via le proxy des connexions Unity Catalog. Tout d'abord, créez une connexion HTTP Unity Catalog à l'aide de votre clé API OpenAI stockée en tant que secret Databricks:

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

Ensuite, installez le package databricks-openai et utilisez l'URL de proxy et le client Workspace dans votre code d'agent :

Bash
pip install --upgrade databricks-openai
Python
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​

Configurez le SDK Slack pour qu’il passe par le proxy des connexions Unity Catalog. Créez une connexion HTTP Unity Catalog avec l'hôte https://slack.com et le chemin de base /api, puis utilisez l'URL du proxy comme URL de base du SDK. Nommez la connexion slack_connection et configurez les identifiants du fournisseur pour votre application Slack.

Installer les bibliothèques :

Bash
pip install --upgrade slack-sdk databricks-sdk

Remplacez <channel-id> par un canal de distribution où votre application Slack peut publier. L’exécution de cet exemple envoie un message :

Python
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"])

HTTP générique​

Pour les services dépourvus de SDK dédié, utilisez directement la bibliothèque requests avec l'URL du proxy. Remplacez le nom de la connexion, le chemin de la ressource et le corps JSON par les valeurs correspondant à votre API.

Bash
pip install --upgrade requests databricks-sdk
Python
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)

Pour plus de détails sur l’endpoint proxy, les méthodes d’authentification prises en charge et la configuration de la connexion, consultez Transférer les requêtes via le proxy de connexion HTTP.

Encapsuler http_request() dans une fonction Unity Catalog (hérité)​

remarque

Databricks recommande le proxy de connexions illustré ci-dessus ou les MCP pour connecter des agents à des services externes. Les outils de fonction Unity Catalog qui encapsulent http_request restent pris en charge, mais ne constituent plus l'approche recommandée.

Vous pouvez également créer une fonction Unity Catalog qui encapsule http_request() pour appeler des services externes, ce qui est utile pour les définitions d’outils basées sur SQL. La fonction utilise la même connexion HTTP Unity Catalog que l’approche par proxy, référencée par son nom dans le parameter conn.

L'exemple suivant utilise le slack_connection ci-dessus, dont le chemin de base est /api. Remplacez <channel-id> par l'identifiant de votre canal de distribution Slack. La fonction publie un message lorsqu'elle est invoquée :

SQL
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;

Voir CREATE FUNCTION (SQL, Python, Scala et Java).

remarque

L'accès SQL avec http_request est bloqué pour les types de connexion User-to-Machine Per User et Dynamic Client Registration. Utilisez plutôt le SDK Databricks Python.