通过


将代理连接到外部服务

Important

此功能目前以公共预览版提供。

使用 API 将 AI 代理 连接到 Slack、Google Calendar 或任何服务等外部应用程序。 Azure Databricks提供了多种方法,具体取决于外部服务是否具有 MCP 服务器、是否需要每用户身份验证,还是希望直接从代理代码调用 API。 所有方法都依赖于 Unity 目录 HTTP 连接 来安全地管理凭据并控制对外部服务的访问权限。

方法 建议的用例
外部 MCP 服务器 对于发布 MCP 服务器的服务,请使用此方法。 它提供自动工具发现,适用于标准 SDK。
托管 OAuth 将此方法用于 Google Drive 或SharePoint集成。 Azure Databricks管理 OAuth 凭据,因此无需应用注册。
UC 连接代理 使用此方法通过外部服务的客户端 SDK 从代理代码进行直接 REST API 调用。
UC 函数工具 将此方法用于包装 http_request() 函数的基于 SQL 的工具定义。

Requirements

  • 用于外部应用程序的 Unity Catalog HTTP 连接。 Unity 目录连接提供安全、受治理的凭据管理并启用多种身份验证方法,包括 OAuth 2.0 用户到计算机和计算机到计算机身份验证。

外部 MCP 服务器

如果外部服务提供 MCP 服务器,Azure Databricks建议通过 external MCP 服务器进行连接。 MCP 服务器提供自动工具发现、简化集成和每用户身份验证。 有关安装方法、编程用法和身份验证详细信息,请参阅 “使用外部 MCP 服务器 ”。

将外部 MCP 服务器添加到代理

将外部 MCP 服务器注册为 Unity 目录连接后,使用托管 MCP URL 将代理连接到该服务器: https://<workspace-hostname>/api/2.0/mcp/external/{connection_name}<connection-name> 替换为 Unity Catalog 连接的名称。

OpenAI 代理 SDK (应用)

from agents import Agent, Runner
from databricks.sdk import WorkspaceClient
from databricks_openai.agents import McpServer

workspace_client = WorkspaceClient()
host = workspace_client.config.host

async with McpServer(
    url=f"{host}/api/2.0/mcp/external/<connection-name>",
    name="external-service",
    workspace_client=workspace_client,
) as external_server:
    agent = Agent(
        name="Connected agent",
        instructions="You are a helpful assistant with access to external services.",
        model="databricks-claude-sonnet-4-5",
        mcp_servers=[external_server],
    )
    result = await Runner.run(agent, "Send a Slack message to the team about the deployment")
    print(result.final_output)

授予应用在 databricks.yml 的 Unity Catalog 连接上的访问权限:

resources:
  apps:
    my_agent_app:
      resources:
        - name: 'my_connection'
          uc_securable:
            securable_full_name: '<connection-name>'
            securable_type: 'CONNECTION'
            permission: 'USE_CONNECTION'

LangGraph (应用)

from databricks.sdk import WorkspaceClient
from databricks_langchain import ChatDatabricks, DatabricksMCPServer, DatabricksMultiServerMCPClient
from langgraph.prebuilt import create_react_agent

workspace_client = WorkspaceClient()
host = workspace_client.config.host

mcp_client = DatabricksMultiServerMCPClient([
    DatabricksMCPServer(
        name="external-service",
        url=f"{host}/api/2.0/mcp/external/<connection-name>",
        workspace_client=workspace_client,
    ),
])

async with mcp_client:
    tools = await mcp_client.get_tools()
    agent = create_react_agent(
        ChatDatabricks(endpoint="databricks-claude-sonnet-4-5"),
        tools=tools,
    )
    result = await agent.ainvoke(
        {"messages": [{"role": "user", "content": "Send a Slack message to the team about the deployment"}]}
    )
    print(result["messages"][-1].content)

databricks.yml 中授予应用对 Unity 目录连接的访问权限:

resources:
  apps:
    my_agent_app:
      resources:
        - name: 'my_connection'
          uc_securable:
            securable_full_name: '<connection-name>'
            securable_type: 'CONNECTION'
            permission: 'USE_CONNECTION'

模型服务

from databricks.sdk import WorkspaceClient
from databricks_mcp import DatabricksMCPClient
import mlflow

