Chame APIs REST diretamente do código do agente

Use o Ponto de extremidade de proxy de conexões do Catálogo do Unity com o SDK do cliente próprio do serviço externo para chamar APIs REST diretamente do código do agente. Aponte a URL base do SDK para o ponto de extremidade do proxy e use seu token do Azure Databricks como a chave de API. Azure Databricks autentica a solicitação e injeta automaticamente as credenciais do serviço externo a partir da conexão do Unity Catalog. Seu código não lida diretamente com os tokens do serviço externo.

Requirements

  • Python 3.12 e login no espaço de trabalho.
  • Uma conexão HTTP do Unity Catalog para o serviço externo. O endpoint proxy usa essa conexão para autenticar e injetar as credenciais do serviço.
  • USE CONNECTION no objeto de conexão.

OpenAI

Use DatabricksOpenAI para rotear chamadas para o OpenAI externo por meio do proxy de conexões do Unity Catalog. Primeiro, crie uma conexão HTTP do Catálogo do Unity usando sua chave de API OpenAI armazenada como um segredo do Databricks:

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

Em seguida, instale o pacote databricks-openai e use a URL do proxy e o cliente de workspace no código do agente.

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

Configure o SDK do Slack para rotear por meio do proxy de conexões do Catálogo do Unity. Crie uma conexão HTTP do Unity Catalog com host /api e caminho base https://slack.com, depois use a URL do proxy como a URL base do SDK. Nomeie a conexão slack_connection e configure as credenciais do provedor para o seu aplicativo Slack.

Instale as bibliotecas:

pip install --upgrade slack-sdk databricks-sdk

Substitua <channel-id> por um canal onde seu app do Slack possa postar. Executar este exemplo envia uma mensagem:

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 Genérico

Para serviços sem SDK dedicado, use diretamente a biblioteca requests com a URL do proxy. Substitua o nome da conexão, o caminho do recurso e o corpo do JSON por valores para sua 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)

Para obter detalhes sobre o endpoint do proxy, os métodos de autenticação compatíveis e a configuração da conexão, consulte Encaminhar solicitações pelo proxy de conexão HTTP.

Envolver http_request() em uma função do Unity Catalog (legado)

Observação

O Azure Databricks recomenda o proxy de conexões mostrado acima ou MCPs para conectar agentes a serviços externos. As ferramentas funcionais do Unity Catalog que envolvem http_request continuam suportadas, mas não são mais a abordagem recomendada.

Você também pode criar uma função do Unity Catalog que encapsula http_request() para chamar serviços externos, o que é útil para definições de ferramentas baseadas em SQL. A função usa a mesma conexão HTTP do Unity Catalog usada pela abordagem de proxy, referenciada pelo nome no parâmetro conn.

O exemplo a seguir usa o slack_connection acima, cujo caminho base é /api. Substitua <channel-id> pelo ID do canal do Slack. A função envia uma mensagem quando invocada:

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;

Consulte CREATE FUNCTION (SQL, Python, Scala e Java).

Observação

O acesso SQL com http_request está bloqueado para os tipos de conexão Usuário para Maquina por Usuário e Registro Dinâmico de Cliente. Em vez disso, use o SDK Python Azure Databricks.