Návod: Extrakce, rozdělení na části a vektorizace multimodálního obsahu pomocí dovednosti Rozložení dokumentu

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.

V tomto kurzu vytvoříte kanál multimodálního indexeru, který provádí tyto úlohy:

  • Extrahovat a segmentovat text a obrázky
  • Vektorizace textu a obrázků pro vyhledávání podobnosti
  • Odeslat oříznuté obrázky do úložiště znalostí pro načtení vaší aplikací

Tento kurz ukazuje několik sad dovedností vedle sebe, aby ilustroval různé způsoby extrakce, bloků dat a vektorizace multimodálního obsahu. Používá dovednosti extrakce dokumentů a dovednosti rozložení dokumentu k extrakci obsahu.

Návod

Pro nové sady dovedností doporučujeme dovednost Azure Content Understanding. Tato dovednost poskytuje sémantické bloky dat, popisy obrázků generované umělou inteligencí a vylepšenou extrakci 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.

Předpoklady

Multimodální indexování se implementuje prostřednictvím schopností, které volají modely AI a rozhraní API v indexovacím kanálu. Požadavky modelu se liší v závislosti na dovednostech zvolených pro každý úkol.

Návod

K dokončení tohoto kurzu na úrovni Free použijte menší dokument s menším počtem obrázků. Tento kurz používá pouze modely Foundry, ale můžete vytvořit vlastní dovednosti pro použití jiných modelů.

Konfigurace přístupu

Než začnete, ujistěte se, že máte oprávnění pro přístup k obsahu a operacím ve službě Azure AI Vyhledávač. V tomto rychlém průvodci se k ověřování používá Microsoft Entra ID a k autorizaci přístup na základě role. Abyste mohli přiřadit role, musíte být vlastníkem nebo správcem uživatelských přístupů . Pokud role nejsou proveditelné, použijte místo toho ověřování založené na klíči .

Konfigurace doporučeného přístupu na základě role:

  1. Povolte přístup na základě role pro vaši vyhledávací službu.

  2. Přiřaďte k uživatelskému účtu následující role.

    • Přispěvatel vyhledávací služby

    • Přispěvatel dat indexu vyhledávání

    • Čtečka dat vyhledávacího indexu

Získání koncového bodu

Každá služba Azure AI Vyhledávač má koncový bod, což je jedinečná adresa URL, která identifikuje a poskytuje síťový přístup ke službě. V další části zadáte tento koncový bod pro připojení k vyhledávací službě prostřednictvím kódu programu.

Získání koncového bodu:

  1. Na webu Azure Portal přejděte do vyhledávací služby.

  2. V levém podokně vyberte Přehled.

  3. Poznamenejte si koncový bod, který by měl vypadat takto https://my-service.search.windows.net.

Příprava dat

Ukázková data jsou 36stráňový dokument PDF, který kombinuje bohatý vizuální obsah, jako jsou grafy, infografika a naskenované stránky, s původním textem. Azure Storage poskytuje ukázková data a hostuje úložiště znalostí. Identita spravované služby vyhledávání potřebuje:

  • Oprávnění ke čtení ve službě Azure Storage pro načtení ukázkových dat.

  • Zapište přístup k vytvoření úložiště znalostí. Vyhledávací služba vytvoří kontejner pro oříznuté obrázky během zpracování sady dovedností pomocí názvu, který zadáte v proměnné prostředí.

Pomocí těchto kroků nastavte ukázková data.

  1. Stáhněte si následující ukázkový SOUBOR PDF: sustainable-ai-pdf

  2. Přihlaste se do Azure Portalu.

  3. Ve službě Azure Storage vytvořte nový kontejner s názvem sustainable-ai-pdf.

  4. Nahrajte ukázkový datový soubor.

  5. Přiřaďte role spravované identitě vyhledávací služby:

    • Čtenář dat objektů blob služby Storage pro načítání dat

    • Přispěvatel dat v objektech Blob služby Storage a Přispěvatel dat tabulky služby Storage pro vytvoření úložiště znalostí

