Compartir a través de


Tutorial: Verbalización de imágenes a partir de un diseño de documento estructurado

Azure AI Search puede extraer e indexar texto e imágenes de documentos PDF almacenados en Azure Blob Storage. En este tutorial se muestra cómo crear una canalización de indexación multimodal que fragmenta los datos basados en la estructura del documento y usa la verbalización de imágenes para describir las imágenes. Las imágenes recortadas se almacenan en un almacén de conocimiento y el contenido visual se describe en lenguaje natural e ingerido junto con el texto en un índice en el que se pueden buscar. La fragmentación se basa en el modelo de diseño de Azure Document Intelligence en Foundry Tools que reconoce la estructura del documento.

Para obtener las verbalizaciones de imágenes, cada imagen extraída se pasa a la Aptitud de solicitud de GenAI (vista previa) que llama a un modelo de conclusión de chat para generar una descripción textual concisa. Estas descripciones, junto con el texto del documento original, se insertan en representaciones vectoriales mediante el modelo de inserción de texto de Azure OpenAI de 3 grandes. El resultado es un índice único que contiene contenido que se puede buscar de ambas modalidades: texto e imágenes verbalizadas.

En este tutorial, usará:

  • Documento PDF de 36 páginas que combina contenido visual enriquecido, como gráficos, infografías y páginas escaneadas, con texto tradicional.

  • Un indexador y un conjunto de habilidades para crear una canalización de indexación que incluya el enriquecimiento con IA a través de habilidades.

  • La habilidad de Diseño de Documento para extraer texto e imágenes normalizadas con sus locationMetadata de varios documentos, como números de página o regiones delimitadas.

  • La Aptitud Preguntar de GenAI (versión preliminar) que llama a un modelo de finalización de chat para crear descripciones del contenido visual.

  • Índice de búsqueda configurado para almacenar texto extraído e verbalizaciones de imágenes. Algunos contenidos se vectorizan para la búsqueda de similitud basada en vectores.

Prerequisites

  • Recurso de Microsoft Foundry. Este recurso proporciona acceso al modelo de diseño de Azure Document Intelligence que se usa en este tutorial. Debe usar un recurso de Foundry para el acceso mediante el conjunto de aptitudes a estos recursos.

  • Búsqueda de Azure AI. Configure el servicio de búsqueda para el control de acceso basado en rol y una identidad administrada. El servicio debe estar en el nivel Básico o superior. Este tutorial no se admite en el nivel Gratis.

  • Azure Storage, que se usa para almacenar datos de ejemplo y para crear un almacén de conocimiento.

  • Azure OpenAI, con una implementación de

    • Un modelo de finalización de chat hospedado en Foundry u otro origen. El modelo se usa para verbalizar el contenido de la imagen. Proporcione el identificador URI al modelo hospedado en la definición de la habilidad de Instrucción de GenAI. Puede usar cualquier modelo de finalización de chat.

    • Modelo de inserción de texto implementado en Foundry. El modelo se usa para vectorizar la extracción de contenido de texto de los documentos de origen y las descripciones de imágenes generadas por el modelo de finalización del chat. Para la vectorización integrada, el modelo de inserción debe encontrarse en Foundry y debe ser text-embeding-ada-002, text-embedding-3-large o text-embedding-3-small. Si quiere usar un modelo de inserción externo, use una aptitud personalizada en lugar de la aptitud de inserción de Azure OpenAI.

  • Visual Studio Code con un cliente REST.

Limitations

Preparación de datos

