Funktionen ai_query

Gäller för: markerad ja Databricks SQL markerad ja Databricks Runtime

Viktigt!

Den här funktionen finns som allmänt tillgänglig förhandsversion.

Anropar en befintlig Azure Databricks Model Serving-slutpunkt och parsar och returnerar svaret.

Krav

  • Den här funktionen är inte tillgänglig i Azure Databricks SQL Classic.
  • Att köra frågor mot Foundation Model-API:er är aktiverat som standard. Om du vill fråga efter slutpunkter som hanterar anpassade modeller eller externa modeller aktiverar du AI_Query för anpassade modeller och externa modeller i användargränssnittet för Databricks Previews.
  • Den aktuella DLT-lagerkanalen använder inte den senaste Databricks Runtime-versionen som stöder ai_query(). pipelines.channel Ange i tabellegenskaperna som 'preview' att använda ai_query(). Se Exempel för en exempelfråga.

Kommentar

  • I Databricks Runtime 14.2 och senare stöds den här funktionen i Databricks Notebooks, inklusive notebook-filer som körs som en uppgift i ett Databricks-arbetsflöde.
  • I Databricks Runtime 14.1 och nedan stöds inte den här funktionen i Databricks Notebooks.

Syntax

Så här frågar du en slutpunkt som hanterar en extern modell eller en grundmodell:

ai_query(endpointName, request)

Så här frågar du en anpassad modell som betjänar slutpunkten med ett modellschema:

ai_query(endpointName, request)

Så här frågar du en anpassad modell som betjänar slutpunkten utan ett modellschema:

ai_query(endpointName, request, returnType)

Argument

  • endpointName: En STRING-literal, namnet på en Databricks Foundation-modell som betjänar slutpunkten, en extern modell som betjänar slutpunkten eller en anpassad modellslutpunkt på samma arbetsyta för anrop. Definieraren måste ha behörigheten CAN QUERY på slutpunkten.
  • request: Ett uttryck, den begäran som används för att anropa slutpunkten.
    • Om slutpunkten är en extern modell som betjänar slutpunkten eller Databricks Foundation-modell-API:ernas slutpunkt måste begäran vara en STRING.
    • Om slutpunkten är en anpassad modell som betjänar slutpunkten kan begäran vara en enda kolumn eller ett struct-uttryck. Fältnamnen för struct ska matcha de indatafunktionsnamn som förväntas av slutpunkten.
  • returnType: Ett uttryck, den förväntade returnType från slutpunkten. Detta liknar schemaparametern i from_json funktion, som accepterar både ett STRING-uttryck eller anrop av schema_of_json funktion.
    • I Databricks Runtime 14.2 och senare, om det här uttrycket inte tillhandahålls, ai_query() härleds automatiskt returtypen från modellschemat för den anpassade modell som betjänar slutpunkten.
    • I Databricks Runtime 14.1 och nedan krävs det här uttrycket för att köra frågor mot en anpassad modell som betjänar slutpunkten.

Returer

Det tolkade svaret från slutpunkten.

Exempel

Så här frågar du en extern modell som betjänar slutpunkten:

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

Så här frågar du en grundmodell som stöds av Api:er för Databricks Foundation-modell:

> 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

Du kan också omsluta ett anrop till ai_query() i en UDF för funktionsanrop enligt följande:

> CREATE FUNCTION correct_grammar(text STRING)
  RETURNS STRING
  RETURN ai_query(
    'databricks-llama-2-70b-chat',
    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;

Så här frågar du en anpassad modell som betjänar slutpunkten:


> 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

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

Exempelfråga för att ställa in DLT-kanalen som förhandsversion:

> create or replace materialized view
    ai_query_mv
    TBLPROPERTIES('pipelines.channel' = 'PREVIEW') AS
  SELECT
    ai_query("databricks-dbrx-instruct", text) as response
  FROM
    messages