Поделиться через


Руководство: Извлечение, разбиение и внедрение мультимодального содержимого

В этом руководстве вы создадите конвейер многомодального индексатора, выполняющий следующие задачи:

  • Извлечение и сегментация текста и изображений
  • Векторизация текста и изображений для поиска сходства
  • Отправляйте обрезанные изображения в базу знаний для доступа вашего приложения.

В этом руководстве представлены различные навыки параллельно, для иллюстрации различных способов извлечения, разделения на части и векторизации мультимодального контента.

Предпосылки

Многомодальное индексирование реализуется с помощью навыков, которые вызывают модели ИИ и API в конвейере индексатора. Предварительные требования модели зависят от навыков, выбранных для каждой задачи.

Подсказка

Чтобы завершить работу с этим руководством на уровне "Бесплатный", используйте меньший документ с меньшим количеством изображений. В этом руководстве используются только модели Foundry, но вы можете создавать пользовательские навыки для использования других моделей.

Настройка доступа

Прежде чем начать, убедитесь, что у вас есть разрешения на доступ к содержимому и операциям в поиске ИИ Azure. В этом кратком руководстве для авторизации используется идентификатор Microsoft Entra для проверки подлинности и доступа на основе ролей. Для назначения ролей необходимо быть владельцем или администратором доступа пользователей . Если роли недоступны, используйте аутентификацию по ключу.

Чтобы настроить рекомендуемый доступ на основе ролей, выполните следующие действия.

  1. Включите доступ на основе ролей для службы поиска.

  2. Назначьте следующие роли учетной записи пользователя.

    • Участник службы поиска

    • Участник данных индекса поиска

    • Средство чтения индексов поиска

Получение конечной точки

Каждая служба поиска ИИ Azure имеет конечную точку, которая является уникальным URL-адресом, который идентифицирует и предоставляет сетевой доступ к службе. В следующем разделе описано, как указать эту конечную точку для программного подключения к службе поиска.

Чтобы получить конечную точку, выполните следующие действия.

  1. Войдите на портал Azure и выберите службу поиска.

  2. В левой области выберите "Обзор".

  3. Запишите конечную точку, которая должна выглядеть следующим образом https://my-service.search.windows.net.

Подготовка данных

Пример данных — это 36-страничный PDF-документ, который объединяет форматированное визуальное содержимое, например диаграммы, инфографики и сканированные страницы с исходным текстом. Служба хранилища Azure предоставляет примеры данных и размещает хранилище знаний. Для управляемого удостоверения службы поиска требуется:

  • Доступ на чтение к службе хранилища Azure для получения образцов данных.

  • Запись доступа к созданию хранилища знаний. Служба поиска создает контейнер для обрезанных изображений во время обработки набора навыков, используя имя, определенное в переменной среды.

Выполните следующие действия, чтобы настроить образец данных.

  1. Скачайте следующий пример PDF: sustainable-ai-pdf

  2. Войдите на портал Azure.

  3. В службе хранилища Azure создайте новый контейнер с именем sustainable-ai-pdf.

  4. Отправьте пример файла данных.

  5. Назначьте роли управляемому удостоверению службы поиска:

    • Средство чтения данных BLOB-объектов хранилища для извлечения данных

    • Сотрудник с данными блоб-объектов хранилища и сотрудник с данными таблиц хранилища для создания хранилища знаний.

Пока у вас на портале Azure открыты страницы хранилища Azure, получите строку подключения для переменной окружения.

  1. В разделе "Настройки>Конечные точки" выберите конечную точку для идентификатора ресурса. Он должен выглядеть примерно так: /subscriptions/00000000-0000-0000-0000-00000000/resourceGroups/rg-mydemo/providers/Microsoft.Storage/storageAccounts/mydemostorage/blobServices/default

  2. Добавьте ResourceId= к этой строке подключения. Используйте эту версию для переменной среды.

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

  3. Для подключений, выполненных с использованием управляемого удостоверения, назначаемого пользователем, используйте ту же строку подключения и укажите свойство identity, установленное на предопределенное управляемое удостоверение, назначаемое пользователем.

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

