ai_prep_search Función

Se aplica a:casilla marcada como Sí Databricks SQL casilla marcada como Sí Databricks Runtime

Importante

Esta característica se encuentra en su versión beta. Los administradores del área de trabajo pueden controlar el acceso a esta característica desde la página Vistas previas . Consulte Administrar Azure Databricks versiones preliminares.

La ai_prep_search() función transforma la salida estructurada de ai_parse_document en un formato optimizado para sistemas de recuperación de información y búsqueda de vectores rag. Para cada documento de entrada, la función divide el contenido en fragmentos semánticos, enriquece cada fragmento con contexto de nivel de documento, como el título del documento, los encabezados de sección, las referencias de página y genera una representación lista para insertar.

Requisitos

  • Databricks Runtime 18.2 o superior.
  • Si usa proceso sin servidor, también se requiere lo siguiente:
    • La versión del entorno sin servidor debe establecerse en 3 o superior, ya que esto habilita características como VARIANT.
    • Debe usar Python o SQL. Para obtener más características y limitaciones sin servidor, consulte Limitaciones de proceso sin servidor.
  • La ai_prep_search función está disponible mediante cuadernos de Databricks, editor de SQL, flujos de trabajo, trabajos o canalizaciones declarativas de Lakeflow Spark.

Sintaxis

ai_prep_search(parsed [, options])

Argumentos

  • parsed VARIANT: expresión que representa la salida estructurada de ai_parse_document.
  • options: un objeto opcional MAP<STRING, STRING>. Claves admitidas:
    • 'version': la versión del esquema de salida que se va a usar.

Devoluciones

que VARIANT contiene fragmentos de documento con formato para la indexación de búsqueda vectorial. Cada fila de la salida representa un documento de entrada.

El esquema de salida es:

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

El esquema de salida de la función se versiona mediante un formato major.minor. Databricks puede actualizar la versión admitida o predeterminada para reflejar representaciones mejoradas basadas en investigaciones continuas.

  • Las actualizaciones de versiones secundarias son compatibles con versiones anteriores y solo pueden introducir nuevos campos.
  • Las actualizaciones de versiones principales pueden incluir cambios importantes, como adiciones de campos, eliminaciones o cambios de nombre.

formato de chunk_to_embed

El chunk_to_embed campo es una sola cadena creada por fragmento mediante la combinación del texto del fragmento sin formato con contexto de nivel de documento para mejorar la calidad de recuperación durante la búsqueda semántica.

La cadena se compone de las siguientes partes:

  • Metadatos del documento: Document Title, Page Header, Page Footer, Section HeaderCaption, , Footnote, . Page Number Extraído directamente de la estructura del documento analizado.
  • Campos de documento detectados por LLM: clave adicional: líneas de valor para campos de nivel de documento detectados automáticamente por un LLM, como "Company", "Document Type", "Fiscal Year", "Patient ID" o "Contract Number". El modelo elige los nombres de campo por documento y varía en todos los documentos.
  • Frase de contexto del documento: una sola oración que resume lo que trata el documento, generado por un LLM.
  • Contenido: texto de fragmento sin formato. El mismo valor que el chunk_to_retrieve campo del fragmento.
  • Resumen de tabla: una frase breve generada por LLM del contenido de la tabla. En el caso de los fragmentos que contienen una tabla, la función anexa este resumen de tabla y un conjunto de preguntas relacionadas de lenguaje natural que la tabla puede responder.
  • Preguntas relacionadas: preguntas en lenguaje natural que la tabla es capaz de responder, que se usa para mejorar la recuperación del contenido de la tabla.

La cadena sigue esta plantilla:

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}
Ejemplo representado 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.

Nota:

Los campos de metadatos fijos siempre se representan con su etiqueta, con el valor vacío cuando no está disponible. Los campos detectados por LLM, la oración de contexto del documento, el resumen de la tabla y las preguntas relacionadas se omiten completamente cuando no están disponibles o no son aplicables. Es posible que la composición exacta se actualice en versiones futuras para mejorar la calidad de recuperación.

Ejemplos

Cadena con ai_parse_document

En el ejemplo siguiente se encadena ai_prep_search con ai_parse_document para generar fragmentos listos para la búsqueda a partir de documentos sin procesar almacenados en un volumen de Catálogo de 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;

Creación de una tabla de origen de búsqueda vectorial

En el ejemplo siguiente se aplana la salida en filas de fragmentos individuales y se escriben en una tabla Delta. Después, la tabla se puede usar como origen para un índice de Búsqueda de IA de Databricks , mediante chunk_to_embed como columna de inserción y chunk_id como clave principal.

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;

Las filas resultantes tienen el esquema siguiente:

Nombre de la columna Tipo
chunk_id STRING
chunk_position INT
chunk_to_retrieve STRING
chunk_to_embed STRING
source_uri STRING

Habilitación de la recuperación multi modal

Cuando ai_parse_document se llama a con la imageOutputPath opción , las imágenes de página representadas se guardan en un volumen del catálogo de Unity y el image_uri campo de la matriz de pages cada fragmento se rellena. Estas referencias de imagen se pueden pasar a un modelo compatible con la visión en el momento de la consulta para responder a preguntas que requieren contexto visual, como diagramas de bloques, gráficos o tablas que no están totalmente representados en 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;

Limitaciones

  • La ai_prep_search función requiere una salida válida ai_parse_document como entrada. Pasar otros VARIANT datos o una versión de esquema no compatible puede producir resultados o errores inesperados.
  • El tamaño máximo de entrada es coherente con el tamaño máximo de salida de ai_parse_document.