Rozdělení na části a vektorizace pomocí dovednosti Document Layout

Note

Azure AI Vyhledávač je k dispozici prostřednictvím portálu Azure, rozhraní REST API a Sady Azure SDK. Podporuje také Foundry IQ, spravovanou znalostní vrstvu, která transformuje podnikový obsah na opakovaně použitelné znalostní báze s podporou oprávnění pro agenty na portálu Microsoft Foundry.

Důležité

Tyto funkce podporují připojení k jiným služby Microsoft a službám třetích stran. Použití těchto služeb podléhá vlastním podmínkám jednotlivých služeb a může vést ke zpracování nebo ukládání dat mimo hranici souladu Azure, stejně jako k toku dat do hranice souladu Azure.

Je vaší zodpovědností spravovat, jestli budou vaše data přetékat mimo dodržování předpisů a geografické hranice vaší organizace a případné související důsledky a že se zřídí příslušná oprávnění, hranice a schválení.

Zodpovídáte za pečlivou kontrolu a testování aplikací, které vytváříte v kontextu konkrétních případů použití, a za veškerá vhodná rozhodnutí a přizpůsobení. To zahrnuje implementaci vlastního zodpovědného zmírnění rizik umělé inteligence, jako jsou metaprompty, filtry obsahu nebo jiné bezpečnostní systémy, a zajištění toho, aby vaše aplikace splňovaly příslušné standardy kvality, spolehlivosti, zabezpečení a důvěryhodnosti. Další informace najdete v informacích o transparentnosti Azure AI Vyhledávač.

Návod

Tento článek je určen pro existující kanály zpracování, které používají dovednost Rozložení dokumentu. Pro nové sady dovedností použijte dovednost Azure Content Understanding. Tato dovednost poskytuje novější funkce, jako je sémantické vytváření bloků dat, popisy obrázků generované umělou inteligencí a vylepšená extrakce tabulek vložených do dokumentů v jedné dovednosti. Pokud chcete začít, podívejte se na Chunk a vektorizujte obsah pomocí dovednosti Azure Content Understanding.

Strategie vytváření bloků textových dat hrají klíčovou roli při optimalizaci odpovědí RAG a výkonu. Pomocí dovednosti Rozložení dokumentu můžete obsah rozdělovat na základě struktury dokumentu, přičemž zachytíte nadpisy a rozdělíte text obsahu podle sémantického smyslu, jako jsou odstavce a věty. Bloky jsou zpracovávány nezávisle. Vzhledem k tomu, že LLM pracují s několika bloky dat, jsou-li tyto bloky vysoce kvalitní a séanticky koherentní, je vylepšena celková důležitost dotazu.

Dovednost Document Layout volá model rozložení z Azure Document Intelligence v nástrojích Foundry. Model vyjadřuje strukturu obsahu ve formátu JSON pomocí syntaxe Markdownu (nadpisů a obsahu) s poli pro nadpisy a obsah uložený v indexu vyhledávání ve službě Azure AI Vyhledávač. Prohledávatelný obsah vytvořený z dovednosti Rozložení dokumentu je prostý text, ale můžete použít integrovanou vektorizaci ke generování vkládání pro všechna pole ve zdrojových dokumentech, včetně obrázků.

V tomto článku se dozvíte, jak:

  • Rozpoznávání struktury dokumentu pomocí dovednosti rozložení dokumentu
  • Pomocí dovednosti Rozdělení textu omezte velikost bloků dat na jednotlivé oddíly Markdownu.
  • Generování vnoření pro každý blok
  • Použití projekcí indexů pro mapování embeddingů do polí v indexu vyhledávání

Pro ilustraci tento článek používá ukázkové soubory PDF zdravotního plánu nahrané do služby Azure Blob Storage a pak indexované pomocí průvodce importem dat.

Požadavky

Příprava datových souborů

Pro nezpracované vstupy musíte použít podporovaný zdroj dat a soubor musí být ve formátu podporovaném dovedností rozložení dokumentu.

  • Mezi podporované formáty souborů patří PDF, JPEG, JPG, PNG, BMP, TIFF, DOCX, XLSX, PPTX a HTML.

  • Podporované indexery jsou jakýkoli indexer, který dokáže zpracovat podporované formáty souborů. Tyto indexery zahrnují indexery objektů blob, indexery Microsoft OneLake a indexery souborů (verze Preview).

  • Mezi podporované oblasti portálu této funkce patří USA – východ, Západní Evropa a USA – středosever. Pokud nastavujete sadu dovedností prostřednictvím kódu programu, můžete použít libovolnou oblast Azure Document Intelligence, která také poskytuje funkci rozšiřování AI služby Azure AI Vyhledávač. Další informace najdete v tématu Podporované oblasti pro dovednosti rozložení dokumentu.

