Delen via


Zelfstudie: Multimodale inhoud extraheren, segmenteren en insluiten

In deze zelfstudie bouwt u een multimodale indexeerpijplijn waarmee deze taken worden uitgevoerd:

  • Tekst en afbeeldingen extraheren en segmenten
  • Tekst en afbeeldingen vectoriseren voor overeenkomsten zoeken
  • Bijgesneden afbeeldingen verzenden naar een kennisarchief voor het ophalen door uw app

In deze zelfstudie worden meerdere vaardigheidsets naast elkaar getoond om verschillende manieren te illustreren om multimodale inhoud te extraheren, te segmenteren en te vectoriseren.

Vereiste voorwaarden

Multimodale indexering wordt geïmplementeerd via vaardigheden die AI-modellen en API's aanroepen in een indexeerpijplijn. Modelvereisten variëren, afhankelijk van de vaardigheden die voor elke taak zijn gekozen.

Aanbeveling

Als u deze zelfstudie over de gratis laag wilt voltooien, gebruikt u een kleiner document met minder afbeeldingen. In deze zelfstudie worden alleen Foundry-modellen gebruikt, maar u kunt aangepaste vaardigheden maken om andere modellen te gebruiken.

Toegang configureren

Voordat u begint, moet u beschikken over machtigingen voor toegang tot inhoud en bewerkingen in Azure AI Search. In deze quickstart wordt Microsoft Entra ID gebruikt voor verificatie en op rollen gebaseerde toegang voor autorisatie. U moet eigenaar of beheerder van gebruikerstoegang zijn om rollen toe te wijzen. Als rollen niet haalbaar zijn, gebruik dan sleutelgebaseerde authenticatie in plaats daarvan.

De aanbevolen op rollen gebaseerde toegang configureren:

  1. Schakel op rollen gebaseerde toegang in voor uw zoekservice.

  2. Wijs de volgende rollen toe aan uw gebruikersaccount.

    • Inzender voor zoekservice

    • Inzender voor zoekindexgegevens

    • Zoekindexgegevenslezer

Eindpunt ophalen

Elke Azure AI Search-service heeft een eindpunt, een unieke URL die netwerktoegang tot de service identificeert en biedt. In een latere sectie geeft u dit eindpunt op om programmatisch verbinding te maken met uw zoekservice.

Volg deze stappen om het eindpunt te verkrijgen:

  1. Meld u aan bij Azure Portal en selecteer uw zoekservice.

  2. Selecteer Overzicht in het linkerdeelvenster.

  3. Noteer het eindpunt, dat eruit zou moeten zien als https://my-service.search.windows.net.

Gegevens voorbereiden

Voorbeeldgegevens zijn een PDF-document met 36 pagina's dat uitgebreide visuele inhoud combineert, zoals grafieken, infographics en gescande pagina's, met oorspronkelijke tekst. Azure Storage biedt de voorbeeldgegevens en fungeert als host voor het kennisarchief. Een beheerde identiteit voor een zoekservice heeft het volgende nodig:

  • Leestoegang tot Azure Storage om de voorbeeldgegevens op te halen.

  • Schrijf toegang om het kennisarchief te maken. De zoekservice maakt tijdens het verwerken van de vaardighedenset de container voor de bijgesneden afbeeldingen, met behulp van de naam die u opgeeft in een omgevingsvariabele.

Volg deze stappen om de voorbeeldgegevens in te stellen.

  1. Download het volgende pdf-voorbeeld: sustainable-ai-pdf

  2. Meld u aan bij het Azure-portaal.

  3. Maak in Azure Storage een nieuwe container met de naam sustainable-ai-pdf.

  4. Upload het voorbeeldgegevensbestand.

  5. Rollen toewijzen aan de beheerde identiteit van de zoekservice:

    • Opslagblobgegevenslezer voor het ophalen van gegevens

    • Storage Blob Data Contributor en Storage Table Data Contributor voor het maken van de kennisopslag.

