共用方式為


ai_query函式

適用於:勾選為「是」Databricks SQL 勾選為「是」Databricks Runtime

Important

此功能已符合 公開預覽 版及 HIPAA 規範。

預覽期間:

  • 底層語言模型能支援多種語言,但這個 AI 功能是針對英語調整的。
  • 請參閱 有限地區可用的功能 以了解 AI 功能的區域可用性。

叫用現有的 Azure Databricks 模型服務端點 ,並剖析並傳回其回應。

ai_query 是一般用途 的 AI 函數 ,可讓您查詢現有端點以取得即時推論或批次推論工作負載。

需求

  • 此函數不適用於 Azure Databricks SQL Classic。

  • 您必須啟用 Azure Private Link ,才能在 Pro SQL 倉儲上使用這項功能。

  • 建議使用 Databricks Runtime 15.4 LTS 或更新版本。 使用 Databricks Runtime 15.3 或更低版本可能會導致效能速度變慢。

  • 您的工作區必須位於支援的 模型服務區域中

  • 現有模型服務端點,並已載入模型。 如果您使用 Databricks 裝載的基礎模型,則會為您建立端點。 否則,請參閱 建立提供端點的自定義模型建立服務端點的基礎模型

  • 預設會啟用查詢基礎模型 API。 若要查詢用於自訂模型外部模型的端點:

  • 目前Lakeflow Spark 宣告式管線倉儲通道不會使用支援 ai_query()的最新 Databricks Runtime 版本。 在資料表屬性中,將 pipelines.channel 設定為 'preview' 以使用 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

若要查詢提供 基礎模型的端點:

ai_query(endpoint, request)

若要查詢自訂模型服務端點,請使用 模型架構:

ai_query(endpoint, request)

若要在沒有模型架構的情況下查詢提供端點的自定義模型:

ai_query(endpoint, request, returnType, failOnError)

參數和返回值

Argument Description Returns
endpoint Databricks Foundation Model 服務端點的名稱、外部模型服務端點或相同工作區中的自定義模型端點,以 STRING 字面量方式調用。 定義器必須具有端點 CAN QUERY 許可權。
request 用來叫用端點做為表達式的要求。
  • 如果端點是外部模型服務端點或 Databricks Foundation 模型 API 端點,則要求必須是 STRING
  • 如果端點是自定義模型的服務端點,請求可以是單一數據行或 STRUCT 運算式。 STRUCT 功能變數名稱應該符合端點所預期的輸入功能名稱。
returnType (Databricks Runtime 15.2 和更新版本的選擇性)端點的預期 returnType 運算式。 這類似於函數中的from_json模式參數,它同時接受STRING函數的schema_of_json表達式或調用。
  • 針對 Databricks Runtime 15.2 和更新版本,此運算式是 選擇性的。 如果未提供, ai_query() 則會自動從 自訂模型服務端點的模型結構描述推斷傳回型別。
  • 針對 Databricks Runtime 15.1 和更低版本,查詢自訂 模型服務端點需要此運算式。

responseFormat使用 參數來指定聊天基礎模型的回應格式。
failOnError (選擇性)預設值為 true 的布爾常值。 需要 Databricks Runtime 15.3 或更新版本。 此旗標指出是否要在回應中包含 ai_query 錯誤狀態。
如需範例,請參閱使用 failOnError處理錯誤
下列是根據 failOnError 案例的傳回行為描述。
  • 如果 failOnError => true為 ,則函式會傳回與現有行為相同的結果,這是來自端點的已剖析回應。 剖析回應的數據類型是從模型類型、模型架構端點或 returnType 函式中的 ai_query 參數推斷而來。
  • 如果 failOnError => false,函式會傳回 STRUCT 物件,其中包含剖析的回應和錯誤狀態字串。
    • 如果資料列的推斷成功,則 errorStatus 欄位是 null
    • 如果資料列的推斷因模型端點錯誤而失敗,response 欄位會變成 null
    • 如果數據列的推斷因其他錯誤而失敗,整個查詢就會失敗。
modelParameters (選擇性)結構字段,其中包含用於服務基礎模型或外部模型的聊天、完成和內嵌模型參數。 這些模型參數必須是常數參數,而不是數據相依。
  • 需要 Databricks Runtime 15.3 或更新版本。
  • 未指定這些模型參數或設定為 null 時,將使用預設值。 除了其預設值temperature為 之外0.0,這些模型參數的預設值與基礎模型 REST API 參考中所列的預設值相同。