Když máte v Azure portálu otevřené stránky Azure Storage, získejte připojovací řetězec, který použijete pro proměnnou prostředí.

  1. V části Nastavení>Koncové body vyberte koncový bod pro ID prostředku. Měl by vypadat podobně jako v následujícím příkladu: /subscriptions/00000000-0000-0000-0000-00000000/resourceGroups/rg-mydemo/providers/Microsoft.Storage/storageAccounts/mydemostorage/blobServices/default.

  2. Přidejte ResourceId= jako předponu k tomuto připojovacímu řetězci. Tuto verzi použijte pro proměnnou prostředí.

    ResourceId=/subscriptions/00000000-0000-0000-0000-00000000/resourceGroups/rg-mydemo/providers/Microsoft.Storage/storageAccounts/mydemostorage/blobServices/default

  3. Pro připojení vytvořená pomocí spravované identity přiřazené uživatelem použijte stejný připojovací řetězec a zadejte identity vlastnost nastavenou na předdefinovanou spravovanou identitu přiřazenou uživatelem.

    "credentials" : { 
        "connectionString" : "ResourceId=/subscriptions/00000000-0000-0000-0000-00000000/resourceGroups/MY-DEMO-RESOURCE-GROUP/providers/Microsoft.Storage/storageAccounts/MY-DEMO-STORAGE-ACCOUNT/;" 
    },
    "identity" : { 
        "@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
        "userAssignedIdentity" : "/subscriptions/00000000-0000-0000-0000-00000000/resourcegroups/MY-DEMO-RESOURCE-GROUP/providers/Microsoft.ManagedIdentity/userAssignedIdentities/MY-DEMO-USER-MANAGED-IDENTITY" 
    }
    

Volba dovedností pro vícemodální indexování

Definice indexu, zdroje dat a indexeru jsou většinou stejné pro všechny scénáře, ale sada dovedností může obsahovat jinou kombinaci dovedností v závislosti na tom, jak chcete extrahovat, blok dat a vektorizovat text a obrázky.

  1. Zvolte dovednosti pro extrakci a segmentaci:

    • Extrakce dokumentů, rozdělení textu
    • Rozložení dokumentu
  2. Volba dovedností pro vektorizaci:

    • Výzva GenAI, vkládání Azure OpenAI
    • Multimodální vkládání ve službě Azure AI Vision

Většina těchto dovedností závisí na nasazeného modelu nebo prostředku Microsoft Foundry. Následující tabulka identifikuje model, který zálohuje jednotlivé dovednosti, a také prostředky a oprávnění, která poskytují přístup k modelu.

Dovednost Využití Model Resource Povolení
Dovednost extrakce dokumentů, dovednost rozdělení textu Extrahovat a rozdělit data na části o pevné velikosti.
Extrakce textu je volná.
Extrakce obrázků je fakturovatelná.
Žádné (integrované) Azure AI Vyhledávač Viz Konfigurace přístupu
Dovednost rozložení dokumentu Extrahujte a rozdělte na základě rozložení dokumentu. Document Intelligence 4.0 Microsoft Foundry Uživatel služeb Cognitive Services
Dovednost Azure AI Vision (Preview) Vektorizace obsahu textu a obrázku Azure AI Vision multimodální verze 4.0 Microsoft Foundry Uživatel služeb Cognitive Services
Dovednost Genai Prompt Použijte LLM pro generování textových popisů obsahu obrázků. GPT-5 nebo GPT-4 Microsoft Foundry Uživatel služeb Cognitive Services
Dovednosti vkládání v Azure OpenAI Vektorizujte text a generujte textové popisy obrázků. text-embedding-3 nebo text-embedding-ada-002 Microsoft Foundry Uživatel služeb Cognitive Services

Využití modelu je fakturovatelné, s výjimkou extrakce textu a rozdělení textu.

Nasazení modelů může být v libovolné podporované oblasti, pokud se vyhledávací služba připojuje přes veřejný koncový bod, privátní připojení, nebo pokud fakturační připojení nemá klíč. Pokud je připojení založené na klíči, připojte prostředek Microsoft Foundry ze stejné oblasti jako Azure AI Vyhledávač.