Las instrucciones siguientes se aplican a Azure Storage, que proporciona los datos de ejemplo y también hospeda el almacén de conocimiento. Una identidad del servicio de búsqueda necesita acceso de lectura al almacenamiento de Azure para recuperar los datos de ejemplo y necesita acceso de escritura para crear el 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.

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

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

  3. Cargue el archivo de datos de ejemplo.

  4. Cree asignaciones de roles y especifique una identidad administrada en una cadena de conexión:

    1. Asigne Lector de datos de Storage Blob para la recuperación de datos por parte del indexador. Asigne Colaborador de datos de Storage Blob y Colaborador de datos de tabla de almacenamiento para crear y cargar el almacén de conocimiento. Puede usar una identidad administrada asignada por el sistema o una identidad administrada asignada por el usuario para la asignación de roles del servicio de búsqueda.

    2. Para las conexiones realizadas mediante una identidad administrada asignada por el sistema, obtenga una cadena de conexión que contenga un ResourceId, sin clave de cuenta ni contraseña. ResourceId debe incluir el identificador de suscripción de la cuenta de almacenamiento, el grupo de recursos de la cuenta de almacenamiento y el nombre de la cuenta de almacenamiento. La cadena de conexión es parecida a la del ejemplo siguiente:

      "credentials" : { 
          "connectionString" : "ResourceId=/subscriptions/00000000-0000-0000-0000-00000000/resourceGroups/MY-DEMO-RESOURCE-GROUP/providers/Microsoft.Storage/storageAccounts/MY-DEMO-STORAGE-ACCOUNT/;" 
      }
      
    3. Para las conexiones realizadas mediante una identidad administrada asignada por el usuario, obtenga una cadena de conexión que contenga un ResourceId, sin clave de cuenta ni contraseña. ResourceId debe incluir el identificador de suscripción de la cuenta de almacenamiento, el grupo de recursos de la cuenta de almacenamiento y el nombre de la cuenta de almacenamiento. Proporcione una identidad con la sintaxis que se muestra en el ejemplo siguiente. Establezca userAssignedIdentity en la identidad administrada asignada por el usuario. La cadena de conexión es similar al ejemplo siguiente:

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

Preparación de modelos

En este tutorial se supone que tiene un recurso de Azure OpenAI existente a través del cual las aptitudes de un modelo de finalización de chat para la solicitud de GenAI y también un modelo de inserción de texto para la vectorización. El servicio de búsqueda se conecta a los modelos durante el procesamiento del conjunto de aptitudes y durante la ejecución de consultas mediante su identidad administrada. En esta sección se proporcionan instrucciones y vínculos para asignar roles para el acceso autorizado.

También necesita una asignación de roles para acceder al modelo de diseño de Azure Document Intelligence a través de un recurso Foundry.

Asignación de roles en Foundry

  1. Inicie sesión en Azure Portal (no en el portal de Foundry) y busque el recurso Foundry. Asegúrese de que se encuentra en una región que proporciona el modelo de diseño de Azure Document Intelligence.

  2. Seleccione Control de acceso (IAM).

  3. Seleccione Agregar y, a continuación, Agregar asignación de roles.

  4. Busque Usuario de Cognitive Services y selecciónelo.

  5. Elija Identidad administrada y, a continuación, asigne la identidad administrada del servicio de búsqueda.

Asignación de roles en Azure OpenAI

  1. Inicie sesión en Azure Portal (no en el portal de Foundry) y busque el recurso de Azure OpenAI.

  2. Seleccione Control de acceso (IAM).

  3. Seleccione Agregar y, a continuación, Agregar asignación de roles.

  4. Busque Usuario de OpenAI de Cognitive Services y selecciónelo.

  5. Elija Identidad administrada y, a continuación, asigne la identidad administrada del servicio de búsqueda.

Para más información, consulte Control de acceso basado en roles para Azure OpenAI en Foundry Models.

