Compartir a través de


Tutorial: Extracción, fragmentación e incrustación de contenido multimodal

En este tutorial, creará una canalización de indexador multimodal que realiza estas tareas:

  • Extracción y fragmentación de texto e imágenes
  • Vectorizar texto e imágenes para la búsqueda de similitud
  • Envío de imágenes recortadas a un almacén de conocimiento para su recuperación por parte de la aplicación

En este tutorial se muestran varios conjuntos de aptitudes en paralelo para ilustrar diferentes formas de extraer, fragmentar y vectorizar contenido vectorial.

Prerrequisitos

La indexación multimodal se implementa a través de habilidades que llaman a modelos y API de inteligencia artificial en un flujo de trabajo de indexación. Los requisitos previos del modelo varían en función de las aptitudes elegidas para cada tarea.

Sugerencia

Para completar este tutorial en el nivel gratis, use un documento más pequeño con menos imágenes. En este tutorial solo se usan modelos Foundry, pero puede crear aptitudes personalizadas para usar otros modelos.

Configurar el acceso

Antes de empezar, asegúrese de que tiene permisos para acceder al contenido y las operaciones en Azure AI Search. En esta guía de inicio rápido se usa Microsoft Entra ID para la autenticación y el acceso basado en roles para la autorización. Debe ser Propietario o Administrador de acceso de usuario para asignar roles. Si los roles no son factibles, use la autenticación basada en claves en su lugar.

Para configurar el acceso basado en rol recomendado:

  1. Habilite el acceso basado en roles para el servicio de búsqueda.

  2. Asigne los siguientes roles a la cuenta de usuario.

    • Colaborador del servicio Search

    • Colaborador de datos de índice de búsqueda

    • Lector de datos de índice de búsqueda

Obtención del punto de conexión

Cada servicio azure AI Search tiene un punto de conexión, que es una dirección URL única que identifica y proporciona acceso de red al servicio. En una sección posterior, especifique este punto de conexión para conectarse al servicio de búsqueda mediante programación.

Para obtener el punto de conexión:

  1. Inicie sesión en Azure Portal y seleccione el servicio de búsqueda.

  2. En el panel izquierdo, seleccione Información general.

  3. Anote el punto de conexión, que debería tener un aspecto similar a https://my-service.search.windows.net.

Preparación de los datos

Los datos de ejemplo son un documento PDF de 36 páginas que combina contenido visual enriquecido, como gráficos, infografías y páginas escaneadas, con texto original. Azure Storage proporciona los datos de ejemplo y hospeda el almacén de conocimiento. Una identidad administrada del servicio de búsqueda necesita:

  • Acceso de lectura al almacenamiento de Azure para recuperar datos de ejemplo.

  • Acceso de escritura para crear un almacén de conocimiento. El servicio de búsqueda crea el contenedor para las imágenes recortadas durante el procesamiento del conjunto de aptitudes, con el nombre que se proporciona en una variable de entorno.

Siga estos pasos para configurar los datos de ejemplo.

  1. Descargue el siguiente PDF de ejemplo: sustainable-ai-pdf

  2. Inicie sesión en Azure Portal.

  3. En Azure Storage, cree un contenedor denominado sustainable-ai-pdf.

  4. Cargue el archivo de datos de ejemplo.

  5. Asigne roles a la identidad administrada del servicio de búsqueda:

    • Lector de datos de Storage Blob para la recuperación de datos

    • Colaborador de datos de Storage Blob y Colaborador de datos de tabla de almacenamiento para crear el almacén de conocimiento.

Mientras tienes las páginas de almacenamiento de Azure abiertas en el portal de Azure, obten una cadena de conexión para la variable de entorno.

  1. En Configuración>Puntos de conexión, seleccione el punto de conexión para el ID de recurso. Debería ser similar al ejemplo siguiente: /subscriptions/00000000-0000-0000-0000-00000000/resourceGroups/rg-mydemo/providers/Microsoft.Storage/storageAccounts/mydemostorage/blobServices/default.

  2. Prefijo ResourceId= a esta cadena de conexión. Use esta versión para la variable de entorno.

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

  3. Para las conexiones realizadas mediante una identidad administrada asignada por el usuario, use la misma cadena de conexión y proporcione una identity propiedad establecida en una identidad administrada asignada por el usuario predefinida.

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