Nastavení prostředí

Pro účely tohoto kurzu vyžaduje místní připojení klienta REST ke službě Azure AI Vyhledávač koncový bod a klíč rozhraní API. Tyto hodnoty můžete získat na webu Azure Portal. Další metody připojení najdete v tématu Připojení k vyhledávací službě.

Pro ověřená připojení, ke kterým dochází během indexeru a zpracování sady dovedností, používá vyhledávací služba přiřazení rolí, která jste dříve definovali.

  1. Spusťte Visual Studio Code a vytvořte nový soubor.

  2. Zadejte hodnoty proměnných použitých v požadavku:

     @searchUrl = PUT-YOUR-SEARCH-SERVICE-ENDPOINT-HERE
     @storageConnection = PUT-YOUR-STORAGE-CONNECTION-STRING-HERE
     @imageProjectionContainer=sustainable-ai-pdf-images
     @token = PUT-YOUR-PERSONAL-IDENTITY-TOKEN HERE
    

    Ujistěte se, že připojovací řetězec neobsahuje koncový středník nebo uvozovky. Viz Příprava dat na syntaxi připojovacího řetězce.

    Zadejte @imageProjectionContainernázev kontejneru, který je jedinečný v Blob Storage. Azure AI Vyhledávač vytvoří tento kontejner během zpracování dovedností.

    Nápovědu k získání přístupového tokenu najdete v tématu Připojení k Azure AI Vyhledávač. Pokud nemůžete používat role, přečtěte si téma Připojení s klíči.

  3. Tuto proměnnou přidejte, pokud používáte dovednost rozložení dokumentu nebo dovednost Azure AI Vision (používá model verze 2023-04-15):

    @foundryUrl = PUT-YOUR-MULTISERVICE-AZURE-AI-FOUNDRY-ENDPOINT-HERE
    @azureAiVisionModelVersion = 2023-04-15
    
  4. Tyto proměnné přidejte, pokud používáte dovednost GenAI Prompt a dovednost vkládání Azure OpenAI:

     @chatCompletionModelUri = PUT-YOUR-DEPLOYED-MODEL-URI-HERE
     @chatCompletionModelKey = PUT-YOUR-MODEL-KEY-HERE
     @textEmbeddingModelUri = PUT-YOUR-DEPLOYED-MODEL-URI-HERE
     @textEmbeddingModelKey = PUT-YOUR-MODEL-KEY-HERE
    
  5. Uložte soubor s příponou .rest nebo .http. Nápovědu k klientovi REST najdete v tématu Rychlý start: Fulltextové vyhledávání pomocí REST.

Stejný prostředek Foundry může poskytovat Azure AI Vision, Document Intelligence, model dokončování chatu a model vkládání textu. Ujistěte se, že oblast podporuje modely, které potřebujete. Pokud je oblast plně vytížena, možná budete muset vytvořit nový zdroj pro nasazení potřebných modelů.

Nastavení potrubí

Kanál indexeru se skládá ze čtyř součástí: zdroj dat, index, sada dovedností a indexer.

Stažení souborů REST

Úložiště GitHubu pro azure-search-rest-samples obsahuje soubory REST, které vytvářejí kanál a dotazují na index.

Návod

Najděte ukázku Pythonu v úložišti azure-ai-search-multimodal-sample na GitHubu.

Vytvoření zdroje dat

Vytvoření zdroje dat (REST) vytvoří připojení ke zdroji dat, které určuje, jaká data se mají indexovat.

POST {{searchUrl}}/datasources?api-version=2026-08-01-preview   HTTP/1.1
  Content-Type: application/json
  Authorization: Bearer {{token}}

{
   "name":"demo-multimodal-ds",
   "description":null,
   "type":"azureblob",
   "subtype":null,
   "credentials":{
      "connectionString":"{{storageConnection}}"
   },
   "container":{
      "name":"sustainable-ai-pdf",
      "query":null
   },
   "dataChangeDetectionPolicy":null,
   "dataDeletionDetectionPolicy":null,
   "encryptionKey":null,
   "identity":null
}

