ai_prep_search functie

Van toepassing op:gemarkeerd als ja Databricks SQL gemarkeerd als ja Databricks Runtime

Belangrijk

Deze functie bevindt zich in de bètaversie. Werkruimtebeheerders kunnen de toegang tot deze functie beheren vanaf de pagina Previews . Zie Voorbeelden van Azure Databricks bekijken.

De ai_prep_search() functie transformeert de gestructureerde uitvoer van ai_parse_document een indeling die is geoptimaliseerd voor RAG-vectorzoekopdrachten en het ophalen van gegevens. Voor elk invoerdocument splitst de functie inhoud op in semantische segmenten, verrijkt elk segment met context op documentniveau, zoals de documenttitel, sectiekoppen, paginaverwijzingen en produceert een insluitingsklare weergave.

Requirements

  • Databricks Runtime 18.2 of hoger.
  • Als u serverloze rekenkracht gebruikt, is ook het volgende vereist:
  • De ai_prep_search functie is beschikbaar met behulp van Databricks-notebooks, SQL-editor, Databricks-werkstromen, taken of Lakeflow Spark-declaratieve pijplijnen.

Syntaxis

ai_prep_search(parsed [, options])

Argumenten

  • parsed: Een VARIANT expressie die de gestructureerde uitvoer van ai_parse_document.
  • options: Een optioneel MAP<STRING, STRING>. Ondersteunde sleutels:
    • 'version': de versie van het uitvoerschema dat moet worden gebruikt.

Retouren

Een VARIANT met documentsegmenten die zijn opgemaakt voor indexering van vectorzoekopdrachten. Elke rij in de uitvoer vertegenwoordigt één invoerdocument.

Het uitvoerschema is:

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

Belangrijk

Het uitvoerschema van de functie wordt geversied met behulp van een major.minor-indeling. Databricks kan de ondersteunde of standaardversie upgraden om verbeterde weergaven weer te geven op basis van doorlopend onderzoek.

  • Secundaire versie-upgrades zijn compatibel met eerdere versies en kunnen alleen nieuwe velden introduceren.
  • Belangrijke versie-upgrades kunnen belangrijke wijzigingen bevatten, zoals veldtoevoegingen, verwijderingen of hernoemingen.

chunk_to_embed-indeling

Het chunk_to_embed veld is één tekenreeks die per segment is gebouwd door de onbewerkte segmenttekst te combineren met context op documentniveau om de kwaliteit van het ophalen tijdens semantische zoekopdrachten te verbeteren.

De tekenreeks bestaat uit de volgende onderdelen:

  • Documentmetagegevens: Document Title, Page Header, Page Footer, Section Header, Caption, . FootnotePage Number Rechtstreeks geëxtraheerd uit de geparseerde documentstructuur.
  • Door LLM gedetecteerde documentvelden: aanvullende sleutel: waarderegels voor velden op documentniveau die automatisch worden gedetecteerd door een LLM, zoals 'Bedrijf', 'Documenttype', 'Fiscaal jaar', 'Patiënt-id' of 'Contractnummer'. De veldnamen worden per document gekozen op basis van het model en variëren per document.
  • Documentcontextzin: één zin waarin wordt samengevat waar het document over gaat, gegenereerd door een LLM.
  • Inhoud: de onbewerkte segmenttekst. Dezelfde waarde als het chunk_to_retrieve veld voor het segment.
  • Samenvatting van de tabel: een korte door LLM gegenereerde parafrase van de inhoud van de tabel. Voor segmenten die een tabel bevatten, voegt de functie deze tabelsamenvatting toe en een reeks verwante vragen in natuurlijke taal die de tabel kan beantwoorden.
  • Verwante vragen: vragen in natuurlijke taal die de tabel kan beantwoorden, wordt gebruikt om het ophalen van relevante overeenkomsten voor tabelinhoud te verbeteren.

De tekenreeks volgt deze sjabloon:

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}
Voorbeeld weergegeven 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.

Opmerking

De velden met vaste metagegevens worden altijd weergegeven met hun label, waarbij de waarde leeg blijft wanneer deze niet beschikbaar is. De met LLM gedetecteerde velden, documentcontextzinnen, tabelsamenvatting en gerelateerde vragen worden volledig weggelaten wanneer deze niet beschikbaar of niet van toepassing zijn. De exacte samenstelling kan in toekomstige versies worden bijgewerkt om de kwaliteit van het ophalen te verbeteren.

Examples

Koppelen met ai_parse_document

Het volgende voorbeeld is gekoppeld ai_prep_search aan het ai_parse_document produceren van segmenten die gereed zijn voor zoekopdrachten uit onbewerkte documenten die zijn opgeslagen in een Unity Catalog-volume:

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;

Een vectorzoekbrontabel maken

In het volgende voorbeeld wordt de uitvoer platgemaakt in afzonderlijke segmentrijen en naar een Delta-tabel geschreven. De tabel kan vervolgens worden gebruikt als bron voor een Databricks AI Search-index , met behulp van chunk_to_embed de insluitkolom en chunk_id als primaire sleutel.

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;

De resulterende rijen hebben het volgende schema:

Kolomnaam Typ
chunk_id STRING
chunk_position INT
chunk_to_retrieve STRING
chunk_to_embed STRING
source_uri STRING

Multimodale ophaalbewerking inschakelen

Wanneer ai_parse_document wordt aangeroepen met de imageOutputPath optie, worden weergegeven pagina-afbeeldingen opgeslagen op een Unity Catalog-volume en wordt het image_uri veld in de matrix van pages elk segment ingevuld. Deze afbeeldingsverwijzingen kunnen tijdens query's worden doorgegeven aan een model dat geschikt is voor visie om vragen te beantwoorden waarvoor visuele context is vereist, zoals blokdiagrammen, grafieken of tabellen die niet volledig in tekst worden weergegeven.

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;

Beperkingen

  • De ai_prep_search functie vereist geldige ai_parse_document uitvoer als invoer. Het doorgeven van andere VARIANT gegevens of een niet-ondersteunde schemaversie kan onverwachte resultaten of fouten opleveren.
  • De maximale invoergrootte is consistent met de maximale uitvoergrootte van ai_parse_document.