K vytvoření zdroje dat můžete použít Azure Portal, rozhraní REST API nebo balíček sady Azure SDK.

Návod

Pokud chcete vyzkoušet dovednost pro rozložení dokumentu a strukturované dělení bloků ve vaší vlastní vyhledávací službě, nahrajte ukázkové soubory PDF zdravotního plánu do podporovaného zdroje dat. Průvodce importem dat je jednoduchý přístup bez kódu pro vyzkoušení této dovednosti. Nezapomeňte vybrat výchozí režim parsování pro použití strukturálně citlivého segmentování. V opačném případě se použije režim analýzy Markdownu .

Vytvořte index pro indexaci 1:N

Následující příklad ukazuje jeden vyhledávací dokument navržený kolem bloků dat. Při práci s bloky dat potřebujete pole bloku dat a nadřazené pole, které identifikuje původ bloku dat. V tomto příkladu jsou nadřazená pole text_parent_id. Podřízená pole jsou vektorové a nevektorové bloky oddílu Markdown.

Funkce rozložení dokumentu vytváří výstup nadpisů a obsahu. V tomto příkladu header_1 až header_3 ukládají nadpisy dokumentů, jak zjistila dovednost. Další obsah, například odstavce, je uložen v chunk. Pole text_vector je vektorové znázornění obsahu pole bloku.

K vytvoření indexu můžete použít Průvodce importem dat na webu Azure Portal, rozhraní REST API nebo sadě Azure SDK. Následující index je velmi podobný tomu, co průvodce ve výchozím nastavení vytvoří. Pokud přidáte vektorizaci obrázků, můžete mít více polí.

Pokud průvodce nepoužíváte, musí index existovat ve vyhledávací službě před vytvořením sady dovedností nebo spuštěním indexeru.

{
  "name": "my_consolidated_index",
  "fields": [
    {
      "name": "chunk_id",
      "type": "Edm.String",
      "searchable": true,
      "filterable": false,
      "retrievable": true,
      "stored": true,
      "sortable": true,
      "facetable": false,
      "key": true,
      "analyzer": "keyword"
    },
    {
      "name": "text_parent_id",
      "type": "Edm.String",
      "searchable": false,
      "filterable": true,
      "retrievable": true,
      "stored": true,
      "sortable": false,
      "facetable": false,
      "key": false
    },
    {
      "name": "chunk",
      "type": "Edm.String",
      "searchable": true,
      "filterable": false,
      "retrievable": true,
      "stored": true,
      "sortable": false,
      "facetable": false,
      "key": false
    },
    {
      "name": "title",
      "type": "Edm.String",
      "searchable": true,
      "filterable": false,
      "retrievable": true,
      "stored": true,
      "sortable": false,
      "facetable": false,
      "key": false
    },
    {
      "name": "header_1",
      "type": "Edm.String",
      "searchable": true,
      "filterable": false,
      "retrievable": true,
      "stored": true,
      "sortable": false,
      "facetable": false,
      "key": false
    },
    {
      "name": "header_2",
      "type": "Edm.String",
      "searchable": true,
      "filterable": false,
      "retrievable": true,
      "stored": true,
      "sortable": false,
      "facetable": false,
      "key": false
    },
    {
      "name": "header_3",
      "type": "Edm.String",
      "searchable": true,
      "filterable": false,
      "retrievable": true,
      "stored": true,
      "sortable": false,
      "facetable": false,
      "key": false
    },
    {
      "name": "text_vector",
      "type": "Collection(Edm.Single)",
      "searchable": true,
      "filterable": false,
      "retrievable": true,
      "stored": true,
      "sortable": false,
      "facetable": false,
      "key": false,
      "dimensions": 1536,
      "stored": false,
      "vectorSearchProfile": "profile"
    }
  ],
  "vectorSearch": {
    "profiles": [
      {
        "name": "profile",
        "algorithm": "algorithm"
      }
    ],
    "algorithms": [
      {
        "name": "algorithm",
        "kind": "hnsw"
      }
    ]
  }
}