如需範例,請參閱傳遞模型參數來設定模型
responseFormat (選擇性)指定您希望聊天基礎模型遵循的回應格式。
  • 需要 Databricks Runtime 15.4 LTS 或更新版本。 僅限於查詢聊天基礎模型。
  • 支援兩種回應格式樣式。
    • DDL 樣式 JSON 字串
    • JSON 字串。 支援三種 JSON 字串型態的回應格式:text、、 json_objectjson_schema

如需範例,請參閱 使用結構化輸出強制執行輸出架構
下列描述在指定failOnError的時候,也設定responseFormat時會發生什麼情況:
  • 如果 failOnError => false 且您已指定 responseFormat,函式會將剖析的回應和錯誤狀態字串當做 STRUCT 物件傳回。
  • 根據 responseFormat中指定的 JSON 字串類型,會傳回下列回應:
    • 針對 responseFormat => '{"type": "text"}',回應是字串,例如,“Here is the response”
    • 針對 responseFormat => '{"type": "json_object"}',回應是索引鍵/值組 JSON 字串,例如 {“key”: “value”}
    • 針對 responseFormat => '{"type": "json_schema", "json_schema"...}',回應是 JSON 字串。
files (選用)使用 files=>content指定要在多模態輸入請求中使用的檔案和內容。 files 是模型預期的多模態輸入參數名稱,並 content 參考 DataFrame 中的資料行,其中包含您要在查詢中使用的影像檔案的二進位內容。
  • 需要用於多模式請求。
  • 僅支援影像輸入: JPEGPNG 。 如需範例,請參閱多模態輸入。 如本範例所示,您可以將content的輸出欄位read_files指定給files參數。

範例:查詢基礎模型

若要查詢服務端點的外部模型:

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

若要查詢 Databricks Foundation 模型 API 所支持的基礎模型:

> 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

或者,您也可以將 ai_query() 的呼叫包裹在 UDF 中,以便於函式撥打,如下所示:

 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;

多模態輸入

ai_query 原生支援多模態影像輸入。 如需支援的 Databricks 裝載視覺模型,請參閱 基礎模型類型

以下是支援的輸入類型:

  • JPEG
  • PNG

下列範例示範如何查詢 Databricks 基礎模型 API 支援的基礎模型,以取得多模式輸入。 在此範例中,參數 files => content 用於將影像檔案資料傳遞至 ai_query

  • files:模型預期的多模態輸入參數名稱
  • content:經由 READ_FILES 傳回的 DataFrame 中的某一欄,其包含影像檔案的二進位內容。

> 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");

若要查詢由 Databricks 基礎模型 API 所支援的基礎模型,以進行多模態輸入,並指定結構化的輸出:

> 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");

範例:查詢傳統 ML 模型

若要查詢自訂模型或提供端點的傳統 ML 模型:


> 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

進階案例的範例

下列各節提供進階使用案例的範例,例如錯誤處理以及如何將 ai_query 整合至使用者定義的函式中。

傳遞一個訊息陣列

下列範例示範如何使用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."]}

串連提示和推斷欄

串連提示和推斷數據行的方法有很多種,例如使用 ||CONCAT()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};

或使用 format_string()

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

傳遞模型參數來設定模型

傳遞特定參數,例如最大令牌和溫度,以自定義模型行為。 例如:

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;

使用 failOnError 處理錯誤

使用 failOnErrorai_query 自變數來處理錯誤。 下列範例示範如何確定如果一個數據列發生錯誤,就不會停止整個查詢執行。 請參閱參數與回傳,以了解這個參數設定方式下的預期行為。


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;

使用結構化輸出強制執行輸出架構

請確保輸出符合特定的結構,以便使用responseFormat進行下游處理更為順利。 請參閱 Azure Databricks 上的結構化輸出。

下列範例會強制執行 DDL 樣式 JSON 字串架構:

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;

或者,使用 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;

預期的輸出可能如下所示:

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

在使用者定義函式中使用 ai_query

您可以將對 ai_query 的呼叫包裝在一個 UDF 中,這樣可以讓您輕鬆地在不同的工作流程中使用和共享這些函式。

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;