Crie ferramentas de agente de AI usando funções do Unity Catalog
Use funções do Unity Catalog para criar ferramentas de agente de AI que executam lógica personalizada e realizam tarefas específicas que estendem as capacidades de LLMs além da geração de linguagem.
Quando usar funções do Unity Catalog vs. servidores MCP
O Databricks recomenda o uso de funções do Unity Catalog como ferramentas de agente, especificamente para ferramentas de recuperação de dados estruturados, quando a query é conhecida antecipadamente e o agente fornece os parâmetros. Consulte Conectar agentes a dados estruturados.
Na maioria dos outros casos de uso, o Databricks recomenda servidores MCP ou definir a lógica diretamente no código do agente para uma execução mais rápida, suporte à autenticação por usuário e flexibilidade adicional.
Requisitos
Para criar e usar as funções do Unity Catalog como ferramentas de agente de AI, você precisa do seguinte:
- Databricks Runtime : Use o Databricks Runtime 15.0 e acima
- Versão do Python : Instale o Python 3.10 ou acima
Para executar funções do Unity Catalog:
- O compute Serverless deve ser habilitado em seu Workspace para executar as funções do Unity Catalog como ferramentas de agente de AI em produção. Consulte requisitos de compute Serverless.
- Execução em modo local para funções Python não requer compute genérico serverless para ser executado, no entanto, o modo local se destina apenas a fins de desenvolvimento e teste.
Para criar funções do Unity Catalog:
- O compute serverless genérico deve ser habilitado em seu workspace para criar funções usando o Cliente do Databricks Workspace ou instruções SQL no corpo.
- Funções Python podem ser criadas sem compute serverless.
Crie uma ferramenta de função do Unity Catalog
Os passos a seguir mostram como criar e testar uma função do Unity Catalog. Execute o código a seguir em um notebook Databricks.
Diga ao Genie Code (modo Agente) para fazer isso por você:
Create a Unity Catalog Python function that an AI agent can use as a tool. It should take two floating point numbers and return their sum, with type hints and a Google-style docstring. Register it using the Databricks Function Client, then test calling it.
Instalar dependências
Instale pacotes de AI do Unity Catalog com o extra [databricks].
# Install Unity Catalog AI integration packages with the Databricks extra
%pip install unitycatalog-ai[databricks]
dbutils.library.restartPython()
Inicializar o Cliente de Função do Databricks
Inicialize o Cliente de Função do Databricks, que é uma interface especializada para criar, gerenciar e executar funções do Unity Catalog no Databricks.
from unitycatalog.ai.core.databricks import DatabricksFunctionClient
client = DatabricksFunctionClient()
Defina a lógica da ferramenta
As ferramentas do Unity Catalog são, na verdade, apenas funções definidas pelo usuário (UDFs) do Unity Catalog por baixo dos panos. Ao definir uma ferramenta do Unity Catalog, você está registrando uma função no Unity Catalog. Para saber mais sobre as UDFs do Unity Catalog, consulte funções definidas pelo usuário (UDFs) de SQL e Python no Unity Catalog.
A execução de código arbitrário em uma ferramenta de agente pode expor informações confidenciais ou privadas às quais o agente tem acesso. Os clientes são responsáveis por executar apenas código confiável e por configurar barreiras de segurança e permissões apropriadas para evitar acesso não intencional a dados.
Você pode criar funções do Unity Catalog usando uma das duas APIs:
create_python_functionaceita um chamável Python.create_functionaceita uma instrução SQL CREATE FUNCTION. Consulte Criar funções Python.
Use a API create_python_function para criar a função.
Para que um callable Python seja reconhecível para o modelo de dados de funções do Unity Catalog, sua função deve atender aos seguintes requisitos:
-
Dicas de tipo : A assinatura da função deve definir dicas de tipo Python válidas. Tanto os argumentos nomeados quanto o valor de retorno devem ter seus tipos definidos.
-
Não use argumentos variáveis : Argumentos variáveis, como *args e **kwargs, não são suportados. Todos os argumentos devem ser explicitamente definidos.
-
**Compatibilidade de tipo**: Nem todos os tipos Python são compatíveis com SQL. Consulte Tipos de Dados Compatíveis com Spark.
-
Docstrings descritivas : O kit de ferramentas de funções do Unity Catalog lê, analisa e extrai informações importantes da sua docstring.
- Docstrings devem ser formatados de acordo com a sintaxe de docstring do Google.
- Escreva descrições claras para sua função e seus argumentos para ajudar o LLM a entender como e quando usar a função.
-
Importações de dependência : As bibliotecas devem ser importadas dentro do corpo da função. Importações fora da função não serão resolvidas ao executar a ferramenta.
Os seguintes trechos de código usam o create_python_function para registrar o callable Python add_numbers:
CATALOG = "my_catalog"
SCHEMA = "my_schema"
def add_numbers(number_1: float, number_2: float) -> float:
"""
A function that accepts two floating point numbers adds them,
and returns the resulting sum as a float.
Args:
number_1 (float): The first of the two numbers to add.
number_2 (float): The second of the two numbers to add.
Returns:
float: The sum of the two input numbers.
"""
return number_1 + number_2
function_info = client.create_python_function(
func=add_numbers,
catalog=CATALOG,
schema=SCHEMA,
replace=True
)
Testar a função
Teste sua função para verificar se funciona conforme o esperado. Especifique um nome de função totalmente qualificado na API execute_function para executar a função:
result = client.execute_function(
function_name=f"{CATALOG}.{SCHEMA}.add_numbers",
parameters={"number_1": 36939.0, "number_2": 8922.4}
)
result.value # OUTPUT: '45861.4'
Adicionar funções do Unity Catalog ao seu agente
Depois de criar e testar sua função do Unity Catalog, escolha uma das seguintes abordagens para adicioná-la ao seu agente.
Usando MCP (recomendado)
Usando MCP (recomendado)
A Databricks recomenda o uso de servidores MCP para adicionar funções do Unity Catalog ao seu agente. A abordagem MCP oferece uma integração mais simples com descoberta automática de ferramentas e suporte de autenticação integrada.
A URL MCP gerenciada para funções do Unity Catalog é: https://<workspace-hostname>/api/2.0/mcp/functions/{catalog}/{schema}. Você pode, opcionalmente, especificar uma função específica anexando /{function_name}.
Os exemplos a seguir mostram como conectar seu agente a funções do Unity Catalog por meio do MCP. Substitua <catalog> e <schema> pelo local das suas funções.
- OpenAI Agents SDK (Apps)
- LangGraph (Apps)
- Model Serving
from agents import Agent, Runner
from databricks.sdk import WorkspaceClient
from databricks_openai.agents import McpServer
workspace_client = WorkspaceClient()
async with McpServer.from_uc_function(
catalog="<catalog>",
schema="<schema>",
workspace_client=workspace_client,
name="uc-functions",
) as uc_server:
agent = Agent(
name="Tool-using agent",
instructions="You are a helpful assistant. Use the available tools to answer questions.",
model="databricks-claude-sonnet-4-5",
mcp_servers=[uc_server],
)
result = await Runner.run(agent, "Look up customer info for Acme Corp")
print(result.final_output)
Conceda ao aplicativo acesso à função do Unity Catalog em databricks.yml:
resources:
apps:
my_agent_app:
resources:
- name: 'my_uc_function'
uc_securable:
securable_full_name: '<catalog>.<schema>.<function-name>'
securable_type: 'FUNCTION'
permission: 'EXECUTE'
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="uc-functions",
url=f"{host}/api/2.0/mcp/functions/<catalog>/<schema>",
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": "Look up customer info for Acme Corp"}]}
)
print(result["messages"][-1].content)
Conceda ao aplicativo acesso à função do Unity Catalog em databricks.yml:
resources:
apps:
my_agent_app:
resources:
- name: 'my_uc_function'
uc_securable:
securable_full_name: '<catalog>.<schema>.<function-name>'
securable_type: 'FUNCTION'
permission: 'EXECUTE'
from databricks.sdk import WorkspaceClient
from databricks_mcp import DatabricksMCPClient
import mlflow
workspace_client = WorkspaceClient()
host = workspace_client.config.host
# Connect to the UC functions MCP server
mcp_client = DatabricksMCPClient(
server_url=f"{host}/api/2.0/mcp/functions/<catalog>/<schema>",
workspace_client=workspace_client,
)
# List available tools
tools = mcp_client.list_tools()
# Log the agent with the required resources for deployment
mlflow.pyfunc.log_model(
"agent",
python_model=my_agent,
resources=mcp_client.get_databricks_resources(),
)
Para implantar o agente, consulte Implantar um agente para aplicativos de IA generativa (Model Serving). Para obter detalhes sobre o registro de agentes com recursos MCP, consulte Servidores MCP gerenciados do Databricks.
Usando UCFunctionToolkit
Usando o UCFunctionToolkit
Este exemplo usa LangChain, mas uma abordagem semelhante pode ser aplicada a outras bibliotecas. Consulte a integração da ferramenta Unity Catalog.
Instalar dependências adicionais
Instale os pacotes de integração do LangChain para UCFunctionToolkit.
%pip install unitycatalog-langchain[databricks]==0.2.0
# Install the Databricks LangChain integration package
%pip install databricks-langchain==0.5.0
dbutils.library.restartPython()
Envolva a função usando o UCFunctionToolKit
Encapsule a função usando UCFunctionToolkit para torná-la acessível às bibliotecas de criação de agentes. O kit de ferramentas garante consistência em diferentes bibliotecas de IA generativa e adiciona recursos úteis como rastreamento automático para recuperadores.
from databricks_langchain import UCFunctionToolkit
# Create a toolkit with the Unity Catalog function
func_name = f"{CATALOG}.{SCHEMA}.add_numbers"
toolkit = UCFunctionToolkit(function_names=[func_name])
tools = toolkit.tools
Use a ferramenta em um agente
Adicione a ferramenta a um agente LangChain usando a propriedade tools de UCFunctionToolkit.
This example uses LangChain. However you can integrate Unity Catalog tools with other frameworks such as LlamaIndex, OpenAI, Anthropic, and more. See Unity Catalog tool integration.
Este exemplo cria um agente simples usando a API AgentExecutor do LangChain para simplificar. Para cargas de trabalho de produção, use o fluxo de trabalho de autoria de agente visto em Criar um agente de AI e implantá-lo no Databricks Apps.
from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain.prompts import ChatPromptTemplate
from databricks_langchain import (
ChatDatabricks,
UCFunctionToolkit,
)
import mlflow
# Initialize the LLM (optional: replace with your LLM of choice)
LLM_ENDPOINT_NAME = "databricks-meta-llama-3-3-70b-instruct"
llm = ChatDatabricks(endpoint=LLM_ENDPOINT_NAME, temperature=0.1)
# Define the prompt
prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"You are a helpful assistant. Make sure to use tools for additional functionality.",
),
("placeholder", "{chat_history}"),
("human", "{input}"),
("placeholder", "{agent_scratchpad}"),
]
)
# Enable automatic tracing
mlflow.langchain.autolog()
# Define the agent, specifying the tools from the toolkit above
agent = create_tool_calling_agent(llm, tools, prompt)
# Create the agent executor
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
agent_executor.invoke({"input": "What is 36939.0 + 8922.4?"})
Melhore a chamada de ferramenta com documentação clara
Uma boa documentação ajuda seus agentes a saber quando e como usar cada ferramenta. Siga estas práticas recomendadas para documentar suas ferramentas:
- Para funções do Unity Catalog, use a cláusula
COMMENTpara descrever a funcionalidade da ferramenta e os parâmetros. - Defina claramente as entradas e saídas esperadas.
- Escreva descrições significativas para tornar as ferramentas mais fáceis para agentes e humanos usarem.
Exemplo: documentação de ferramenta eficaz
O exemplo a seguir mostra COMMENT strings claras para uma ferramenta que query uma tabela estruturada.
CREATE OR REPLACE FUNCTION main.default.lookup_customer_info(
customer_name STRING COMMENT 'Name of the customer whose info to look up.'
)
RETURNS STRING
COMMENT 'Returns metadata about a specific customer including their email and ID.'
RETURN SELECT CONCAT(
'Customer ID: ', customer_id, ', ',
'Customer Email: ', customer_email
)
FROM main.default.customer_data
WHERE customer_name = customer_name
LIMIT 1;
Exemplo: documentação de ferramenta ineficaz
O exemplo a seguir carece de detalhes importantes, tornando mais difícil para os agentes usarem a ferramenta de forma eficaz:
CREATE OR REPLACE FUNCTION main.default.lookup_customer_info(
customer_name STRING COMMENT 'Name of the customer.'
)
RETURNS STRING
COMMENT 'Returns info about a customer.'
RETURN SELECT CONCAT(
'Customer ID: ', customer_id, ', ',
'Customer Email: ', customer_email
)
FROM main.default.customer_data
WHERE customer_name = customer_name
LIMIT 1;
Execute funções usando o modo serverless ou local
Quando um serviço de IA generativa determina que uma chamada de ferramenta é necessária, os pacotes de integração (instâncias UCFunctionToolkit) executam a API DatabricksFunctionClient.execute_function.
A chamada execute_function pode executar funções em dois modos de execução: serverless ou local. Este modo determina qual recurso executa a função.
Modo Serverless para produção
O modo Serverless é a opção default e recomendada para casos de uso de produção ao executar funções do Unity Catalog como ferramentas de agente de AI. Este modo usa compute genérico serverless (Spark Connect serverless) para executar funções remotamente, e Lakeguard garante que o processo do seu agente permaneça seguro e livre dos riscos de executar código arbitrário localmente.
Funções do Unity Catalog executadas como ferramentas de agente de AI requerem compute genérico Serverless (Spark Connect Serverless), não SQL warehouses Serverless. Tentativas de executar ferramentas sem o compute genérico Serverless produzirão erros como PERMISSION_DENIED: Cannot access Spark Connect.
# Defaults to serverless if `execution_mode` is not specified
client = DatabricksFunctionClient(execution_mode="serverless")
Quando seu agente solicita a execução de uma ferramenta no modo Serverless , ocorre o seguinte:
- O
DatabricksFunctionClientenvia uma solicitação ao Unity Catalog para recuperar a definição da função se a definição não tiver sido armazenada em cache localmente. - O
DatabricksFunctionClientextrai a definição da função e valida os nomes e tipos de parâmetros. - O
DatabricksFunctionClientenvia a execução como uma UDF para o compute genérico serverless.
Modo local para desenvolvimento
O modo local executa funções Python em um subprocesso local em vez de fazer solicitações para o compute genérico serverless. Isso permite solucionar problemas de chamadas de ferramentas de forma mais eficaz, fornecendo rastreamentos de pilha locais. Ele é projetado para desenvolvimento e depuração de funções Python do Unity Catalog.
Quando o seu agente solicita a execução de uma ferramenta no modo **local**, o DatabricksFunctionClient faz o seguinte:
- Envia uma solicitação para o Unity Catalog para recuperar a definição da função se a definição não tiver sido armazenada em cache localmente.
- Extrai a definição do callable Python, armazena o callable em cache localmente e valida os nomes e tipos dos parâmetros.
- Invoca o callable com os parâmetros especificados em um subprocesso restrito com proteção contra tempo limite.
# Defaults to serverless if `execution_mode` is not specified
client = DatabricksFunctionClient(execution_mode="local")
Executar no modo "local" fornece os seguintes recursos:
-
**Limite de tempo da CPU:** Restringe o tempo de Runtime total da CPU para execução invocável para evitar cargas computacionais excessivas.
O limite de tempo da CPU é baseado no uso real da CPU, não no tempo real. Devido ao agendamento do sistema e processos concorrentes, o tempo da CPU pode exceder o tempo real em cenários do mundo real.
-
Limite de memória: Restringe a memória virtual alocada ao processo.
-
Proteção contra tempo limite: Impõe um tempo limite total (wall-clock) para a execução de funções.
Personalize esses limites usando variáveis de ambiente (leia mais).
Limitações do modo local
- **Apenas funções Python**: funções baseadas em SQL não são compatíveis no modo local.
- Considerações de segurança para código não confiável : Embora o modo local execute funções em um subprocesso para isolamento de processo, existe um risco de segurança potencial ao executar código arbitrário gerado por sistemas de AI. Esta é principalmente uma preocupação quando as funções executam código Python gerado dinamicamente que não foi revisado.
- Diferenças de versão de biblioteca : as versões de biblioteca podem diferir entre ambientes de execução serverless e locais, o que pode levar a um comportamento de função diferente.
variável de ambiente
Configure como as funções são executadas em DatabricksFunctionClient usando as seguintes variáveis de ambiente:
Variável de ambiente | Valor padrão | Descrição |
|---|---|---|
|
| Tempo máximo permitido de execução da CPU (somente modo local). |
|
| Alocação máxima de memória virtual permitida para o processo (somente no modo local). |
|
| Tempo máximo total do relógio de parede (somente modo local). |
|
| O número máximo de tentativas para tentar novamente a atualização do cliente de sessão em caso de expiração do token. |
|
| O número máximo de linhas a retornar ao executar funções usando compute serverless e |
Chamar APIs externas com http_request (legado)
Para conectar agentes a serviços externos, a Databricks recomenda Serviços MCP ou o proxy de conexões do Unity Catalog. As ferramentas de função UC que envolvem http_request continuam sendo compatíveis, mas não são mais a abordagem recomendada.
Você pode criar uma função do Unity Catalog que encapsula http_request() para chamar serviços externos. Essa abordagem é útil para definições de ferramentas baseadas em SQL.
O exemplo a seguir cria uma ferramenta de função do Unity Catalog que publica uma mensagem no 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
Consulte CREATE FUNCTION (SQL, Python, Scala e Java).
Acesso SQL com http_request está bloqueado para os tipos de conexão Usuário para Máquina por Usuário e Registro Dinâmico de Cliente. Use o SDK do Databricks para Python em vez disso.
Notebooks de exemplo
Os seguintes Notebooks demonstram como criar ferramentas de agente de AI que se conectam a serviços externos usando as funções do Unity Catalog.
Ferramenta de agente de mensagens do Slack
Ferramenta de agente da API do Microsoft Graph
Ferramenta de agente do Azure AI Search
Próximos passos
-
Adicione ferramentas do Unity Catalog aos agentes programaticamente. Consulte Crie um agente de AI e implante-o no Databricks Apps.
-
Adicione ferramentas do Unity Catalog a agentes usando a UI do AI Playground. Consulte Começar: Query de LLMs e prototipagem de agentes de AI sem código.
-
Gerencie funções do Unity Catalog usando o Cliente de Função. Consulte Documentação do Unity Catalog - Cliente de função
-
Conecte agentes a ferramentas de terceiros com os Serviços MCP para uma visão geral de todas as abordagens para conectar agentes a serviços externos.