Odešlete požadavek. Odpověď by měla vypadat nějak takto:

HTTP/1.1 201 Created
Transfer-Encoding: chunked
Content-Type: application/json; odata.metadata=minimal; odata.streaming=true; charset=utf-8
Location: https://<YOUR-SEARCH-SERVICE-NAME>.search.windows-int.net:443/datasources('demo-multimodal-ds')?api-version=2026-08-01-preview -Preview
Server: Microsoft-IIS/10.0
Strict-Transport-Security: max-age=2592000, max-age=15724800; includeSubDomains
Preference-Applied: odata.include-annotations="*"
OData-Version: 4.0
request-id: 4eb8bcc3-27b5-44af-834e-295ed078e8ed
elapsed-time: 346
Date: Sat, 26 Apr 2026 21:25:24 GMT
Connection: close

{
  "name": "demo-multimodal-ds",
  "description": null,
  "type": "azureblob",
  "subtype": null,
  "indexerPermissionOptions": [],
  "credentials": {
    "connectionString": null
  },
  "container": {
    "name": "sustainable-ai-pdf",
    "query": null
  },
  "dataChangeDetectionPolicy": null,
  "dataDeletionDetectionPolicy": null,
  "encryptionKey": null,
  "identity": null
}

Vytvoření indexu

Vytvoření indexu (REST) vytvoří ve vyhledávací službě index. Index je podobný pro všechny sady dovedností s následujícími výjimkami:

  • Tato vectorizers část definuje způsob vektorizace textu dotazu v době hledání. Musí používat stejného zprostředkovatele vkládání a modelovou řadu používanou sadou dovedností (multimodální sada dovedností Azure AI Vision nebo vkládání textu Azure OpenAI), aby vektory dotazů a indexované vektory byly kompatibilní.

  • Hodnota content_embedding pole dimensions musí přesně odpovídat velikosti vektoru vytvořené modelem vkládání (například 1024 pro azure AI Vision multimodal nebo 3072 pro text-embedding-3-large). Neshoda může způsobit selhání indexování nebo dotazů.

  • U komplexních typů musí být názvy vnořených polí v indexu přesně shodné s názvy výstupů obohacení (včetně velikosti písmen). Azure AI Vyhledávač nemůže mapovat vnořené dílčí pole na různé názvy. Použijte location_metadata, bounding_polygonsa page_number pro pole, která přijímají výstupy rozdělení textu, a locationMetadataboundingPolygonspro pageNumber pole, která přijímají výstupy rozložení dokumentu.

Tady jsou definice indexu pro každou kombinaci dovedností.

Tento model používá:

{
   "name":"demo-multimodal-1-index",
   "fields":[
      {
         "name":"content_id",
         "type":"Edm.String",
         "retrievable":true,
         "key":true,
         "analyzer":"keyword"
      },
      {
         "name":"text_document_id",
         "type":"Edm.String",
         "searchable":false,
         "filterable":true,
         "retrievable":true,
         "stored":true,
         "sortable":false,
         "facetable":false
      },
      {
         "name":"document_title",
         "type":"Edm.String",
         "searchable":true
      },
      {
         "name":"image_document_id",
         "type":"Edm.String",
         "filterable":true,
         "retrievable":true
      },
      {
         "name":"content_text",
         "type":"Edm.String",
         "searchable":true,
         "retrievable":true
      },
      {
         "name":"content_embedding",
         "type":"Collection(Edm.Single)",
         "dimensions":1024,
         "searchable":true,
         "retrievable":true,
         "vectorSearchProfile":"hnsw"
      },
      {
         "name":"content_path",
         "type":"Edm.String",
         "searchable":false,
         "retrievable":true
      },
      {
         "name":"location_metadata",
         "type":"Edm.ComplexType",
         "fields":[
            {
               "name":"page_number",
               "type":"Edm.Int32",
               "searchable":false,
               "retrievable":true
            },
            {
               "name":"bounding_polygons",
               "type":"Edm.String",
               "searchable":false,
               "retrievable":true,
               "filterable":false,
               "sortable":false,
               "facetable":false
            }
         ]
      }
   ],
   "vectorSearch":{
      "profiles":[
         {
            "name":"hnsw",
            "algorithm":"defaulthnsw",
            "vectorizer":"demo-vectorizer"
         }
      ],
      "algorithms":[
         {
            "name":"defaulthnsw",
            "kind":"hnsw",
            "hnswParameters":{
               "m":4,
               "efConstruction":400,
               "metric":"cosine"
            }
         }
      ],
      "vectorizers":[
         {
            "name":"demo-vectorizer",
            "kind":"aiServicesVision",
            "aiServicesVisionParameters":{
               "resourceUri":"{{foundryUrl}}",
               "authIdentity":null,
               "modelVersion":"{{azureAiVisionModelVersion}}"
            }
         }
      ]
   },
   "semantic":{
      "defaultConfiguration":"semanticconfig",
      "configurations":[
         {
            "name":"semanticconfig",
            "prioritizedFields":{
               "titleField":{
                  "fieldName":"document_title"
               },
               "prioritizedContentFields":[
                  
               ],
               "prioritizedKeywordsFields":[
                  
               ]
            }
         }
      ]
   }
}