Configuración del archivo REST

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 obtener métodos de conexión alternativos, 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. Para @storageConnection, asegúrese de que la cadena de conexión no termine con un punto y coma ni con comillas. En @imageProjectionContainer, proporcione un nombre de contenedor único en Blob Storage. Azure AI Search crea este contenedor automáticamente durante el procesamiento de aptitudes.

    @searchUrl = PUT-YOUR-SEARCH-SERVICE-ENDPOINT-HERE
    @searchApiKey = PUT-YOUR-ADMIN-API-KEY-HERE
    @storageConnection = PUT-YOUR-STORAGE-CONNECTION-STRING-HERE
    @cognitiveServicesUrl = PUT-YOUR-AZURE-AI-FOUNDRY-ENDPOINT-HERE
    @openAIResourceUri = PUT-YOUR-OPENAI-URI-HERE
    @openAIKey = PUT-YOUR-OPENAI-KEY-HERE
    @chatCompletionResourceUri = PUT-YOUR-CHAT-COMPLETION-URI-HERE
    @chatCompletionKey = PUT-YOUR-CHAT-COMPLETION-KEY-HERE
    @imageProjectionContainer=sustainable-ai-pdf-images
    
  3. 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.

Para obtener el punto de conexión y la clave de API de Azure AI Search:

  1. Inicie sesión en Azure Portal, vaya a la página Información general del servicio de búsqueda y copie la dirección URL. Un punto de conexión de ejemplo podría ser similar a https://mydemo.search.windows.net.

  2. En Configuración>Claves, copie una clave de administrador. Las claves de administrador se utilizan para agregar, modificar y eliminar objetos. Hay dos claves de administrador intercambiables. Copie una de las dos.

    Captura de pantalla de la dirección URL y las claves de API en Azure Portal.

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.

### Create a data source using system-assigned managed identities
POST {{searchUrl}}/datasources?api-version=2025-11-01-preview   HTTP/1.1
  Content-Type: application/json
  api-key: {{searchApiKey}}

  {
    "name": "doc-intelligence-image-verbalization-ds",
    "description": "A data source to store multi-modality documents",
    "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('doc-extraction-multimodal-embedding-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 2025 21:25:24 GMT
Connection: close

{
  "name": "doc-extraction-multimodal-embedding-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

Crear índice (REST) crea un índice de búsqueda en el servicio de búsqueda. Un índice especifica todos los parámetros y sus atributos.

Para JSON anidado, los campos de índice deben ser idénticos a los campos de origen. Actualmente, Azure AI Search no admite asignaciones de campos a JSON anidados, por lo que los nombres de campo y los tipos de datos deben coincidir completamente. El índice siguiente se alinea con los elementos JSON del contenido sin procesar.

### Create an index
POST {{searchUrl}}/indexes?api-version=2025-11-01-preview   HTTP/1.1
  Content-Type: application/json
  api-key: {{searchApiKey}}

{
    "name": "doc-intelligence-image-verbalization-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": 3072,
            "searchable": true,
            "retrievable": true,
            "vectorSearchProfile": "hnsw"
        },
        {
            "name": "content_path",
            "type": "Edm.String",
            "searchable": false,
            "retrievable": true
        },
        {
            "name": "offset",
            "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": "azureOpenAI",    
              "azureOpenAIParameters": {
                "resourceUri": "{{openAIResourceUri}}",
                "deploymentId": "text-embedding-3-large",
                "apiKey": "{{openAIKey}}",
                "modelName": "text-embedding-3-large"
              }
            }
        ]
    },
    "semantic": {
        "defaultConfiguration": "semanticconfig",
        "configurations": [
            {
                "name": "semanticconfig",
                "prioritizedFields": {
                    "titleField": {
                        "fieldName": "document_title"
                    },
                    "prioritizedContentFields": [
                    ],
                    "prioritizedKeywordsFields": []
                }
            }
        ]
    }
}

Puntos clave:

  • Las incrustaciones de texto e imágenes se almacenan en el content_embedding campo y deben configurarse con dimensiones adecuadas, como 3072, y un perfil de búsqueda vectorial.

  • location_metadata captura metadatos de número de página y polígono delimitador para cada fragmento de texto y imagen normalizada, lo que permite superposiciones precisas de búsqueda espacial o interfaz de usuario.

  • Para más información sobre la búsqueda de vectores, consulte Vectores en Azure AI Search.

  • Para más información sobre la clasificación semántica, consulte Clasificación semántica en Azure AI Search.

Crear un conjunto de habilidades

