ai_prep_search Fonction

S’applique à :case cochée oui Databricks SQL case cochée oui Databricks Runtime

Important

Cette fonctionnalité est en version bêta. Les administrateurs d’espace de travail peuvent contrôler l’accès à cette fonctionnalité à partir de la page Aperçus . Consultez les aperçus Manage Azure Databricks.

La ai_prep_search() fonction transforme la sortie structurée d’un format optimisé pour les systèmes de ai_parse_document recherche de vecteurs RAG et de récupération d’informations. Pour chaque document d’entrée, la fonction fractionne le contenu en blocs sémantiques, enrichit chaque bloc avec un contexte au niveau du document, tel que le titre du document, les en-têtes de section, les références de page et produit une représentation intégrée prête pour l’incorporation.

Exigences

  • Databricks Runtime 18.2 ou version ultérieure.
  • Si vous utilisez le calcul serverless, les éléments suivants sont également requis :
    • La version de l’environnement serverless doit être définie sur 3 ou ultérieure, car cela active des fonctionnalités telles que VARIANT.
    • Doit utiliser Python ou SQL. Pour des fonctionnalités et limitations supplémentaires du mode serveurless, voir limitations de calcul en mode serveurless.
  • La ai_prep_search fonction est disponible à l’aide de notebooks Databricks, de l’éditeur SQL, des workflows Databricks, des travaux ou des pipelines Lakeflow.

Syntaxe

ai_prep_search(parsed [, options])

Arguments

  • parsed VARIANT: expression représentant la sortie structurée de ai_parse_document.
  • options: facultatif MAP<STRING, STRING>. Clés prises en charge :
    • 'version': version du schéma de sortie à utiliser.

Retours

Segments VARIANT de document contenant des blocs mis en forme pour l’indexation de recherche vectorielle. Chaque ligne de la sortie représente un document d’entrée.

Le schéma de sortie est :

{
  "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": {...}
}

Important

Le schéma de sortie de la fonction est versionné à l’aide d’un format major.minor. Databricks peut mettre à niveau la version prise en charge ou par défaut pour refléter des représentations améliorées en fonction de la recherche en cours.

  • Les mises à niveau de version mineures sont rétrocompatibles et peuvent seulement introduire de nouveaux champs.
  • Les mises à niveau de versions majeures peuvent inclure des modifications perturbatrices telles que les ajouts de champs, les suppressions ou les renommages.

format chunk_to_embed

Le chunk_to_embed champ est une chaîne unique générée par bloc en combinant le texte brut de bloc avec le contexte au niveau du document pour améliorer la qualité de récupération pendant la recherche sémantique.

La chaîne est composée des parties suivantes :

  • Métadonnées du document : Document Title, , Page HeaderPage Footer, Section HeaderCaptionFootnote, . Page Number Extrait directement de la structure de document analysée.
  • Champs de document découverts par LLM : clé supplémentaire : lignes de valeur pour les champs au niveau du document découverts automatiquement par un LLM, tel que « Société », « Type de document », « Année fiscale », « ID de patient » ou « Numéro de contrat ». Les noms de champs sont choisis par document par le modèle et varient entre les documents.
  • Phrase de contexte de document : phrase unique récapitulait ce que le document est à propos, généré par un LLM.
  • Contenu : texte de bloc brut. Même valeur que le chunk_to_retrieve champ du bloc.
  • Résumé du tableau : paraphrase générée par LLM courte du contenu de la table. Pour les blocs qui contiennent une table, la fonction ajoute ce résumé de table et un ensemble de questions en langage naturel connexes auxquelles la table peut répondre.
  • Questions connexes : les questions en langage naturel que la table est capable de répondre, utilisées pour améliorer le rappel de récupération pour le contenu de la table.

La chaîne suit ce modèle :

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}
Exemple rendu 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.

Note

Les champs de métadonnées fixes sont toujours affichés avec leur étiquette, la valeur restante vide lorsqu’elles ne sont pas disponibles. Les champs découverts par LLM, la phrase de contexte de document, le résumé du tableau et les questions connexes sont omis entièrement lorsqu’ils ne sont pas disponibles ou non applicables. La composition exacte peut être mise à jour dans les versions futures pour améliorer la qualité de récupération.

Exemples

Chaîne avec ai_parse_document

L’exemple suivant chaîne ai_prep_search pour ai_parse_document produire des blocs prêts pour la recherche à partir de documents bruts stockés dans un volume de catalogue 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;

Créer une table source de recherche vectorielle

L’exemple suivant aplatit la sortie en lignes de bloc individuelles et les écrit dans une table Delta. La table peut ensuite être utilisée comme source pour un index Databricks AI Search , à l’aide chunk_to_embed de la colonne d’incorporation et chunk_id de la clé primaire.

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;

Les lignes obtenues ont le schéma suivant :

Nom de colonne Type
chunk_id STRING
chunk_position INT
chunk_to_retrieve STRING
chunk_to_embed STRING
source_uri STRING

Activer la récupération multimodèle

Lorsqu’elle ai_parse_document est appelée avec l’option imageOutputPath , les images de page rendues sont enregistrées dans un volume catalogue Unity et le image_uri champ du tableau de pages chaque bloc est rempli. Ces références d’image peuvent être transmises à un modèle compatible avec la vision au moment de la requête pour répondre à des questions qui nécessitent un contexte visuel, tel que des diagrammes de blocs, des graphiques ou des tables qui ne sont pas entièrement représentés dans le texte.

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;

Limites

  • La ai_prep_search fonction nécessite une sortie valide ai_parse_document en tant qu’entrée. La transmission d’autres VARIANT données ou d’une version de schéma non prise en charge peut produire des résultats ou des erreurs inattendus.
  • La taille maximale d’entrée est cohérente avec la taille de sortie maximale de ai_parse_document.