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


Перезапись запросов с помощью семантического рангера в службе "Поиск ИИ Azure" (предварительная версия)

Примечание.

Эта функция сейчас доступна в виде общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения на уровне обслуживания и не рекомендуется для рабочих нагрузок. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Дополнительные сведения см. в статье Дополнительные условия использования Предварительных версий Microsoft Azure.

Перезапись запросов — это процесс преобразования запроса пользователя в более эффективный, добавление дополнительных терминов и уточнение результатов поиска. Служба поиска отправляет поисковый запрос (или вариант) в созданную модель, которая создает альтернативные запросы.

Перезапись запросов улучшает результаты семантического ранжирования , исправляя опечатки или ошибки орфографии в запросах пользователей и расширяя запросы синонимами.

Поиск с перезаписи запросов работает следующим образом:

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

Перезапись запросов является необязательной функцией. Без перезаписи запросов служба поиска просто использует исходный запрос для получения результатов поиска.

Примечание.

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

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

  • Служба поиска, уровень "Базовый" или выше.

Примечание.

Перезапись запросов в настоящее время доступна в регионах Северной Европы и Юго-Восточной Азии.

Внимание

В настоящее время для перезаписи запросов требуется семантический рангировщик.

  • Существующий индекс поиска с семантической конфигурацией и содержимым форматированного текста. Примеры, приведенные в этом руководстве, используют примеры данных индекса hotels-sample-index для демонстрации перезаписи запросов. Для тестирования перезаписи запросов можно использовать собственные данные и индексы.

  • Вам нужен веб-клиент, поддерживающий запросы REST API. Примеры, приведенные в этом руководстве, были протестированы с помощью Visual Studio Code с расширением клиента REST.

Совет

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

Создание поискового запроса с перезаписями запросов

В этом примере REST API мы используем поиск документов для формирования запроса. Дополнительные сведения о свойствах запроса и ответа см. в справочной документации по API.

  1. Вставьте следующий запрос в веб-клиент в качестве шаблона.

    POST https://[search-service-name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2024-11-01-preview
    {
        "search": "newer hotel near the water with a great restaurant",
        "semanticConfiguration":"en-semantic-config",
        "queryType":"semantic",
        "queryRewrites":"generative|count-5",
        "queryLanguage":"en-US",
        "debug":"queryRewrites",
        "top": 1
    }
    
    • Вы заменяете search-service-name имя службы поиска.

    • Если индекс отличается, замените hotels-sample-index его именем.

    • Мы присвоим запрос полнотекстового поиска. Свойство поиска требуется для перезаписи запросов, если только вы не указываете векторные запросы. Если указать векторные запросы, текст "search" должен соответствовать "text" свойству "vectorQueries" объекта. Строка поиска может поддерживать простой синтаксис или полный синтаксис Lucene.

    • Мы зададим значение "semanticConfiguration" предварительно определенной семантической конфигурации , внедренной в индекс.

    • Для параметра QueryType задано значение "семантика". Необходимо задать значение queryType для "семантики" или включить в запрос свойство nonempty "semanticQuery". Для перезаписи запросов требуется семантический ранжирование .

    • Для параметра queryRewrites задано значение "generative|count-5", чтобы получить до пяти перезаписей запросов. Число можно задать для любого значения от 1 до 10.

    • Так как мы запрашивали перезаписи запросов, задав свойство queryRewrites, необходимо задать для языка текста поиска значение queryLanguage. Служба использует тот же язык для перезаписи запросов. В этом примере мы используем en-US. Поддерживаемые языковые стандарты: en-AU, en-GBen-CAen-INen-USar-EGar-JOar-KWar-MAar-SAbg-BGbn-INca-EScs-CZda-DKde-DEel-GRes-ESes-MXet-EEeu-ESfa-AEfi-FIfr-CAfr-FRga-IEgl-ESgu-INhe-ILhi-INhr-BAhr-HRhu-HUhy-AMid-IDis-ISit-ITja-JPkn-INko-KRlt-LTlv-LVml-INmr-INms-BNms-MYnb-NOnl-BEnl-NLno-NOpa-INpl-PLpt-BRpt-PTro-ROru-RUsk-SKsl-SLsr-BAsr-ME sr-RS, sv-SE, ta-INuk-UAth-THte-INur-PKvi-VNtr-TRzh-CN, . zh-TW

    • Для получения перезаписи запроса в ответе мы присвоим значение "debug" значение queryRewrites.

      Совет

      Задано "debug": "queryRewrites" только для целей тестирования. Для повышения производительности не используйте отладку в рабочей среде.

    • Мы присвоим значение "top" значение 1, чтобы вернуть только верхний результат поиска.

  2. Отправьте запрос для выполнения запроса и возврата результатов.

Затем мы вычисляем результаты поиска с перезаписями запросов.

Оценка ответа

Ниже приведен пример ответа, включающего перезаписи запросов:

