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 utilizzare ai_query
nei flussi di lavoro di produzione, consultare su come eseguire l'inferenza batch LLM utilizzando le funzioni di intelligenza artificiale.
Requisiti
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.
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 precedenti potrebbe comportare una riduzione della velocità delle prestazioni.
L'area di lavoro deve trovarsi in un'area di gestione dei modelli supportata.
Un modello esistente che gestisce l'endpoint con il modello caricato. Se si usa un modello di base ospitato in Databricks, viene creato automaticamente un endpoint. In caso contrario, vedere Creare endpoint di servizio per modelli personalizzati o Creare endpoint di servizio per modelli di base.
L'esecuzione di query sulle API del modello di base è abilitata per impostazione predefinita. Per eseguire query sugli endpoint che servono modelli personalizzati o modelli esterni :
- Abilitare AI_Query per modelli personalizzati e modelli esterni nell'interfaccia utente delle anteprime di Databricks.
Il
canale DLT warehouse attuale non utilizza l'ultima versione di Databricks Runtime che supporta . Impostare il pipelines.channel
nelle proprietà della tabella come'preview'
per usareai_query()
.> 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;
Sintassi
Per eseguire query su un endpoint che gestisce un modello di base, inclusi modelli esterni o un modello di base personalizzato:
ai_query(endpoint, request)
Per eseguire query su un endpoint personalizzato che gestisce un modello con uno schema del modello :
ai_query(endpoint, request)
Per eseguire query su un endpoint personalizzato che gestisce un modello senza uno schema del modello:
ai_query(endpoint, request, returnType, failOnError)
argomenti e restituzioni
Argomentazione | Descrizione | Rimborsi |
---|---|---|
endpoint |
Valore letterale STRING , il nome di un endpoint di servizio di un modello Databricks Foundation, di un endpoint per il servizio di un modello esterno o di un endpoint di un modello personalizzato nella stessa area di lavoro per le invocazioni. Il definer deve disporre dell'autorizzazione CAN QUERY per l'endpoint. |
|
request |
Un'espressione, la richiesta utilizzata per richiamare l'endpoint.
|
|
returnType |
Un'espressione, il returnType previsto dall'endpoint. È simile al parametro dello schema nella funzione from_json , che accetta sia un'espressione STRING che una chiamata di schema_of_json funzione.
|
|
failOnError |
(Facoltativo) Valore letterale booleano che per impostazione predefinita è vero. Questo flag indica se includere lo stato di errore nella ai_query risposta. |
Vedere Gestire gli errori usando failOnError per un esempio. |
modelParameters |
(Facoltativo) Un campo struct che contiene i parametri per i modelli di chat, completamento ed embedding per servire modelli di base o modelli esterni. Questi parametri del modello devono essere parametri costanti e non dipendenti dai dati. Quando questi parametri del modello non vengono specificati o impostati su null viene usato il valore predefinito. Ad eccezione di temperature che ha un valore predefinito di 0.0 , i valori predefiniti per questi parametri del modello sono uguali a quelli elencati in Foundation model REST API reference.Per un esempio, vedere Configurare un modello passando i parametri del modello. |
|
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:
|
Vedere Applicazione di uno schema di output con risultati strutturati per un esempio. |
Concatenare la colonna di richiesta e inferenza
Esistono diversi modi per concatenare la richiesta e la colonna di inferenza, ad esempio usando ||
, CONCAT()
o format_string()
:
SELECT
CONCAT('${prompt}', ${input_column_name}) AS concatenated_prompt
FROM ${input_table_name};
Alternativamente:
SELECT
'${prompt}' || ${input_column_name} AS concatenated_prompt
FROM ${input_table_name};
Oppure usando format_string()
:
SELECT
format_string('%s%s', '${prompt}', ${input_column_name}) AS concatenated_prompt
FROM ${input_table_name};
Configurare un modello passando i parametri del modello
Personalizzare il comportamento del modello passando parametri specifici, ad esempio token e temperatura massimi. Per esempio:
SELECT text, ai_query(
"databricks-meta-llama-3-3-70b-instruct",
"Please summarize the following article: " || text,
modelParameters => named_struct('max_tokens', 100, 'temperature', 0.7)
) AS summary
FROM uc_catalog.schema.table;
Gestire gli errori usando failOnError
Utilizzare l'argomento failOnError
per ai_query
per gestire gli errori. Nell'esempio seguente viene illustrato come assicurarsi che, se una riga presenta un errore, l'intera query non verrà interrotta dall'esecuzione. Consultare Argomenti e valori restituiti per i comportamenti previsti in base a come è impostato questo argomento.
SELECT text, ai_query(
"databricks-meta-llama-3-3-70b-instruct",
"Summarize the given text comprehensively, covering key points and main ideas concisely while retaining relevant details and examples. Ensure clarity and accuracy without unnecessary repetition or omissions: " || text,
failOnError => false
) AS summary
FROM uc_catalog.schema.table;
Applicare lo schema di output con output strutturato
Assicurarsi che l'output sia conforme a uno schema specifico per semplificare l'elaborazione downstream. Ad esempio, è possibile applicare un formato di risposta dello schema JSON:
SELECT ai_query(
"databricks-meta-llama-3-3-70b-instruct",
"Extract research paper details from the following abstract: " || abstract,
responseFormat => 'STRUCT<research_paper_extraction:STRUCT<title:STRING, authors:ARRAY<STRING>, abstract:STRING, keywords:ARRAY<STRING>>>'
)
FROM research_papers;
In alternativa, usando uno schema JSON di stile DDL:
SELECT ai_query(
"databricks-meta-llama-3-3-70b-instruct",
"Extract research paper details from the following abstract: " || abstract,
responseFormat => '{
"type": "json_schema",
"json_schema": {
"name": "research_paper_extraction",
"schema": {
"type": "object",
"properties": {
"title": {"type": "string"},
"authors": {"type": "array", "items": {"type": "string"}},
"abstract": {"type": "string"},
"keywords": {"type": "array", "items": {"type": "string"}}
}
}
},
"strict": true
}'
)
FROM research_papers;
Un output previsto potrebbe essere simile al seguente:
{ "title": "Understanding AI Functions in Databricks", "authors": ["Alice Smith", "Bob Jones"], "abstract": "This paper explains how AI functions can be integrated into data workflows.", "keywords": ["Databricks", "AI", "LLM"] }
Usare ai_query
nelle funzioni definite dall'utente
È possibile incapsulare una chiamata a ai_query
in una UDF, semplificando l'uso di funzioni in flussi di lavoro diversi per condividerle.
CREATE FUNCTION correct_grammar(text STRING)
RETURNS STRING
RETURN ai_query(
'databricks-meta-llama-3-3-70b-instruct',
CONCAT('Correct this to standard English:\n', text));
GRANT EXECUTE ON correct_grammar TO ds;
SELECT
* EXCEPT text,
correct_grammar(text) AS text
FROM articles;
esempio di : Eseguire query su un modello di base
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-3-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, puoi anche avvolgere la chiamata a ai_query()
in una UDF per la chiamata della funzione come segue.
CREATE FUNCTION correct_grammar(text STRING)
RETURNS STRING
RETURN ai_query(
'databricks-meta-llama-3-3-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;
Esempio: caso d'uso dell'inferenza batch
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 del modello e la colonna di inferenza 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}
)
Esempio: Eseguire query su un modello di Machine Learning tradizionale
Per eseguire query su un modello personalizzato o un modello di Machine Learning tradizionale che gestisce un endpoint:
> 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-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."]}