Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Funzione
Si applica a:
Databricks SQL
Databricks Runtime
Importante
Questa funzionalità è in versione beta. Gli amministratori dell'area di lavoro possono controllare l'accesso a questa funzionalità dalla pagina Anteprime . Vedere Gestisci anteprime Azure Databricks.
La ai_prep_search() funzione trasforma l'output strutturato di ai_parse_document in un formato ottimizzato per la ricerca vettoriale RAG e i sistemi di recupero delle informazioni. Per ogni documento di input, la funzione suddivide il contenuto in blocchi semantici, arricchisce ogni blocco con contesto a livello di documento, ad esempio il titolo del documento, le intestazioni di sezione, i riferimenti di pagina e produce una rappresentazione pronta per l'incorporamento.
Requisiti
- Databricks Runtime 18.2 o versione successiva.
- Se si usa l'ambiente di calcolo serverless, è necessario anche quanto segue:
- La versione dell'ambiente serverless deve essere impostata su 3 o versione successiva, perché abilita funzionalità come
VARIANT. - Deve usare Python o SQL. Per altre funzionalità e limitazioni serverless, vedere Limitazioni di calcolo serverless.
- La versione dell'ambiente serverless deve essere impostata su 3 o versione successiva, perché abilita funzionalità come
- La
ai_prep_searchfunzione è disponibile usando i notebook di Databricks, l'editor SQL, i flussi di lavoro di Databricks, i processi o le pipeline dichiarative di Lakeflow Spark.
Sintassi
ai_prep_search(parsed [, options])
Arguments
-
parsedVARIANT: espressione che rappresenta l'output strutturato diai_parse_document. -
options: oggetto facoltativoMAP<STRING, STRING>. Chiavi supportate:-
'version': versione dello schema di output da usare.
-
Restituzioni
Oggetto VARIANT contenente blocchi di documenti formattati per l'indicizzazione della ricerca vettoriale. Ogni riga nell'output rappresenta un documento di input.
Lo schema di output è:
{
"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": {...}
}
Importante
Lo schema di output della funzione viene versionato usando un formato major.minor. Databricks potrebbe aggiornare la versione supportata o predefinita per riflettere rappresentazioni migliorate in base alla ricerca in corso.
- Gli aggiornamenti delle versioni secondarie sono compatibili con le versioni precedenti e potrebbero introdurre solo nuovi campi.
- Gli aggiornamenti delle versioni principali possono includere modifiche di rilievo, ad esempio aggiunte di campi, rimozioni o ridenominazione.
formato chunk_to_embed
Il chunk_to_embed campo è una singola stringa creata per blocco combinando il testo non elaborato con il contesto a livello di documento per migliorare la qualità del recupero durante la ricerca semantica.
La stringa è composta dalle parti seguenti:
-
Metadati del documento:
Document Title,Page HeaderPage Footer,Section Header,Caption,Page NumberFootnote. Estratto direttamente dalla struttura del documento analizzato. - Campi documento individuati da LLM: chiave aggiuntiva: righe di valore per i campi a livello di documento individuati automaticamente da un LLM, ad esempio "Company", "Document Type", "Fiscal Year", "Patient ID" o "Contract Number". I nomi dei campi vengono scelti per documento dal modello e variano in base ai documenti.
- Frase del contesto del documento: una singola frase che riepiloga ciò che il documento riguarda, generato da un LLM.
-
Contenuto: testo non elaborato. Stesso valore del
chunk_to_retrievecampo per il blocco. - Riepilogo tabella: una breve parafrasa LLM generata dal sommario. Per i blocchi che contengono una tabella, la funzione aggiunge il riepilogo di questa tabella e un set di domande in linguaggio naturale correlate a cui la tabella può rispondere.
- Domande correlate: domande in linguaggio naturale a cui la tabella è in grado di rispondere, usata per migliorare il recupero del richiamo per il contenuto della tabella.
La stringa segue questo modello:
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}
Rendering di esempio 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.
Annotazioni
Il rendering dei campi dei metadati fissi viene sempre eseguito con la relativa etichetta, con il valore lasciato vuoto quando non disponibile. I campi individuati da LLM, la frase di contesto del documento, il riepilogo delle tabelle e le domande correlate vengono omesse interamente quando non sono disponibili o non sono applicabili. La composizione esatta potrebbe essere aggiornata nelle versioni future per migliorare la qualità del recupero.
Examples
Catena con ai_parse_document
Nell'esempio seguente viene concatenato ai_prep_searchai_parse_document per produrre blocchi pronti per la ricerca da documenti non elaborati archiviati in un volume del catalogo 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;
Creare una tabella di origine della ricerca vettoriale
Nell'esempio seguente l'output viene appiattito in singole righe di blocchi e le scrive in una tabella Delta. La tabella può quindi essere usata come origine per un indice di ricerca di intelligenza artificiale di Databricks , usando chunk_to_embed come colonna di incorporamento e chunk_id come chiave primaria.
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;
Le righe risultanti hanno lo schema seguente:
| Nome della colonna | Tipo |
|---|---|
chunk_id |
STRING |
chunk_position |
INT |
chunk_to_retrieve |
STRING |
chunk_to_embed |
STRING |
source_uri |
STRING |
Abilitare il recupero multi modale
Quando ai_parse_document viene chiamato con l'opzione imageOutputPath , le immagini di pagina sottoposte a rendering vengono salvate in un volume del catalogo Unity e il image_uri campo nella matrice di pages ogni blocco viene popolato. Questi riferimenti alle immagini possono essere passati a un modello con funzionalità di visione in fase di query per rispondere a domande che richiedono contesto visivo, ad esempio diagrammi a blocchi, grafici o tabelle non completamente rappresentati nel testo.
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;
Limitazioni
- La
ai_prep_searchfunzione richiede un output validoai_parse_documentcome input. Il passaggio di altriVARIANTdati o una versione dello schema non supportata potrebbe produrre risultati o errori imprevisti. - Le dimensioni massime di input sono coerenti con le dimensioni massime di output di
ai_parse_document.