Выбор навыков для многомодального индексирования

Определения индекса, источника данных и индексатора в основном одинаковы для всех сценариев, но набор навыков может включать разные сочетания навыков в зависимости от способа извлечения, фрагмента и векторизации текста и изображений.

  1. Выберите навыки извлечения и фрагментирования:

    • Извлечение документов, разделение текста
    • Макет документа
  2. Выберите навыки векторизации:

    • Подсказка GenAI, Встраивание Azure OpenAI
    • Многомодальное внедрение визуального распознавания искусственного интеллекта Azure

Большинство этих навыков зависят от развернутой модели или ресурса Microsoft Foundry. В следующей таблице определяется модель, поддерживающая каждый навык, а также ресурсы и разрешения, обеспечивающие доступ к модели.

Skill Usage Модель Resource Permissions
Навык извлечения документов, навык разделения текста Извлечение и разделение на основе фиксированного размера.
Извлечение текста бесплатно.
Извлечение изображений является платной услугой.
Нет (встроенная функция) Поиск с использованием ИИ Azure См . раздел "Настройка доступа"
Навыки оформления документов Извлечение и фрагмент на основе макета документа. Аналитика документов 4.0 Microsoft Foundry Пользователь Служб Когнитивных Услуг
Навык визуального распознавания искусственного интеллекта Azure Векторизация текста и содержимого изображения. Azure AI Vision Multimodal 4.0 Microsoft Foundry Пользователь Служб Когнитивных Услуг
Навык запроса GenAI Вызовите LLM для создания текстовых описаний содержимого изображения. GPT-5 или GPT-4 Microsoft Foundry Пользователь Служб Когнитивных Услуг
Навык внедрения Azure OpenAI Векторизируйте текст и созданные текстовые описания изображений. Text-embedding-3 или text-embedding-ada-002 Microsoft Foundry Пользователь Служб Когнитивных Услуг

Использование модели подлежит оплате, за исключением извлечения и разделения текста.

Развертывания моделей могут находиться в любом поддерживаемом регионе, если служба поиска подключается через общедоступную конечную точку, частное подключение или если подключение для выставления счетов является без ключей. В противном случае, если подключение основано на ключах, подключите ресурс Microsoft Foundry из того же региона, что и поиск ИИ Azure.

Настройка среды

Для этого руководства вашему локальному подключению клиента REST к службе Azure AI Search требуется конечная точка и ключ API. Эти значения можно получить на портале Azure. Сведения о других методах подключения см. в разделе "Подключение к службе поиска".

Для аутентифицированных подключений, происходящих в процессе работы индексатора и обработки набора навыков, служба поиска использует назначения ролей, определенные вами ранее.

  1. Запустите Visual Studio Code и создайте новый файл.

  2. Укажите значения переменных, используемых в запросе:

     @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
    

    Для @storageConnection убедитесь, что строка подключения не имеет в конце точки с запятой или кавычек. См. статью "Подготовка данных к синтаксису строки подключения".

    Для @imageProjectionContainer укажите имя контейнера, уникальное в хранилище объектов blob. Поиск по искусственному интеллекту Azure создает этот контейнер во время обработки навыков.

    Сведения о получении маркера доступа см. в статье "Подключение к поиску ИИ Azure". Если вы не можете использовать роли, см. статью "Подключение с ключами".

  3. Добавьте эту переменную, если вы используете навык макета документа или навык распознавания изображений Microsoft Azure AI (использует модель версии 2023-04-15):

    @foundryUrl = PUT-YOUR-MULTISERVICE-AZURE-AI-FOUNDRY-ENDPOINT-HERE
    @azureAiVisionModelVersion = 2023-04-15
    
  4. Добавьте эти переменные, если вы используете навык запроса GenAI и навык внедрения 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. Сохраните файл с помощью .rest расширения или .http расширения. Дополнительные сведения о клиенте REST см. в кратком руководстве. Полнотекстовый поиск с помощью REST.

