Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:
Databricks SQL
Databricks Runtime
Von Bedeutung
Dieses Feature befindet sich in der Betaversion.
Die ai_prep_search() Funktion wandelt Dokumentinhalte in ein Format um, das für RAG-Vektorsuch- und Informationsabrufsysteme optimiert ist. Es akzeptiert entweder die strukturierte Ausgabe oder ai_parse_document den Klartext und Markdown-Inhalte STRING . 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.
Datensicherheit
Ihre Dokumentdaten werden innerhalb des Databricks-Sicherheitsperimeters verarbeitet. Databricks speichert die Parameter, die in die KI-Funktionsaufrufe eingegeben werden, nicht, behält aber Metadaten-Laufdetails, wie zum Beispiel die verwendete Databricks-Runtime-Version.
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
VARIANTermöglicht. - Muss entweder Python oder SQL verwenden. Weitere serverlose Features und Einschränkungen finden Sie unter Serverless Compute-Einschränkungen.
- Die serverlose Umgebungsversionsnummer muss auf 3 oder höher festgelegt werden, da dies Funktionen wie
- Die
ai_prep_searchFunktion ist mit Databricks-Notizbüchern, SQL-Editor, Databricks-Workflows, Aufträgen oder Lakeflow-Pipelines verfügbar.
Syntax
ai_prep_search(parsed [, options])
Argumente
-
parsedDokumentieren Sie den Inhalt zur Vorbereitung auf die Suche. Eins der folgenden:- Ein Ausdruck, der
VARIANTdie strukturierte Ausgabe vonai_parse_documentdarstellt. - Ein Ausdruck, der
STRINGKlartext oder Markdown enthält. JSON-Strings, die keine strukturierteai_parse_document(oder verwandte) Ausgabe sind, werden als wörtlicher Text behandelt und auf die gleiche Weise gehackt.
- Ein Ausdruck, der
-
options: OptionalMAP<STRING, STRING>. Unterstützte Schlüssel:-
'version': Die Version des zu verwendenden Ausgabeschemas. -
'schema': Ein JSON-Schema, das einen Schlüsselsatz für die Metadatenextraktion auf Dokumentenebene definiert. Das Schema verwendet die gleichen Formate wieai_extract:- Einfaches Schema: Ein JSON-Array von Feldnamen (als Zeichenfolgen angenommen)
"[\"vendor_name\", \"invoice_id\", \"total_amount\"]" - Erweitertes Schema: Ein JSON-Objekt mit Typinformationen, Beschreibungen und geschachtelten Strukturen
- Unterstützt
string,integer,number, ,booleanundenumTypen. Führt die Typüberprüfung aus. Ungültige Werte führen zu einem Fehler. Maximal 500 Enumerationswerte. - Unterstützt geschachtelte Objekte mit
"type": "object""properties" - Unterstützt Arrays von Grundtypen oder Objekten, die mit
"type": "array""items" - Optionales
"description"Feld für jede Eigenschaft zur Anleitung der Extraktionsqualität
- Unterstützt
- Einfaches Schema: Ein JSON-Array von Feldnamen (als Zeichenfolgen angenommen)
-
Rückkehr
Ein VARIANT Dokument, das Dokumentabschnitte enthält, die für die Vektorsuch-Indexierung formatiert sind. 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
"metadata": OBJECT, // Typed values for the keys in schema; empty object when schema is omitted
"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 NumberExtrahiert direkt aus der analysierten Dokumentstruktur. -
Dokumentfelder: zusätzliche Schlüssel: Wertzeilen für dokumentenebene Felder. Ohne diese
schemaOption entdeckt ein LLM Feldnamen pro Dokument (zum Beispiel "Unternehmen", "Dokumententyp", "Haushaltsjahr"). Mit derschemaOption verwendet die Funktion die von dir bereitgestellten Tasten. - 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_retrieveFeld 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_document_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 Dokumentfelder, der Dokumentkontextsatz, die Tabellenzusammenfassung und die dazugehörigen Fragen werden vollständig weggelassen, wenn sie nicht verfügbar oder nicht anwendbar sind. Die genaue Zusammensetzung kann in zukünftigen Versionen aktualisiert werden, um die Abrufqualität zu verbessern.
Beispiele
Bereite Klartext oder Markdown vor.
Das folgende Beispiel bereitet einen Klartext STRING für die Suchindexierung vor:
SELECT ai_prep_search(
'Quarterly revenue grew twenty percent year over year.',
options => map('version', '2.0')
);
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;
Extrahieren Sie strukturierte Metadaten mit der Option schema
Das folgende Beispiel verwendet ein einfaches Schema, um , document_type, und fiscal_year als String-Metadaten für jeden Chunk zu extrahierencompany.
WITH parsed_documents AS (
SELECT ai_parse_document(content) AS parsed
FROM READ_FILES('/Volumes/mydata/documents/', format => 'binaryFile')
)
SELECT ai_prep_search(
parsed,
map('schema', '["company", "document_type", "fiscal_year"]')
) AS result
FROM parsed_documents;
Extrahiere typisierte Metadaten mit einem fortgeschrittenen Schema
Das folgende Beispiel verwendet ein fortgeschrittenes Schema, um Feldtypen und Beschreibungen zu spezifizieren. Beschreibungen leiten die Extraktion und fiscal_year werden als ganze Zahl zurückgegeben.
WITH parsed_documents AS (
SELECT ai_parse_document(content) AS parsed
FROM READ_FILES('/Volumes/mydata/documents/', format => 'binaryFile')
)
SELECT ai_prep_search(
parsed,
map(
'schema',
'{
"company": {"type": "string", "description": "Legal business name"},
"document_type": {"type": "string", "description": "Filing or document type"},
"fiscal_year": {"type": "integer", "description": "Fiscal year covered by the document"}
}'
)
) AS result
FROM parsed_documents;
Surface-Metadatenfelder als Spalten
Das folgende Beispiel flacht Chunks ab und projiziert jeden Schlüssel in der schema Option auf eine eigene Spalte:
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,
map('schema', '["company", "document_type", "fiscal_year"]')
) 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:metadata:company::STRING AS company,
chunk.value:metadata:document_type::STRING AS document_type,
chunk.value:metadata:fiscal_year::INT AS fiscal_year
FROM
prepped_documents,
LATERAL variant_explode(prepped_documents.result:document.contents) AS chunk;
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,
chunk.value:metadata AS metadata,
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 |
metadata |
VARIANT |
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
- Wenn du ein
VARIANTübergibst, verwende gültigeai_parse_documentAusgabe. Das Übergeben andererVARIANTDaten oder einer nicht unterstützten Schemaversion kann zu unerwarteten Ergebnissen oder Fehlern führen. - Wenn du ein
STRINGFormular passierst, verwende Klartext oder Markdown. JSON-Strings, die keine strukturierte Parse-Dokument-Ausgabe sind, werden als wörtlicher Text indiziert und nicht abgelehnt. - Die maximale Eingabegröße entspricht der maximalen Ausgabegröße von
ai_parse_document.