Crear conjunto de aptitudes (REST) crea un conjunto de aptitudes en el servicio de búsqueda. Un conjunto de aptitudes define las operaciones que fragmentan e insertan contenido antes de la indexación. Este conjunto de aptitudes usa la aptitud Diseño de documento para extraer texto e imágenes, conservando los metadatos de ubicación que son útiles para las citas en aplicaciones RAG. Usa la aptitud de inserción de Azure OpenAI para vectorizar contenido de texto.

El conjunto de habilidades también realiza acciones específicas para las imágenes. Usa la habilidad de Prompts de GenAI para generar descripciones de imágenes. También crea un almacén de conocimiento que almacena imágenes intactas para que pueda devolverlas en una consulta.

### Create a skillset
POST {{searchUrl}}/skillsets?api-version=2025-11-01-preview   HTTP/1.1
  Content-Type: application/json
  api-key: {{searchApiKey}}

{
  "name": "doc-intelligence-image-verbalization-skillset",
  "description": "A sample skillset for multi-modality using image verbalization",
  "skills": [
    {
      "@odata.type": "#Microsoft.Skills.Util.DocumentIntelligenceLayoutSkill",
      "name": "document-cracking-skill",
      "description": "Document Layout skill for document cracking",
      "context": "/document",
      "outputMode": "oneToMany",
      "outputFormat": "text",
      "extractionOptions": ["images", "locationMetadata"],
      "chunkingProperties": {     
          "unit": "characters",
          "maximumLength": 2000, 
          "overlapLength": 200
      },
      "inputs": [
        {
          "name": "file_data",
          "source": "/document/file_data"
        }
      ],
      "outputs": [
        { 
          "name": "text_sections", 
          "targetName": "text_sections" 
        }, 
        { 
          "name": "normalized_images", 
          "targetName": "normalized_images" 
        } 
      ]
    },
    {
    "@odata.type": "#Microsoft.Skills.Text.AzureOpenAIEmbeddingSkill",
    "name": "text-embedding-skill",
    "description": "Azure Open AI Embedding skill for text",
    "context": "/document/text_sections/*",
    "inputs": [
        {
        "name": "text",
        "source": "/document/text_sections/*/content"
        }
    ],
    "outputs": [
        {
        "name": "embedding",
        "targetName": "text_vector"
        }
    ],
    "resourceUri": "{{openAIResourceUri}}",
    "deploymentId": "text-embedding-3-large",
    "apiKey": "{{openAIKey}}",
    "dimensions": 3072,
    "modelName": "text-embedding-3-large"
    },
    {
    "@odata.type": "#Microsoft.Skills.Custom.ChatCompletionSkill",
    "uri": "{{chatCompletionResourceUri}}",
    "timeout": "PT1M",
    "apiKey": "{{chatCompletionKey}}",
    "name": "genAI-prompt-skill",
    "description": "GenAI Prompt skill for image verbalization",
    "context": "/document/normalized_images/*",
    "inputs": [
        {
        "name": "systemMessage",
        "source": "='You are tasked with generating concise, accurate descriptions of images, figures, diagrams, or charts in documents. The goal is to capture the key information and meaning conveyed by the image without including extraneous details like style, colors, visual aesthetics, or size.\n\nInstructions:\nContent Focus: Describe the core content and relationships depicted in the image.\n\nFor diagrams, specify the main elements and how they are connected or interact.\nFor charts, highlight key data points, trends, comparisons, or conclusions.\nFor figures or technical illustrations, identify the components and their significance.\nClarity & Precision: Use concise language to ensure clarity and technical accuracy. Avoid subjective or interpretive statements.\n\nAvoid Visual Descriptors: Exclude details about:\n\nColors, shading, and visual styles.\nImage size, layout, or decorative elements.\nFonts, borders, and stylistic embellishments.\nContext: If relevant, relate the image to the broader content of the technical document or the topic it supports.\n\nExample Descriptions:\nDiagram: \"A flowchart showing the four stages of a machine learning pipeline: data collection, preprocessing, model training, and evaluation, with arrows indicating the sequential flow of tasks.\"\n\nChart: \"A bar chart comparing the performance of four algorithms on three datasets, showing that Algorithm A consistently outperforms the others on Dataset 1.\"\n\nFigure: \"A labeled diagram illustrating the components of a transformer model, including the encoder, decoder, self-attention mechanism, and feedforward layers.\"'"
        },
        {
        "name": "userMessage",
        "source": "='Please describe this image.'"
        },
        {
        "name": "image",
        "source": "/document/normalized_images/*/data"
        }
        ],
        "outputs": [
            {
            "name": "response",
            "targetName": "verbalizedImage"
            }
        ]
    },    
    {
    "@odata.type": "#Microsoft.Skills.Text.AzureOpenAIEmbeddingSkill",
    "name": "verbalizedImage-embedding-skill",
    "description": "Azure Open AI Embedding skill for verbalized image embedding",
    "context": "/document/normalized_images/*",
    "inputs": [
        {
        "name": "text",
        "source": "/document/normalized_images/*/verbalizedImage",
        "inputs": []
        }
    ],
    "outputs": [
        {
        "name": "embedding",
        "targetName": "verbalizedImage_vector"
        }
    ],
    "resourceUri": "{{openAIResourceUri}}",
    "deploymentId": "text-embedding-3-large",
    "apiKey": "{{openAIKey}}",
    "dimensions": 3072,
    "modelName": "text-embedding-3-large"
    },
    {
      "@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
      "name": "#5",
      "context": "/document/normalized_images/*",
      "inputs": [
        {
          "name": "normalized_images",
          "source": "/document/normalized_images/*",
          "inputs": []
        },
        {
          "name": "imagePath",
          "source": "='my_container_name/'+$(/document/normalized_images/*/imagePath)",
          "inputs": []
        }
      ],
      "outputs": [
        {
          "name": "output",
          "targetName": "new_normalized_images"
        }
      ]
    }      
  ], 
   "indexProjections": {
      "selectors": [
        {
          "targetIndexName": "doc-intelligence-image-verbalization-index",
          "parentKeyFieldName": "text_document_id",
          "sourceContext": "/document/text_sections/*",
          "mappings": [    
            {
            "name": "content_embedding",
            "source": "/document/text_sections/*/text_vector"
            },                      
            {
              "name": "content_text",
              "source": "/document/text_sections/*/content"
            },
            {
              "name": "location_metadata",
              "source": "/document/text_sections/*/locationMetadata"
            },                
            {
              "name": "document_title",
              "source": "/document/document_title"
            }   
          ]
        },        
        {
          "targetIndexName": "doc-intelligence-image-verbalization-index",
          "parentKeyFieldName": "image_document_id",
          "sourceContext": "/document/normalized_images/*",
          "mappings": [    
            {
            "name": "content_text",
            "source": "/document/normalized_images/*/verbalizedImage"
            },  
            {
            "name": "content_embedding",
            "source": "/document/normalized_images/*/verbalizedImage_vector"
            },                                           
            {
              "name": "content_path",
              "source": "/document/normalized_images/*/new_normalized_images/imagePath"
            },                    
            {
              "name": "document_title",
              "source": "/document/document_title"
            },
            {
              "name": "location_metadata",
              "source": "/document/normalized_images/*/locationMetadata"
            }             
          ]
        }
      ],
      "parameters": {
        "projectionMode": "skipIndexingParentDocuments"
      }
  },  
  "knowledgeStore": {
    "storageConnectionString": "{{storageConnection}}",
    "identity": null,
    "projections": [
      {
        "files": [
          {
            "storageContainer": "{{imageProjectionContainer}}",
            "source": "/document/normalized_images/*"
          }
        ]
      }
    ]
  }
}

