直接從代理程式碼呼叫 REST API

使用 Unity Catalog 的 Connections 代理端點 ,搭配外部服務的客戶端 SDK 直接從代理程式碼呼叫 REST API。 將 SDK 的基礎 URL 指向代理端點,並使用 Azure Databricks 令牌作為 API 金鑰。 Azure Databricks 會驗證請求,並自動從 Unity 目錄連線注入外部服務的憑證。 你的程式碼不會直接處理外部服務的標記。

要求

  • 用於外部服務的 Unity Catalog HTTP 連線。 代理端點利用此連線進行認證並注入服務憑證。
  • USE CONNECTION 在連接物件上。

OpenAI

用 DatabricksOpenAI 來透過 Unity Catalog 連線代理將呼叫路由到外部 OpenAI。 首先,使用你儲存在 Databricks 秘密中的 OpenAI API 金鑰建立一個 Unity Catalog HTTP 連線:

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

接著安裝套件 databricks-openai ,並在代理程式碼中使用代理 URL 和工作空間客戶端:

pip install 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

設定 Slack SDK 讓它透過 Unity Catalog 連線代理路由。 建立一個 Unity Catalog HTTP 連線,包含主機 https://slack.com 和基礎路徑 /api,然後使用代理 URL 作為 SDK 的基礎 URL:

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="C123456", text="Hello from Databricks!")
print(result["message"]["text"])

泛型 ODBC

對於沒有專用 SDK 的服務,請直接使用帶有代理網址的 requests 函式庫:

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"},
)

關於代理端點、支援的認證方法及連線設定的詳細資訊,請參閱 透過 HTTP 連線代理轉發請求。

將 http_request() 包裝成 Unity Catalog 函式

Note

Azure Databricks 建議使用上述的連線代理或 MCP Services,將代理連接到外部服務。 封裝 http_request 的 Unity Catalog 函式工具仍受支援,但已不再是建議採用的做法。

你也可以建立一個 Unity 目錄函式,包裝 http_request() 以呼叫外部服務,這對於基於 SQL 的工具定義很有用。 該函式使用與代理方式相同的 Unity Catalog HTTP 連線,並在參數中以名稱 conn 作為參考。

以下範例建立一個 Unity 目錄函式工具,將訊息發佈到 Slack:

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 => 'test_sql_slack',
  method => 'POST',
  path => '/api/chat.postMessage',
  json => to_json(named_struct(
    'channel', "C032G2DAH3",
    'text', text
  ))
)).text

參見CREATE FUNCTION(SQL、Python、Scala 和 Java)。

Note

使用者對機器每使用者及動態客戶端註冊這兩種連線類型的 SQL 存取 http_request 已被封鎖。 改用 Python Azure Databricks SDK 吧。