workspace_client = WorkspaceClient()
host = workspace_client.config.host

mcp_client = DatabricksMCPClient(
    server_url=f"{host}/api/2.0/mcp/external/<connection-name>",
    workspace_client=workspace_client,
)

tools = mcp_client.list_tools()

mlflow.pyfunc.log_model(
    "agent",
    python_model=my_agent,
    resources=mcp_client.get_databricks_resources(),
)

若要部署代理,请参阅部署用于生成 AI 应用程序的代理(模型服务)。 有关使用 MCP 资源的日志记录代理的详细信息,请参阅 使用 Databricks 托管 MCP 服务器

托管 OAuth

Azure Databricks 为指定的 API 工具提供商提供托管的 OAuth 流程。 无需注册自己的 OAuth 应用或管理凭据。 Azure Databricks建议使用托管 OAuth 进行开发和测试。 如果生产用例需要生成自定义 OAuth 凭据,请参阅提供程序的文档了解详细信息。

以下集成使用Azure Databricks托管的 OAuth 凭据安全地存储在后端中。

Provider 配置说明 支持的范围 说明
Google Drive API 没有 https://www.googleapis.com/auth/drive.readonly https://www.googleapis.com/auth/documents.readonly https://www.googleapis.com/auth/spreadsheets.readonly offline_access 对 Google Drive 文件的只读访问权限。
SharePoint API 没有 https://graph.microsoft.com/Sites.Read.All offline_access openid profile 对SharePoint站点的只读访问权限。

若要设置托管 OAuth,请创建具有 OAuth 用户到机器逐用户 身份验证类型的 HTTP 连接,并从 OAuth 提供者 下拉菜单中选择您的提供者。 有关详细步骤,请参阅 安装外部 MCP 服务器

系统会提示每个用户在首次使用时向提供程序授权。

如果需要,请列出托管 OAuth 使用的以下重定向 URI:

重定向 URI
AWS https://oregon.cloud.databricks.com/api/2.0/http/oauth/redirect
Azure https://westus.azuredatabricks.net/api/2.0/http/oauth/redirect
GCP https://us-central1.gcp.databricks.com/api/2.0/http/oauth/redirect

UC 连接代理端点

Unity 目录连接代理终结点 与外部服务的客户端 SDK 配合使用,直接从代理代码调用 REST API。 将 SDK 的基础 URL 指向代理终结点,并使用 Azure Databricks 令牌作为 API 密钥。 Azure Databricks对请求进行身份验证,并从 Unity 目录连接自动注入外部服务的凭据。 代码永远不会直接处理外部服务的令牌。

所需的权限:USE CONNECTION 在连接对象上。

OpenAI

使用 DatabricksOpenAI 通过 Unity Catalog 连接代理将调用路由到外部的 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 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 目录连接代理进行路由。 使用主机 https://slack.com 和基路径 /api创建 Unity 目录 HTTP 连接,然后使用代理 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"])

泛型 HTTP

对于没有专用 SDK 的服务,请直接将 requests 库与代理 URL 配合使用:

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 连接的 UC 功能工具

Note

Azure Databricks建议使用 MCP 服务器或 UC 连接代理进行新的集成。 UC 函数工具 http_request 仍受支持,但不再是推荐的方法。

可以创建一个 Unity Catalog 函数来封装 http_request() 以调用外部服务。 此方法适用于基于 SQL 的工具定义。 有关创建 UC 函数的详细信息,请参阅 使用 Unity 目录函数创建 AI 代理 工具。

以下示例创建一个 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)

Note

针对“用户到机器每用户”连接类型,阻止了使用 http_request 进行 SQL 访问。 请改用Python Azure Databricks SDK。

示例笔记本

将代理连接到 Slack

请参阅 将 AI 代理连接到 Slack

将代理连接到 Microsoft Teams

请参阅 连接 AI 代理到 Microsoft Teams

外部连接工具

以下笔记本演示如何创建连接到 Slack、OpenAI 和 Azure AI 搜索的 AI 代理工具。

Slack 消息传送代理工具

获取笔记本

Microsoft 图形 API 代理工具

获取笔记本

Azure AI 搜索 代理工具

获取笔记本