funktion ai_prep_search

gäller för:markerad med ja Databricks SQL markerad med ja Databricks Runtime

Viktigt!

Den här funktionen finns i Beta. Arbetsyteadministratörer kan styra åtkomsten till den här funktionen från sidan Förhandsversioner . Se Hantera Azure Databricks förhandsversioner.

Funktionen ai_prep_search() omvandlar strukturerade utdata ai_parse_document från till ett format som är optimerat för RAG-vektorsökning och informationshämtningssystem. För varje indatadokument delar funktionen upp innehållet i semantiska segment, berikar varje segment med kontext på dokumentnivå, till exempel dokumentrubrik, avsnittsrubriker, sidreferenser och skapar en inbäddningsklar representation.

Requirements

  • Databricks Runtime 18.2 eller senare.
  • Om du använder serverlös beräkning krävs även följande:
    • Den serverlösa miljöversionen måste vara inställd på 3 eller senare, eftersom detta aktiverar funktioner som VARIANT.
    • Måste använda antingen Python eller SQL. Ytterligare serverlösa funktioner och begränsningar finns i Begränsningar för serverlös beräkning.
  • Funktionen ai_prep_search är tillgänglig med Databricks Notebooks, SQL-redigerare, Databricks-arbetsflöden, jobb eller Lakeflow Spark deklarativa pipelines.

Syntax

ai_prep_search(parsed [, options])

Arguments

  • parsed: Ett VARIANT uttryck som representerar strukturerade utdata för ai_parse_document.
  • options: Ett valfritt MAP<STRING, STRING>. Nycklar som stöds:
    • 'version': Den version av utdataschemat som ska användas.

Retur

Ett VARIANT innehållande dokumentsegment som är formaterade för vektorsökningsindexering. Varje rad i utdata representerar ett indatadokument.

Utdataschemat är:

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

Viktigt!

Utdataschemat för funktionen versioneras med ett major.minor-format. Databricks kan uppgradera den version som stöds eller standardversionen för att återspegla förbättrade representationer baserat på pågående forskning.

  • Delversionsuppgraderingar är bakåtkompatibla och kanske bara introducerar nya fält.
  • Större versionsuppgraderingar kan omfatta icke-bakåtkompatibla ändringar, till exempel fälttillägg, borttagningar eller namnbyten.

chunk_to_embed format

Fältet chunk_to_embed är en enskild sträng som skapats per segment genom att kombinera rå segmenttexten med kontext på dokumentnivå för att förbättra hämtningskvaliteten under semantisk sökning.

Strängen består av följande delar:

  • Dokumentmetadata: Document Title, Page Header, Page Footer, Section Header, Caption, Footnote, Page Number. Extraheras direkt från den tolkade dokumentstrukturen.
  • LLM-identifierade dokumentfält: ytterligare Nyckel: Värderader för fält på dokumentnivå som identifieras automatiskt av en LLM, till exempel "Företag", "Dokumenttyp", "Räkenskapsår", "Patient-ID" eller "Kontraktsnummer". Fältnamnen väljs per dokument av modellen och varierar mellan olika dokument.
  • Dokumentkontext mening: en enda mening som sammanfattar vad dokumentet handlar om, genereras av en LLM.
  • Innehåll: den råa segmenttexten. Samma värde som fältet chunk_to_retrieve för segmentet.
  • Tabellsammanfattning: en kort LLM-genererad parafras för tabellinnehållet. För segment som innehåller en tabell lägger funktionen till den här tabellsammanfattningen och en uppsättning relaterade frågor på naturligt språk som tabellen kan besvara.
  • Relaterade frågor: frågor på naturligt språk som tabellen kan besvara, som används för att förbättra hämtningen av tabellinnehåll.

Strängen följer den här mallen:

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}
Exempel som återges 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.

Anmärkning

De fasta metadatafälten återges alltid med etiketten, med värdet tomt när det inte är tillgängligt. LLM-identifierade fält, dokumentkontext, tabellsammanfattning och relaterade frågor utelämnas helt när de inte är tillgängliga eller inte tillämpliga. Den exakta kompositionen kan uppdateras i framtida versioner för att förbättra hämtningskvaliteten.

Exempel

Kedja med ai_parse_document

Följande exempel kedjar ai_prep_search med ai_parse_document för att skapa sökklara segment från rådata som lagras i en Unity Catalog-volym:

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;

Skapa en källtabell för vektorsökning

I följande exempel plattas utdata ut till enskilda segmentrader och skrivs till en Delta-tabell. Tabellen kan sedan användas som källa för ett Databricks AI Search-index , med som chunk_to_embed inbäddningskolumn och chunk_id som primärnyckel.

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 resulterande raderna har följande schema:

Kolumnnamn Type
chunk_id STRING
chunk_position INT
chunk_to_retrieve STRING
chunk_to_embed STRING
source_uri STRING

Aktivera multimodal hämtning

När ai_parse_document anropas med imageOutputPath alternativet sparas återgivna sidbilder till en Unity Catalog-volym och image_uri fältet i varje segments matris fylls pages i. Dessa bildreferenser kan skickas till en visionskompatibel modell vid frågetillfället för att besvara frågor som kräver visuell kontext, till exempel blockdiagram, diagram eller tabeller som inte är helt representerade i text.

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;

Begränsningar

  • Funktionen ai_prep_search kräver giltiga ai_parse_document utdata som indata. Att skicka andra VARIANT data eller en schemaversion som inte stöds kan ge oväntade resultat eller fel.
  • Den maximala indatastorleken överensstämmer med den maximala utdatastorleken ai_parse_documentför .