Função ai_query
Aplica-se a: SQL do Databricks
Runtime do Databricks
Importante
Esse recurso está em uma versão prévia.
Invoca um ponto de extremidade existente do Azure Databricks Model Serving e analisa e retorna sua resposta.
Consulte os seguintes guias para saber como usar ai_query
para diferentes casos de uso:
- Executar inferência de LLM em lote usando ai_query
- Consultar um modelo externo com ai_query
- Consultar um modelo servido com ai_query
Requisitos
- Essa função não está disponível no SQL Clássico do Azure Databricks.
- Você deve habilitar o Link Privado do Azure para usar esse recurso em warehouses SQL profissionais.
- O Databricks Runtime 15.3 ou superior é recomendado. O uso do Databricks Runtime 15.2 ou inferior pode resultar em velocidades de desempenho mais lentas.
- O canal de warehouse DLTatual não usa a versão mais recente do Databricks Runtime que dá suporte a
ai_query()
. Definapipelines.channel
nas propriedades da tabela como'preview'
para usarai_query()
. Confira Exemplos para obter um exemplo de consulta. - Um modelo existente que atende ao ponto de extremidade com o modelo carregado. Consulte Criar pontos de extremidade do serviço de modelo personalizado.
- Seu espaço de trabalho deve estar em uma região de Serviço de modelo compatível.
- A consulta às APIs do Foundation Model está habilitada por padrão. Para consultar pontos de extremidade que atendem modelos personalizados ou modelos externos:
- Habilite AI_Query para modelos personalizados e modelos externos na Interface do usuário do Databricks Previews.
- Consulte Consultar um modelo externo com ai_query.
- Consulte Executar inferência de LLM em lote usando ai_query
Observação
- No Databricks Runtime 14.2 e versões posteriores, esta função tem suporte em notebooks do Databricks, incluindo notebooks executados como uma tarefa em um fluxo de trabalho do Databricks.
- No Databricks Runtime 14.1 e versões anteriores, esta função não tem suporte nos notebooks do Databricks.
Sintaxe
Para consultar um ponto de extremidade que atenda a um modelo externo ou um modelo do Foundation:
ai_query(endpoint, request)
Para consultar um modelo personalizado que serve ao ponto de extremidade com um esquema de modelo:
ai_query(endpoint, request)
Para consultar um modelo personalizado que serve ao ponto de extremidade sem um esquema de modelo:
ai_query(endpoint, request, returnType, failOnError)
Argumentos
endpoint
: um literalSTRING
, o nome de um ponto de extremidade do serviço do Modelo de Base do Databricks, um ponto de extremidade do serviço de modelo externo ou um ponto de extremidade de modelo personalizado no mesmo workspace para invocações. O definidor precisa ter a permissãoCAN QUERY
no ponto de extremidade.request
: uma expressão, a solicitação usada para invocar o ponto de extremidade.- Se o ponto de extremidade for um ponto de extremidade do Serviço de Modelo externo ou um ponto de extremidade das APIs do Modelo de Base do Databricks, a solicitação deverá ser um
STRING
. - Se o ponto de extremidade for um modelo personalizado que serve o ponto de extremidade, a solicitação poderá ser uma única coluna ou uma expressão struct. Os nomes dos campos struct devem corresponder aos nomes do recurso de entrada esperados pelo ponto de extremidade.
- Se o ponto de extremidade for um ponto de extremidade do Serviço de Modelo externo ou um ponto de extremidade das APIs do Modelo de Base do Databricks, a solicitação deverá ser um
returnType
: uma expressão, oreturnType
esperado do ponto de extremidade. Isso é semelhante ao parâmetro de esquema na função from_json, que aceita uma expressãoSTRING
ou a invocação da função schema_of_json.- No Databricks Runtime 14.2 e versões posteriores, se essa expressão não for fornecida,
ai_query()
inferirá automaticamente o tipo de retorno com base no esquema do modelo do ponto de extremidade que serve ao modelo personalizado. - No Databricks Runtime 14.1 e anteriores, essa expressão é necessária para consultar um modelo personalizado que serve ao ponto de extremidade.
- No Databricks Runtime 14.2 e versões posteriores, se essa expressão não for fornecida,
failOnError
: (opcional) Um literal booleano padronizado como true. Esse sinalizador indica se o status do erro deve ser incluído naai_query
resposta.modelParameters
(opcional): um campo struct que contém parâmetros de modelo de chat, conclusão e incorporação para atender a modelos de fundação ou modelos externos. Esses parâmetros de modelo devem ser parâmetros constantes e não dependentes de dados. Quando esses parâmetros de modelo não são especificados ou configurados paranull
o valor padrão, é usado. Com exceção detemperature
que tem um valor padrão de0.0
, os valores padrão para esses parâmetros de modelo são os mesmos listados na referência da API REST do modelo do Foundation.responseFormat
(opcional): um campo de cadeia de caracteres JSON que especifica o formato de resposta que você deseja que o modelo siga. Há suporte para três tipos de cadeia de caracteres de formato de resposta:text
json_object
json_schema
Devoluções
A resposta analisada do ponto de extremidade.
- Se
failOnError => true
, a função retornará o mesmo resultado que o comportamento existente, que é a resposta analisada do ponto de extremidade. O tipo de dados da resposta analisada é inferido do tipo de modelo, do ponto de extremidade do esquema do modelo ou doreturnType
ai_query
parâmetro na função. - Se
failOnError => false
, a função retornará a resposta analisada e a cadeia de caracteres de status de erro como um objetoSTRUCT
.- Se a inferência da linha tiver sido bem-sucedida, o campo
errorStatus
seránull
. - Se a inferência da linha falhar devido a erros de ponto de extremidade do modelo, o campo
response
seránull
. - Se a inferência da linha falhar devido a outros erros, toda a consulta falhará.
- Se a inferência da linha tiver sido bem-sucedida, o campo
- Dependendo do tipo de cadeia de caracteres JSON especificado em
responseFormat
, a seguinte resposta é retornada:- Para
responseFormat => '{“type”, “text”}'
, a resposta é uma cadeia de caracteres como,“Here is the response”
. - Para
responseFormat => '{“type”, “json_object”}'
, a resposta é uma cadeia de caracteres JSON de par chave-valor, como{“key”: “value”}
. - Para
responseFormat => '{“type”, “json_schema”...}'
, a resposta é uma cadeia de caracteres JSON. Veja os exemplos .
- Para
- Se
failOnError => false
e você especificouresponseFormat
, a função retornará a resposta analisada e a cadeia de caracteres de status de erro como um objetoSTRUCT
.
Exemplos
O exemplo a seguir especifica um formato de resposta 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
}
}'
)
Veja a seguir um exemplo de saída para o formato de resposta json_schema
especificado:
{"title": "<the title of the paper>"}
Veja a seguir um exemplo de inferência em lote usando o failOnError
e modelParameters
com max_tokens
e temperature
.
Este exemplo também mostra como concatenar o prompt do modelo e a coluna de inferência usando concat()
.
Há várias maneiras de realizar a concatenação, como usar ||
, concat()
, ou 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}
)
Para consultar um ponto de extremidade que atende um modelo externo:
> 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."
Para consultar um modelo de fundação compatível com as APIs de Modelo do 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
Opcionalmente, você também pode encapsular uma chamada a ai_query()
em um UDF para chamada de função da seguinte maneira:
> 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;
Para consultar um ponto de extremidade do serviço de modelo personalizado:
> 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."]}
Exemplo de consulta para configurar o canal DLT para visualização:
> 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;