Definování sady dovedností pro bloky dat a vektorizaci s podporou struktury

Následující příklad ukazuje definici sady dovedností, která promítá jednotlivé části Markdownu, bloky dat a jejich vektorové ekvivalenty jako pole v indexu vyhledávání. Používá dovednost Rozložení dokumentu k detekci nadpisů a naplnění pole obsahu na základě sémanticky koherentních odstavců a vět ve zdrojovém dokumentu. Používá schopnost Rozdělení textu k rozdělení obsahu Markdownu na bloky. Používá schopnost Azure OpenAI Embedding k vektorizaci segmentů a jakéhokoli jiného pole, pro které chcete vytvořit vektorové reprezentace.

Kromě dovedností zahrnuje indexProjections a cognitiveServices soubor dovedností:

  • indexProjections se používají pro indexy, které obsahují dokumenty rozdělené na části. Projekce určují, jak se rodičovsko-dětský obsah mapuje na pole v indexu vyhledávání pro indexování jedna ku mnoha. Další informace naleznete v tématu Definování projekce indexu.

  • cognitiveServices připojí prostředek Microsoft Foundry pro účely fakturace. Dovednost Rozložení dokumentu je k dispozici prostřednictvím cen standardu.

POST {endpoint}/skillsets?api-version=2026-04-01

{
  "name": "my_skillset",
  "description": "A skillset for structure-aware chunking and vectorization with an index projection around markdown section",
  "skills": [
    {
      "@odata.type": "#Microsoft.Skills.Util.DocumentIntelligenceLayoutSkill",
      "name": "my_document_intelligence_layout_skill",
      "context": "/document",
      "outputMode": "oneToMany",
      "inputs": [
        {
          "name": "file_data",
          "source": "/document/file_data"
        }
      ],
      "outputs": [
        {
          "name": "markdown_document",
          "targetName": "markdownDocument"
        }
      ],
      "markdownHeaderDepth": "h3"
    },
    {
      "@odata.type": "#Microsoft.Skills.Text.SplitSkill",
      "name": "my_markdown_section_split_skill",
      "description": "A skill that splits text into chunks",
      "context": "/document/markdownDocument/*",
      "inputs": [
        {
          "name": "text",
          "source": "/document/markdownDocument/*/content",
          "inputs": []
        }
      ],
      "outputs": [
        {
          "name": "textItems",
          "targetName": "pages"
        }
      ],
      "defaultLanguageCode": "en",
      "textSplitMode": "pages",
      "maximumPageLength": 2000,
      "pageOverlapLength": 500,
      "unit": "characters"
    },
    {
      "@odata.type": "#Microsoft.Skills.Text.AzureOpenAIEmbeddingSkill",
      "name": "my_azure_openai_embedding_skill",
      "context": "/document/markdownDocument/*/pages/*",
      "inputs": [
        {
          "name": "text",
          "source": "/document/markdownDocument/*/pages/*",
          "inputs": []
        }
      ],
      "outputs": [
        {
          "name": "embedding",
          "targetName": "text_vector"
        }
      ],
      "resourceUri": "https://<subdomain>.openai.azure.com",
      "deploymentId": "text-embedding-3-small",
      "apiKey": "<Azure OpenAI api key>",
      "modelName": "text-embedding-3-small"
    }
  ],
  "cognitiveServices": {
    "@odata.type": "#Microsoft.Azure.Search.CognitiveServicesByKey",
    "key": "<Cognitive Services api key>"
  },
  "indexProjections": {
    "selectors": [
      {
        "targetIndexName": "my_consolidated_index",
        "parentKeyFieldName": "text_parent_id",
        "sourceContext": "/document/markdownDocument/*/pages/*",
        "mappings": [
          {
            "name": "text_vector",
            "source": "/document/markdownDocument/*/pages/*/text_vector"
          },
          {
            "name": "chunk",
            "source": "/document/markdownDocument/*/pages/*"
          },
          {
            "name": "title",
            "source": "/document/title"
          },
          {
            "name": "header_1",
            "source": "/document/markdownDocument/*/sections/h1"
          },
          {
            "name": "header_2",
            "source": "/document/markdownDocument/*/sections/h2"
          },
          {
            "name": "header_3",
            "source": "/document/markdownDocument/*/sections/h3"
          }
        ]
      }
    ],
    "parameters": {
      "projectionMode": "skipIndexingParentDocuments"
    }
  }
}

