Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Gunakan fungsi Unity Catalog untuk membuat alat agen AI yang menjalankan logika kustom dan melakukan tugas tertentu yang memperluas kemampuan LLM di luar pembuatan bahasa.
Persyaratan
- Koneksi komputasi tanpa server untuk membuat fungsi Katalog Unity yang ditulis menggunakan pernyataan fungsi buat isi SQL. Fungsi Python tidak memerlukan komputasi tanpa server.
- Gunakan Databricks Runtime 15.0 ke atas.
Membuat perangkat agen
Dalam contoh ini, Anda membuat alat Unity Catalog, menguji fungsionalitasnya, dan menambahkannya ke agen. Jalankan kode berikut di buku catatan Databricks.
Pasang dependensi
Pasang paket AI Unity Catalog dengan tambahan [databricks]
serta pasang paket integrasi Databricks-LangChain.
Contoh ini menggunakan LangChain, tetapi pendekatan serupa dapat diterapkan ke pustaka lain. Lihat Mengintegrasikan alat Unity Catalog dengan kerangka kerja AI generatif pihak ketiga.
# 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()
Menginisialisasi Klien Fungsi Databricks
Inisialisasi Klien Fungsi Databricks, yang merupakan antarmuka khusus untuk membuat, mengelola, dan menjalankan fungsi Unity Catalog di Databricks.
from unitycatalog.ai.core.databricks import DatabricksFunctionClient
client = DatabricksFunctionClient()
Menentukan logika alat
Alat Katalog Unity sebenarnya hanyalah fungsi yang ditentukan pengguna (UDF) di balik layar. Saat Anda menentukan alat Katalog Unity, Anda mendaftarkan fungsi di Unity Catalog. Untuk mempelajari selengkapnya tentang Unity Catalog UDF, lihat Fungsi yang ditentukan pengguna (UDF) di Unity Catalog.
Anda dapat membuat fungsi Katalog Unity menggunakan salah satu dari dua API:
-
create_python_function
menerima fungsi Python yang dapat dipanggil. -
create_function
menerima pernyataan pembuatan fungsi struktur SQL. Lihat Membuat fungsi Python.
create_python_function
Gunakan API untuk membuat fungsi.
Agar fungsi Python yang dapat dipanggil diakui oleh model data fungsi Unity Catalog, fungsi tersebut harus memenuhi persyaratan berikut:
- Petunjuk jenis: Tanda tangan fungsi harus menentukan petunjuk jenis Python yang valid. Argumen bernama dan nilai pengembalian harus memiliki jenis yang ditentukan.
- Jangan gunakan argumen variabel: Argumen variabel seperti *args dan **kwargs tidak didukung. Semua argumen harus didefinisikan secara eksplisit.
- Kompatibilitas jenis: Tidak semua jenis Python didukung di SQL. Lihat Jenis Data yang Didukung Spark.
-
Docstring yang deskriptif: Perangkat fungsi Unity Catalog membaca, mengurai, dan mengekstrak informasi penting dari docstring Anda.
- Docstring harus diformat sesuai dengan sintaks Google docstring.
- Tulis deskripsi yang jelas untuk fungsi Anda dan argumennya untuk membantu LLM memahami bagaimana dan kapan menggunakan fungsi.
- Impor dependensi: Pustaka harus diimpor dalam isi fungsi. Impor di luar fungsi tidak akan diatasi saat menjalankan alat.
Cuplikan kode berikut menggunakan create_python_function
untuk mendaftarkan 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
)
Uji fungsi
Uji fungsi Anda untuk memastikan berfungsi seperti yang diharapkan. Tentukan nama fungsi yang sepenuhnya memenuhi syarat di execute_function
API untuk menjalankan fungsi:
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'
Membungkus fungsi menggunakan UCFunctionToolKit
Bungkus fungsi menggunakan UCFunctionToolkit
untuk membuatnya dapat diakses oleh perpustakaan untuk penulisan agen. Toolkit memastikan konsistensi di berbagai pustaka AI generatif dan menambahkan fitur bermanfaat seperti pelacakan otomatis untuk pencari informasi.
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
Menggunakan alat di dalam agen
Tambahkan alat ke agen LangChain dengan menggunakan properti tools
dari UCFunctionToolkit
.
Contoh ini menulis agen sederhana menggunakan LangChain AgentExecutor
API untuk kesederhanaan. Gunakan alur kerja perancangan agen yang terdapat dalam ChatAgent
contoh untuk pekerjaan produksi.
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?"})
Meningkatkan penggunaan alat dengan dokumentasi yang jelas
Dokumentasi yang baik membantu agen Anda mengetahui kapan dan bagaimana menggunakan setiap alat. Ikuti praktik terbaik ini untuk mendokumen alat Anda:
- Untuk fungsi Katalog Unity, gunakan
COMMENT
klausul untuk menjelaskan fungsionalitas dan parameter alat. - Tentukan input dan output yang diharapkan dengan jelas.
- Tulis deskripsi yang bermakna untuk mempermudah alat bagi agen, dan manusia, untuk digunakan.
Contoh: Dokumentasi alat yang efektif
Contoh berikut menunjukkan string yang jelas COMMENT
untuk alat yang meminta tabel terstruktur.
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;
Contoh: Dokumentasi alat yang tidak efektif
Contoh berikut tidak memiliki detail penting, sehingga lebih sulit bagi agen untuk menggunakan alat ini secara efektif:
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;
Menjalankan fungsi menggunakan mode tanpa server atau lokal
Ketika layanan AI generatif menentukan bahwa pemanggilan fungsi diperlukan, paket integrasi (instans UCFunctionToolkit
) menjalankan API DatabricksFunctionClient.execute_function
.
Panggilan execute_function
dapat menjalankan fungsi dalam dua mode eksekusi: tanpa server atau lokal. Mode ini menentukan sumber daya mana yang menjalankan fungsi.
Mode tanpa server untuk produksi
Mode tanpa server adalah opsi default dan direkomendasikan untuk kasus penggunaan produksi. Ini menjalankan fungsi dari jarak jauh menggunakan titik akhir tanpa server SQL, memastikan bahwa proses agen Anda tetap aman dan bebas dari risiko menjalankan kode acak secara lokal.
# Defaults to serverless if `execution_mode` is not specified
client = DatabricksFunctionClient(execution_mode="serverless")
Saat agen Anda meminta eksekusi alat dalam mode tanpa server , hal berikut ini terjadi:
-
DatabricksFunctionClient
mengirim permintaan ke Katalog Unity untuk mengambil definisi fungsi jika definisi belum di-cache secara lokal. -
DatabricksFunctionClient
mengekstrak definisi fungsi dan memvalidasi nama dan jenis parameter. -
DatabricksFunctionClient
mengirimkan eksekusi sebagai UDF ke instans tanpa server.
Mode lokal untuk pengembangan
Mode lokal dirancang untuk pengembangan dan debugging. Ini menjalankan fungsi dalam subproses lokal alih-alih membuat permintaan ke titik akhir SQL Serverless. Ini memungkinkan Anda memecahkan masalah panggilan alat secara lebih efektif dengan menyediakan jejak tumpukan lokal.
Saat agen Anda meminta menjalankan alat dalam mode lokal , DatabricksFunctionClient
lakukan hal berikut:
- Mengirim permintaan ke Katalog Unity untuk mengambil definisi fungsi jika definisi belum di-cache secara lokal.
- Mengekstrak definisi yang dapat dipanggil Python, menyimpan cache yang dapat dipanggil secara lokal, dan memvalidasi nama dan jenis parameter.
- Memanggil fungsi yang dapat dipanggil dengan parameter yang ditentukan dalam subproses terbatas dengan pelindung batas waktu.
# Defaults to serverless if `execution_mode` is not specified
client = DatabricksFunctionClient(execution_mode="local")
Berjalan dalam "local"
mode menyediakan fitur berikut:
Batas waktu CPU: Membatasi total runtime CPU untuk eksekusi yang dapat dipanggil untuk mencegah beban komputasi yang berlebihan.
Batas waktu CPU didasarkan pada penggunaan CPU aktual, bukan waktu jam dinding. Karena penjadwalan sistem dan proses bersamaan, waktu CPU dapat melebihi waktu jam dinding dalam skenario dunia nyata.
Batas memori: Membatasi memori virtual yang dialokasikan untuk proses.
Perlindungan batas waktu: Memberlakukan batas waktu keseluruhan untuk menjalankan fungsi.
Sesuaikan batas ini menggunakan variabel lingkungan (baca lebih lanjut).
Variabel lingkungan
Konfigurasikan bagaimana fungsi berjalan dalam DatabricksFunctionClient
menggunakan variabel lingkungan berikut:
Variabel lingkungan | Nilai bawaan | Deskripsi |
---|---|---|
EXECUTOR_MAX_CPU_TIME_LIMIT |
10 detik |
Waktu eksekusi CPU maksimum yang diizinkan (hanya mode lokal). |
EXECUTOR_MAX_MEMORY_LIMIT |
100 MB |
Alokasi memori virtual maksimum yang diizinkan untuk proses (hanya mode lokal). |
EXECUTOR_TIMEOUT |
20 detik |
Total waktu jam dinding maksimum (hanya mode lokal). |
UCAI_DATABRICKS_SESSION_RETRY_MAX_ATTEMPTS |
5 |
Jumlah maksimum upaya untuk mencoba menyegarkan kembali klien sesi jika token kedaluwarsa. |
UCAI_DATABRICKS_SERVERLESS_EXECUTION_RESULT_ROW_LIMIT |
100 |
Jumlah maksimum baris yang akan dikembalikan saat menjalankan fungsi menggunakan komputasi tanpa server dan databricks-connect . |
Langkah selanjutnya
Tambahkan alat Unity Catalog ke agen melalui pemrograman. Lihat contoh
ChatAgent
.Tambahkan alat Unity Catalog pada agen melalui antarmuka pengguna AI Playground. Lihat Prototipe agen pemanggilan alat di AI Playground.
Mengelola fungsi Katalog Unity menggunakan Klien Fungsi. Lihat Dokumentasi Katalog Unity - Klien fungsi