Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Gebruik Unity Catalog-functies om AI-agenthulpprogramma's te maken die aangepaste logica uitvoeren en specifieke taken uitvoeren waarmee de mogelijkheden van LLM's buiten taalgeneratie worden uitgebreid.
Wanneer gebruikt u Unity Catalog-functies versus MCP-servers
Databricks raadt het gebruik van Unity Catalog-functies aan als agenthulpprogramma's specifiek voor gestructureerde hulpprogramma's voor het ophalen van gegevens wanneer de query van tevoren bekend is en de agent de parameters levert. Zie Agents verbinden met gestructureerde gegevens.
In de meeste andere gebruiksvoorbeelden raadt Databricks MCP-servers aan of definieert u de logica rechtstreeks in agentcode voor snellere uitvoering, ondersteuning voor verificatie per gebruiker en extra flexibiliteit.
Behoeften
Als u Unity Catalog-functies wilt maken en gebruiken als AI-agenthulpprogramma's, hebt u het volgende nodig:
- Databricks Runtime: Databricks Runtime 15.0 en hoger gebruiken
- Python versie: installeer Python 3.10 of hoger
Unity Catalog-functies uitvoeren:
-
Serverloze rekenkracht moet in uw werkruimte zijn ingeschakeld om Unity Catalog-functies als AI-agenttools in productie uit te voeren. Zie serverloze rekenvereisten.
- Lokale modusuitvoering voor Python-functies is geen serverloze algemene berekening vereist, maar de lokale modus is alleen bedoeld voor ontwikkelings- en testdoeleinden.
Ga als volgende te werk om Unity Catalog-functies te maken:
-
Serverloze algemene rekenkracht moet zijn ingeschakeld in uw werkruimte om functies te maken met behulp van de Databricks Workspace Client- of SQL-hoofdtekstinstructies.
- Python functies kunnen worden gemaakt zonder serverloze berekening.
Een Unity Catalog-functiehulpprogramma maken
In de volgende stappen ziet u hoe u een Unity Catalog-functie maakt en test. Voer de volgende code uit in een Databricks-notebook.
Afhankelijkheden installeren
Installeer AI-pakketten voor Unity Catalog met de [databricks] extra.
# Install Unity Catalog AI integration packages with the Databricks extra
%pip install unitycatalog-ai[databricks]
dbutils.library.restartPython()
De Databricks-functieclient initialiseren
Initialiseer de Databricks-functieclient, een gespecialiseerde interface voor het maken, beheren en uitvoeren van Unity Catalog-functies in Databricks.
from unitycatalog.ai.core.databricks import DatabricksFunctionClient
client = DatabricksFunctionClient()
De logica van het hulpprogramma definiëren
Unity Catalog-hulpprogramma's zijn eigenlijk alleen door de gebruiker gedefinieerde functies (UDF's) van Unity Catalog. Wanneer u een Unity Catalog-hulpprogramma definieert, registreert u een functie in Unity Catalog. Zie Door de gebruiker gedefinieerde functies (UDF's) in Unity Catalog voor meer informatie over UDF's (Unity Catalog).
Waarschuwing
Het uitvoeren van willekeurige code in een agenthulpprogramma kan gevoelige of persoonlijke gegevens beschikbaar maken waartoe de agent toegang heeft. Klanten zijn verantwoordelijk voor het uitvoeren van alleen vertrouwde code en het configureren van kaders en de juiste machtigingen om onbedoelde toegang tot gegevens te voorkomen.
U kunt Unity Catalog-functies maken met behulp van een van de twee API's:
-
create_python_functionaccepteert een uitvoerbare Python-functie. -
create_functionaccepteert een SQL body CREATE FUNCTION-instructie. Zie Python Functies maken.
Gebruik de create_python_function API om de functie te maken.
Als u een Python aanroepbaar wilt maken die kan worden herkend aan het gegevensmodel van de Unity Catalog-functies, moet uw functie voldoen aan de volgende vereisten:
- Type hints: De functiehandtekening moet geldige Python typehints definiëren. Zowel de benoemde argumenten als de retourwaarde moeten hun typen hebben gedefinieerd.
- Gebruik geen variabeleargumenten: Variabeleargumenten zoals *args en **kwargs worden niet ondersteund. Alle argumenten moeten expliciet worden gedefinieerd.
- Typecompatibiliteit: Niet alle typen Python worden ondersteund in SQL. Zie ondersteunde Spark-gegevenstypen.
-
Beschrijvende docstrings: De Toolkit voor Unity Catalog-functies leest, parseert en extraheert belangrijke informatie uit uw docstring.
- Docstrings moeten worden opgemaakt volgens de syntaxis van Google docstring.
- Schrijf duidelijke beschrijvingen voor uw functie en de bijbehorende argumenten om de LLM te helpen begrijpen hoe en wanneer de functie moet worden gebruikt.
- Import van afhankelijkheden: bibliotheken moeten binnen de functie worden geïmporteerd. Importeren buiten de functie wordt niet opgelost bij het uitvoeren van het hulpprogramma.
De volgende codefragmenten maken gebruik van de create_python_function om de Python aanroepbare add_numbers te registreren:
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
)
De functie testen
Test uw functie om te controleren of deze werkt zoals verwacht. Geef een volledig gekwalificeerde functienaam op in de execute_function API om de functie uit te voeren:
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'
Unity Catalog-functies toevoegen aan uw agent
Nadat u uw Unity Catalog-functie hebt gemaakt en getest, kiest u een van de volgende methoden om deze toe te voegen aan uw agent.
MCP gebruiken (aanbevolen)
MCP gebruiken (aanbevolen)
Databricks raadt het gebruik van MCP-servers aan om Unity Catalog-functies toe te voegen aan uw agent. De MCP-benadering biedt een eenvoudigere integratie met automatische detectie van hulpprogramma's en ingebouwde verificatieondersteuning.
De beheerde MCP-URL voor Unity Catalog-functies is: https://<workspace-hostname>/api/2.0/mcp/functions/{catalog}/{schema}. U kunt desgewenst een specifieke functie opgeven door toe te /{function_name}voegen.
In de volgende voorbeelden ziet u hoe u uw agent verbindt met Unity Catalog-functies via MCP. Vervang <catalog> en <schema> door de locatie van uw functies.
OpenAI Agents SDK (Apps)
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)
Verleen de app toegang tot de Unity Catalog-functie in 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'
LangGraph (Apps)
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)
Verleen de app toegang tot de Unity Catalog-functie in 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'
Model serveren
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(),
)
Zie Een agent implementeren voor generatieve AI-toepassingen (Model Serving) om de agent te implementeren. Zie Databricks managed MCP-servers gebruiken voor meer informatie over het registreren van agents met MCP-resources.
UCFunctionToolkit gebruiken
UCFunctionToolkit gebruiken
In dit voorbeeld wordt LangChain gebruikt, maar een vergelijkbare benadering kan worden toegepast op andere bibliotheken. Zie hoe je Unity Catalog-hulpprogramma's integreert met generatieve AI-frameworks van derden.
Aanvullende afhankelijkheden installeren
Installeer de LangChain-integratiepakketten voor UCFunctionToolkit.
%pip install unitycatalog-langchain[databricks]
# Install the Databricks LangChain integration package
%pip install databricks-langchain
dbutils.library.restartPython()
De functie verpakken met behulp van de UCFunctionToolKit
Wikkel de functie in met behulp van de UCFunctionToolkit om deze toegankelijk te maken voor agent authoring libraries. De toolkit zorgt voor consistentie in verschillende GEN AI-bibliotheken en voegt nuttige functies toe, zoals automatisch traceren voor retrievers.
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
Het hulpprogramma in een agent gebruiken
Voeg het hulpprogramma toe aan een LangChain-agent met behulp van de tools eigenschap van UCFunctionToolkit.
Opmerking
In dit voorbeeld wordt LangChain gebruikt. U kunt Unity Catalog-hulpprogramma's echter integreren met andere frameworks, zoals LlamaIndex, OpenAI, Antropic en meer. Zie hoe je Unity Catalog-hulpprogramma's integreert met generatieve AI-frameworks van derden.
In dit voorbeeld wordt een eenvoudige agent gemaakt met behulp van de LangChain-API AgentExecutor voor het gemak. Voor productieworkloads gebruikt u de werkstroom voor het ontwerpen van agents die wordt weergegeven in Een AI-agent ontwerpen en implementeren in 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?"})
Het aanroepen van hulpprogramma's verbeteren met duidelijke documentatie
Goede documentatie helpt uw medewerkers te weten wanneer en hoe ze elk hulpprogramma moeten gebruiken. Volg deze aanbevolen procedures voor het documenteren van uw hulpprogramma's:
- Voor Unity Catalog-functies gebruikt u de
COMMENTcomponent om de functionaliteit en parameters van het hulpprogramma te beschrijven. - Definieer duidelijk de verwachte invoer en uitvoer.
- Schrijf zinvolle beschrijvingen om hulpprogramma's voor agents en mensen gemakkelijker te gebruiken.
Voorbeeld: Effectieve hulpprogrammadocumentatie
In het volgende voorbeeld ziet u duidelijke COMMENT tekenreeksen voor een hulpprogramma waarmee een query wordt uitgevoerd op een gestructureerde tabel.
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;
Voorbeeld: Ineffectieve hulpprogrammadocumentatie
In het volgende voorbeeld ontbreken belangrijke details, waardoor het voor agents moeilijker is om het hulpprogramma effectief te gebruiken:
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;
Functies uitvoeren met serverloze of lokale modus
Wanneer een gen AI-service bepaalt dat er een hulpprogramma-aanroep nodig is, voeren integratiepakketten (UCFunctionToolkit exemplaren) de DatabricksFunctionClient.execute_function API uit.
De execute_function aanroep kan functies uitvoeren in twee uitvoeringsmodi: serverloos of lokaal. Deze modus bepaalt welke resource de functie uitvoert.
Serverloze modus voor productie
Serverloze modus is de standaard- en aanbevolen optie voor productiegebruiksscenario's bij het uitvoeren van Unity Catalog-functies als AI-agenthulpprogramma's. In deze modus wordt gebruikgemaakt van serverloze algemene compute (Serverloze Spark Connect) om functies op afstand uit te voeren en Zorgt Lakeguard ervoor dat het proces van uw agent veilig en vrij blijft van de risico's van het lokaal uitvoeren van willekeurige code.
Opmerking
Unity Catalog-functies die worden uitgevoerd als AI-agenthulpprogramma's vereisen serverloze algemene compute (serverloze Spark Connect), niet serverloze SQL-warehouses. Pogingen om hulpprogramma's uit te voeren zonder serverloze algemene berekening, veroorzaken fouten zoals PERMISSION_DENIED: Cannot access Spark Connect.
# Defaults to serverless if `execution_mode` is not specified
client = DatabricksFunctionClient(execution_mode="serverless")
Wanneer uw agent een uitvoering van een hulpprogramma aanvraagt in de serverloze modus, gebeurt het volgende:
- Een verzoek wordt naar Unity Catalog gestuurd om de functiedefinitie op te halen als de definitie niet lokaal is gecachet.
- De
DatabricksFunctionClientfunctiedefinitie wordt geëxtraheerd en de parameternamen en -typen gevalideerd. - De
DatabricksFunctionClientuitvoering wordt verzonden als een UDF naar serverloze algemene berekening.
Lokale modus voor ontwikkeling
In de lokale modus worden Python functies uitgevoerd in een lokaal subproces in plaats van aanvragen te doen voor serverloze algemene berekeningen. Hierdoor kunt u efficiënter problemen met hulpprogramma-aanroepen oplossen door lokale stack-traceringen op te geven. Het is ontworpen voor het ontwikkelen en debuggen van functies van de Python Unity Catalog.
Wanneer uw agent vraagt om een hulpprogramma in lokale modus uit te voeren, doet DatabricksFunctionClient het volgende:
- Hiermee wordt een aanvraag naar Unity Catalog verzonden om de functiedefinitie op te halen als de definitie niet lokaal in de cache is opgeslagen.
- Extraheert de Python aanroepbare definitie, slaat de aanroepbare lokaal op en valideert de parameternamen en -typen.
- Roept de oproepbare functie aan met de opgegeven parameters in een beperkt subproces met bescherming tegen time-outs.
# Defaults to serverless if `execution_mode` is not specified
client = DatabricksFunctionClient(execution_mode="local")
Draaien in modus "local" biedt de volgende functies:
CPU-tijdslimiet: Hiermee beperkt u de totale CPU-runtime voor aanroepbare uitvoering om overmatige rekenkracht te voorkomen.
De CPU-tijdslimiet is gebaseerd op het werkelijke CPU-gebruik, niet op wandkloktijd. Vanwege systeemplanning en gelijktijdige processen kan de CPU-tijd de tijd van de wandklok in realtime scenario's overschrijden.
Geheugenlimiet: Hiermee beperkt u het virtuele geheugen dat aan het proces is toegewezen.
Time-outbeveiliging: Hiermee wordt een time-out van de totale wandklok afgedwongen voor het uitvoeren van functies.
Pas deze limieten aan met behulp van omgevingsvariabelen (lees verder).
Beperkingen van de lokale modus
- Python functies alleen: op SQL gebaseerde functies worden niet ondersteund in de lokale modus.
- Beveiligingsoverwegingen voor niet-vertrouwde code: terwijl in de lokale modus functies worden uitgevoerd in een subproces voor procesisolatie, is er een potentieel beveiligingsrisico bij het uitvoeren van willekeurige code die door AI-systemen wordt gegenereerd. Dit is voornamelijk een probleem wanneer functies dynamisch gegenereerde Python code uitvoeren die niet is gecontroleerd.
- Verschillen in bibliotheekversies: Bibliotheekversies kunnen verschillen tussen serverloze en lokale uitvoeringsomgevingen, wat kan leiden tot ander functiegedrag.
Omgevingsvariabelen
Configureer hoe functies worden uitgevoerd in de DatabricksFunctionClient met behulp van de volgende omgevingsvariabelen:
| Omgevingsvariabele | Standaardwaarde | Beschrijving |
|---|---|---|
EXECUTOR_MAX_CPU_TIME_LIMIT |
10 Seconden |
Maximale toegestane CPU-uitvoeringstijd (alleen in de lokale modus). |
EXECUTOR_MAX_MEMORY_LIMIT |
100 MB |
Maximale toegestane toewijzing van virtueel geheugen voor het proces (alleen lokale modus). |
EXECUTOR_TIMEOUT |
20 Seconden |
Maximale totale wandkloktijd (alleen in lokale modus). |
UCAI_DATABRICKS_SESSION_RETRY_MAX_ATTEMPTS |
5 |
Het maximum aantal pogingen om de sessieclient opnieuw te vernieuwen in het geval van een vervaldatum van het token. |
UCAI_DATABRICKS_SERVERLESS_EXECUTION_RESULT_ROW_LIMIT |
100 |
Het maximum aantal rijen dat moet worden geretourneerd bij het uitvoeren van functies met serverloze berekeningen en databricks-connect. |
Voorbeeldnotitieblokken
De volgende notebooks laten zien hoe u AI-agenthulpprogramma's maakt die verbinding maken met externe services met behulp van Unity Catalog-functies.
Slack Messaging Agent-hulpprogramma
Microsoft Graph API-agent hulpprogramma
Azure AI Search-agent hulpprogramma
Volgende stappen
Voeg Unity Catalog-hulpprogramma's programmatisch toe aan agents. Zie Een AI-agent ontwerpen en implementeren in Databricks-apps.
Voeg Unity Catalog-hulpprogramma's toe aan agents met behulp van de AI Playground-gebruikersinterface. Zie Aan de slag: queries uitvoeren op LLM's en prototypen van AI-agenten zonder te coderen.
Beheer Unity Catalog-functies met behulp van de functieclient. Raadpleeg documentatie voor Unity Catalog - Functieclient
Verbind agents met externe services voor een overzicht van alle methoden om agents te verbinden met externe services.