Partilhar via


Função ai_query

Aplica-se a:seleção marcada sim Databricks SQL seleção marcada sim Databricks Runtime

Important

Esta funcionalidade está em Pré-visualização Pública e em conformidade com a HIPAA.

Durante a antevisão:

Invoca um endpoint existente do Azure Databricks Model Serving e analisa e retorna a sua resposta.

ai_query é uma função de IA de uso geral que permite consultar pontos de extremidade existentes para inferência em tempo real ou cargas de trabalho de inferência em lote.

Requisitos

  • Esta função não está disponível no Azure Databricks SQL Classic.

  • Você deve habilitar o Azure Private Link para usar esse recurso em armazéns SQL profissionais.

  • Databricks Runtime 15.4 LTS ou superior é recomendado. O uso do Databricks Runtime 15.3 ou inferior pode resultar em velocidades de desempenho mais lentas.

  • Seu espaço de trabalho deve estar em uma região de Serviço de Modelo suportada.

  • Um endpoint de serviço existente com o seu modelo carregado. Se estiveres a usar um modelo de base hospedado pelo Databricks, um endpoint será criado para ti. Caso contrário, consulte Criar modelo personalizado servindo pontos de extremidade ou Criar modelo de base servindo pontos de extremidade.

  • O Querying Foundation Model APIs está habilitado por padrão. Para consultar endpoints que servem modelos personalizados ou modelos externos:

    • Habilite AI_Query para modelos personalizados e modelos externos na interface de pré-visualizações do Databricks.
  • O atual canal de armazém do Lakeflow Spark Declarative Pipelines não usa a versão mais recente do Databricks Runtime que suporta ai_query(). Defina o pipelines.channel nas propriedades da tabela como 'preview' para usar ai_query().

    > create or replace materialized view
        ai_query_mv
        TBLPROPERTIES('pipelines.channel' = 'PREVIEW') AS
      SELECT
        ai_query("databricks-meta-llama-3-3-70b-instruct", text) as response
      FROM
        messages
      LIMIT 10;
    

Syntax

Para consultar um ponto de extremidade que serve um modelo de base:

ai_query(endpoint, request)

Para consultar um ponto de extremidade de serviço de um modelo personalizado com um esquema de modelo :

ai_query(endpoint, request)

Para consultar um ponto de extremidade de serviço de um modelo personalizado sem uma estrutura de modelo:

ai_query(endpoint, request, returnType, failOnError)

Argumentos e devoluções

Argument Description Returns
endpoint O nome de um endpoint de serviço do Databricks Foundation Model, de um modelo externo de serviço ou de um endpoint de modelo personalizado no mesmo espaço de trabalho para chamadas como um literal STRING. O definidor deve ter permissão CAN QUERY no ponto de extremidade.
request A solicitação usada para invocar o ponto de extremidade como uma expressão.
  • Se o ponto de extremidade for um ponto de extremidade de serviço de modelo externo ou um ponto de extremidade das APIs do Databricks Foundation Model, 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 pode ser uma única coluna ou uma expressão STRUCT. Os nomes de campo STRUCT devem corresponder aos nomes de recursos de entrada esperados pelo ponto de extremidade.
returnType (Opcional para Databricks Runtime 15.2 e superior) O esperado returnType do ponto de extremidade como uma expressão. Isso é semelhante ao parâmetro schema na from_json função, que aceita tanto uma expressão STRING como uma invocação de schema_of_json função.
  • Para Databricks Runtime 15.2 e superior, esta expressão é opcional. Se não for fornecido, ai_query() infere automaticamente o tipo de retorno do esquema de modelo do ponto de extremidade de serviço do modelo personalizado.
  • Para o Databricks Runtime 15.1 e inferior, essa expressão é necessária para consultar um modelo personalizado que serve o ponto de extremidade.

Use o parâmetro responseFormat para especificar formatos de resposta para modelos de base de chat.
failOnError (Opcional) Um literal booleano que assume por defeito o valor verdadeiro. Requer Databricks Runtime 15.3 ou superior. Esse sinalizador indica se o status de erro deve ser incluído na ai_query resposta.
Consulte Manipular erros usando failOnError para obter um exemplo.
A seguir descrevemos o comportamento de retorno com base no failOnError cenário:
  • Se failOnError => true, a função retorna o mesmo resultado que o comportamento existente, que é a resposta analisada do ponto de extremidade. O tipo de dados da resposta analisada é inferido a partir do tipo de modelo, do ponto de extremidade do esquema do modelo ou do parâmetro returnType na função ai_query.
  • Se failOnError => false, a função retorna um objeto STRUCT que contém a resposta analisada e a cadeia de status de erro.
    • Se a inferência da linha for 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á.
modelParameters (Opcional) Um campo de estrutura que contém parâmetros de modelo de chat, conclusão e modelo de incorporação para servir modelos base ou modelos externos. Esses parâmetros do modelo devem ser parâmetros constantes e não dependentes de dados.
  • Requer Databricks Runtime 15.3 ou superior.
  • Quando esses parâmetros de modelo não são especificados ou definidos como null o valor padrão é usado. Com exceção do que tem um valor padrão de , os valores padrão para esses parâmetros de modelo são os mesmos listados node referência da API REST do modelo Foundation.

Consulte Configurar um modelo passando parâmetros de modelo para obter um exemplo.
responseFormat (Opcional) Especifique o formato de resposta que você deseja que o modelo de base de chat siga.
  • Requer Databricks Runtime 15.4 LTS ou superior. Disponível apenas para consultar modelos básicos de chat.
  • Dois estilos de formato de resposta são suportados.
    • Uma cadeia de caracteres JSON estilo DDL
    • Uma cadeia de caracteres JSON. Três tipos de cadeia de caracteres JSON de formato de resposta são suportados:text, json_object, json_schema

