ai_search 関数

適用対象:チェック済み: はい Databricks SQLチェック済み: はい Databricks Runtime

Important

この機能は ベータ版です。 ワークスペース管理者は、[ プレビュー] ページからこの機能へのアクセスを制御できます。 Manage Azure Databricks プレビューを参照してください。

ai_search()機能は1つ以上のAI検索インデックスから情報を取得します。 自然言語クエリと知識ソースとして設定されたインデックスが与えられると、この関数は最適化された検索クエリを生成し、ソース間で結果を検索・重複分解し、関連性で再ランク付けし、最も関連性の高い文書を返します。 デフォルトでは、取得した文書に対して根拠のある自然言語の回答を合成します。

ai_searchを活用して、大規模な関連コンテキストで運用データを豊かにしたり、バッチ検索拡張生成(RAG)パイプラインを構築したり、複合AIシステムへのツールとして検索を公開したり、すべて単一のSQL関数呼び出しから実現できます。

データのセキュリティ

ドキュメント データは、Databricks セキュリティ境界内で処理されます。 DatabricksはAI関数呼び出しに渡されるパラメータを保存しませんが、Databricksランタイムバージョンなどのメタデータ実行の詳細は保持します。

Requirements

  • Databricks Runtime 18.2 以降。
  • 知識源として使える1つ以上の AI検索インデックス
  • サーバーレスコンピュートを使用している場合、サーバーレス環境のバージョンは3以上に設定されており、これにより VARIANTなどの機能が可能になります。
  • ai_search機能はDatabricksノートブック、SQLエディタ、Databricksのワークフロー、ジョブ、またはLakeflow上のSpark Declarative Pipelinesを通じて利用可能です。

Syntax

ai_search(query, knowledge_sources [, instructions] [, options])

Arguments

  • query: STRING または VARIANT 式。 自然言語検索クエリ。 VARIANT 入力、例えば他のAI関数の出力は内部的にJSON文字列にシリアライズされます。
  • knowledge_sources: JSON配列の知識ソース構成を含む VARIANT または STRING 式を検索できます。 「 ナレッジソース構成」を参照してください。 最大10の知識源を指定することができます。
  • instructions最大4,000文字のオプション STRING 式。 クエリ生成、メタデータフィルター生成、再ランキングを導く自然言語命令。 たとえば、'Prefer official documentation over internal articles when both cover the same topic.' のように指定します。
  • options: 省略可能な MAP<STRING, STRING>。 サポートされているキー:
    • 'version': 使う関数バージョン。
    • 'generate_answer': 'true' (既定) または 'false''true'すると、関数は取得した文書から基礎的な自然言語の回答を合成し、それをanswerフィールドに返します。 書類を返却 'false' に設定してください。

ナレッジ ソースの構成

knowledge_sourcesの引数はJSON配列です。 各要素は、 {type, config} エンベロープです。 typeフィールドはai_searchソースへの接続方法を示し、顧客向けリソース名とは別です。 AI検索インデックスでは、 type を文字通りの vector_searchに設定してください。 configフィールドにはソース固有の構成が含まれています。

必須 Description
type はい 知識源のタイプです。 現時点では、vector_search のみがサポートされています。
config はい ソース固有の構成を含むオブジェクト。 vector_searchについては、AI検索インデックスの設定をご覧ください。

AI検索インデックスの設定

typevector_searchに設定されたAI検索インデックスの場合、configは以下のキーを受け入れます。

必須 Description
index_name はい 例えば、AI検索インデックスのUnityカタログの三段階名称は catalog.schema.my_index
text_col はい ドキュメントテキストを含むインデックスの列は page_contentとして返されます。
doc_uri_col はい ドキュメントURIを含むインデックスの列は doc_uriとして返されました。
filter_columns いいえ メタデータフィルタリング用のカンマ区切られた文字列またはJSON列の列。 省略した場合、リストはインデックススキーマから派生し、予約済み、テキスト、ドキュメントのURI列は除外されます。