Тот же ресурс Foundry может предоставить Azure AI Vision, Document Intelligence, модель завершения чата и модель внедрения текста. Просто убедитесь, что регион поддерживает необходимые модели. Если регион достиг максимальной нагрузки, может потребоваться создать новый ресурс для развертывания необходимых моделей.

Настройка конвейера

Конвейер индексатора состоит из четырех компонентов: источника данных, индекса, набора навыков и индексатора.

Скачивание REST-файлов

В репозитории GitHub azure-search-rest-samples находятся файлы .REST, которые создают конвейер и запрашивают индекс.

Подсказка

См. пример Python в репозитории GitHub azure-ai-search-multimodal-sample.

Создание источника данных

Создание источника данных (REST) создает подключение к источнику данных, указывающее, какие данные следует индексировать.

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
}

Отправьте запрос. Результат должен выглядеть следующим образом:

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
}

Создание индекса

Создание индекса (REST) создает индекс в службе поиска. Индекс аналогичен всем наборам навыков с следующими исключениями:

  • В vectorizers разделе определяется процесс векторизации текста запроса во время поиска. Он должен использовать то же семейство поставщиков внедрения и моделей, которые используются набором навыков (многомодальное или внедрение текста Azure OpenAI), поэтому векторы запросов и индексированные векторы совместимы.

  • content_embedding Значение поля dimensions должно точно соответствовать размеру вектора, создаваемому моделью встраивания (например, 1024 для мультимодальной модели Azure AI Vision или 3072 для text-embedding-3-large). Несоответствие может привести к сбоям индексирования или запроса.

  • Для сложных типов вложенные имена полей в индексе должны точно соответствовать именам выходных данных обогащения (включая регистр). Поиск по искусственному интеллекту Azure не может сопоставлять вложенные подфилды с различными именами. Используйте location_metadata, bounding_polygons, а также page_number для полей, которые принимают выходные данные текстового разбиения, и locationMetadata, boundingPolygons, и pageNumber для полей, которые принимают выходные данные макета документа.

Ниже приведены определения индекса для каждого сочетания навыков.

Этот шаблон использует:

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

Основные моменты:

  • content_embedding — это единственное поле вектора, и оно сохраняет векторы для содержимого текста и изображения. Он должен быть настроен с соответствующими измерениями для модели внедрения, например 3072 для текстового внедрения-3-большого и векторного профиля поиска.

  • content_path — это путь к каждому изображению в хранилище знаний.

  • location_metadata или locationMetadata записывает ограничивающие многоугольники и метаданные номера страниц для каждого нормализованного изображения, что позволяет точно выполнять пространственный поиск или наложения пользовательского интерфейса. Имена полей зависят от способа извлечения информации.

  • Для извлечения содержимого на основе навыка разделения текста метаданные расположения поддерживаются только для PDF-файлов. Кроме того, для навыка разделения текста необходимо включить навык Shaper для записи метаданных расположения в памяти и их представления в древовидной структуре документа. Навык Shaper также отвечает за добавление имени контейнера хранилища знаний в content_path.

Создание набора навыков для извлечения, фрагментирования и векторизации

Создание набора навыков (REST) создает набор навыков в службе поиска. Набор навыков определяет операции, которые извлекают, блокируют и векторизируют содержимое перед индексированием.

Существует четыре шаблона набора навыков. Каждая из них демонстрирует стратегию извлечения и фрагментирования, связанную с стратегией векторизации. Существует два ключевых различия в каждом шаблоне: композиция набора навыков и indexProjections. Проекции зависят от выходных данных каждого навыка внедрения.

Все четыре шаблона включают навык Shaper. Выходные данные навыка Shaper создают нормализованный маршрут изображений в базе знаний и метаданные местоположения (номер страницы и ограничивающие многоугольники).

Этот шаблон использует:

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