Klíčové body:

  • content_embedding je jediné vektorové pole a ukládá vektory pro obsah textu i obrázku. Musí být nakonfigurovaná s odpovídajícími rozměry pro model vkládání, například 3072 pro text-embedding-3-large, a profil vektorového vyhledávání.

  • content_path je cesta každého obrázku v úložišti znalostí.

  • location_metadata nebo locationMetadata zachycuje ohraničující polygon a metadata čísel stránek pro každý normalizovaný obraz, což umožňuje přesné prostorové vyhledávání nebo překrytí v uživatelském rozhraní. Názvy polí se liší podle toho, jak se informace extrahují.

  • Pro extrakci obsahu na základě funkce rozdělení textu. Metadata o umístění jsou podporována pouze pro soubory PDF. Kromě toho pro dovednost rozdělování textu musíte zahrnout dovednost Shaper pro zachycení metadata paměťového umístění a jeho reprezentaci v dokumentovém stromu. Dovednost Shaper je také zodpovědná za přidání názvu kontejneru úložiště znalostí do .content_path

Vytvoření sady dovedností pro extrakci, vytváření bloků dat a vektorizaci

Vytvoření sady dovedností (REST) vytvoří sadu dovedností ve vyhledávací službě. Sada dovedností definuje operace, které před indexováním extrahují, blokují a vektorizují obsah.

Existují čtyři vzory sady dovedností. Každá z nich ukazuje strategii extrakce a vytváření bloků dat spárovanou se strategií vektorizace. V každém vzoru existují dva klíčové rozdíly: složení sady dovedností a indexProjections. Projekce se liší v závislosti na výstupech jednotlivých dovedností vkládání.

Všechny čtyři vzory zahrnují dovednost Shaper. Výstup dovednosti Shaper vytváří normalizovanou cestu obrázků v úložišti znalostí a metadatech umístění (číslo stránky a ohraničující mnohoúhelníky).

Tento model používá:

