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.

De ai_prep_search() functie transformeert documentinhoud in een formaat dat geoptimaliseerd is voor RAG-vectorzoek- en informatieopvragingssystemen. Het accepteert zowel de gestructureerde output van ai_parse_document als platte tekst en markdown-inhoud STRING . 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.

Gegevensbeveiliging

Uw documentgegevens worden verwerkt binnen de Databricks-beveiligingsperimeter. Databricks slaat de parameters die aan de AI-functieaanroepen worden doorgegeven niet op, maar behoudt wel details van de uitvoering van metadata, zoals de gebruikte Databricks Runtime-versie.

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-pijplijnen.

Syntaxis

ai_prep_search(parsed [, options])

Argumenten

  • parsed: Documenteer de inhoud ter voorbereiding op zoek. Een van de volgende opties:
    • Een uitdrukking die VARIANT de gestructureerde output van ai_parse_documentvertegenwoordigt.
    • Een expressie met STRING platte tekst of markdown. JSON-strings die geen gestructureerde ai_parse_document (of gerelateerde) output zijn, worden als letterlijke tekst behandeld en op dezelfde manier in stukken verdeeld.
  • options: Een optioneel MAP<STRING, STRING>. Ondersteunde sleutels:
    • 'version': de versie van het uitvoerschema dat moet worden gebruikt.
    • 'schema': Een JSON-schema dat een sleutelset definieert voor documentniveau metadata-extractie. Het schema gebruikt dezelfde formaten als ai_extract:
      • Eenvoudig schema: een JSON-matrix met veldnamen (ervan uitgegaan dat het tekenreeksen zijn)
        "[\"vendor_name\", \"invoice_id\", \"total_amount\"]"
        
      • Geavanceerd schema: een JSON-object met typegegevens, beschrijvingen en geneste structuren
        • Ondersteunt string, integer, , numberen booleanenum typen. Voert typevalidatie uit. Waarden die ongeldig zijn, resulteren in een fout. Maximum van 500 enumwaarden.
        • Ondersteunt geneste objecten die worden gebruikt "type": "object" met "properties"
        • Ondersteunt matrices van primitieven of objecten die worden gebruikt "type": "array" met "items"
        • Optioneel "description" veld voor elke eigenschap om extractiekwaliteit te begeleiden

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
        "metadata": OBJECT,   // Typed values for the keys in schema; empty object when schema is omitted
        "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.
  • Documentvelden: extra Sleutel: Waardelijnen voor velden op documentniveau. Zonder deze schema optie ontdekt een LLM veldnamen per document (bijvoorbeeld "Company", "Document Type", "Fiscal Year"). Met de schema optie gebruikt de functie de toetsen die je aanlevert.
  • 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_document_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 documentvelden, de contextzin van het document, de samenvatting van de tabel en gerelateerde vragen worden volledig weggelaten wanneer ze niet beschikbaar zijn of niet van toepassing zijn. De exacte samenstelling kan in toekomstige versies worden bijgewerkt om de kwaliteit van het ophalen te verbeteren.

Examples

Bereid platte tekst of markdown voor

Het volgende voorbeeld bereidt een platte tekst STRING voor zoekindexering:

SELECT ai_prep_search(
  'Quarterly revenue grew twenty percent year over year.',
  options => map('version', '2.0')
);

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;

Extraheren gestructureerde metadata met de schema optie

Het volgende voorbeeld gebruikt een eenvoudig schema om , document_type, en fiscal_year als stringmetadata op elk stuk te extraherencompany.

WITH parsed_documents AS (
  SELECT ai_parse_document(content) AS parsed
  FROM READ_FILES('/Volumes/mydata/documents/', format => 'binaryFile')
)
SELECT ai_prep_search(
  parsed,
  map('schema', '["company", "document_type", "fiscal_year"]')
) AS result
FROM parsed_documents;

Haal getypte metadata uit met behulp van een geavanceerd schema

Het volgende voorbeeld gebruikt een geavanceerd schema om veldtypen en beschrijvingen te specificeren. Beschrijvingen sturen de extractie en fiscal_year worden als geheel getal teruggegeven.

WITH parsed_documents AS (
  SELECT ai_parse_document(content) AS parsed
  FROM READ_FILES('/Volumes/mydata/documents/', format => 'binaryFile')
)
SELECT ai_prep_search(
  parsed,
  map(
    'schema',
    '{
      "company": {"type": "string", "description": "Legal business name"},
      "document_type": {"type": "string", "description": "Filing or document type"},
      "fiscal_year": {"type": "integer", "description": "Fiscal year covered by the document"}
    }'
  )
) AS result
FROM parsed_documents;

Surface metadatavelden als kolommen

Het volgende voorbeeld vlakt chunks af en projecteert elke sleutel in de schema optie naar een eigen kolom:

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,
    map('schema', '["company", "document_type", "fiscal_year"]')
  ) 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:metadata:company::STRING AS company,
  chunk.value:metadata:document_type::STRING AS document_type,
  chunk.value:metadata:fiscal_year::INT AS fiscal_year
FROM
  prepped_documents,
  LATERAL variant_explode(prepped_documents.result:document.contents) AS chunk;

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,
  chunk.value:metadata AS metadata,
  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
metadata VARIANT
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

  • Wanneer je een VARIANTpasseert, gebruik geldige ai_parse_document output. Het doorgeven van andere VARIANT gegevens of een niet-ondersteunde schemaversie kan onverwachte resultaten of fouten opleveren.
  • Als je een STRINGpasseert, gebruik platte tekst of markdown. JSON-strings die geen gestructureerde parse-documentuitvoer zijn, worden als letterlijke tekst geïndexeerd in plaats van afgewezen.
  • De maximale invoergrootte is consistent met de maximale uitvoergrootte van ai_parse_document.