Konfigurace a spuštění indexeru

Po vytvoření zdroje dat, indexu a sady dovedností vytvořte a spusťte indexer. Tento krok převede kanál do spuštění.

Při použití dovednosti rozložení dokumentu nastavte následující parametry pro definici indexeru:

  • Nastavte parametr na allowSkillsetToReadFileDatatrue.
  • Nastavte parametr na parsingModedefault.

V tomto scénáři není nutné nastavit outputFieldMappings , protože indexProjections zpracovává zdrojové pole pro přidružení polí vyhledávání. Projekce indexů zpracovávají přiřazení polí pro dovednost rozložení dokumentů a také pravidelné členění pomocí dovednosti rozdělení pro úlohy zpracování importovaných a vektorizovaných dat. Stále potřebujete mapování výstupních polí pro transformace nebo komplexní mapování dat s funkcemi, které platí v jiných případech. Pro n bloků na dokument však projekce indexu tuto funkci zpracovávají nativně.

Tady je příklad požadavku na vytvoření indexeru.

POST {endpoint}/indexers?api-version=2026-04-01

{
  "name": "my_indexer",
  "dataSourceName": "my_blob_datasource",
  "targetIndexName": "my_consolidated_index",
  "skillsetName": "my_skillset",
  "parameters": {
    "batchSize": 1,
    "configuration": {
        "dataToExtract": "contentAndMetadata",
        "parsingMode": "default",
        "allowSkillsetToReadFileData": true
    }
  },
  "fieldMappings": [
    {
      "sourceFieldName": "metadata_storage_path",
      "targetFieldName": "title"
    }
  ],
  "outputFieldMappings": []
}

Když odešlete požadavek do vyhledávací služby, spustí se indexer.

Ověření výsledků

Po dokončení zpracování můžete provést dotaz na index vyhledávání a otestovat své řešení.

Pokud chcete zkontrolovat výsledky, spusťte dotaz na index. Použijte Search Explorer jako klienta vyhledávání nebo libovolný nástroj, který odesílá požadavky HTTP. Následující dotaz vybere pole, která obsahují výstup obsahu sekce Markdown ne-vektorových dat a jeho vektoru.

V Průzkumníku služby Search můžete zkopírovat jenom JSON a vložit ho do zobrazení JSON pro provedení dotazu.

POST /indexes/[index name]/docs/search?api-version=[api-version]
{
  "search": "copay for in-network providers",
  "count": true,
  "searchMode": "all",
  "vectorQueries": [
    {
      "kind": "text",
      "text": "*",
      "fields": "text_vector,image_vector"
    }
  ],
  "queryType": "semantic",
  "semanticConfiguration": "healthplan-doc-layout-test-semantic-configuration",
  "captions": "extractive",
  "answers": "extractive|count-3",
  "select": "header_1, header_2, header_3"
}

Pokud jste k otestování této dovednosti použili soubory PDF plánu zdravotní péče, výsledky Search Exploreru pro ukázkový dotaz by měly vypadat podobně jako výsledky na následujícím snímku obrazovky.

  • Dotaz je hybridní dotaz nad textem a vektory, takže se zobrazí @search.rerankerScore a výsledky jsou seřazeny podle skóre souvisejícího s tímto dotazem. searchMode=all znamená, že všechny termíny dotazu musí být považovány za shodu (výchozí hodnota je libovolná).

  • Dotaz používá sémantické řazení, takže vidíte captions. Obsahuje také answers, ale nezobrazují se na snímku obrazovky. Výsledky jsou nejvíce sémanticky relevantní pro vstup dotazu podle sémantického rankeru.

  • Příkaz select (není zobrazený na snímku obrazovky) určuje pole záhlaví, která dovednost rozložení dokumentu rozpozná a naplní. Do klauzule SELECT můžete přidat další pole pro kontrolu obsahu bloků, názvu nebo jakéhokoli jiného lidsky čitelného pole.

Snímek obrazovky s výsledky hybridních dotazů, které obsahují výstupní pole dovedností rozložení dokumentu