以下の例は、1つのAI検索インデックスを知識ソースとして構成しています:

[
  {
    "type": "vector_search",
    "config": {
      "index_name": "prod_catalog.docs.support_articles",
      "text_col": "article_body",
      "doc_uri_col": "article_url",
      "filter_columns": "product,language"
    }
  }
]

生のドキュメントからAI検索インデックスを作成するには、 ai_parse_documentai_prep_search を使ってDeltaテーブルに検索可能なチャンクを作成します。 そのテーブルから AI検索インデックスを作成します 。 索引がオンラインになったら、その3段階の名称を index_nameとして使う。

返品

以下の VARIANT のスキーマです:

{
  "document": [
    {
      "page_content": STRING,  // Text content of the retrieved chunk
      "doc_uri": STRING,       // URI of the source document
      "metadata": MAP          // Additional metadata from the index
    }
  ],
  "answer": STRING             // Grounded answer synthesized from the retrieved
                               // documents, or null
}
フィールド タイプ Description
document ARRAY 関連順に並べた取得済み文書の配列。
document[].page_content STRING 取得したチャンクのテキスト内容。
document[].doc_uri STRING ソースドキュメントのURIです。
document[].metadata MAP インデックスからの追加メタデータ。
answer STRING 回収された文書から合成された、地に足のついた自然言語の答え。 null 回答生成が無効化された場合や文書が取得できない場合。

例示

以下の例は、1つのAI検索インデックスを検索し、ランク付けされた文書と根拠のある回答を返します。

SELECT ai_search(
  'How do I configure auto-scaling for my SQL warehouse?',
  PARSE_JSON('[{
    "type": "vector_search",
    "config": {
      "index_name": "prod_catalog.docs.support_articles",
      "text_col": "article_body",
      "doc_uri_col": "article_url",
      "filter_columns": "product,language"
    }
  }]')
) AS result;

指示付きマルチソース検索

以下の例は、2つのAI検索インデックスを検索し、 instructions を用いてクエリ生成と再ランキングを誘導しています。

SELECT ai_search(
  'What are the networking requirements for serverless SQL warehouses?',
  PARSE_JSON('[
    {
      "type": "vector_search",
      "config": {"index_name": "prod_catalog.docs.public_docs", "text_col": "content", "doc_uri_col": "doc_url"}
    },
    {
      "type": "vector_search",
      "config": {"index_name": "prod_catalog.docs.internal_kb", "text_col": "body", "doc_uri_col": "source_uri"}
    }
  ]'),
  'Focus on firewall rules and VPC/VNet configuration. Prefer official documentation over internal articles when both cover the same topic.'
) AS result;

検索と生成された回答でテーブルを豊かにする

以下の例は、各サポートチケットに関連するドキュメントと提案された解決策を補完します。 回答生成がデフォルトでオンになっているため、提案された解像度は answer フィールドで直接利用可能であり、別の生成ステップは必要ありません。

SELECT
  ticket_id,
  customer_description,
  ai_search(
    customer_description,
    PARSE_JSON('[{
      "type": "vector_search",
      "config": {
        "index_name": "support.docs.product_documentation",
        "text_col": "content",
        "doc_uri_col": "doc_url"
      }
    }]'),
    'Find product documentation, known issues, and troubleshooting guides relevant to this support ticket.'
  ):answer::STRING AS suggested_resolution
FROM support.tickets.open_tickets;

出力フォーマットを制御したり特定のモデルを使用する場合は、 'generate_answer''false' に設定し、取得した文書を ai_query に連結させます。

制限事項

  • ai_search 現在はAI検索インデックスのみをサポートしています。 知識源ごとに "type": "vector_search" を設定しましょう。
  • 通話ごとに最大10の知識源を指定できます。
  • instructionsの議論は4,000文字に制限されています。