{
   "name":"demo-multimodal-skillset",
   "description":"A test skillset",
   "skills":[
      {
         "@odata.type":"#Microsoft.Skills.Util.DocumentExtractionSkill",
         "name":"document-extraction-skill",
         "description":"Document extraction skill to extract text and images from documents",
         "parsingMode":"default",
         "dataToExtract":"contentAndMetadata",
         "configuration":{
            "imageAction":"generateNormalizedImages",
            "normalizedImageMaxWidth":2000,
            "normalizedImageMaxHeight":2000
         },
         "context":"/document",
         "inputs":[
            {
               "name":"file_data",
               "source":"/document/file_data"
            }
         ],
         "outputs":[
            {
               "name":"content",
               "targetName":"extracted_content"
            },
            {
               "name":"normalized_images",
               "targetName":"normalized_images"
            }
         ]
      },
      {
         "@odata.type":"#Microsoft.Skills.Text.SplitSkill",
         "name":"split-skill",
         "description":"Split skill to chunk documents",
         "context":"/document",
         "defaultLanguageCode":"en",
         "textSplitMode":"pages",
         "maximumPageLength":2000,
         "pageOverlapLength":200,
         "unit":"characters",
         "inputs":[
            {
               "name":"text",
               "source":"/document/extracted_content",
               "inputs":[
                  
               ]
            }
         ],
         "outputs":[
            {
               "name":"textItems",
               "targetName":"pages"
            }
         ]
      },
      {
         "@odata.type":"#Microsoft.Skills.Vision.VectorizeSkill",
         "name":"text-embedding-skill",
         "description":"Vision Vectorization skill for text",
         "context":"/document/pages/*",
         "modelVersion":"{{azureAiVisionModelVersion}}",
         "inputs":[
            {
               "name":"text",
               "source":"/document/pages/*"
            }
         ],
         "outputs":[
            {
               "name":"vector",
               "targetName":"text_vector"
            }
         ]
      },
      {
         "@odata.type":"#Microsoft.Skills.Vision.VectorizeSkill",
         "name":"image-embedding-skill",
         "description":"Vision Vectorization skill for images",
         "context":"/document/normalized_images/*",
         "modelVersion":"{{azureAiVisionModelVersion}}",
         "inputs":[
            {
               "name":"image",
               "source":"/document/normalized_images/*"
            }
         ],
         "outputs":[
            {
               "name":"vector",
               "targetName":"image_vector"
            }
         ]
      },
      {
         "@odata.type":"#Microsoft.Skills.Util.ShaperSkill",
         "name":"shaper-skill",
         "description":"Shaper skill to reshape the data to fit the index schema",
         "context":"/document/normalized_images/*",
         "inputs":[
            {
               "name":"normalized_images",
               "source":"/document/normalized_images/*",
               "inputs":[
                  
               ]
            },
            {
               "name":"imagePath",
               "source":"='{{imageProjectionContainer}}/'+$(/document/normalized_images/*/imagePath)",
               "inputs":[
                  
               ]
            },
            {
               "name":"dataUri",
               "source":"='data:image/jpeg;base64,'+$(/document/normalized_images/*/data)",
               "inputs":[
                  
               ]
            },
            {
               "name":"location_metadata",
               "sourceContext":"/document/normalized_images/*",
               "inputs":[
                  {
                     "name":"page_number",
                     "source":"/document/normalized_images/*/page_number"
                  },
                  {
                     "name":"bounding_polygons",
                     "source":"/document/normalized_images/*/bounding_polygon"
                  }
               ]
            }
         ],
         "outputs":[
            {
               "name":"output",
               "targetName":"new_normalized_images"
            }
         ]
      }
   ],
   "cognitiveServices":{
      "@odata.type":"#Microsoft.Azure.Search.AIServicesByIdentity",
      "subdomainUrl":"{{foundryUrl}}",
      "identity":null
   },
   "indexProjections":{
      "selectors":[
         {
            "targetIndexName":"demo-multimodal-index",
            "parentKeyFieldName":"text_document_id",
            "sourceContext":"/document/pages/*",
            "mappings":[
               {
                  "name":"content_embedding",
                  "source":"/document/pages/*/text_vector"
               },
               {
                  "name":"content_text",
                  "source":"/document/pages/*"
               },
               {
                  "name":"document_title",
                  "source":"/document/document_title"
               }
            ]
         },
         {
            "targetIndexName":"demo-multimodal-index",
            "parentKeyFieldName":"image_document_id",
            "sourceContext":"/document/normalized_images/*",
            "mappings":[
               {
                  "name":"content_embedding",
                  "source":"/document/normalized_images/*/image_vector"
               },
               {
                  "name":"content_path",
                  "source":"/document/normalized_images/*/new_normalized_images/imagePath"
               },
               {
                  "name":"location_metadata",
                  "source":"/document/normalized_images/*/new_normalized_images/location_metadata"
               },
               {
                  "name":"document_title",
                  "source":"/document/document_title"
               }
            ]
         }
      ],
      "parameters":{
         "projectionMode":"skipIndexingParentDocuments"
      }
   },
   "knowledgeStore":{
      "storageConnectionString":"{{storageConnection}}",
      "identity":null,
      "projections":[
         {
            "files":[
               {
                  "storageContainer":"{{imageProjectionContainer}}",
                  "source":"/document/normalized_images/*"
               }
            ]
         }
      ]
   }
}