Consulte Aplicar esquema de saída com uma saída estruturada para obter exemplos.
A seguir descreve-se o que acontece quando failOnError também é definido quando responseFormat é especificado:
  • Se failOnError => false e você tiver especificado responseFormat, a função retornará a resposta analisada e a cadeia de status de erro como um objeto STRUCT.
  • Dependendo do tipo de cadeia de caracteres JSON especificado no 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 do par chave-valor, como {“key”: “value”}.
    • Para responseFormat => '{"type": "json_schema", "json_schema"...}', a resposta é uma cadeia de caracteres JSON.
files (Opcional) Especifique quais ficheiros e conteúdo usar nas suas solicitações de entrada multimodais usando files=>content. files é o nome do parâmetro esperado pelo modelo para entrada multimodal e content refere-se à coluna no DataFrame que contém o conteúdo binário dos arquivos de imagem que você deseja usar em sua consulta.
  • Necessário para pedidos multimodais.
  • Apenas entradas de imagem: JPEG ou PNG são suportadas. Consulte Entradas multimodais para obter um exemplo. Como visto neste exemplo, você pode especificar a content coluna da saída de read_files para o files parâmetro.

Exemplo: Consultar um modelo de base

Para consultar o ponto de serviço de 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 base suportado pelas APIs do Databricks Foundation Model:

> 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

Opcionalmente, pode também encapsular uma chamada em UDF para a chamada de função ai_query() da seguinte maneira:

 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;

Entradas multimodais

ai_query Suporta nativamente entradas de imagem multimodais. Consulte Tipos de modelos fundamentais para os modelos de visão suportados hospedados no Databricks.

Os seguintes tipos de entrada são suportados:

  • JPEG
  • PNG

O exemplo a seguir mostra como consultar um modelo de base suportado por APIs de modelo de base Databricks para entrada multimodal. Neste exemplo, o files => content parâmetro é usado para passar os dados do arquivo de imagem para ai_query

  • files: O nome do parâmetro esperado pelo modelo para entrada multimodal
  • content: A coluna no DataFrame retornada por READ_FILES, que contém o conteúdo binário do arquivo de imagem.

> SELECT *, ai_query(
  'databricks-llama-4-maverick',
 'what is this image about?', files => content)
as output FROM READ_FILES("/Volumes/main/multimodal/unstructured/image.jpeg");

Para consultar um modelo de base suportado pelas APIs do Databricks Foundation Model para entrada multimodal e especificar saída estruturada:

> SELECT *, ai_query(
  'databricks-llama-4-maverick', 'What is interesting or important about this image?',
    responseFormat => ‘{
      "type": "json_schema",
        "json_schema": {
          "name": "output",
          "schema": {
            "type": "object",
            "properties": {
              "summary": {"type": "string"},
              "num_people": {"type": "integer"},
              "num_animals": {"type": "integer"},
              "interesting_fact": {"type": "string"},
              "possible_context": {"type": "string"}
            }
        },
        "strict": true
      }
    }’,
    files => content
  )
  as output FROM READ_FILES("/Volumes/main/user/volume1/image.jpeg");

Exemplo: Consultar um modelo de ML tradicional

Para consultar um modelo personalizado ou um modelo de ML tradicional num ponto de extremidade de serviço:


> 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

Exemplos de cenários avançados

As seções a seguir fornecem exemplos de casos de uso avançados, como tratamento de erros ou como incorporar ai_query em uma função definida pelo usuário.

Passar uma matriz de mensagens

O exemplo a seguir mostra como passar um array de mensagens para o seu modelo ou aplicação de agente usando ai_query.

> 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."]}

Concatenar as colunas de prompt e de inferência

Há várias maneiras de concatenar o prompt e a coluna de inferência, como usar ||, CONCAT()ou format_string():

SELECT
CONCAT('${prompt}', ${input_column_name}) AS concatenated_prompt
FROM ${input_table_name};

Alternatively:

SELECT
'${prompt}' || ${input_column_name} AS concatenated_prompt
FROM ${input_table_name};

Ou usando format_string():

SELECT
format_string('%s%s', '${prompt}', ${input_column_name}) AS concatenated_prompt
FROM ${input_table_name};

Configurar um modelo passando parâmetros de modelo

Personalize o comportamento do modelo passando parâmetros específicos, como tokens máximos e temperatura. Por exemplo:

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;

Tratar erros usando failOnError

Use o argumento failOnError para ai_query para manipular erros. O exemplo a seguir mostra como garantir que, se uma linha tiver um erro, ela não interromperá a execução de toda a consulta. Consulte Argumentos e retornos para comportamentos esperados com base em como este argumento é definido.


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;

Aplicar o esquema de saída utilizando saídas estruturadas

Certifique-se de que a saída esteja em conformidade com um esquema específico para facilitar o processamento posterior usando responseFormat. Consulte Saídas estruturadas no Azure Databricks.

O exemplo a seguir impõe um esquema de cadeia de caracteres JSON estilo DDL:

SELECT ai_query(
    "databricks-gpt-oss-20b",
    "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;

Como alternativa, usando um formato de resposta de esquema JSON:

SELECT ai_query(
    "databricks-gpt-oss-20b",
    "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;

Uma saída esperada pode assemelhar-se a:

{ "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"] }

Usar ai_query em funções definidas pelo usuário

Você pode encapsular uma chamada para ai_query em um UDF, facilitando o uso de funções em diferentes fluxos de trabalho e compartilhá-las.

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;