Dela via


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 VARIANT,
    [options MAP<STRING, STRING>]
) RETURNS VARIANT

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_content": 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 kombinerar kontext på dokumentnivå med segmentinnehållet för att förbättra hämtningskvaliteten under semantisk sökning. Formatet är:

Anmärkning

Fält utan värde för ett visst segment inkluderas men lämnas tomma. Den exakta kompositionen kan uppdateras i framtida versioner för att förbättra hämtningskvaliteten.

The following passage represents a chunk of content from a document.
- 'Content' contains raw document text
- All other fields describe document context and hierarchical information
- For visual elements like images/charts, a summary is generated as part of 'Content'

Document Title: {doc_title}
Page Header: {page_header}
Page Footer: {page_footer}
Section Header: {section_header}
Caption: {caption}
Footnote: {footnote}
Page Number: {page_number}

Content:
{chunk_content}

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 Vector Search-index , med som chunk_to_embed inbäddningskolumn och chunk_id som primärnyckel.

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) 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_content::STRING AS chunk_content,
  chunk.value:chunk_to_embed::STRING AS chunk_to_embed,
  prepped_documents.result:document.source_uri::STRING 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_content 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 .