"@search.debug": {
  "semantic": null,
  "queryRewrites": {
    "text": {
      "inputQuery": "newer hotel near the water with a great restaurant",
      "rewrites": [
        "new waterfront hotels with top-rated eateries",
        "new waterfront hotels with top-rated restaurants",
        "new waterfront hotels with excellent dining",
        "new waterfront hotels with top-rated dining",
        "new water-side hotels with top-rated restaurants"
      ]
    },
    "vectors": []
  }
},
"value": [
  {
    "@search.score": 58.992092,
    "@search.rerankerScore": 2.815633535385132,
    "HotelId": "18",
    "HotelName": "Ocean Water Resort & Spa",
    "Description": "New Luxury Hotel for the vacation of a lifetime. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
    "Description_fr": "Nouvel h\u00f4tel de luxe pour des vacances inoubliables. Vue sur la baie depuis chaque chambre, emplacement pr\u00e8s de la jet\u00e9e, piscine sur le toit, restaurant au bord de l'eau et plus encore.",
    "Category": "Luxury",
    "Tags": [
      "view",
      "pool",
      "restaurant"
    ],
    "ParkingIncluded": true,
    "LastRenovationDate": "2020-11-14T00:00:00Z",
    "Rating": 4.2,
    "Location": {
      "type": "Point",
      "coordinates": [
        -82.537735,
        27.943701
      ],
      "crs": {
        "type": "name",
        "properties": {
          "name": "EPSG:4326"
        }
      }
    },
    //... more properties redacted for brevity
  }
]

Ниже приведены некоторые ключевые моменты, которые следует отметить:

  • Так как свойство "debug" имеет значение queryRewrites для тестирования, ответ включает @search.debug объект с текстовым запросом и перезаписями запросов.
  • Так как свойство queryRewrites имеет значение "generative|count-5", ответ включает до пяти перезаписей запросов.
  • Значением "inputQuery" является запрос, отправляемый в созданную модель для перезаписи запросов. Входной запрос не всегда совпадает с запросом пользователя "search" .

Ниже приведен пример ответа без перезаписи запросов.

"@search.debug": {
  "semantic": null,
  "queryRewrites": {
    "text": {
      "inputQuery": "",
      "rewrites": []
    },
    "vectors": []
  }
},
"value": [
  {
    "@search.score": 7.774868,
    "@search.rerankerScore": 2.815633535385132,
    "HotelId": "18",
    "HotelName": "Ocean Water Resort & Spa",
    "Description": "New Luxury Hotel for the vacation of a lifetime. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
    "Description_fr": "Nouvel h\u00f4tel de luxe pour des vacances inoubliables. Vue sur la baie depuis chaque chambre, emplacement pr\u00e8s de la jet\u00e9e, piscine sur le toit, restaurant au bord de l'eau et plus encore.",
    "Category": "Luxury",
    "Tags": [
      "view",
      "pool",
      "restaurant"
    ],
    "ParkingIncluded": true,
    "LastRenovationDate": "2020-11-14T00:00:00Z",
    "Rating": 4.2,
    "Location": {
      "type": "Point",
      "coordinates": [
        -82.537735,
        27.943701
      ],
      "crs": {
        "type": "name",
        "properties": {
          "name": "EPSG:4326"
        }
      }
    },
    //... more properties redacted for brevity
  }
]

Векторные запросы с переопределением запросов

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

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

  • Мы добавим объект vectorQueries в запрос. Этот объект содержит векторный запрос с типом, равным "text".
  • Значение "text" совпадает со значением "search". Эти значения должны быть идентичными для перезаписи запросов для работы.
POST https://[search-service-name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2024-11-01-preview
{
    "search": "newer hotel near the water with a great restaurant",
    "vectorQueries": [
        {
            "kind": "text",
            "text": "newer hotel near the water with a great restaurant",
            "k": 50,
            "fields": "Description",
            "queryRewrites": "generative|count-3"
        }
    ],
    "semanticConfiguration":"en-semantic-config",
    "queryType":"semantic",
    "queryRewrites":"generative|count-5",
    "queryLanguage":"en-US",
    "top": 1
}

Ответ включает перезаписи запросов как для текстового запроса, так и для векторного запроса.

Тестирование перезаписи запросов с помощью отладки

Необходимо протестировать перезаписи запросов, чтобы убедиться, что они работают должным образом. Задайте свойство в запросе "debug": "queryRewrites" запроса, чтобы получить перезаписи запроса в ответе. Параметр необязателен "debug" для целей тестирования. Для повышения производительности не устанавливайте это свойство в рабочей среде.

Причины частичного ответа

Возможно, ответ отладки (теста) содержит пустой массив для text.rewrites свойств и vectors свойств.

{
  "@odata.context": "https://demo-search-svc.search.windows.net/indexes('hotels-sample-index')/$metadata#docs(*)",
  "@search.debug": {
    "semantic": null,
    "queryRewrites": {
      "text": {
        "rewrites": []
      },
      "vectors": []
    }
  },
  "@search.semanticPartialResponseReason": "Transient",
  "@search.semanticQueryRewriteResultType": "OriginalQueryOnly",
  //... more properties redacted for brevity
}

В предыдущем примере:

  • Ответ содержит @search.semanticPartialResponseReason свойство со значением "Временный". Это сообщение означает, что не удалось завершить хотя бы один из запросов.
  • Ответ также содержит @search.semanticQueryRewriteResultType свойство со значением OriginalQueryOnly. Это сообщение означает, что перезаписи запросов недоступны. Для получения результатов поиска используется только исходный запрос.

Следующие шаги

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