Запуск индексатора

Создать индексатор позволяет создать индексатор в вашей службе поиска. Индексатор подключается к источнику данных, загружает данные, запускает набор навыков и индексирует обогащенное содержимое.

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

Выполнение запросов

Вы можете начать поиск сразу после загрузки первого документа. Это неопределенный полнотекстовый поисковый запрос, который возвращает все поля, помеченные как извлекаемые в индексе, а также число документов.

Подсказка

Поле content_embedding содержит более тысячи измерений. select Используйте инструкцию, чтобы исключить это поле из ответа, явно выбрав все остальные поля. Измените инструкцию select, чтобы соответствовать полям (location_metadata и locationMetadata) в индексе. Приведем пример: "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
  }

Отправьте запрос. Результат должен выглядеть следующим образом:

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 документов.

Запрос контента, состоящего только из изображений

Используйте фильтр, чтобы исключить все содержимое, отличное от изображения. Параметр $filter работает только в полях, которые были помечены фильтруемыми во время создания индекса.

Для фильтров можно также использовать логические операторы (и, не) и операторы сравнения (eq, ne, lt, ge, le). При сравнении строк учитывается регистр. Дополнительные сведения и примеры см. в примерах простых поисковых запросов.

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

Результаты поиска, содержащие содержимое только для изображений, не содержат текстового содержимого, поэтому можно исключить текстовые поля.

Поле content_embedding содержит высокомерные векторы (обычно от 1000 до 3000 измерений) для текста страницы и словесных описаний изображений. Исключите это поле из запроса.

Поле content_path содержит относительный путь к файлу изображения в указанном контейнере проекции изображений. Это поле создается только для изображений, извлеченных из PDF-файлов, если imageAction задано значение generateNormalizedImages, и может быть сопоставлено из обогащенного документа из исходного поля /document/normalized_images/*/imagePath.

Для контекста PDF, извлеченного с помощью навыка Text Split, навык Shaper добавляет имя контейнера к пути и метаданным расположения.

Запрос текста или изображений с содержимым, связанным с энергией, возвращая идентификатор содержимого, родительский документ и текст (только заполненный фрагментами текста), а также путь к содержимому, в котором изображение сохраняется в хранилище знаний (заполнено только для изображений).

Этот запрос — это только полнотекстовый поиск, но вы можете запросить поле вектора для поиска сходства.

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
  }

Сброс и повторный запуск

Индексаторы можно сбросить, чтобы очистить высокий уровень, что позволяет выполнить полную перестройку. Следующие запросы POST предназначены для сброса, за которым следует повторно запустить.

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

Просмотр изображений в хранилище знаний

Помните, что набор навыков в этом руководстве создает хранилище знаний для содержимого изображения, извлеченного из PDF- файла. После запуска индексатора контейнер sustainable-ai-pdf-images должен содержать примерно 23 изображения.

Вы не можете вернуть эти изображения в поисковом запросе. Однако вы можете написать код приложения, который вызывает API службы хранилища Azure, чтобы получить изображения, если они нужны для взаимодействия с пользователем. Поле content_path имеет путь к каждому изображению.

Чтобы просмотреть изображения в браузере хранилища, выполните следующие действия.

  1. Войдите на портал Azure и перейдите к учетной записи хранения.

  2. В браузере хранилища разверните контейнер устойчивых изображений ai-pdf-images.

  3. Выберите изображение.

  4. В правом меню (...) выберите "Вид/Изменить".

Снимок экрана: изображение, извлеченное из PDF-документа.

Очистите ресурсы

При работе с собственной подпиской рекомендуется завершить проект, удалив ресурсы, которые больше не нужны. Ресурсы, оставленные работающими, могут стоить вам денег.

На портале Azure выберите все ресурсы или группы ресурсов на левой панели, чтобы найти ресурсы и управлять ими. Вы можете удалить ресурсы по отдельности или удалить группу ресурсов, чтобы удалить все ресурсы одновременно.