Terwijl u de Azure Storage-pagina's hebt geopend in Azure Portal, haalt u een verbindingsreeks op voor de omgevingsvariabele.

  1. Selecteer onderInstellingeneindpunten> het eindpunt voor resource-id. Het moet er ongeveer uitzien als in het volgende voorbeeld: /subscriptions/00000000-0000-0000-0000-00000000/resourceGroups/rg-mydemo/providers/Microsoft.Storage/storageAccounts/mydemostorage/blobServices/default.

  2. Voeg ResourceId= toe aan deze verbindingsreeks. Gebruik deze versie voor uw omgevingsvariabele.

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

  3. Voor verbindingen die zijn gemaakt met een door de gebruiker toegewezen beheerde identiteit, gebruikt u dezelfde verbindingsreeks en geeft u een identity eigenschap op die is ingesteld op een vooraf gedefinieerde door de gebruiker toegewezen beheerde identiteit.

    "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" 
    }
    

Vaardigheden kiezen voor multimodale indexering

De definities van de index, gegevensbron en indexeerfunctie zijn meestal hetzelfde voor alle scenario's, maar de vaardighedenset kan een andere combinatie van vaardigheden bevatten, afhankelijk van hoe u tekst en afbeeldingen wilt extraheren, segmenteren en vectoriseren.

  1. Kies vaardigheden voor extractie en segmentering:

    • Documentextractie, tekst splitsen
    • Documentindeling
  2. Kies vaardigheden voor vectorisatie:

    • GenAI-prompt, Azure OpenAI Insluiten
    • Multimodale insluiting van Azure AI Vision

De meeste van deze vaardigheden zijn afhankelijk van een geïmplementeerd model of een Microsoft Foundry-resource. In de volgende tabel worden het ondersteunende model van elke vaardigheid, evenals de resource en machtigingen die toegang tot het model geven, geïdentificeerd.

Vaardigheid Usage Model Hulpbron Permissions
Vaardigheid documentextractie, vaardigheid tekst splitsen Extraheren en segmenteren op basis van een vaste grootte.
Tekstextractie is gratis.
Het extraheren van afbeeldingen kan worden gefactureerd.
Geen (ingebouwd) Azure AI Search Zie Toegang configureren
Documentindeling vaardigheid Extraheren en segmenten op basis van de documentindeling. Document Intelligence 4.0 Microsoft Foundry Cognitive Services-gebruiker
Azure AI Vision-vaardigheid Tekst- en afbeeldingsinhoud vectoriseren. Azure AI Vision multimodal 4.0 Microsoft Foundry Cognitive Services-gebruiker
GenAI Prompt vaardigheid Roep een LLM aan om tekstbeschrijvingen van afbeeldingsinhoud te genereren. GPT-5 of GPT-4 Microsoft Foundry Cognitive Services-gebruiker
Vaardigheid voor insluiten van Azure OpenAI Vectoriseer tekst en genereer tekstuele afbeeldingsbeschrijvingen. Tekst-insluiten-3 of tekst-insluiten-ada-002 Microsoft Foundry Cognitive Services-gebruiker

Modelgebruik is factureerbaar, met uitzondering van tekstextractie en tekstsplitsing.

Modelimplementaties kunnen zich in elke ondersteunde regio bevinden als de zoekservice verbinding maakt via het openbare eindpunt, een privéverbinding of als de factureringsverbinding sleutelloos is. Als de verbinding op basis van sleutels is, voegt u een Microsoft Foundry-resource toe vanuit dezelfde regio als Azure AI Search.

Uw omgeving instellen

Voor deze zelfstudie is voor uw lokale REST-clientverbinding met Azure AI Search een eindpunt en een API-sleutel vereist. U kunt deze waarden ophalen in Azure Portal. Zie Verbinding maken met een zoekservice voor andere verbindingsmethoden.