Spusťte indexer

Vytvořte indexer ve vaší vyhledávací službě. Indexer se připojí ke zdroji dat, načte data, spustí sadu dovedností a indexuje obohacený obsah.

### Create and run an indexer
POST {{searchUrl}}/indexers?api-version=2026-08-01-preview   HTTP/1.1
  Content-Type: application/json
  Authorization: Bearer {{token}}

{
  "name": "demo-multimodal-indexer",
  "dataSourceName": "demo-multimodal-ds",
  "targetIndexName": "demo-multimodal-index",
  "skillsetName": "demo-multimodal-skillset",
  "parameters": {
    "maxFailedItems": -1,
    "maxFailedItemsPerBatch": 0,
    "batchSize": 1,
    "configuration": {
      "allowSkillsetToReadFileData": true
    }
  },
  "fieldMappings": [
    {
      "sourceFieldName": "metadata_storage_name",
      "targetFieldName": "document_title"
    }
  ],
  "outputFieldMappings": []
}

Spouštění dotazů

Hledání můžete začít hned, jak se načte první dokument. Jedná se o nespecifikovaný fulltextový vyhledávací dotaz, který vrátí všechna pole označená jako zobrazitelná v indexu spolu s počtem dokumentů.

Návod

Pole content_embedding obsahuje více než tisíc dimenzí. select Pomocí příkazu vyloučíte toto pole z odpovědi tím, že explicitně zvolíte všechna ostatní pole. Upravte příkaz select tak, aby odpovídal polím (location_metadata vs locationMetadata. ) v indexu. Tady je příklad: "select": "content_id, text_document_id, document_title, image_document_id, content_text,

### Query the index
POST {{searchUrl}}/indexes/demo-multimodal-index/docs/search?api-version=2026-08-01-preview   HTTP/1.1
  Content-Type: application/json
  Authorization: Bearer {{token}}
  
  {
    "search": "*",
    "count": true
  }

Odešlete požadavek. Odpověď by měla vypadat nějak takto:

HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: application/json; odata.metadata=minimal; odata.streaming=true; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-IIS/10.0
Strict-Transport-Security: max-age=2592000, max-age=15724800; includeSubDomains
Preference-Applied: odata.include-annotations="*"
OData-Version: 4.0
request-id: 712ca003-9493-40f8-a15e-cf719734a805
elapsed-time: 198
Date: Wed, 30 Apr 2025 23:20:53 GMT
Connection: close

{
  "@odata.count": 100,
  "@search.nextPageParameters": {
    "search": "*",
    "count": true,
    "skip": 50
  },
  "value": [
  ],
  "@odata.nextLink": "https://<YOUR-SEARCH-SERVICE-NAME>.search.windows.net/indexes/demo-multimodal-index/docs/search?api-version=2026-08-01-preview "
}

Ve odpovědi je vráceno 100 dokumentů.

Dotaz na obsah jen pro obrázky

Pomocí filtru můžete vyloučit veškerý obsah, který není obrázkem. Parametr $filter funguje jenom u polí, která byla při vytváření indexu označena jako filtrovatelná.

U filtrů můžete také použít logické operátory (a nebo ne) a relační operátory (eq, ne, gt, lt, ge, le). Při porovnávání řetězců se rozlišují malá a velká písmena. Další informace a příklady najdete v tématu Příklady jednoduchých vyhledávacích dotazů.

POST {{searchUrl}}/indexes/demo-multimodal-index/docs/search?api-version=2026-08-01-preview   HTTP/1.1
  Content-Type: application/json
  Authorization: Bearer {{token}}
  
  {
    "search": "*",
    "count": true,
    "filter": "image_document_id ne null"
  }

