Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Funkcja
Dotyczy:
Databricks SQL
Databricks Runtime
Ważna
Ta funkcja jest dostępna w wersji beta. Administratorzy obszaru roboczego mogą kontrolować dostęp do tej funkcji ze strony Podglądy . Zobacz Zarządzanie podglądami Azure Databricks.
Funkcja ta ai_prep_search() przekształca zawartość dokumentu w format zoptymalizowany pod kątem systemów wyszukiwania wektorowego RAG i wyszukiwania informacji. Akceptuje albo ustrukturyzowany wynik, ai_parse_document albo zwykły tekst i zawartość z odznaczaniem STRING danych. Dla każdego dokumentu wejściowego funkcja dzieli zawartość na fragmenty semantyczne, wzbogaca każdy fragment z kontekstem na poziomie dokumentu, takim jak tytuł dokumentu, nagłówki sekcji, odwołania do stron i tworzy reprezentację gotową do osadzania.
Bezpieczeństwo danych
Dane dokumentu są przetwarzane w ramach strefy bezpieczeństwa Databricks. Databricks nie przechowuje parametrów przekazywanych do wywołań funkcji AI, ale zachowuje szczegóły metadanych, takie jak używana wersja Databricks Runtime.
Wymagania
- Databricks Runtime 18.2 lub nowszy.
- Jeśli używasz obliczeń bezserwerowych, wymagane są również następujące elementy:
- Wersja środowiska bezserwerowego musi być ustawiona na 3 lub nowszą, ponieważ umożliwia to korzystanie z funkcji takich jak
VARIANT. - Należy użyć Python lub SQL. Aby uzyskać dodatkowe funkcje i ograniczenia bezserwerowe, zobacz Ograniczenia obliczeniowe bezserwerowe.
- Wersja środowiska bezserwerowego musi być ustawiona na 3 lub nowszą, ponieważ umożliwia to korzystanie z funkcji takich jak
- Funkcja
ai_prep_searchjest dostępna przy użyciu notesów usługi Databricks, edytora SQL, przepływów pracy usługi Databricks, zadań lub potoków lakeflow.
Składnia
ai_prep_search(parsed [, options])
Arguments
-
parsed: Dokumentuj treść, aby przygotować się do wyszukiwania. Jedna z następujących czynności:- Wyrażenie reprezentujące
VARIANTustrukturyzowany wynik .ai_parse_document - Wyrażenie
STRINGzawierające zwykły tekst lub markdown. Ciągi JSON, które nie są ustrukturyzowanymai_parse_document(lub powiązanym) wyjściem, są traktowane jako tekst literalny i dzielone na części w ten sam sposób.
- Wyrażenie reprezentujące
-
options: opcjonalny elementMAP<STRING, STRING>. Obsługiwane klucze:-
'version': wersja schematu wyjściowego do użycia. -
'schema': Schemat JSON definiujący zestaw kluczy do ekstrakcji metadanych na poziomie dokumentu. Schemat wykorzystuje te same formaty coai_extract:- Prosty schemat: tablica JSON nazw pól (zakładana jako ciągi)
"[\"vendor_name\", \"invoice_id\", \"total_amount\"]" - Zaawansowany schemat: obiekt JSON z informacjami o typie, opisami i zagnieżdżonych struktur
- Obsługuje
stringtypy , ,integernumber,booleanienum. Przeprowadza walidację typu. Wartości, które nie są prawidłowe, powodują błąd. Maksymalnie 500 wartości wyliczenia. - Obsługuje obiekty zagnieżdżone przy użyciu polecenia
"type": "object""properties" - Obsługuje tablice elementów pierwotnych lub obiektów przy użyciu polecenia
"type": "array""items" - Opcjonalne
"description"pole dla każdej właściwości w celu uzyskania jakości wyodrębniania
- Obsługuje
- Prosty schemat: tablica JSON nazw pól (zakładana jako ciągi)
-
Zwroty
Zawierający VARIANT fragmenty dokumentu sformatowane na potrzeby indeksowania wyszukiwania wektorowego. Każdy wiersz w danych wyjściowych reprezentuje jeden dokument wejściowy.
Schemat danych wyjściowych to:
{
"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": {...}
}
Ważna
Schemat danych wyjściowych funkcji jest wersjonowany przy użyciu formatu major.minor. Usługa Databricks może uaktualnić obsługiwaną lub domyślną wersję, aby odzwierciedlić ulepszone reprezentacje na podstawie bieżących badań.
- Uaktualnienia wersji mniejszej są wstecznie kompatybilne i mogą wprowadzać tylko nowe pola.
- Uaktualnienia wersji głównej mogą obejmować zmiany, które mogą prowadzić do problemów kompatybilności, takie jak dodawanie pól, usunięcia lub zmiany nazw.
format chunk_to_embed
Pole chunk_to_embed jest pojedynczym ciągiem utworzonym na fragmenty przez połączenie nieprzetworzonego tekstu fragmentu z kontekstem na poziomie dokumentu w celu poprawy jakości pobierania podczas wyszukiwania semantycznego.
Ciąg składa się z następujących części:
-
Metadane dokumentu:
Document Title, ,Page HeaderPage Footer,Section HeaderCaption, ,Footnote,Page Number. Wyodrębnione bezpośrednio z analizowanej struktury dokumentu. -
Pola dokumentu: dodatkowe Klucz: linie wartości dla pól na poziomie dokumentu. Bez
schematej opcji LLM wykrywa nazwy pól w każdym dokumencie (na przykład "Firma", "Typ dokumentu", "Rok fiskalny"). Dzięki opcji funkcja korzysta z kluczy, któreschemapodałaś. - Zdanie kontekstu dokumentu: jedno zdanie podsumowujące, o czym chodzi w dokumencie, wygenerowane przez llM.
-
Zawartość: nieprzetworzonego tekstu fragmentu. Ta sama wartość co
chunk_to_retrievepole dla fragmentu. - Podsumowanie tabeli: krótkie parafrazy wygenerowane przez llM zawartości spisu. W przypadku fragmentów zawierających tabelę funkcja dołącza to podsumowanie tabeli i zestaw powiązanych pytań w języku naturalnym, na które tabela może odpowiedzieć.
- Powiązane pytania: pytania w języku naturalnym, na które tabela jest w stanie odpowiedzieć, używane do ulepszania przypomnienia pobierania zawartości tabeli.
Ciąg jest zgodny z tym szablonem:
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}
Przykład renderowany 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.
Uwaga / Notatka
Stałe pola metadanych są zawsze renderowane z etykietą, a wartość pozostawiona jest pusta, gdy jest niedostępna. Pola dokumentu, zdanie kontekstu dokumentu, podsumowanie tabeli oraz powiązane pytania są całkowicie pomijane, gdy są niedostępne lub nie mają zastosowania. Dokładna kompozycja może zostać zaktualizowana w przyszłych wersjach, aby poprawić jakość pobierania.
Examples
Przygotuj tekst zwykły lub zbiór
Poniższy przykład przygotowuje tekst STRING jawny do indeksowania wyszukiwania:
SELECT ai_prep_search(
'Quarterly revenue grew twenty percent year over year.',
options => map('version', '2.0')
);
Łańcuch z ai_parse_document
Poniższy przykład umożliwia ai_prep_searchai_parse_document tworzenie fragmentów gotowych do wyszukiwania z nieprzetworzonych dokumentów przechowywanych w woluminie wykazu aparatu 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;
Wyodrębniaj strukturalne metadane z opcją schema
Poniższy przykład wykorzystuje prosty schemat do wyodrębniania company, document_type, oraz fiscal_year jako metadanych ciągu na każdym chunku.
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;
Wyodrębnij typowe metadane za pomocą zaawansowanego schematu
Poniższy przykład wykorzystuje zaawansowany schemat do określania typów pól i opisów. Opisy kierują ekstrakcją i fiscal_year zwraca się jako liczba całkowita.
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;
Pola metadanych Surface jako kolumny
Poniższy przykład spłaszcza fragmenty i rzutuje każdy klucz w opcji schema do osobnej kolumny:
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;
Tworzenie tabeli źródłowej wyszukiwania wektorów
Poniższy przykład spłaszcza dane wyjściowe do poszczególnych wierszy fragmentów i zapisuje je w tabeli delty. Następnie tabelę można użyć jako źródła indeksu wyszukiwania sztucznej inteligencji usługi Databricks , używając chunk_to_embed jako kolumny osadzania i chunk_id jako klucza podstawowego.
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;
Wynikowe wiersze mają następujący schemat:
| Nazwa kolumny | Typ |
|---|---|
chunk_id |
STRING |
chunk_position |
INT |
chunk_to_retrieve |
STRING |
chunk_to_embed |
STRING |
metadata |
VARIANT |
source_uri |
STRING |
Włączanie pobierania wielomodalnego
Gdy ai_parse_document jest wywoływana z opcją imageOutputPath , renderowane obrazy stron są zapisywane w woluminie wykazu aparatu Unity, a image_uri pole w tablicy każdego fragmentu pages jest wypełniane. Odwołania do tych obrazów można przekazać do modelu z możliwością przetwarzania obrazów w czasie wykonywania zapytań, aby odpowiedzieć na pytania wymagające kontekstu wizualnego, takich jak diagramy blokowe, wykresy lub tabele, które nie są w pełni reprezentowane w tekście.
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;
Ograniczenia
- Gdy przekazujesz ,
VARIANTużyj poprawnegoai_parse_documentwyjścia. Przekazywanie innychVARIANTdanych lub nieobsługiwanej wersji schematu może spowodować nieoczekiwane wyniki lub błędy. - Gdy zdasz ,
STRINGużyj tekstu zwykłego lub zwykłego znaczenia. Ciągi JSON, które nie są strukturalnym wyjściem dokumentu parsowania, są indeksowane jako tekst literalny, a nie odrzucane. - Maksymalny rozmiar danych wejściowych jest zgodny z maksymalnym rozmiarem danych wyjściowych
ai_parse_document.