Voor geverifieerde verbindingen die optreden tijdens de verwerking van indexeerfuncties en vaardighedensets, gebruikt de zoekservice de roltoewijzingen die u eerder hebt gedefinieerd.

  1. Start Visual Studio Code en maak een nieuw bestand.

  2. Geef waarden op voor variabelen die in de aanvraag worden gebruikt:

     @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
    

    Zorg ervoor dat de connectiestring @storageConnection geen afsluitende puntkomma of aanhalingstekens bevat. Zie Uw gegevens voorbereiden voor de syntaxis van de verbindingsreeks.

    Geef @imageProjectionContainereen containernaam op die uniek is in blobopslag. Azure AI Search maakt deze container tijdens het verwerken van vaardigheden.

    Zie Verbinding maken met Azure AI Search voor hulp bij het verkrijgen van een toegangstoken. Zie Verbinding maken met sleutels als u geen rollen kunt gebruiken.

  3. Voeg deze variabele toe als u de vaardigheid Documentindeling of de Azure AI Vision-vaardigheid gebruikt (gebruikt modelversie 2023-04-15):

    @foundryUrl = PUT-YOUR-MULTISERVICE-AZURE-AI-FOUNDRY-ENDPOINT-HERE
    @azureAiVisionModelVersion = 2023-04-15
    
  4. Voeg deze variabelen toe als u de vaardigheid GenAI-prompt en de vaardigheid Azure OpenAI Embedding gebruikt:

     @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. Sla het bestand op met behulp van een .rest of .http bestandsextensie. Zie quickstart: Zoeken in volledige tekst met REST voor hulp bij de REST-client.

Dezelfde Foundry-resource kan Azure AI Vision, Document Intelligence, een voltooiingsmodel voor chats en een insluitmodel voor tekst bieden. Zorg ervoor dat de regio de modellen ondersteunt die u nodig hebt. Als een regio capaciteit heeft, moet u mogelijk een nieuwe resource maken om de benodigde modellen te implementeren.

Een pijplijn instellen

Een indexeerpijplijn bestaat uit vier onderdelen: gegevensbron, index, vaardighedenset en indexeerfunctie.

REST-bestanden downloaden

De GitHub-opslagplaats azure-search-rest-samples heeft REST-bestanden die de pijplijn maken en een query uitvoeren op de index.

Een gegevensbron maken

Een gegevensbronverbinding maken (REST) maakt een gegevensbronverbinding waarmee wordt aangegeven welke gegevens moeten worden geïndexeert.

POST {{searchUrl}}/datasources?api-version=2025-11-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
}

Verzend de aanvraag. Het antwoord moet er als volgt uitzien:

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=2025-11-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
}

Een index maken

Index maken (REST) maakt een index voor uw zoekservice. De index is vergelijkbaar met alle vaardighedensets, met de volgende uitzonderingen:

  • In vectorizers de sectie wordt gedefinieerd hoe querytekst tijdens het zoeken wordt gevectoriseerd. Deze moet dezelfde insluitingsprovider en modelfamilie gebruiken die wordt gebruikt door de vaardighedenset (Azure AI Vision multimodal of Azure OpenAI text embedding), zodat queryvectoren en geïndexeerde vectoren compatibel zijn.

  • De content_embedding veldwaarde dimensions moet exact overeenkomen met de vectorgrootte die wordt geproduceerd door het insluitmodel (bijvoorbeeld 1024 voor Azure AI Vision multimodal of 3072 voor text-embedding-3-large). nl-NL: Een niet-overeenstemming kan leiden tot indexerings- of queryfouten.

  • Voor complexe typen moeten geneste veldnamen in de index exact overeenkomen met de namen van de verrijkingsuitvoer (inclusief hoofdletters). Azure AI Search kan geneste subvelden niet toewijzen aan verschillende namen. Gebruik location_metadata, bounding_polygons, en page_number voor velden die uitvoer van tekstsplitsing accepteren, en locationMetadata, boundingPolygons, en pageNumber voor velden die uitvoer van documentindeling accepteren.

