ai_prep_search 関数

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

Important

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

ai_prep_search()関数は、ai_parse_documentの構造化された出力を RAG ベクター検索および情報取得システム用に最適化された形式に変換します。 各入力ドキュメントについて、関数はコンテンツをセマンティック チャンクに分割し、ドキュメント タイトル、セクション ヘッダー、ページ参照などのドキュメント レベルのコンテキストで各チャンクをエンリッチし、埋め込み可能な表現を生成します。

データのセキュリティ

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

必要条件

  • Databricks Runtime 18.2 以降。
  • サーバーレス コンピューティングを使用している場合は、次も必要です。
    • サーバーレス環境のバージョンは 3 以上に設定する必要があります。これにより、 VARIANTなどの機能が有効になります。
    • Pythonまたは SQL を使用する必要があります。 その他のサーバーレス機能と制限事項については、「 サーバーレス コンピューティングの制限事項」を参照してください。
  • ai_prep_search関数は、Databricks ノートブック、SQL エディター、Databricks ワークフロー、ジョブ、または Lakeflow パイプラインを使用して使用できます。

構文

ai_prep_search(parsed [, options])

引数

  • parsed: VARIANTの構造化された出力を表すai_parse_document式。
  • options: 省略可能な MAP<STRING, STRING>。 サポートされているキー:
    • 'version': 使用する出力スキーマのバージョン。

返品

ベクター検索インデックス作成用に書式設定されたドキュメント チャンクを含む VARIANT 。 出力内の各行は、1 つの入力ドキュメントを表します。

出力スキーマは次のとおりです。

{
  "document": {
    "contents": [
      {
        "chunk_id": STRING,       // Unique identifier composed of the document ID and chunk position
        "chunk_position": INT,    // 0-based position of the chunk within the document
        "chunk_to_retrieve": STRING,  // Raw text content of the chunk
        "chunk_to_embed": STRING, // Context-enriched text prepared for embedding; see chunk_to_embed format
        "pages": [
          {
            "page_id": INT,       // Page index that this chunk appears on
            "image_uri": STRING   // Path to the page image for multi-modal retrieval
          }
        ]
      }
    ],
    "pages": [
      {
        "id": INT,           // 0-based page index
        "image_uri": STRING  // Path to the rendered page image, populated when
                             // imageOutputPath is set in ai_parse_document
      }
    ],
    "source_uri": STRING   // Source document URI
  },
  "error_status": {...}
}

Important

関数の出力スキーマは、major.minor 形式を使用してバージョン管理されます。 Databricks は、サポートされているバージョンまたは既定のバージョンをアップグレードして、継続的な調査に基づいて改善された表現を反映する場合があります。

  • マイナー バージョンのアップグレードは下位互換性があり、新しいフィールドのみが導入される場合があります。
  • メジャー バージョンのアップグレードには、フィールドの追加、削除、名前変更などの破壊的変更が含まれる場合があります。

chunk_to_embed形式

chunk_to_embed フィールドは、生のチャンク テキストとドキュメント レベルのコンテキストを組み合わせて、セマンティック検索中の取得品質を向上させることで、チャンクごとに構築された 1 つの文字列です。

文字列は、次の部分で構成されます。

  • ドキュメント メタデータ: Document TitlePage HeaderPage FooterSection HeaderCaptionFootnotePage Number。 解析されたドキュメント構造から直接抽出されます。
  • LLM で検出されたドキュメント フィールド: 追加のキー: "Company"、"Document Type"、"Fiscal Year"、"Patient ID"、"Contract Number" など、LLM によって自動検出されるドキュメント レベルのフィールドの値行。 フィールド名は、モデルによってドキュメントごとに選択され、ドキュメントによって異なります。
  • ドキュメント コンテキスト文: LLM によって生成された、ドキュメントの内容を要約した 1 つの文。
  • コンテンツ: 生のチャンク テキスト。 チャンクの chunk_to_retrieve フィールドと同じ値。
  • テーブルの概要: LLM で生成されたテーブルの内容の簡単な言い換え。 テーブルを含むチャンクの場合、関数はこのテーブルの概要と、テーブルが回答できる自然言語の質問のセットを追加します。
  • 関連する質問: テーブルが回答できる自然言語の質問。テーブル コンテンツの取得の再現率を向上させるために使用されます。

文字列は、次のテンプレートに従います。