Elección de aptitudes para la indexación multimodal

Las definiciones de índice, origen de datos e indexador son principalmente las mismas para todos los escenarios, pero el conjunto de aptitudes puede incluir una combinación de aptitudes diferente en función de cómo quiera extraer, fragmentar y vectorizar texto e imágenes.

  1. Elija aptitudes para la extracción y fragmentación:

    • Extracción de documentos, división de texto
    • Diseño del documento
  2. Elija aptitudes para la vectorización:

    • Instrucciones de IA generativa, vectores de Azure OpenAI
    • Inserción Multimodal de Azure AI Vision

La mayoría de estas aptitudes dependen de un modelo implementado o de un recurso de Microsoft Foundry. En la tabla siguiente se identifica el modelo que respalda cada aptitud, además del recurso y los permisos que proporcionan acceso al modelo.

Habilidad Usage Modelo Resource Permissions
Habilidad de extracción de documentos, Habilidad de división de texto Extraer y fragmentar en función del tamaño fijo.
La extracción de texto es libre.
La extracción de imágenes es facturable.
Ninguno (integrados) Azure AI Search Consulte Configuración del acceso
Aptitud de diseño de documento Extraer y fragmentar en función del diseño del documento. Inteligencia de documentos 4.0 Microsoft Foundry Usuario de Cognitive Services
Habilidad de Azure AI Vision Vectorice el texto y el contenido de la imagen. Azure AI Vision multimodal 4.0 Microsoft Foundry Usuario de Cognitive Services
Aptitud de solicitud de GenAI Llame a un LLM para generar descripciones de texto del contenido de la imagen. GPT-5 o GPT-4 Microsoft Foundry Usuario de Cognitive Services
Aptitud de inserción de Azure OpenAI Vectorice el texto y las descripciones de imágenes textuales generadas. Text-embedding-3 or text-embedding-ada-002 Microsoft Foundry Usuario de Cognitive Services

El uso del modelo es facturable, excepto la extracción de texto y la división de texto.

Las implementaciones de modelos pueden estar en cualquier región admitida si el servicio de búsqueda se conecta a través del punto de conexión público, una conexión privada o si la conexión de facturación no tiene clave. De lo contrario, si la conexión está basada en claves, adjunte un recurso de Microsoft Foundry desde la misma región que Azure AI Search.

Configuración del entorno

En este tutorial, la conexión del cliente REST local a Azure AI Search requiere un punto de conexión y una clave de API. Puede obtener estos valores en Azure Portal. Para ver otros métodos de conexión, consulte Conexión a un servicio de búsqueda.

Para las conexiones autenticadas que se producen durante el procesamiento del indexador y del conjunto de aptitudes, el servicio de búsqueda usa las asignaciones de roles que definió anteriormente.

  1. Inicie Visual Studio Code y cree un nuevo archivo.

  2. Proporcione valores para las variables usadas en la solicitud:

     @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
    

    Para @storageConnection, asegúrese de que la cadena de conexión no termine con un punto y coma ni con comillas. Consulte Preparación de los datos para la sintaxis de la cadena de conexión.

    En @imageProjectionContainer, proporcione un nombre de contenedor único en Blob Storage. Azure AI Search crea este contenedor durante el procesamiento de aptitudes.

    Para obtener ayuda para obtener un token de acceso, consulte Conexión a Azure AI Search. Si no puede usar roles, consulte Conexión con claves.

  3. Agregue esta variable si usa la aptitud Diseño de documento o la aptitud Azure AI Vision (usa la versión del modelo 2023-04-15):

    @foundryUrl = PUT-YOUR-MULTISERVICE-AZURE-AI-FOUNDRY-ENDPOINT-HERE
    @azureAiVisionModelVersion = 2023-04-15
    
  4. Agregue estas variables si usa la habilidad de solicitud de GenAI y la habilidad de incrustación de 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. Guarde el archivo mediante una extensión de archivo .rest o .http. Para obtener ayuda con el cliente REST, consulte Inicio rápido: Búsqueda de texto completo mediante REST.

