Funzione ai_prep_search

Si applica a:segno di spunta sì Databricks SQL segno di spunta sì 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 ai_prep_search funzione è 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

  • parsed VARIANT: espressione che rappresenta l'output strutturato di ai_parse_document.
  • options: oggetto facoltativo MAP<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_retrieve campo 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_search funzione richiede un output valido ai_parse_document come input. Il passaggio di altri VARIANT dati 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.