Freigeben über


ai_prep_search-Funktion

Gilt für:mit Häkchen markiert: Ja Databricks SQL mit Häkchen markiert: Ja Databricks Runtime

Von Bedeutung

Dieses Feature befindet sich in der Betaversion. Arbeitsbereichsadministratoren können den Zugriff auf dieses Feature über die Vorschauseite steuern. Siehe Manage Azure Databricks Previews.

Die ai_prep_search() Funktion wandelt die strukturierte Ausgabe in ai_parse_document ein Format um, das für RAG-Vektorsuch- und Informationsempfangssysteme optimiert ist. Für jedes Eingabedokument teilt die Funktion Inhalte in semantische Blöcke auf, erweitert jeden Block durch Kontext auf Dokumentebene, z. B. Den Dokumenttitel, Abschnittsüberschriften, Seitenverweise und erzeugt eine einbettbare Darstellung.

Anforderungen

  • Databricks Runtime 18.2 oder höher.
  • Wenn Sie Serverless Compute verwenden, ist auch Folgendes erforderlich:
    • Die serverlose Umgebungsversionsnummer muss auf 3 oder höher festgelegt werden, da dies Funktionen wie VARIANT ermöglicht.
    • Muss entweder Python oder SQL verwenden. Weitere serverlose Features und Einschränkungen finden Sie unter Serverless Compute-Einschränkungen.
  • Die ai_prep_search Funktion ist mit Databricks-Notizbüchern, SQL-Editor, Databricks-Workflows, Aufträgen oder Lakeflow Spark Declarative Pipelines verfügbar.

Syntax

ai_prep_search(
    parsed VARIANT,
    [options MAP<STRING, STRING>]
) RETURNS VARIANT

Argumente

  • parsed: Ein VARIANT Ausdruck, der die strukturierte Ausgabe von ai_parse_document.
  • options: Optional MAP<STRING, STRING>. Unterstützte Schlüssel:
    • 'version': Die Version des zu verwendenden Ausgabeschemas.

Rückkehr

A VARIANT containing document chunks formatted for vector search indexing. Jede Zeile in der Ausgabe stellt ein Eingabedokument dar.

Das Ausgabeschema lautet:

{
  "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_content": 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": {...}
}

Von Bedeutung

Das Funktionsausgabeschema wird mit einem Major.Minor-Format versioniert. Databricks aktualisieren möglicherweise die unterstützte oder Standardversion, um verbesserte Darstellungen basierend auf fortlaufender Forschung widerzuspiegeln.

  • Nebenversionsupgrades sind abwärtskompatibel und führen möglicherweise nur neue Felder ein.
  • Hauptversionsupgrades können einschneidende Änderungen wie das Hinzufügen, Entfernen oder Umbenennen von Feldern umfassen.

chunk_to_embed Format

Das chunk_to_embed Feld kombiniert den Kontext auf Dokumentebene mit dem Blockinhalt, um die Abrufqualität während der semantischen Suche zu verbessern. Das Format lautet:

Hinweis

Felder ohne Einen Wert für einen bestimmten Block werden eingeschlossen, aber leer gelassen. Die genaue Zusammensetzung kann in zukünftigen Versionen aktualisiert werden, um die Abrufqualität zu verbessern.

The following passage represents a chunk of content from a document.
- 'Content' contains raw document text
- All other fields describe document context and hierarchical information
- For visual elements like images/charts, a summary is generated as part of 'Content'

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

Content:
{chunk_content}

Beispiele

Kette mit ai_parse_document

Im folgenden Beispiel werden Suchvorgänge aus rohen Dokumenten, die in einem Unity-Katalogvolume gespeichert sind, miteinander ai_parse_document verkettetai_prep_search:

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;

Erstellen einer Vektorsuchquelltabelle

Im folgenden Beispiel wird die Ausgabe in einzelne Datenabschnittszeilen vereinfacht und in eine Delta-Tabelle geschrieben. Die Tabelle kann dann als Quelle für einen Databricks Vector Search-Index verwendet werden, indem chunk_to_embed sie als Einbettungsspalte und chunk_id als Primärschlüssel verwendet wird.

WITH parsed_documents AS (
  SELECT ai_parse_document(content) 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_position::INT AS chunk_position,
  chunk.value:chunk_content::STRING AS chunk_content,
  chunk.value:chunk_to_embed::STRING AS chunk_to_embed,
  prepped_documents.result:document.source_uri::STRING AS source_uri
FROM
  prepped_documents,
  LATERAL variant_explode(prepped_documents.result:document.contents) AS chunk;

Die resultierenden Zeilen weisen das folgende Schema auf:

Spaltenname Typ
chunk_id STRING
chunk_position INT
chunk_content STRING
chunk_to_embed STRING
source_uri STRING

Aktivieren des multi modalen Abrufs

Wenn ai_parse_document mit der imageOutputPath Option aufgerufen wird, werden gerenderte Seitenbilder in einem Unity-Katalogvolume gespeichert, und das image_uri Feld im Array der einzelnen Blöcke pages wird aufgefüllt. Diese Bildverweise können zur Abfragezeit an ein sehfähiges Modell übergeben werden, um Fragen zu beantworten, die visuellen Kontext erfordern, z. B. Blockdiagramme, Diagramme oder Tabellen, die nicht vollständig in Text dargestellt sind.

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;

Einschränkungen

  • Für die ai_prep_search Funktion ist eine gültige ai_parse_document Ausgabe als Eingabe erforderlich. Das Übergeben anderer VARIANT Daten oder einer nicht unterstützten Schemaversion kann zu unerwarteten Ergebnissen oder Fehlern führen.
  • Die maximale Eingabegröße entspricht der maximalen Ausgabegröße von ai_parse_document.