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 [, options])

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_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

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 é uma única cadeia construída por bloco combinando o texto bruto do bloco com contexto ao nível do documento para melhorar a qualidade da recuperação durante a pesquisa semântica.

A corda é composta pelas seguintes partes:

  • Metadados do documento: Document Title, Page Header, Page Footer, Section Header, Caption, Footnote, , Page Number. Extraído diretamente da estrutura do documento analisado.
  • Campos de documentos descobertos por LLM: chave adicional: Linhas de valor para campos ao nível do documento descobertos automaticamente por um LLM, como "Empresa", "Tipo de Documento", "Ano Fiscal", "ID do Paciente" ou "Número do Contrato". Os nomes dos campos são escolhidos por documento pelo modelo e variam entre os documentos.
  • Frase de contexto do documento: uma única frase que resume sobre o que o documento trata, gerada por um LLM.
  • Conteúdo: o texto bruto do bloco. O mesmo valor do chunk_to_retrieve campo para o chunk.
  • Resumo da tabela: uma pequena paráfrase gerada por LLM do índice da tabela. Para blocos que contêm uma tabela, a função acrescenta este resumo da tabela e um conjunto de perguntas relacionadas em linguagem natural que a tabela pode responder.
  • Perguntas relacionadas: perguntas em linguagem natural que a tabela é capaz de responder, usadas para melhorar a recordação de recuperação do conteúdo da tabela.

A cadeia segue este modelo:

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}
Exemplo renderizado 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.

Observação

Os campos de metadados fixos são sempre renderizados com o seu rótulo, deixando o valor vazio quando não está disponível. Os campos descobertos pelo LLM, a frase de contexto do documento, o resumo da tabela e as perguntas relacionadas são completamente omitidos quando não estão disponíveis ou não são aplicáveis. A composição exata poderá ser atualizada em versões futuras para melhorar a qualidade da recuperação.

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 de IA Databricks , usando chunk_to_embed tanto a coluna de embedding como chunk_id a chave primária.

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;

As linhas resultantes têm o seguinte esquema:

Nome da coluna Tipo
chunk_id STRING
chunk_position INT
chunk_to_retrieve 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.