エージェントコードから直接REST APIを呼び出す

外部サービス独自のクライアント SDK と 共に Unity カタログ接続プロキシ エンドポイント を使用して、エージェント コードから REST API を直接呼び出します。 SDK のベース URL をプロキシ エンドポイントにポイントし、API キーとして Azure Databricks トークンを使用します。 Azure Databricks は要求を認証し、Unity カタログ接続から外部サービスの資格情報を自動的に挿入します。 コードは外部サービスのトークンを直接処理しません。

Requirements

  • Python 3.12とワークスペースへのサインイン。
  • 外部サービスのための Unity Catalog HTTP 接続。 プロキシエンドポイントはこの接続を利用して認証し、サービスの認証情報を注入します。
  • 接続オブジェクトに対する USE CONNECTION。

OpenAI

DatabricksOpenAIを使用して、Unity カタログ接続プロキシ経由で外部 OpenAI に呼び出しをルーティングします。 まず、 Databricks シークレットとして格納されている OpenAI API キーを使用して、Unity カタログ 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 --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

Unity カタログ接続プロキシ経由でルーティングするように Slack SDK を構成します。 ホスト https://slack.com とベースパス /apiでUnity CatalogのHTTP接続を作成し、プロキシURLをSDKのベースURLとして使います。 接続 slack_connection に名前を付け、Slack アプリのプロバイダーの認証情報を設定します。

ライブラリをインストールする:

pip install --upgrade slack-sdk databricks-sdk

<channel-id>を、Slackアプリが投稿できるチャンネルに置き換えましょう。 この例を実行すると次のメッセージが送信されます:

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

専用SDKを持たないサービスの場合は、プロキシURLを直接指定して requests ライブラリを使いましょう。 接続名、リソースパス、JSONボディを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)

プロキシ エンドポイント、サポートされている認証方法、接続のセットアップの詳細については、「 HTTP 接続プロキシを使用した要求の転送」を参照してください。

Unity Catalog 関数で包む http_request() (レガシー)

注

Azure Databricksは、エージェントを外部サービスに接続するために、上記の接続プロキシまたはMCPを推奨しています。 http_requestをラップするUnity Catalog関数ツールは引き続きサポートされていますが、もはや推奨される方法ではありません。

また、 http_request() をラップして外部サービスを呼び出すUnity Catalog関数を作成することもでき、SQLベースのツール定義に役立ちます。 この関数はプロキシ方式と同じUnity CatalogのHTTP接続を使用し、 conn パラメータで名前で参照されます。

以下の例は上記の slack_connection を用いており、その基底経路は /apiです。 Slack チャンネル ID を<channel-id>に置き換えます。 この関数は呼び出し時にメッセージを投稿します:

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;

CREATE FUNCTION (SQL、Python、Scala、Java) を参照してください。

注

http_requestを使用した SQL アクセスは、ユーザーごとのユーザー間接続と動的クライアント登録接続の種類に対してブロックされます。 代わりに Python Azure Databricks SDK を使用してください。