Compartilhar via


ai_prep_search Função

Aplica-se a:seleção marcada como sim Databricks SQL seleção marcada como sim Databricks Runtime

Importante

Esse recurso está em Beta. Os administradores do workspace podem controlar o acesso a esse recurso na página Visualizações . Consulte Manage Azure Databricks visualizações.

A ai_prep_search() função transforma a saída estruturada em ai_parse_document um formato otimizado para sistemas de pesquisa de vetor RAG e recuperação de informações. Para cada documento de entrada, a função divide o conteúdo em partes semânticas, enriquece cada parte com contexto no nível do documento, como o título do documento, cabeçalhos de seção, referências de página e produz uma representação pronta para inserção.

Requisitos

  • Databricks Runtime 18.2 ou superior.
  • Se você estiver usando a computação sem servidor, o seguinte também será necessário:
    • A versão do ambiente sem servidor deve ser definida como 3 ou superior, pois isso permite recursos como VARIANT.
    • Deve usar Python ou SQL. Para obter recursos e limitações adicionais sem servidor, consulte limitações de computação sem servidor.
  • A ai_prep_search função está disponível usando notebooks do Databricks, editor SQL, fluxos de trabalho do Databricks, trabalhos ou Pipelines Declarativos do Lakeflow Spark.

Sintaxe

ai_prep_search(
    parsed VARIANT,
    [options MAP<STRING, STRING>]
) RETURNS VARIANT

Argumentos

  • parsed: uma VARIANT expressão que representa a saída estruturada de ai_parse_document.
  • options: um opcional MAP<STRING, STRING>. Chaves com suporte:
    • 'version': a versão do esquema de saída a ser usado.

Devoluções

Um VARIANT bloco de documento que contém partes formatadas para indexação de pesquisa de vetor. Cada linha na saída representa um documento de entrada.

O esquema de saída é:

{
  "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_content": 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

O esquema de saída da função é versionado usando um formato principal.secundária. O Databricks pode atualizar a versão com suporte ou padrão para refletir representações aprimoradas com base em pesquisas em andamento.

  • Atualizações de versões menores são compatíveis com versões anteriores e podem apenas introduzir novos campos.
  • As atualizações de versão principais podem incluir alterações significativas, como adições de campo, remoções ou renomeações.

formato chunk_to_embed

O chunk_to_embed campo combina o contexto no nível do documento com o conteúdo da parte para melhorar a qualidade da recuperação durante a pesquisa semântica. O formato é:

Observação

Campos sem um valor para uma determinada parte são incluídos, mas deixados vazios. A composição exata pode ser atualizada em versões futuras para melhorar a qualidade da recuperação.

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_content}

Exemplos

Encadear com ai_parse_document

O exemplo a seguir é encadeado ai_prep_searchai_parse_document para produzir partes prontas para pesquisa de documentos brutos armazenados em um volume do Catálogo do 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;

Criar uma tabela de origem de pesquisa de vetor

O exemplo a seguir nivela a saída em linhas de partes individuais e as grava em uma tabela Delta. Em seguida, a tabela pode ser usada como uma fonte para um índice de Pesquisa de Vetor do Databricks , usando chunk_to_embed como a coluna de inserção e chunk_id como a chave primária.

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_content::STRING AS chunk_content,
  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;

As linhas resultantes têm o seguinte esquema:

Nome da coluna Tipo
chunk_id STRING
chunk_position INT
chunk_content STRING
chunk_to_embed STRING
source_uri STRING

Habilitar a recuperação multi modal

Quando ai_parse_document é chamado com a opção, as imageOutputPath imagens de página renderizadas são salvas em um volume do Catálogo do Unity e o image_uri campo na matriz de pages cada parte é preenchido. Essas referências de imagem podem ser passadas para um modelo com capacidade de visão no momento da consulta para responder a perguntas que exigem contexto visual, como diagramas de bloco, gráficos ou tabelas que não estão totalmente representadas no texto.

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;

Limitações

  • A ai_prep_search função requer saída válida ai_parse_document como entrada. Passar outros VARIANT dados ou uma versão de esquema sem suporte pode produzir resultados ou erros inesperados.
  • O tamanho máximo de entrada é consistente com o tamanho máximo de saída de ai_parse_document.