Condividi tramite


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 VARIANT,
    [options MAP<STRING, STRING>]
) RETURNS VARIANT

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 combina il contesto a livello di documento con il contenuto del blocco per migliorare la qualità del recupero durante la ricerca semantica. Il formato è:

Annotazioni

I campi senza un valore per un blocco specificato sono inclusi ma lasciati vuoti. La composizione esatta potrebbe essere aggiornata nelle versioni future per migliorare la qualità del recupero.

The following passage represents a chunk of content from a document.
- 'Content' contains raw document text
- All other fields describe document context and hierarchical information
- For visual elements like images/charts, a summary is generated as part of 'Content'

Document Title: {doc_title}
Page Header: {page_header}
Page Footer: {page_footer}
Section Header: {section_header}
Caption: {caption}
Footnote: {footnote}
Page Number: {page_number}

Content:
{chunk_to_retrieve}

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 vettoriale di Databricks , usando chunk_to_embed come colonna di incorporamento e chunk_id come chiave primaria.

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) 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.result:document.source_uri::STRING 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.