Настройка векторизатора в индексе поиска

Внимание

Эта функция предоставляется в общедоступной предварительной версии, и к ней применяются дополнительные Условия использования. REST API 2023-10-01-Preview поддерживает эту функцию.

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

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

Чтобы добавить векторизатор в индекс поиска, можно использовать конструктор индексов в портал Azure или вызвать API REST Для создания или обновления индекса 2023-10-01-preview ИЛИ использовать любой пакет пакета SDK бета-версии Azure, который обновлен для предоставления этой функции.

Необходимые компоненты

  • Индекс с полями векторов с возможностью поиска в Службе поиска ИИ Azure.

  • Развернутая модель внедрения, например text-embedding-ada-002 в Azure OpenAI. Он используется для векторизации запроса. Он должен быть идентичен модели, используемой для создания внедрения в индекс.

  • Разрешения на использование модели внедрения. Если вы используете Azure OpenAI, вызывающий объект должен иметь разрешения пользователя OpenAI Cognitive Services. Кроме того, вы можете предоставить ключ API.

  • Visual Studio Code с клиентом REST для отправки запроса и принятия ответа.

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

Попробуйте векторизатор с примерами данных

Мастер импорта и векторизации данных считывает файлы из хранилища BLOB-объектов Azure, создает индекс с блокизированными и векторизованными полями и добавляет векторизатор. По проектированию векторизатор, созданный мастером, устанавливается в ту же модель внедрения, которая используется для индексирования содержимого БОЛЬШОго двоичного объекта.

  1. Отправьте примеры файлов данных в контейнер на служба хранилища Azure. Мы использовали некоторые небольшие текстовые файлы из земной книги НАСА для тестирования этих инструкций в бесплатной службе поиска.

  2. Запустите мастер импорта и векторизации данных, выбрав контейнер BLOB-объектов для источника данных.

    Снимок экрана: подключение к странице данных.

  3. Выберите существующее развертывание text-embedding-ada-002. Эта модель создает внедрение во время индексирования и также используется для настройки векторизатора, используемого во время запросов.

    Снимок экрана: страница векторизации и обогащения данных.

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

     {
         "name": "vector",
         "type": "Collection(Edm.Single)",
         "searchable": true,
         "retrievable": true,
         "dimensions": 1536,
         "vectorSearchProfile": "vector-nasa-ebook-text-profile"
     }
    
  5. У вас также должен быть профиль вектора и векторизатор, аналогичный следующему примеру:

    "profiles": [
       {
         "name": "vector-nasa-ebook-text-profile",
         "algorithm": "vector-nasa-ebook-text-algorithm",
         "vectorizer": "vector-nasa-ebook-text-vectorizer"
       }
     ],
     "vectorizers": [
       {
         "name": "vector-nasa-ebook-text-vectorizer",
         "kind": "azureOpenAI",
         "azureOpenAIParameters": {
           "resourceUri": "https://my-fake-azure-openai-resource.openai.azure.com",
           "deploymentId": "text-embedding-ada-002",
           "apiKey": "0000000000000000000000000000000000000",
           "authIdentity": null
         },
         "customWebApiParameters": null
       }
     ]
    
  6. Пройдите вперед, чтобы протестировать векторизатор для преобразования текста в вектор во время выполнения запроса.

Определение векторизатора и профиля вектора

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

  1. Используйте создание или обновление индекса (предварительная версия) для добавления vectorizers в индекс поиска.

  2. Добавьте следующий код JSON в определение индекса. В разделе векторизаторов содержатся сведения о подключении к развернутой модели внедрения. На этом шаге показаны два примера векторизатора, чтобы можно было сравнить модель внедрения Azure OpenAI и настраиваемый веб-API параллельно.

      "vectorizers": [
        {
          "name": "my_azure_open_ai_vectorizer",
          "kind": "azureOpenAI",
          "azureOpenAIParameters": {
            "resourceUri": "https://url.openai.azure.com",
            "deploymentId": "text-embedding-ada-002",
            "apiKey": "mytopsecretkey"
          }
        },
        {
          "name": "my_custom_vectorizer",
          "kind": "customWebApi",
          "customVectorizerParameters": {
            "uri": "https://my-endpoint",
            "authResourceId": " ",
            "authIdentity": " "
          }
        }
      ]
    
  3. В том же индексе добавьте раздел профилей векторов, указывающий один из векторизаторов. Для профилей векторов также требуется алгоритм векторного поиска, используемый для создания структур навигации.

    "profiles": [ 
        { 
            "name": "my_vector_profile", 
            "algorithm": "my_hnsw_algorithm", 
            "vectorizer":"my_azure_open_ai_vectorizer" 
        }
    ]
    
  4. Назначьте профиль вектора полю вектора. В следующем примере показана коллекция полей с обязательным ключевым полем, полем строки заголовка и двумя векторными полями с назначением векторного профиля.

    "fields": [ 
            { 
                "name": "ID", 
                "type": "Edm.String", 
                "key": true, 
                "sortable": true, 
                "analyzer": "keyword" 
            }, 
            { 
                "name": "title", 
                "type": "Edm.String"
            }, 
            { 
                "name": "vector", 
                "type": "Collection(Edm.Single)", 
                "dimensions": 1536, 
                "vectorSearchProfile": "my_vector_profile", 
                "searchable": true, 
                "retrievable": true
            }, 
            { 
                "name": "my-second-vector", 
                "type": "Collection(Edm.Single)", 
                "dimensions": 1024, 
                "vectorSearchProfile": "my_vector_profile", 
                "searchable": true, 
                "retrievable": true
            }
    ]
    

Тестирование векторизатора

Используйте клиент поиска для отправки запроса через векторизатор. В этом примере предполагается, что Visual Studio Code с клиентом REST и примером индекса.

  1. В Visual Studio Code укажите конечную точку поиска и ключ API запросов поиска:

     @baseUrl: 
     @queryApiKey: 00000000000000000000000
    
  2. Вставьте в векторный запрос запроса. Обязательно используйте предварительную версию REST API.

     ### Run a query
     POST {{baseUrl}}/indexes/vector-nasa-ebook-txt/docs/search?api-version=2023-10-01-preview  HTTP/1.1
         Content-Type: application/json
         api-key: {{queryApiKey}}
    
         {
             "count": true,
             "select": "title,chunk",
             "vectorQueries": [
                 {
                     "kind": "text",
                     "text": "what cloud formations exists in the troposphere",
                     "fields": "vector",
                     "k": 3,
                     "exhaustive": true
                 }
             ]
         }
    

    Ключевые моменты запроса:

    • "kind": "text" сообщает поисковой системе, что входные данные являются текстовой строкой и используют векторизатор, связанный с полем поиска.

    • "text": "what cloud formations exists in the troposphere" — это текстовая строка для векторизации.

    • "fields": "vector" — имя поля для запроса. При использовании примера индекса, созданного мастером, создается поле vectorвектора.

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

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

Проверка журналов

Если вы включили ведение журнала диагностики для службы поиска, выполните запрос Kusto, чтобы подтвердить выполнение запроса в поле вектора:

OperationEvent
| where TIMESTAMP > ago(30m)
| where Name == "Query.Search" and AdditionalInfo["QueryMetadata"]["Vectors"] has "TextLength"

Рекомендации

Если вы настраиваете векторизатор Azure OpenAI, рассмотрите те же рекомендации , которые мы рекомендуем для навыка внедрения Azure OpenAI.

См. также