Hier volgen de indexdefinities voor elke combinatie van vaardigheden.

In dit patroon wordt het volgende gebruikt:

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

Belangrijke punten:

  • content_embedding is het enige vectorveld en slaat vectoren op voor zowel tekst- als afbeeldingsinhoud. Deze moet worden geconfigureerd met de juiste dimensies voor het insluitmodel, zoals 3072 voor tekst-insluiten-3-groot en een vectorzoekprofiel.

  • content_path is het pad van elke afbeelding in het kennisarchief.

  • location_metadata of locationMetadata legt begrenzingsmetagegevens van veelhoeken en paginanummers vast voor elke genormaliseerde afbeelding, waardoor nauwkeurige ruimtelijke zoek- of UI-overlays mogelijk zijn. De veldnamen variëren op basis van hoe de gegevens worden geëxtraheerd.

  • Voor inhoudextractie op basis van de vaardigheid Tekst splitsen: locatiemetagegevens worden alleen ondersteund voor PDF-bestanden. Bovendien moet u voor de Text Split skill een Shaper-skill opnemen voor het vastleggen van in-memory locatie metadata en deze weergeven in de documentstructuur. De Shaper-functie is ook verantwoordelijk voor het toevoegen van de containernaam van de kennisopslag aan de content_path.

Een vaardighedenset maken voor extractie, segmentering en vectorisatie

Create Skillset (REST) maakt een vaardighedenset in uw zoekservice. Een vaardighedenset definieert de bewerkingen waarmee inhoud wordt geëxtraheerd, gesegmenteerd en gevectoreerd voordat u indexeert.

Er zijn vier vaardighedensetpatronen. Elke methode demonstreert een extractie- en segmenteringsstrategie, gekoppeld aan een vectorisatiestrategie. Er zijn twee belangrijke verschillen in elk patroon: samenstelling van vaardighedenset en indexProjections. Prognoses variëren op basis van de outputs van elke embedding skill.

Alle vier de patronen bevatten de Shaper-vaardigheid. Uitvoer van de Shaper-skill creëert het genormaliseerde pad van afbeeldingen in het kennisarchief en de locatie metadata (paginanummer en begrenzingspolygonen).

In dit patroon wordt het volgende gebruikt:

{
   "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/*"
               }
            ]
         }
      ]
   }
}

De indexeerfunctie uitvoeren

Indexeerfunctie maken maakt een indexeerfunctie voor uw zoekservice. Een indexeerfunctie maakt verbinding met de gegevensbron, laadt gegevens, voert een vaardighedenset uit en indexeert de verrijkte inhoud.

### Create and run an indexer
POST {{searchUrl}}/indexers?api-version=2025-11-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": []
}

Queries uitvoeren

Zodra het eerste document is geladen, kunt u meteen beginnen met zoeken. Dit is een niet-opgegeven zoekquery voor volledige tekst die alle velden retourneert die zijn gemarkeerd als ophaalbaar in de index, samen met een aantal documenten.

Aanbeveling

Het content_embedding veld bevat meer dan duizend dimensies. Gebruik een select instructie om dat veld uit te sluiten van het antwoord door expliciet alle andere velden te kiezen. Pas de select-instructie aan zodat deze overeenkomt met de velden (location_metadata vs locationMetadata) in uw index. Hier volgt een voorbeeld: "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=2025-11-01-preview   HTTP/1.1
  Content-Type: application/json
  Authorization: Bearer {{token}}
  
  {
    "search": "*",
    "count": true
  }

Verzend de aanvraag. Het antwoord moet er als volgt uitzien:

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=2025-11-01-preview "
}

Er worden 100 documenten geretourneerd in het antwoord.

Query's uitvoeren op inhoud met alleen afbeeldingen