Výsledky hledání obsahující obsah jen pro obrázky nemají textový obsah, takže můžete vyloučit textová pole.

Pole content_embedding obsahuje vysoce dimenzionální vektory (obvykle 1 000 až 3 000 dimenzí) pro text stránky i slovní popisy obrázků. Vyloučí toto pole z dotazu.

Pole content_path obsahuje relativní cestu k souboru obrázku v určeném kontejneru projekce obrázku. Toto pole se generuje pouze pro obrázky extrahované z souborů PDF, pokud imageAction je nastavena na generateNormalizedImageshodnotu , a lze je namapovat z rozšířeného dokumentu ze zdrojového pole /document/normalized_images/*/imagePath.

Pro kontext PDF extrahovaný pomocí dovednosti Rozdělení textu přidá dovednost Shaper název kontejneru do cesty a metadat umístění.

Dotaz na text nebo obrázky s obsahem souvisejícím s energií, vrácení ID obsahu, nadřazeného dokumentu a textu (pouze pro bloky textu) a cestu k obsahu, kde je obrázek uložen v úložišti znalostí (vyplněný pouze pro obrázky).

Tento dotaz je pouze fulltextové vyhledávání, ale můžete provádět dotaz na vektorovém poli pro vyhledávání na základě podobnosti.

POST {{searchUrl}}/indexes/demo-multimodal-index/docs/search?api-version=2026-08-01-preview   HTTP/1.1
  Content-Type: application/json
  Authorization: Bearer {{token}}
  

  {
    "search": "energy",
    "count": true
  }

Resetování a opětovné spuštění

Indexery je možné resetovat, aby se vymazala vysoká hranice, což umožňuje úplné opětovné sestavení. Následující požadavky POST jsou určené k resetování a následné opětovné spuštění.

### Reset the indexer
POST {{searchUrl}}/indexers/demo-multimodal-indexer/reset?api-version=2026-08-01-preview   HTTP/1.1
  Content-Type: application/json
  Authorization: Bearer {{token}}
### Run the indexer
POST {{searchUrl}}/indexers/demo-multimodal-indexer/run?api-version=2026-08-01-preview   HTTP/1.1
  Content-Type: application/json
  Authorization: Bearer {{token}}
### Check indexer status 
GET {{searchUrl}}/indexers/demo-multimodal-indexer/status?api-version=2026-08-01-preview   HTTP/1.1
  Content-Type: application/json
  Authorization: Bearer {{token}}

Zobrazení obrázků v úložišti znalostí

Vzpomeňte si, že sada dovedností v tomto kurzu vytvoří úložiště znalostí pro obsah obrázků extrahovaný z PDF. Po spuštění indexeru by kontejner sustainable-ai-pdf-images měl mít přibližně 23 imagí.

Tyto obrázky nemůžete vrátit ve vyhledávacím dotazu. Můžete ale napsat kód aplikace, který volá rozhraní API služby Azure Storage, aby načetl obrázky, pokud je potřebujete pro uživatelské prostředí. Pole content_path má cestu ke každému obrázku.

Zobrazení obrázků v prohlížeči úložiště:

  1. Přihlaste se k webu Azure Portal a přejděte ke svému účtu úložiště.

  2. V prohlížeči úložiště rozbalte kontejner sustainable-ai-pdf-images.

  3. Vyberte obrázek.

  4. V nabídce úplně vpravo (...) vyberte Zobrazit/Upravit.

Snímek obrazovky s obrázkem extrahovaným z dokumentu PDF

Vyčistěte zdroje

Když pracujete ve vlastním předplatném, je vhodné dokončit projekt odebráním prostředků, které už nepotřebujete. Prostředky, které zůstaly spuštěné, vám můžou stát peníze.

Na webu Azure Portal vyberte v levém podokně všechny prostředky nebo skupiny prostředků a vyhledejte a spravujte prostředky. Prostředky můžete odstranit jednotlivě nebo odstranit skupinu prostředků a odebrat tak všechny prostředky najednou.