El mismo recurso Foundry puede proporcionar Azure AI Vision, Document Intelligence, un modelo de finalización de chat y un modelo de incrustación de texto. Asegúrese de que la región admita los modelos que necesita. Si una región está en capacidad, es posible que tenga que crear un nuevo recurso para implementar los modelos necesarios.

Configuración de una canalización

Una canalización de indexador consta de cuatro componentes: origen de datos, índice, conjunto de aptitudes e indexador.

Descarga de archivos REST

El repositorio de GitHub azure-search-rest-samples contiene archivos .REST que crean la canalización y consultan el índice.

Sugerencia

Consulte el repositorio de GitHub azure-ai-search-multimodal-sample para ver un ejemplo de Python.

Creación de un origen de datos

Crear origen de datos (REST) crea una conexión de origen de datos que especifica qué datos se van a indexar.

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
}

Envíe la solicitud. La respuesta debería tener este aspecto:

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
}

Creación de un índice

Create Index (REST) crea un índice en el servicio de búsqueda. El índice es similar en todos los conjuntos de aptitudes, con las siguientes excepciones:

  • En la sección se vectorizers define cómo se vectoriza el texto de la consulta en tiempo de búsqueda. Debe usar el mismo proveedor de incrustaciones y la misma familia de modelos utilizados por el conjunto de aptitudes (incrustación multimodal de Azure AI Vision o incrustación de texto de Azure OpenAI), por lo que los vectores de consulta y los vectores indexados son compatibles.

  • El content_embedding valor del campo dimensions debe coincidir exactamente con el tamaño de vector generado por el modelo de incrustación (por ejemplo, 1024 para Azure AI Vision multimodal o 3072 para text-embedding-3-large). Una falta de coincidencia puede provocar errores de indexación o consulta.

  • Para los tipos complejos, los nombres de campo anidados del índice deben coincidir exactamente con los nombres finales de datos enriquecidos (incluido el uso de mayúsculas y minúsculas). Azure AI Search no puede asignar subcampos anidados a nombres diferentes. Use location_metadata, bounding_polygonsy page_number para los campos que aceptan salidas de división de texto, y locationMetadata, boundingPolygonsy pageNumber para los campos que aceptan salidas de diseño de documento.

Estas son las definiciones de índice para cada combinación de aptitudes.

Este patrón usa:

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

Puntos clave:

  • content_embedding es el único campo vectorial y almacena vectores para el contenido de texto e imagen. Debe configurarse con dimensiones adecuadas para el modelo basado en vectores como 3072 para text-embedding-3-large y un perfil de búsqueda de vectores.

  • content_path es la ruta de cada imagen en el almacén de conocimiento.

  • location_metadata o locationMetadata captura los metadatos de los polígono delimitadores y de los números de página de cada imagen normalizada, lo que permite una búsqueda espacial precisa o superposiciones de interfaz de usuario. Los nombres de campo varían en función de cómo se extrae la información.

  • Para la extracción de contenido basada en la habilidad de División de texto, los metadatos de ubicación solo se admiten para archivos PDF. Además, para la aptitud División de texto (Text Split), debe incluir una aptitud Conformador (Shaper) para capturar los metadatos de la ubicación en memoria y representarlos en el árbol de documentos. La aptitud Conformador también se encarga de añadir el nombre del contenedor del almacén de conocimiento a content_path.

Creación de un conjunto de aptitudes para la extracción, fragmentación y vectorización

Crear conjunto de aptitudes (REST) crea un conjunto de aptitudes en el servicio de búsqueda. Un conjunto de aptitudes define las operaciones que extraen, fragmentan y vectorizan contenido antes de la indexación.

Hay cuatro patrones de habilidades. Cada uno muestra una estrategia de extracción y fragmentación, emparejada con una estrategia de vectorización. Hay dos diferencias clave en cada patrón: la composición del conjunto de habilidades y indexProjections. Las proyecciones varían en función de los resultados de cada habilidad de incrustación.

Los cuatro patrones incluyen la habilidad Shaper. El resultado de la aptitud Conformador crea la ruta normalizada de las imágenes en el almacén de conocimiento y los metadatos de la ubicación (número de página y polígonos delimitadores).

Este patrón usa:

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

Ejecución del indexador