Gebruik een filter om alle niet-afbeeldingsinhoud uit te sluiten. De $filter parameter werkt alleen op velden die tijdens het maken van de index zijn gemarkeerd als filterbaar.

Voor filters kunt u ook logische operators (en, of niet) en vergelijkingsoperators (eq, ne, gt, lt, ge, le) gebruiken. Tekenreeksvergelijkingen zijn hoofdlettergevoelig. Zie Voorbeelden van eenvoudige zoekquery's voor meer informatie en voorbeelden.

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

Zoekresultaten met inhoud die alleen-afbeeldingen bevatten, bevatten geen tekstinhoud, zodat u tekstvelden kunt uitsluiten.

Het content_embedding veld bevat hoogdimensionale vectoren (meestal 1.000 tot 3.000 dimensies) voor zowel paginatekst als verbaalde afbeeldingsbeschrijvingen. Sluit dit veld uit van de query.

Het content_path veld bevat het relatieve pad naar het afbeeldingsbestand in de aangewezen container voor afbeeldingsprojectie. Dit veld wordt alleen gegenereerd voor afbeeldingen die uit PDF-bestanden zijn geëxtraheerd wanneer imageAction is ingesteld op generateNormalizedImages, en kan worden toegewezen vanuit het verrijkte document van het bronveld /document/normalized_images/*/imagePath.

Voor PDF-context die is geëxtraheerd met behulp van de vaardigheid Tekst splitsen, voegt de Shaper-vaardigheid de containernaam toe aan het pad en de metagegevens van de locatie.

Query's uitvoeren op tekst of afbeeldingen met inhoud met betrekking tot energie, het retourneren van de inhouds-id, het bovenliggende document en de tekst (alleen ingevuld voor tekstsegmenten) en het inhoudspad waarin de afbeelding wordt opgeslagen in het kennisarchief (alleen ingevuld voor afbeeldingen).

Deze query is alleen zoeken in volledige tekst, maar u kunt het vectorveld doorzoeken op overeenkomsten.

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

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

Opnieuw instellen en uitvoeren

Indexen kunnen opnieuw worden ingesteld om het hoogwatermerk te wissen, waardoor een volledige heropbouw mogelijk maakt. De volgende POST-aanvragen zijn voor opnieuw instellen, gevolgd door opnieuw uitvoeren.

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

Afbeeldingen weergeven in het kennisarchief

Houd er rekening mee dat de vaardigheden in deze handleiding een kennisarchief creëren voor afbeeldingsinhoud die is geëxtraheerd uit de PDF. Nadat de indexer is uitgevoerd, moet de container sustainable-ai-pdf-images ongeveer 23 afbeeldingen bevatten.

U kunt deze afbeeldingen niet retourneren in een zoekquery. U kunt echter toepassingscode schrijven die de Azure Storage-API's aanroept om de afbeeldingen op te halen als u ze nodig hebt voor de gebruikerservaring. Het content_path veld heeft het pad naar elke afbeelding.

De afbeeldingen weergeven in de opslagbrowser:

  1. Meld u aan bij Azure Portal en navigeer naar uw Opslagaccount.

  2. In Storage Browser, vouw de container 'sustainable-ai-pdf-images' uit.

  3. Selecteer een afbeelding.

  4. Selecteer In het menu uiterst rechts (...) de optie Weergave/Bewerken.

Schermopname van een afbeelding die is geëxtraheerd uit het PDF-document.

De hulpbronnen opschonen

Wanneer u in uw eigen abonnement werkt, is het een goed idee om een project te voltooien door de resources te verwijderen die u niet meer nodig hebt. Resources die nog operationeel zijn, kunnen u geld kosten.

Selecteer in Azure Portal alle resources of resourcegroepen in het linkerdeelvenster om resources te zoeken en te beheren. U kunt resources afzonderlijk verwijderen of de resourcegroep verwijderen om alle resources tegelijk te verwijderen.