Document Title: {doc_title}
Page Header: {page_header}
Page Footer: {page_footer}
Section Header: {section_header}
Caption: {caption}
Footnote: {footnote}
Page Number: {page_number}
{additional_llm_discovered_fields}

{document_context_sentence}

Table summary: {table_summary}

Content:
{chunk_to_retrieve}

Related questions:
{qa_text}
レンダリングされた例 chunk_to_embed
Document Title: Acme Corp 2024 Annual Report
Page Header:
Page Footer:
Section Header: Risk Factors
Caption:
Footnote:
Page Number: 14
Company: Acme Corp
Document Type: 10-K
Fiscal Year: 2024

Acme Corp's 2024 annual report covering financial performance and risk disclosures across global operating segments.

Content:
Our business faces a number of risks, including competition from established providers, evolving regulatory requirements, and concentration in a small number of large customers.

固定メタデータ フィールドは常にラベルと共にレンダリングされ、使用できない場合は値は空のままです。 LLM で検出されたフィールド、ドキュメント コンテキスト文、テーブルの概要、および関連する質問は、使用できない場合、または該当しない場合は完全に省略されます。 正確な構成は、取得品質を向上させるために、将来のバージョンで更新される可能性があります。

例示

チェーンとai_parse_document

次の例では、ai_prep_searchai_parse_documentを使用してチェーンし、Unity カタログ ボリュームに格納されている未加工ドキュメントから検索可能なチャンクを生成します。

WITH parsed_documents AS (
  SELECT ai_parse_document(content) AS parsed
  FROM READ_FILES('/Volumes/mydata/documents/', format => 'binaryFile')
)
SELECT ai_prep_search(parsed) AS result
FROM parsed_documents;

ベクター検索ソース テーブルを作成する

次の例では、出力を個々のチャンク行にフラット化し、Delta テーブルに書き込みます。 テーブルは、埋め込み列としてを使用し、主キーとしてchunk_to_embedを使用して、chunk_id インデックスのソースとして使用できます。

WITH parsed_documents AS (
  SELECT
    path,
    ai_parse_document(content) AS parsed
  FROM READ_FILES('/Volumes/mydata/documents/', format => 'binaryFile')
),
prepped_documents AS (
  SELECT
    path,
    ai_prep_search(parsed) AS result
  FROM parsed_documents
)
SELECT
  chunk.value:chunk_id::STRING AS chunk_id,
  chunk.value:chunk_position::INT AS chunk_position,
  chunk.value:chunk_to_retrieve::STRING AS chunk_to_retrieve,
  chunk.value:chunk_to_embed::STRING AS chunk_to_embed,
  prepped_documents.path AS source_uri
FROM
  prepped_documents,
  LATERAL variant_explode(prepped_documents.result:document.contents) AS chunk;

結果の行には、次のスキーマがあります。

列名 タイプ
chunk_id STRING
chunk_position INT
chunk_to_retrieve STRING
chunk_to_embed STRING
source_uri STRING

マルチモーダル取得を有効にする

ai_parse_document オプションを使用してimageOutputPathが呼び出されると、レンダリングされたページイメージが Unity カタログ ボリュームに保存され、各チャンクのimage_uri配列のpagesフィールドが設定されます。 これらの画像参照は、クエリ時に視覚対応モデルに渡して、テキストで完全に表現されていないブロック ダイアグラム、グラフ、テーブルなど、視覚的なコンテキストを必要とする質問に回答できます。

WITH parsed_documents AS (
  SELECT ai_parse_document(
    content,
    map(
      'imageOutputPath', '/Volumes/catalog/schema/volume/page_images/',
      'descriptionElementTypes', '*'
    )
  ) AS parsed
  FROM READ_FILES('/Volumes/mydata/documents/', format => 'binaryFile')
),
prepped_documents AS (
  SELECT ai_prep_search(parsed) AS result
  FROM parsed_documents
)
SELECT
  chunk.value:chunk_id::STRING AS chunk_id,
  chunk.value:chunk_to_embed::STRING AS chunk_to_embed,
  chunk.value:pages AS pages
FROM
  prepped_documents,
  LATERAL variant_explode(prepped_documents.result:document.contents) AS chunk;

制限事項

  • ai_prep_search関数には、入力として有効なai_parse_document出力が必要です。 他の VARIANT データまたはサポートされていないスキーマ バージョンを渡すと、予期しない結果やエラーが発生する可能性があります。
  • 最大入力サイズは、 ai_parse_documentの最大出力サイズと一致します。