Este conjunto de aptitudes extrae texto e imágenes, verbaliza imágenes y da forma a los metadatos de la imagen para la proyección en el índice.

Puntos clave:

  • El content_text campo se rellena de dos maneras:

    • En el texto del documento extraído y fragmentado mediante la aptitud Diseño de documento.

    • Desde el contenido de la imagen mediante la aptitud Preguntar de GenAI, que genera subtítulos descriptivos para cada imagen normalizada.

  • El content_embedding campo contiene incrustaciones 3072 dimensionales para descripciones de imágenes verbalizadas y texto de página. Estos se generan mediante el modelo text-embeding-3-large de Azure OpenAI.

  • content_path contiene la ruta de acceso relativa al archivo de imagen dentro del contenedor de proyección de imágenes designada. Este campo solo se genera para las imágenes extraídas de documentos cuando extractOption se establece en ["images", "locationMetadata"] o ["images"], y se puede asignar desde el documento enriquecido desde el campo de origen /document/normalized_images/*/imagePath.

  • La aptitud de inserción de Azure OpenAI permite insertar datos textuales. Para más información, consulte Aptitud de inserción de Azure OpenAI.

Creación y ejecución de un 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 los datos enriquecidos.

### Create and run an indexer
POST {{searchUrl}}/indexers?api-version=2025-11-01-preview   HTTP/1.1
  Content-Type: application/json
  api-key: {{searchApiKey}}

{
  "dataSourceName": "doc-intelligence-image-verbalization-ds",
  "targetIndexName": "doc-intelligence-image-verbalization-index",
  "skillsetName": "doc-intelligence-image-verbalization-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.

### Query the index
POST {{searchUrl}}/indexes/doc-intelligence-image-verbalization-index/docs/search?api-version=2025-11-01-preview   HTTP/1.1
  Content-Type: application/json
  api-key: {{searchApiKey}}
  
  {
    "search": "*",
    "count": true
  }

Envíe la solicitud. 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. La respuesta debería tener este aspecto:

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

Se devuelven 100 documentos en la respuesta.

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

Note

El $filter parámetro solo funciona en campos marcados como filtrables durante la creación del índice.

### Query for only images
POST {{searchUrl}}/indexes/doc-intelligence-image-verbalization-index/docs/search?api-version=2025-11-01-preview   HTTP/1.1
  Content-Type: application/json
  api-key: {{searchApiKey}}
  
  {
    "search": "*",
    "count": true,
    "filter": "image_document_id ne null"
  }
### Query for text or images with content related to energy, returning the id, parent document, and text (only populated for text chunks), and the content path where the image is saved in the knowledge store (only populated for images)
POST {{searchUrl}}/indexes/doc-intelligence-image-verbalization-index/docs/search?api-version=2025-11-01-preview   HTTP/1.1
  Content-Type: application/json
  api-key: {{searchApiKey}}
  
  {
    "search": "energy",
    "count": true,
    "select": "content_id, document_title, content_text, content_path"
  }

Restablecer y volver a ejecutar

Los indexadores se pueden restablecer para borrar el historial de ejecución, lo que permite una nueva ejecució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/doc-intelligence-image-verbalization-indexer/reset?api-version=2025-11-01-preview   HTTP/1.1
  api-key: {{searchApiKey}}
### Run the indexer
POST {{searchUrl}}/indexers/doc-intelligence-image-verbalization-indexer/run?api-version=2025-11-01-preview   HTTP/1.1
  api-key: {{searchApiKey}}
### Check indexer status 
GET {{searchUrl}}/indexers/doc-intelligence-image-verbalization-indexer/status?api-version=2025-11-01-preview   HTTP/1.1
  api-key: {{searchApiKey}}

Limpieza de recursos

Cuando trabajes con tu propia suscripción, al final de un proyecto, es recomendable eliminar los recursos que ya no necesites. Los recursos que se dejan en ejecución pueden costarle mucho dinero. Puede eliminar recursos individualmente o eliminar el grupo de recursos para eliminar todo el conjunto de recursos.

Puede utilizar Azure Portal para eliminar índices, indexadores y fuentes de datos.

Consulte también

Ahora que está familiarizado con una implementación de ejemplo de un escenario de indexación multimodal, consulte: