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-Pipelines verfügbar.

Syntax

ai_prep_search(parsed [, options])

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

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 ist eine einzelne Zeichenfolge, die pro Block erstellt wird, indem der rohe Textabschnitt mit dem Kontext auf Dokumentebene kombiniert wird, um die Abrufqualität während der semantischen Suche zu verbessern.

Die Zeichenfolge besteht aus den folgenden Teilen:

  • Dokumentmetadaten: Document Title, , Page Header, Page FooterSection Header, Caption, , Footnote. Page Number Extrahiert direkt aus der analysierten Dokumentstruktur.
  • LlM-discovered document fields: additional Key: Value lines for document-level fields auto-discovered by an LLM, such as "Company", "Document Type", "Fiscal Year", "Patient ID" or "Contract Number". Die Feldnamen werden nach Dem Modell pro Dokument ausgewählt und variieren je nach Dokument.
  • Dokumentkontextsatz: Ein einzelner Satz, der zusammenfasst, worum es im Dokument geht, generiert von einer LLM.
  • Inhalt: der unformatierte Text. Derselbe Wert wie das chunk_to_retrieve Feld für den Block.
  • Tabellenzusammenfassung: eine kurze LLM-generierte Paraphrase des Tabelleninhalts. Bei Blöcken, die eine Tabelle enthalten, fügt die Funktion diese Tabellenzusammenfassung und eine Reihe verwandter Fragen in natürlicher Sprache an, die die Tabelle beantworten kann.
  • Verwandte Fragen: Fragen in natürlicher Sprache, die die Tabelle beantworten kann, wird verwendet, um den Abrufrückruf für Tabelleninhalte zu verbessern.

Die Zeichenfolge folgt dieser Vorlage:

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}
Beispiel gerendert 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.

Hinweis

Die festen Metadatenfelder werden immer mit ihrer Beschriftung gerendert, wobei der Wert leer gelassen wird, wenn er nicht verfügbar ist. Die llM-ermittelten Felder, der Dokumentkontextsatz, die Tabellenzusammenfassung und verwandte Fragen werden vollständig weggelassen, wenn sie nicht verfügbar oder nicht zutreffend sind. Die genaue Zusammensetzung kann in zukünftigen Versionen aktualisiert werden, um die Abrufqualität zu verbessern.

Beispiele

Kette mit ai_parse_document

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

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

Die resultierenden Zeilen weisen das folgende Schema auf:

Spaltenname Typ
chunk_id STRING
chunk_position INT
chunk_to_retrieve 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.