Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Dans ce tutoriel, vous allez créer un pipeline d’indexeur modal qui effectue ces tâches :
- Extraire et segmenter du texte et des images
- Vectoriser du texte et des images pour la recherche de similarité
- Envoyer des images rognées à une base de connaissances pour la récupération par votre application
Ce tutoriel présente plusieurs ensembles de compétences côte à côte pour illustrer différentes façons d’extraire, de segmenter et de vectoriser du contenu modal.
Prerequisites
Recherche Azure AI, sur le niveau tarifaire de base ou supérieur si vous souhaitez utiliser les exemples de données. Configurez une identité managée pour l’accès en fonction du rôle aux modèles et aux données.
Stockage Azure, utilisé pour stocker des exemples de données et pour créer une base de connaissances.
Ressource Microsoft Foundry qui fournit des modèles et des API Foundry. Si vous utilisez Azure AI Vision multimodale, choisissez l'une de ses régions prises en charge pour votre ressource Microsoft Foundry.
Visual Studio Code avec le client REST ou l’extension Python. Si vous n’avez pas installé une version appropriée de Python, suivez les instructions du didacticiel PYTHON VS Code.
L’indexation multimodale est implémentée par le biais de fonctions qui appellent des modèles d’IA et des API dans un pipeline d’indexeur. Les prérequis du modèle varient en fonction des compétences choisies pour chaque tâche.
Conseil / Astuce
Pour suivre ce tutoriel sur le niveau gratuit, utilisez un document plus petit avec moins d’images. Ce tutoriel utilise uniquement les modèles Foundry, mais vous pouvez créer des compétences personnalisées pour utiliser d’autres modèles.
Configurer l’accès
Avant de commencer, vérifiez que vous disposez des autorisations nécessaires pour accéder au contenu et aux opérations dans Recherche IA Azure. Ce guide de démarrage rapide utilise l’ID Microsoft Entra pour l’authentification et l’accès en fonction du rôle pour l’autorisation. Vous devez être propriétaire ou administrateur de l’accès utilisateur pour attribuer des rôles. Si les rôles ne sont pas réalisables, utilisez plutôt l’authentification basée sur des clés.
Pour configurer l’accès en fonction du rôle recommandé :
Activez l’accès en fonction du rôle pour votre service de recherche.
Attribuez les rôles suivants à votre compte d’utilisateur.
Contributeur du service de recherche
Contributeur de données d’index de la Recherche
Lecteur de données d’index de la Recherche
Obtenir un point de terminaison
Chaque service Recherche Azure AI a un point de terminaison, qui est une URL unique qui identifie et fournit un accès réseau au service. Dans une section ultérieure, vous spécifiez ce point de terminaison pour vous connecter à votre service de recherche par programmation.
Pour obtenir le point de terminaison :
Connectez-vous au portail Azure et sélectionnez votre service de recherche.
Dans le volet gauche, sélectionnez Vue d’ensemble.
Notez le point de terminaison, qui doit ressembler à
https://my-service.search.windows.net.
Préparer des données
Les exemples de données sont un document PDF de 36 pages qui combine du contenu visuel enrichi, tel que des graphiques, des infographies et des pages analysées, avec du texte d’origine. Stockage Azure fournit les exemples de données et héberge la base de connaissances. Un service de recherche a besoin d’identité managée :
Accès en lecture à Azure Storage pour récupérer les données d'exemple.
Accès en écriture pour créer la base de connaissances. Le service de recherche crée le conteneur pour les images rognées pendant le traitement de l’ensemble de compétences, en utilisant le nom que vous fournissez dans une variable d’environnement.
Suivez ces étapes pour configurer les données d'exemple.
Téléchargez l’exemple de pdf suivant : sustainable-ai-pdf
Connectez-vous au portail Azure.
Dans Stockage Azure, créez un conteneur nommé durable-ai-pdf.
Attribuez des rôles à l’identité managée du service de recherche :
Lecteur de données Blob de stockage pour la récupération des données
Contributeur aux données Blob du stockage et Contributeur aux données de table du stockage pour la création de la base de connaissances.
Tant que les pages de stockage Azure sont ouvertes dans le portail Azure, obtenez une chaîne de connexion pour la variable d'environnement.
Sous Paramètres>Points de terminaison, sélectionnez le point de terminaison pour l'ID de ressource. Il doit ressembler à l’exemple suivant :
/subscriptions/00000000-0000-0000-0000-00000000/resourceGroups/rg-mydemo/providers/Microsoft.Storage/storageAccounts/mydemostorage/blobServices/default.Préfixez
ResourceId=à cette chaîne de connexion. Utilisez cette version pour votre variable d’environnement.ResourceId=/subscriptions/00000000-0000-0000-0000-00000000/resourceGroups/rg-mydemo/providers/Microsoft.Storage/storageAccounts/mydemostorage/blobServices/defaultPour les connexions effectuées à l’aide d’une identité managée affectée par l’utilisateur, utilisez la même chaîne de connexion et fournissez une
identitypropriété définie sur une identité managée affectée par l’utilisateur prédéfinie."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" }
Choisir des compétences pour l’indexation multimodale
Les définitions d’index, de source de données et d’indexeur sont principalement les mêmes pour tous les scénarios, mais l’ensemble de compétences peut inclure une combinaison de compétences différente en fonction de la façon dont vous souhaitez extraire, segmenter et vectoriser du texte et des images.
Choisissez des compétences pour l’extraction et la segmentation :
- Extraction de documents, fractionnement de texte
- Disposition du document
Choisissez des compétences pour la vectorisation :
- Invite GenAI, incorporation Azure OpenAI
- Incorporation multimodale d'Azure AI Vision
La plupart de ces compétences dépendent d’un modèle déployé ou d’une ressource Microsoft Foundry. Le tableau suivant identifie le modèle qui sauvegarde chaque compétence, ainsi que la ressource et les autorisations qui fournissent l’accès au modèle.
| Compétence | Usage | Modèle | Resource | Permissions |
|---|---|---|---|---|
| Compétence Extraction de document, compétence Fractionnement de texte | Extrayez et segmentez en fonction de la taille fixe. L’extraction de texte est gratuite. L’extraction d’images est facturable. |
Aucune (intégré) | Recherche d’IA Azure | Voir Configurer l’accès |
| Compétence Mise en page du document | Extrayez et segmentez en fonction de la disposition du document. | Document Intelligence 4.0 | Microsoft Foundry | Utilisateur Cognitive Services |
| Compétence Azure AI Vision | Vectoriser le texte et le contenu de l’image. | Azure AI Vision multimodal 4.0 | Microsoft Foundry | Utilisateur Cognitive Services |
| Compétence Invite GenAI | Appelez un LLM pour générer des descriptions textuelles du contenu d’image. | GPT-5 ou GPT-4 | Microsoft Foundry | Utilisateur Cognitive Services |
| Compétence d’incorporation Azure OpenAI | Vectoriser du texte et générer des descriptions d’images textuelles. | Text-embedding-3 ou text-embedding-ada-002 | Microsoft Foundry | Utilisateur Cognitive Services |
L’utilisation du modèle est facturable, à l’exception de l’extraction de texte et du fractionnement de texte.
Les déploiements de modèles peuvent se trouver dans n’importe quelle région prise en charge si le service de recherche se connecte à un point de terminaison public, via une connexion privée, ou si la connexion de facturation est sans clé. Sinon, si la connexion est basée sur des clés, attachez une ressource Microsoft Foundry à partir de la même région qu’Azure AI Search.
Configurer votre environnement
Pour ce tutoriel, votre connexion de client REST locale à Azure AI Search nécessite un point de terminaison et une clé API. Vous pouvez obtenir ces valeurs dans le portail Azure. Pour d’autres méthodes de connexion, consultez Se connecter à un service de recherche.
Pour les connexions authentifiées qui se produisent pendant le traitement de l’indexeur et de l’ensemble de compétences, le service de recherche utilise les attributions de rôles que vous avez définies précédemment.
Démarrez Visual Studio Code et créez un fichier.
Fournissez des valeurs pour les variables utilisées dans la requête :
@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 HEREPour
@storageConnection, assurez-vous que votre chaîne de connexion n’a pas de points-virgules ou de guillemets de fin. Consultez Préparer vos données pour la syntaxe de chaîne de connexion.Pour
@imageProjectionContainer, fournissez un nom de conteneur unique dans le stockage d’objets blob. Azure AI Search crée ce conteneur pendant le traitement des compétences.Pour obtenir de l’aide sur l’obtention d’un jeton d’accès, consultez Connexion à Azure AI Search. Si vous ne pouvez pas utiliser de rôles, consultez Se connecter avec des clés.
Ajoutez cette variable si vous utilisez la compétence Disposition du document ou la compétence Azure AI Vision (utilise la version de modèle 2023-04-15) :
@foundryUrl = PUT-YOUR-MULTISERVICE-AZURE-AI-FOUNDRY-ENDPOINT-HERE @azureAiVisionModelVersion = 2023-04-15Ajoutez ces variables si vous utilisez la fonctionnalité de prompt GenAI et la fonctionnalité d'incorporation 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-HEREEnregistrez le fichier en utilisant une extension de fichier
.restou.http. Pour obtenir de l’aide sur le client REST, consultez Démarrage rapide : Recherche en texte intégral à l’aide de REST.
La même ressource Foundry peut fournir Azure AI Vision, Document Intelligence, un modèle d’achèvement de conversation et un modèle d’incorporation de texte. Vérifiez simplement que la région prend en charge les modèles dont vous avez besoin. Si une région est en capacité, vous devrez peut-être créer une ressource pour déployer les modèles nécessaires.
Configurer un pipeline
Un pipeline d’indexeur se compose de quatre composants : source de données, index, ensemble de compétences et indexeur.
- Créer une source de données
- Créer un index
- Créer un ensemble de compétences pour l’extraction, la segmentation et la vectorisation
- Créer (et exécuter) un indexeur
Télécharger des fichiers REST
Le dépôt GitHub azure-search-rest-samples a des fichiers REST qui créent le pipeline et interroge l’index.
Conseil / Astuce
Consultez le référentiel GitHub azure-ai-search-sample pour obtenir un exemple Python.
Créer une source de données
Créer une source de données (REST) permet de créer une connexion à la source de données qui spécifie les données à indexer.
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
}
Envoyez la demande. La réponse doit ressembler à ce qui suit :
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
}
Création d'un index
Créer un index (REST) crée un index sur votre service de recherche. L’index est similaire dans tous les ensembles de compétences, avec les exceptions suivantes :
La section définit la façon dont le
vectorizerstexte de requête est vectorisé au moment de la recherche. Il doit utiliser le même fournisseur d’incorporation et la même famille de modèles que celui utilisé par l’ensemble de compétences (intégration de texte Azure AI Vision ou Azure OpenAI) afin que les vecteurs de requête et les vecteurs indexés soient compatibles.La valeur du champ
content_embeddingdoit correspondre exactement à la taille du vecteur produite par le modèle d’intégration (par exemple,1024pour Azure AI Vision multimodale ou3072pourtext-embedding-3-large). Une incompatibilité peut entraîner des échecs d’indexation ou de requête.Pour les types complexes, les noms de champs imbriqués dans l’index doivent correspondre exactement aux noms de sortie d’enrichissement (y compris la casse). Azure AI Search ne peut pas mapper des sous-champs imbriqués vers des noms différents. Utilisez
location_metadata,bounding_polygonsetpage_numberpour les champs qui acceptent des sorties de fractionnement de texte, etlocationMetadataboundingPolygonspageNumberpour les champs qui acceptent les sorties de disposition de document.
Voici les définitions d’index pour chaque combinaison de compétences.
- Extraction de documents et intégration multimodale
- Extraction de documents & incorporation de texte
- Mise en page de document & intégration multimodale
- Disposition de document & incorporation de texte
Ce modèle utilise :
Compétence Extraction de document et compétence Fractionnement de texte pour l’extraction et la segmentation.
Compétence multimodale Azure AI Vision pour les représentations de texte et d'images.
{
"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":[
]
}
}
]
}
}
Points clés :
content_embeddingest le seul champ vectoriel et stocke les vecteurs pour le contenu du texte et de l’image. Il doit être configuré avec des dimensions appropriées pour le modèle d'incorporation, comme3072pour texte-incorporation-3-large et un profil de recherche vectorielle.content_pathest le chemin d’accès de chaque image dans la base de connaissances.location_metadataoulocationMetadatacapturent les métadonnées du polygone de délimitation et du numéro de page pour chaque image normalisée, ce qui permet une recherche spatiale précise ou des superpositions d'interfaces utilisateur. Les noms de champs varient en fonction de la façon dont les informations sont extraites.Pour l’extraction de contenu basée sur la compétence Fractionnement de texte : les métadonnées d’emplacement sont prises en charge uniquement pour les fichiers PDF. En outre, pour la compétence Fractionnement de texte, vous devez inclure une compétence Shaper pour capturer les métadonnées d’emplacement en mémoire et la représenter dans l’arborescence de documents. La compétence Shaper est également chargée d’ajouter le nom du conteneur du magasin de connaissances au
content_path.
Créer un ensemble de compétences pour l’extraction, la segmentation et la vectorisation
Créer un ensemble de compétences (REST) crée un ensemble de compétences sur votre service de recherche. Un ensemble de compétences définit les opérations qui extraient, segmentent et vectorisent le contenu avant l’indexation.
Il existe quatre modèles d’ensemble de compétences. Chacun illustre une stratégie d’extraction et de segmentation, associée à une stratégie de vectorisation. Il existe deux différences clés dans chaque modèle : composition de l’ensemble de compétences et indexProjections. Les projections varient en fonction des sorties de chaque compétence d’incorporation.
Les quatre modèles incluent la compétence Shaper. La sortie de la compétence Modélisateur crée le chemin normalisé des images dans la base de connaissances et les métadonnées d’emplacement (numéro de page et polygones englobants).
- Extraction de documents et intégration multimodale
- Extraction de documents & incorporation de texte
- Mise en page de document & intégration multimodale
- Disposition de document & incorporation de texte
Ce modèle utilise :
Compétence Extraction de document et compétence Fractionnement de texte pour l’extraction et la segmentation.
Compétence multimodale Azure AI Vision pour les vectorisations de texte et d’images.
La fonctionnalité Shaper capture les métadonnées de localisation et le nom du conteneur pour le chemin du fichier image dans le stockage de connaissance. Cette fonctionnalité est unique au contenu PDF et à l’extraction de documents.
{
"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/*"
}
]
}
]
}
}
Exécuter l’indexeur
Créer un indexeur permet de créer un indexeur sur votre service de recherche. Un indexeur se connecte à la source de données, charge des données, exécute un ensemble de compétences et indexe le contenu enrichi.
### 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": []
}
Exécuter des requêtes
Vous pouvez démarrer la recherche dès que le premier document est chargé. Il s’agit d’une requête de recherche en texte intégral non spécifiée qui retourne tous les champs marqués comme récupérables dans l’index, ainsi qu’un nombre de documents.
Conseil / Astuce
Le content_embedding champ contient plus d’un millier de dimensions. Utilisez une select instruction pour exclure ce champ de la réponse en choisissant explicitement tous les autres champs. Ajustez l’instruction select pour qu’elle corresponde aux champs (location_metadata vs locationMetadata) dans votre index. Prenons un exemple : "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
}
Envoyez la demande. La réponse doit ressembler à ce qui suit :
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 "
}
100 documents sont retournés dans la réponse.
Effectuer une requête pour du contenu visuel uniquement
Utilisez un filtre pour exclure tout le contenu non-image. Le $filter paramètre fonctionne uniquement sur les champs marqués filtrables lors de la création de l’index.
Pour les filtres, vous pouvez également utiliser des opérateurs logiques (et, ou non) et des opérateurs de comparaison (eq, ne, gt, lt, ge, le). Les comparaisons de chaînes sont sensibles à la casse. Pour plus d’informations et d’exemples, consultez Exemples de requêtes de recherche simples.
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"
}
Les résultats de recherche contenant du contenu image uniquement n’ont pas de contenu texte. Vous pouvez donc exclure des champs de texte.
Le content_embedding champ contient des vecteurs à haute dimension (généralement 1 000 à 3 000 dimensions) pour les descriptions de texte de page et d’image verbale. Excluez ce champ de la requête.
Le content_path champ contient le chemin relatif du fichier image dans le conteneur de projection d’images désigné. Ce champ est généré uniquement pour les images extraites des fichiers PDF lorsque imageAction est défini sur generateNormalizedImages, et peut être mappé depuis le document enrichi à partir du champ source /document/normalized_images/*/imagePath.
Pour le contexte PDF extrait à l’aide de la compétence Fractionnement de texte, la compétence Shaper ajoute le nom du conteneur au chemin d’accès et aux métadonnées d’emplacement.
Rechercher du contenu lié à « l’énergie »
Recherchez du texte ou des images avec du contenu lié à l’énergie, renvoyant l’ID de contenu, le document parent et le texte (renseignés uniquement pour les blocs de texte) et le chemin d’accès du contenu où l’image est enregistrée dans la base de connaissances (renseignée uniquement pour les images).
Cette requête est une recherche en texte intégral uniquement, mais vous pouvez interroger le champ vectoriel pour la recherche de similarité.
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
}
Réinitialiser et réexécuter
Les indexeurs peuvent être réinitialisés pour effacer le marqueur de niveau haut, ce qui permet une reconstruction totale. Les requêtes POST suivantes servent à la réinitialisation, suivie d'une nouvelle exécution.
### 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}}
Afficher des images dans la base de connaissances
Rappelez-vous que l’ensemble de compétences de ce didacticiel crée une base de connaissances pour le contenu d’image extrait du pdf. Une fois l’indexeur exécuté, le conteneur soutenable-ai-pdf-images doit comporter environ 23 images.
Vous ne pouvez pas retourner ces images dans une requête de recherche. Toutefois, vous pouvez écrire du code d’application qui appelle les API stockage Azure pour récupérer les images si vous en avez besoin pour l’expérience utilisateur. Le content_path champ a le chemin d’accès à chaque image.
Pour afficher les images dans le navigateur de stockage :
Connectez-vous au portail Azure et accédez à votre compte de stockage.
Dans Storage Browser, développez le conteneur durable-ai-pdf-images.
Sélectionnez une image.
Dans le menu d’extrême droite (...), sélectionnez Affichage/Modifier.
Nettoyer les ressources
Lorsque vous travaillez dans votre propre abonnement, il est judicieux de terminer un projet en supprimant les ressources dont vous n’avez plus besoin. Les ressources laissées actives peuvent vous coûter de l'argent.
Dans le portail Azure, sélectionnez Toutes les ressources ou groupes de ressources dans le volet gauche pour rechercher et gérer les ressources. Vous pouvez supprimer des ressources individuellement ou supprimer le groupe de ressources pour supprimer toutes les ressources à la fois.