Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Pomocí funkcí katalogu Unity můžete vytvářet nástroje agenta AI, které provádějí vlastní logiku a provádějí konkrétní úlohy, které rozšiřují možnosti LLM nad rámec generování jazyka.
Výstraha
Spuštění libovolného kódu v nástroji agenta může vystavit citlivé nebo soukromé informace, ke kterým má agent přístup. Zákazníci zodpovídají za spouštění pouze důvěryhodného kódu a implementaci mantinely a správných oprávnění, aby zabránili neúmyslnému přístupu k datům.
Požadavky
Pokud chcete vytvářet a používat funkce katalogu Unity jako nástroje agenta AI, potřebujete následující:
- Databricks Runtime: Použijte Databricks Runtime 15.0 a vyšší
- Verze Pythonu: Instalace Pythonu 3.10 nebo novější
Spuštění funkcí katalogu Unity:
- Aby bylo možné spouštět funkce Katalogu Unity jako nástroje agenta AI v produkčním prostředí, musí být ve vašem pracovním prostoru povolené bezserverové výpočetní prostředí. Viz požadavky na výpočetní prostředky bez serveru.
- Spuštění místního režimu pro funkce Pythonu nevyžaduje spuštění bezserverového obecného výpočetního prostředí, ale místní režim je určený pouze pro účely vývoje a testování.
Vytvoření funkcí katalogu Unity:
- Aby bylo možné vytvářet funkce pomocí klienta pracovního prostoru Databricks nebo příkazů textu SQL, musí být ve vašem pracovním prostoru povolené bezserverové obecné výpočetní prostředky.
- Funkce v Pythonu lze vytvářet i bez použití serverless computingu.
Vytvořte nástroj agenta
V tomto příkladu vytvoříte nástroj Katalogu Unity, otestujete jeho funkce a přidáte ho do agenta. V poznámkovém bloku Databricks spusťte následující kód.
Nainstalujte závislosti
Nainstalujte balíčky AI katalogu Unity s dalšími [databricks] balíčky a nainstalujte integrační balíček Databricks-LangChain.
Tento příklad používá LangChain, ale podobný přístup lze použít i na jiné knihovny. Viz Integrace nástrojů katalogu Unity s rozhraními generování AI třetích stran.
# Install Unity Catalog AI integration packages with the Databricks extra
%pip install unitycatalog-ai[databricks]
%pip install unitycatalog-langchain[databricks]
# Install the Databricks LangChain integration package
%pip install databricks-langchain
dbutils.library.restartPython()
Inicializace klienta funkce Databricks
Inicializace klienta funkce Databricks, což je specializované rozhraní pro vytváření, správu a spouštění funkcí katalogu Unity v Databricks.
from unitycatalog.ai.core.databricks import DatabricksFunctionClient
client = DatabricksFunctionClient()
Definování logiky nástroje
Nástroje katalogu Unity jsou ve skutečnosti jen uživatelem definované funkce (UDF) v Unity Catalog. Při definování nástroje Unity Catalog zaregistrujete funkci v Katalogu Unity. Další informace o uživatelem definovaných funkcích katalogu Unity najdete v tématu Uživatelem definované funkce (UDF) v katalogu Unity.
Funkce katalogu Unity můžete vytvořit pomocí jednoho ze dvou rozhraní API:
-
create_python_functionpřijímá funkci v Pythonu. -
create_functionpřijímá SQL příkaz pro vytvoření funkce. Viz Vytvoření funkcí Pythonu.
create_python_function K vytvoření funkce použijte rozhraní API.
Aby byla vaše funkce rozpoznatelná pro datový model funkcí Unity Catalog, musí splňovat následující kritéria:
- Rady typu: Podpis funkce musí definovat platné rady typu Pythonu. Pojmenované argumenty i návratová hodnota musí mít definované typy.
- Nepoužívejte argumenty proměnných: Argumenty proměnných, jako jsou *args a **kwargs, nejsou podporovány. Všechny argumenty musí být explicitně definovány.
- Kompatibilita typů: Sql nepodporuje všechny typy Pythonu. Viz podporované datové typy Sparku.
-
Popisné dokumenty: Sada nástrojů funkcí katalogu Unity čte, analyzuje a extrahuje důležité informace z docstringu.
- Řetězce docstring musí být formátované podle syntaxe docstringu Google.
- Napište jasné popisy vaší funkce a jejích argumentů, které pomohou LLM pochopit, jak a kdy tuto funkci používat.
- Importy závislostí: Knihovny musí být importovány uvnitř těla funkce. Importy mimo funkci nebudou při spuštění nástroje vyřešeny.
Následující fragmenty kódu používají create_python_function k registraci volatelného objektu Pythonu 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
)
Testování funkce
Otestujte funkci a zkontrolujte, jestli funguje podle očekávání. Zadejte plně kvalifikovaný název funkce v execute_function rozhraní API pro spuštění funkce:
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'
Zabalte funkci pomocí UCFunctionToolKit
Zabalte funkci pomocí UCFunctionToolkit, aby byla přístupná knihovnám pro vytváření agentů. Sada nástrojů zajišťuje konzistenci napříč různými knihovnami generativní umělé inteligence a přidává užitečné funkce, jako je automatické trasování pro vyhledávače.
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
Použití nástroje v agentu
Přidejte pomocí vlastnosti tools nástroj do agenta LangChain z UCFunctionToolkit.
Poznámka:
V tomto příkladu se používá LangChain. Nástroje Katalogu Unity ale můžete integrovat s jinými architekturami, jako jsou LlamaIndex, OpenAI, Anthropic a další. Viz Integrace nástrojů katalogu Unity s rozhraními generování AI třetích stran.
V tomto příkladu autoři pro zjednodušení používají jednoduchého agenta využívajícího rozhraní LangChain AgentExecutor API. V případě produkčních úloh použijte pracovní postup vytváření agentů, který je vidět v ResponsesAgent příkladech.
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?"})
Vylepšení volání nástrojů pomocí jasné dokumentace
Dobrá dokumentace pomáhá vašim agentům zjistit, kdy a jak jednotlivé nástroje používat. Při dokumentování nástrojů postupujte podle těchto osvědčených postupů:
- Pro funkce katalogu Unity použijte
COMMENTklauzuli k popisu funkčnosti a parametrů nástrojů. - Jasně definovat očekávané vstupy a výstupy.
- Napište smysluplné popisy, které usnadňují používání nástrojů pro agenty a lidi.
Příklad: Efektivní dokumentace k nástrojům
Následující příklad ukazuje jasné COMMENT řetězce pro nástroj, který dotazuje strukturovanou tabulku.
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;
Příklad: Neefektivní dokumentace k nástrojům
V následujícím příkladu chybí důležité podrobnosti, což ztěžuje efektivní používání nástroje agenty:
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;
Spouštění funkcí pomocí bezserverového nebo místního režimu
Když služba generativní AI určí, že je potřeba použít nástroj, integrační balíčky (UCFunctionToolkit instance) spustí DatabricksFunctionClient.execute_function rozhraní API.
Volání execute_function může spouštět funkce ve dvou režimech spuštění: bezserverové nebo místní. Tento režim určuje, který prostředek funkci spouští.
Bezserverový režim pro produkční prostředí
Bezserverový režim je výchozí a doporučená možnost pro případy použití v produkčním prostředí při spouštění funkcí katalogu Unity jako nástroje agenta AI. Tento režim používá bezserverové obecné výpočetní prostředky (Bezserverové připojení Spark Connect) ke vzdálenému spouštění funkcí a zajišťuje, aby proces vašeho agenta zůstal zabezpečený a bez rizik spuštění libovolného kódu místně.
Poznámka:
Funkce katalogu Unity spuštěné jako nástroje agenta AI vyžadují bezserverové obecné výpočetní prostředky (Spark Connect serverless), nikoli bezserverové SQL sklady. Pokusy o spuštění nástrojů bez bezserverového obecného výpočetního prostředí způsobí chyby jako PERMISSION_DENIED: Cannot access Spark Connect.
# Defaults to serverless if `execution_mode` is not specified
client = DatabricksFunctionClient(execution_mode="serverless")
Když váš agent požádá o spuštění nástroje v bezserverovém režimu, stane se toto:
- Pokud definice není místně uložena do mezipaměti, odešle
DatabricksFunctionClientpožadavek do katalogu Unity Catalog, aby načetl definici funkce. -
DatabricksFunctionClientextrahuje definici funkce a ověří názvy a typy parametrů. - Odešle
DatabricksFunctionClientspuštění jako UDF do bezserverového obecného výpočetního prostředí.
Místní režim vývoje
Místní režim spouští funkce Pythonu v místním podprocesu místo provádění požadavků na bezserverové obecné výpočetní prostředky. Díky tomu můžete efektivněji řešit problémy s voláními nástrojů tím, že poskytnete trasování místního zásobníku. Je navržený pro vývoj a ladění funkcí katalogu Unity Pythonu.
Když agent požádá o spuštění nástroje v místním režimu, DatabricksFunctionClient provede následující kroky:
- Odešle požadavek do katalogu Unity, aby načetl definici funkce, pokud nebyla definice místně uložena do mezipaměti.
- Extrahuje definici volatelné funkce nebo objektu, uloží si do mezipaměti lokálně a ověřuje názvy a typy parametrů.
- Vyvolá funkci se zadanými parametry v omezeném podprocesu s ochranou proti překročení časového limitu.
# Defaults to serverless if `execution_mode` is not specified
client = DatabricksFunctionClient(execution_mode="local")
Běh v "local" režimu poskytuje následující výhody:
Časový limit procesoru: Omezuje celkový modul runtime procesoru pro volatelné spouštění, aby se zabránilo nadměrnému výpočetnímu zatížení.
Časový limit procesoru je založený na skutečném využití procesoru, nikoli na hodinovém čase. Vzhledem k plánování systému a souběžným procesům může čas procesoru v reálných scénářích překročit hodinový čas.
Limit paměti: Omezí virtuální paměť přidělenou procesu.
Ochrana časového limitu: Vynucuje celkový časový limit skutečného času pro spuštěné funkce.
Přizpůsobte si tato omezení pomocí proměnných prostředí (přečtěte si další informace).
Omezení místního režimu
- Pouze funkce Pythonu: Funkce založené na SQL nejsou podporovány v místním režimu.
- Aspekty zabezpečení pro nedůvěryhodný kód: Zatímco místní režim spouští funkce v podprocesu pro izolaci procesů, existuje potenciální bezpečnostní riziko při provádění libovolného kódu generovaného systémy AI. Jedná se především o problém, když se funkce spouštějí dynamicky generovaný kód Pythonu, který nebyl zkontrolován.
- Rozdíly ve verzi knihovny: Verze knihoven se můžou lišit mezi bezserverovými a místními spouštěcími prostředími, což může vést k odlišnému chování funkce.
Proměnné prostředí
Nakonfigurujte, jak se funkce spouštějí v DatabricksFunctionClient pomocí následujících proměnných prostředí:
| Proměnná prostředí | Výchozí hodnota | Popis |
|---|---|---|
EXECUTOR_MAX_CPU_TIME_LIMIT |
10 sekundy |
Maximální povolená doba provádění procesoru (pouze místní režim). |
EXECUTOR_MAX_MEMORY_LIMIT |
100 MB |
Maximální povolené přidělení virtuální paměti pro proces (pouze místní režim). |
EXECUTOR_TIMEOUT |
20 sekundy |
Maximální celková doba nástěnných hodin (pouze místní režim). |
UCAI_DATABRICKS_SESSION_RETRY_MAX_ATTEMPTS |
5 |
Maximální počet pokusů o opakování aktualizace klienta relace v případě vypršení platnosti tokenu. |
UCAI_DATABRICKS_SERVERLESS_EXECUTION_RESULT_ROW_LIMIT |
100 |
Maximální počet řádků, které se mají vrátit při spouštění funkcí pomocí bezserverových výpočetních prostředků a databricks-connect. |
Další kroky
Přidejte nástroje katalogu Unity do agentů programmaticky. Viz
ResponsesAgentpříklady.Přidejte do agentů nástroje katalogu Unity pomocí uživatelského rozhraní AI Playground. Viz Prototyp agentů pro volání nástrojů v AI Playground.
Správa funkcí katalogu Unity pomocí klienta funkcí Viz dokumentace k katalogu Unity – klient funkcí