次の方法で共有


ai_query 関数

適用対象:「はい」のチェック マーク Databricks SQL 「はい」のチェック マーク Databricks Runtime

重要

この機能はパブリック プレビュー段階にあります。

既存の Azure Databricks Model Serving エンドポイントを呼び出し、その応答を解析して返します。

運用ワークフローで ai_query を使用するには、「 AI Functions を使用してバッチ LLM 推論を実行する」を参照してください。

要件

構文

基盤モデルを提供するエンドポイントに対してクエリを実行するには:

ai_query(endpoint, request)

カスタム モデル提供エンドポイントにモデルスキーマをクエリするには:

ai_query(endpoint, request)

カスタム モデル提供エンドポイントにモデルスキーマなしでクエリするには:

ai_query(endpoint, request, returnType, failOnError)

引数と戻り値

引数 説明 戻り値
endpoint Databricks Foundation Model の提供エンドポイント名、外部モデルの提供エンドポイント、または STRING リテラルとして呼び出しに使用する同じワークスペース内のカスタムモデルのエンドポイント名。 定義子には、エンドポイントに対する CAN QUERY アクセス許可が必要です。
request 式としてエンドポイントを呼び出すために使用される要求。
  • エンドポイントがエンドポイントまたは Databricks Foundation Model API エンドポイントを提供する外部モデルである場合、要求は STRINGである必要があります。
  • エンドポイントがカスタム モデル提供エンドポイントである場合、要求には単一の列または構造体式を指定できます。 構造体フィールド名は、エンドポイントで予期される入力機能名と一致する必要があります。
returnType 式としてエンドポイントからの予期される returnType。 これは、from_json 関数のスキーマ パラメーターと同様に、STRING 式または schema_of_json 関数の呼び出しの両方を受け入れます。
  • Databricks Runtime 15.2 以降では、この式が指定されていない場合、 ai_query() はカスタム モデル サービス エンドポイントのモデル スキーマから戻り値の型を自動的に推論します。
  • Databricks Runtime 15.1 以下では、この式はカスタム モデルサービスエンドポイントのクエリを実行するために必要です。
failOnError (省略可能)既定値が true のブールリテラル。 Databricks Runtime 15.3 以降が必要です。 このフラグは、エラー状態を ai_query 応答に含めるかどうかを示します。
  • failOnError => true場合、関数は、エンドポイントからの解析された応答である既存の動作と同じ結果を返します。 解析された応答のデータ型は、returnType関数のモデル型、モデル スキーマ エンドポイント、または ai_query パラメーターから推論されます。
  • failOnError => false場合、関数は解析された応答とエラー状態文字列を含むSTRUCT オブジェクトを返します。
  • 行の推論が成功した場合、 errorStatus フィールドは null
  • モデル エンドポイント エラーが原因で行の推論が失敗した場合、 response フィールドは null
  • 他のエラーが原因で行の推論が失敗した場合、クエリ全体が失敗します。

例については、「failOnErrorを使用してエラーを処理する」を参照してください。
modelParameters (省略可能)基礎モデルまたは外部モデルを提供するためのチャット、完了、埋め込みモデル パラメーターを含む構造体フィールド。 これらのモデル パラメーターは、データ依存ではなく定数パラメーターである必要があります。 Databricks Runtime 15.3 以降が必要です。 これらのモデル パラメーターが指定されていない場合や、null に設定されている場合は、既定値が使用されます。 既定値が temperature0.0 を除き、これらのモデル パラメーターの既定値は、Foundation モデル REST API リファレンスに記載されているものと同じです。
例については、「 モデル パラメーターを渡してモデルを構成 する」を参照してください。
responseFormat (省略可能)チャット モデルに従う応答形式を指定します。 Databricks Runtime 15.4 LTS 以降が必要です。 チャット基盤モデルのクエリでのみ使用できます。 2 つのスタイルの応答形式がサポートされています。
  • DDL スタイルの JSON 文字列
  • JSON 文字列。 3 種類の JSON 文字列の応答形式がサポートされています。
  • text
  • json_object
  • json_schema

例については、「 構造化された出力を使用して出力スキーマを適用 する」を参照してください。
  • 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 文字列です。

例については、「 構造化された出力を使用して出力スキーマを適用 する」を参照してください。

例: 基礎モデルのクエリを実行する

外部モデルを提供するエンドポイントに対してクエリを実行する場合:

> 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 Model 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

必要に応じて、次のように、関数呼び出しのために UDF で ai_query() の呼び出しをラップすることもできます。

 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;

例: 従来の 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

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

高度なシナリオの例

次のセクションでは、エラー処理やユーザー定義関数に ai_query を組み込む方法などの高度なユース ケースの例を示します。

プロンプトと推論列を連結する

||CONCAT()format_string()の使用など、プロンプトと推論列を連結する方法は複数あります。

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

また:

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 引数を使用します。 次の例は、1 つの行にエラーがある場合に、クエリ全体の実行を停止しないようにする方法を示しています。 この引数の設定方法に基づく予期される動作については、「 引数と戻り 値」を参照してください。


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

または、JSON スキーマ応答形式を使用します。

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;

予想される出力は次のようになります。

{ "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 を使用する

の呼び出しを 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;