Crear indexador crea un indexador en el servicio de búsqueda. Un indexador se conecta al origen de datos, carga datos, ejecuta un conjunto de aptitudes e indexa el contenido enriquecido.

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

Realizar consultas

Puede empezar a realizar búsquedas en cuanto se cargue el primer documento. Se trata de una consulta de búsqueda de texto completo no especificada que devuelve todos los campos marcados como recuperables en el índice, junto con un recuento de documentos.

Sugerencia

El content_embedding campo contiene más de mil dimensiones. Use una select instrucción para excluir ese campo de la respuesta eligiendo explícitamente todos los demás campos. Ajuste la instrucción select para que coincida con los campos (location_metadata frente a locationMetadata) de su índice. A continuación, tiene un ejemplo: "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
  }

Envíe la solicitud. La respuesta debería tener este aspecto:

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

Se devuelven 100 documentos en la respuesta.

Consulta de contenido de solo imagen

Use un filtro para excluir todo el contenido que no sea de imagen. El $filter parámetro solo funciona en campos marcados como filtrables durante la creación del índice.

En el caso de los filtros, también puede usar operadores lógicos (y, o no) y operadores de comparación (eq, ne, gt, lt, ge, le). La comparación de cadenas distingue mayúsculas de minúsculas. Para obtener más información y ejemplos, vea Ejemplos de consultas de búsqueda sencillas.

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

Los resultados de la búsqueda que contienen contenido de solo imagen no tienen contenido de texto, por lo que puede excluir campos de texto.

El content_embedding campo contiene vectores de alta dimensión (normalmente de 1000 a 3000 dimensiones) para el texto de página y las descripciones de imágenes verbalizadas. Excluya este campo de la consulta.

El content_path campo contiene la ruta de acceso relativa al archivo de imagen dentro del contenedor de proyección de imagen designado. Este campo solo se genera para las imágenes extraídas de archivos PDF cuando imageAction se establece en generateNormalizedImages, y se puede asignar desde el documento enriquecido desde el campo de origen /document/normalized_images/*/imagePath.

Para el contexto extraído de un PDF mediante la función División de texto, la función Conformador añade el nombre del contenedor a la ruta y los metadatos de la ubicación.

Consulta de texto o imágenes con contenido relacionado con energía, donde se devuelve el ID del contenido, el documento principal y el texto (solo se rellena para los fragmentos del texto) y la ruta del contenido donde se guarda la imagen en el almacén de conocimiento (solo se rellena para las imágenes).

Esta consulta es solo búsqueda de texto completo, pero puede consultar el campo vectorial para buscar similitud.

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
  }

Restablecer y volver a ejecutar

Los indexadores se pueden restablecer para borrar el punto de referencia, lo que permite una reconstrucción completa. Las siguientes solicitudes POST son para el restablecimiento, seguido de la repetición de la ejecución.

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

Visualización de imágenes en el almacén de conocimiento

Recuerde que el conjunto de aptitudes de este tutorial permite crear un almacén de conocimiento para el contenido de la imagen extraída del PDF. Una vez que se ejecuta el indexador, el contenedor sustainable-ai-pdf-images debe tener aproximadamente 23 imágenes.

No se pueden devolver estas imágenes en una consulta de búsqueda. Sin embargo, puede escribir código de aplicación que llame a las API de Azure Storage para recuperar las imágenes si las necesita para la experiencia del usuario. El content_path campo tiene la ruta de acceso a cada imagen.

Para ver las imágenes en el explorador de Storage:

  1. Inicie sesión en Azure Portal y vaya a la cuenta de Storage.

  2. En el Explorador de almacenamiento, expanda el contenedor sustainable-ai-pdf-images.

  3. Seleccione una imagen.

  4. En el menú de la derecha (...), seleccione Ver/Editar.

Captura de pantalla de una imagen extraída del documento PDF.

Limpieza de recursos

Cuando trabaja en su propia suscripción, es una buena idea finalizar un proyecto quitando los recursos que ya no necesita. Los recursos que quedan en ejecución pueden costar dinero.

En Azure Portal, seleccione Todos los recursos o Grupos de recursos en el panel izquierdo para buscar y administrar recursos. Puede eliminar recursos individualmente o eliminar el grupo de recursos para quitar todos los recursos a la vez.