Partilhar via


ai_prep_search Função

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

Importante

Este recurso está em versão Beta. Os administradores do espaço de trabalho podem controlar o acesso a esse recurso na página Visualizações . Ver Gerir pré-visualizações Azure Databricks.

A ai_prep_search() função transforma a saída estruturada de ai_parse_document num formato otimizado para sistemas de pesquisa vetorial RAG e recuperação de informação. Para cada documento de entrada, a função divide o conteúdo em blocos semânticos, enriquece cada bloco com contexto ao nível do documento, como o título do documento, cabeçalhos de secção, referências de página, e produz uma representação pronta para incorporação.

Requisitos

  • Databricks Runtime 18.2 ou superior.
  • Se estiver a usar computação Serverless, também é exigido o seguinte:
    • 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 recursos e limitações adicionais sem servidor, consulte Limitações de computação sem servidor.
  • A função ai_prep_search está disponível através de notebooks do Databricks, do editor SQL, dos fluxos de trabalho do Databricks, dos trabalhos ou dos 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>. Teclas suportadas:
    • 'version': A versão do esquema de saída a utilizar.

Devoluções

A VARIANT contém blocos de documentos formatados para indexação de pesquisa vetorial. 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 major.minor. O Databricks pode atualizar a versão suportada ou padrão para refletir representações aprimoradas com base em pesquisas em andamento.

  • As 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 principal podem incluir mudanças disruptivas, como adições de campo, remoções ou renomeações.

chunk_to_embed Formato

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

Observação

Campos sem valor para um dado bloco são incluídos, mas deixados vazios. A composição exata poderá 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

Corrente com ai_parse_document

As seguintes cadeias ai_prep_search de exemplos podem ai_parse_document produzir blocos prontos para pesquisa a partir de documentos brutos armazenados num volume do Unity Catalog:

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;

Construir uma tabela de origem de pesquisa vetorial

O exemplo seguinte achata a saída em linhas individuais de blocos e escreve-as numa tabela Delta. A tabela pode então ser usada como fonte para um índice de Pesquisa Vetorial Databricks , usando chunk_to_embed como coluna de embedding e chunk_id como 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

Permitir a recuperação multimodal

Quando ai_parse_document é chamada com a imageOutputPath opção, as imagens da página renderizadas são guardadas num volume do Unity Catalog e o image_uri campo no array de pages cada bloco é preenchido. Estas referências de imagem podem ser encaminhadas para um modelo com capacidade de visão no momento da consulta para responder a perguntas que requerem contexto visual, como diagramas de blocos, gráficos ou tabelas que não estão totalmente representados 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 uma saída válida ai_parse_document como entrada. Passar outros VARIANT dados ou uma versão de esquema não suportada 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.