Funzione ai_query
Si applica a: Databricks SQL Databricks Runtime
Importante
Questa funzionalità è disponibile in anteprima pubblica.
Richiama un endpoint di gestione del modello di Azure Databricks esistente e ne analizza e restituisce la risposta.
Per informazioni su come usare per casi d'uso ai_query
diversi, vedere le guide seguenti:
- Eseguire inferenze batch LLM utilizzando ai_query
- Eseguire query su un modello esterno con ai_query
- Eseguire una query su un modello servito con ai_query
Fabbisogno
- Questa funzione non è disponibile in Azure Databricks SQL classico.
- È necessario abilitare collegamento privato di Azure per usare questa funzionalità nei data warehouse pro SQL.
- È consigliabile usare Databricks Runtime 15.3 o versione successiva. L'uso di Databricks Runtime 15.2 o versioni successive potrebbe comportare una maggiore velocità delle prestazioni.
- Il canale DLT warehouse corrente .
Set il
pipelines.channel
nelle proprietà di table come'preview'
per usareai_query()
. Vedere Esempi per una query di esempio. - Un modello esistente che gestisce l'endpoint con il modello caricato. Vedere Creare endpoint di gestione di modelli personalizzati.
- L'area di lavoro deve trovarsi in un'area di gestione dei modelli supportata.
- L'esecuzione di query sulle API del modello di base è abilitata per impostazione predefinita. Per eseguire query sugli endpoint che gestiscono modelli personalizzati o modelli esterni:
- Abilitare AI_Query per modelli personalizzati e modelli esterni nell'interfaccia utente delle anteprime di Databricks.
- Vedere Eseguire query su un modello esterno con ai_query.
- Vedere Eseguire l'inferenza LLM batch usando ai_query
Nota
- In Databricks Runtime 14.2 e versioni successive questa funzione è supportata nei notebook di Databricks, inclusi i notebook eseguiti come attività in un flusso di lavoro di Databricks.
- In Databricks Runtime 14.1 e versioni precedenti questa funzione non è supportata nei notebook di Databricks.
Sintassi
Per eseguire query su un endpoint che gestisce un modello esterno o un modello di base:
ai_query(endpoint, request)
Per eseguire query su un endpoint personalizzato che gestisce un modello di schema:
ai_query(endpoint, request)
Per eseguire query su un endpoint personalizzato che gestisce un modello senza un modello schema:
ai_query(endpoint, request, returnType, failOnError)
Argomenti
-
endpoint
: valore letteraleSTRING
, nome di un endpoint di servizio del modello di Databricks Foundation, un endpoint di servizio del modello esterno o un endpoint di modello personalizzato nella stessa area di lavoro per le invocazioni. Il definer deve disporre dell'autorizzazioneCAN QUERY
per l'endpoint. -
request
: espressione, richiesta usata per richiamare l'endpoint.- Se l'endpoint è un endpoint di servizio per modelli esterno o un endpoint delle API di modelli della Databricks Foundation, la richiesta deve essere un
STRING
. - Se l'endpoint è un endpoint personalizzato per la gestione dei modelli, la richiesta può essere una singola column o un'espressione strutturata. I nomi dei campi dello struct devono corrispondere ai nomi delle funzionalità di input previsti dall'endpoint.
- Se l'endpoint è un endpoint di servizio per modelli esterno o un endpoint delle API di modelli della Databricks Foundation, la richiesta deve essere un
-
returnType
: Un'espressione, ilreturnType
previsto dall'endpoint. È simile al parametro schema nella funzione from_json, che accetta sia un'espressioneSTRING
sia una chiamata della funzione schema_of_json.- In Databricks Runtime 14.2 e versioni successive, se questa espressione non viene specificata,
ai_query()
deduce automaticamente il tipo restituito dal modello schema dell'endpoint di gestione del modello personalizzato. - In Databricks Runtime 14.1 e versioni successive questa espressione è necessaria per eseguire query su un endpoint di gestione di un modello personalizzato.
- In Databricks Runtime 14.2 e versioni successive, se questa espressione non viene specificata,
-
failOnError
: (facoltativo) Valore letterale booleano che per impostazione predefinita è true. Questo flag indica se includere lo stato di errore nellaai_query
risposta. -
modelParameters
(facoltativo): campo struct che contiene chat, completamento e incorporamento del modello parameters per gestire modelli di base o modelli esterni. Questi modelli parameters devono essere costanti parameters e non dipendenti dai dati. Quando il modello parameters non viene specificato o quando da set anull
, viene usato il valore predefinito. Ad eccezione ditemperature
che ha un valore predefinito di0.0
, i values predefiniti per questi modelli parameters sono uguali a quelli elencati nella documentazione di riferimento per l'API REST del modello Foundation . -
responseFormat
(facoltativo): campo stringa JSON che specifica il formato di risposta che si vuole che il modello segua. Sono supportati tre tipi di stringa di formato di risposta:text
json_object
json_schema
Valori restituiti
Risposta analizzata dall'endpoint.
- Se
failOnError => true
, la funzione restituisce lo stesso risultato del comportamento esistente, ovvero la risposta analizzata dall'endpoint. Il tipo di dati della risposta analizzata viene dedotto dal tipo di modello, dal modello schema endpoint o dal parametroreturnType
nella funzioneai_query
. - Se
failOnError => false
, la funzione restituisce la risposta analizzata e la stringa di stato dell'errore come oggettoSTRUCT
.- Se l'inferenza della riga ha esito positivo, il campo
errorStatus
ènull
. - Se l'inferenza della riga non è riuscita a causa di errori dell'endpoint del modello, il campo
response
ènull
. - Se l'inferenza della riga non è riuscita a causa di altri errori, l'intera query ha esito negativo.
- Se l'inferenza della riga ha esito positivo, il campo
- A seconda del tipo di stringa JSON specificato in
responseFormat
, viene restituita la risposta seguente:- Per
responseFormat => '{“type”, “text”}'
, la risposta è una stringa, ad esempio,“Here is the response”
. - Per
responseFormat => '{“type”, “json_object”}'
, la risposta è una stringa JSON della coppia chiave-valore, ad esempio{“key”: “value”}
. - Per
responseFormat => '{“type”, “json_schema”...}'
, la risposta è una stringa JSON. Vedere gli esempi .
- Per
- Se
failOnError => false
e si è specificatoresponseFormat
, la funzione restituisce la risposta analizzata e la stringa di stato dell'errore come oggettoSTRUCT
.
esempi di
Nell'esempio seguente viene specificato un formato di risposta json_schema
:
SELECT
ai_query(
"llama-3-1-70b",
<request>,
responseFormat =>'{
"type": "json_schema",
"json_schema":
{
"name": "research_paper_extraction",
"schema":
{
"type": "object",
"properties":
{
"title": { "type": "string" }
}
},
"strict": true
}
}'
)
Di seguito è riportato un output di esempio per il formato di risposta json_schema
specificato:
{"title": "<the title of the paper>"}
Di seguito è riportato un esempio di inferenza batch che usa failOnError
e modelParameters
con max_tokens
e temperature
.
Questo esempio illustra anche come concatenare il prompt per il tuo modello e l'inferenza column usando concat()
.
Esistono diversi modi per eseguire la concatenazione, ad esempio usando ||
, concat()
o format_string()
.
CREATE OR REPLACE TABLE ${output_table_name} AS (
SELECT
${input_column_name},
AI_QUERY(
"${endpoint}",
CONCAT("${prompt}", ${input_column_name}),
failOnError => false,
modelParameters => named_struct('max_tokens', ${num_output_tokens},'temperature', ${temperature})
) as response
FROM ${input_table_name}
LIMIT ${input_num_rows}
)
Per eseguire query su un endpoint di gestione di un modello esterno:
> SELECT ai_query(
'my-external-model-openai-chat',
'Describe Databricks SQL in 30 words.'
) AS summary
"Databricks SQL is a cloud-based platform for data analytics and machine learning, providing a unified workspace for collaborative data exploration, analysis, and visualization using SQL queries."
Per eseguire query su un modello di base supportato dalle API del modello di Databricks Foundation:
> SELECT *,
ai_query(
'databricks-meta-llama-3-1-70b-instruct',
"Can you tell me the name of the US state that serves the provided ZIP code? zip code: " || pickup_zip
)
FROM samples.nyctaxi.trips
LIMIT 10
Facoltativamente, è anche possibile eseguire il wrapping di una chiamata a ai_query()
in una funzione definita dall'utente per chiamare la funzione come indicato di seguito:
> CREATE FUNCTION correct_grammar(text STRING)
RETURNS STRING
RETURN ai_query(
'databricks-meta-llama-3-1-70b-instruct',
CONCAT('Correct this to standard English:\n', text));
> GRANT EXECUTE ON correct_grammar TO ds;
- DS fixes grammar issues in a batch.
> SELECT
* EXCEPT text,
correct_grammar(text) AS text
FROM articles;
Per eseguire query su un endpoint di gestione di un modello personalizzato:
> SELECT text, ai_query(
endpoint => 'spam-classification-endpoint',
request => named_struct(
'timestamp', timestamp,
'sender', from_number,
'text', text),
returnType => 'BOOLEAN') AS is_spam
FROM messages
LIMIT 10
> SELECT ai_query(
'weekly-forecast',
request => struct(*),
returnType => 'FLOAT') AS predicted_revenue
FROM retail_revenue
> SELECT ai_query(
'custom-llama-2-7b-chat',
request => named_struct("messages",
ARRAY(named_struct("role", "user", "content", "What is ML?"))),
returnType => 'STRUCT<candidates:ARRAY<STRING>>')
{"candidates":["ML stands for Machine Learning. It's a subfield of Artificial Intelligence that involves the use of algorithms and statistical models to enable machines to learn from data, make decisions, and improve their performance on a specific task over time."]}
Query di esempio per impostare il canale DLT su anteprima:
> create or replace materialized view
ai_query_mv
TBLPROPERTIES('pipelines.channel' = 'PREVIEW') AS
SELECT
ai_query("databricks-dbrx-instruct", text) as response
FROM
messages
LIMIT 10;