Ponowne zapisywanie zapytań za pomocą semantycznego rankera w Wyszukiwanie AI platformy Azure (wersja zapoznawcza)

Uwaga

Wyszukiwanie AI platformy Azure jest dostępna za pośrednictwem portalu Azure, interfejsów API REST i Azure SDKs. Jest także podstawą Foundry IQ — zarządzanej warstwy wiedzy, która przekształca treści przedsiębiorstwa w bazy wiedzy wielokrotnego użytku z uwzględnieniem uprawnień dla agentów w portalu Microsoft Foundry.

Ważna

Funkcje, możliwości lub właściwości oznaczone (wersja zapoznawcza) nie są objęte umową dotyczącą poziomu usług, nie są zalecane w przypadku obciążeń produkcyjnych i mogą ulec zmianie lub ograniczeniu, zanim staną się one ogólnie dostępne. Warunki Wyszukiwanie AI platformy Azure wersji zapoznawczej mają zastosowanie do wszystkich funkcji w wersji zapoznawczej, niezależnie od tego, czy jest ona autonomiczna, czy częścią ogólnie dostępnej funkcji.

Przeformułowywanie zapytań (wersja zapoznawcza) to proces przekształcania zapytania użytkownika w skuteczniejsze przez dodanie większej liczby terminów i zawężenie wyników wyszukiwania. Usługa wyszukiwania wysyła zapytanie wyszukiwania (lub odmianę) do modelu generowania, który generuje alternatywne zapytania.

Ponowne zapisywanie zapytań poprawia wyniki z klasyfikacji semantycznej przez poprawianie literówek lub błędów pisowni w zapytaniach użytkowników oraz rozszerzanie zapytań o synonimy.

Wyszukiwanie za pomocą ponownego zapisywania zapytań działa następująco:

  • Zapytanie użytkownika jest wysyłane za pośrednictwem właściwości search w żądaniu.
  • Usługa wyszukiwania wysyła zapytanie wyszukiwania (lub odmianę) do modelu generowania, który generuje alternatywne zapytania.
  • Usługa wyszukiwania używa oryginalnego zapytania i przepisanych zapytań w celu pobrania wyników wyszukiwania.

Ponowne zapisywanie zapytań jest funkcją opcjonalną. Bez ponownego zapisywania zapytań usługa wyszukiwania używa tylko oryginalnego zapytania do pobierania wyników wyszukiwania.

Uwaga

Przepisane zapytania mogą nie zawierać wszystkich dokładnych terminów, które zawierały oryginalne zapytanie. Może to mieć wpływ na wyniki wyszukiwania, jeśli zapytanie było wysoce specyficzne i wymagane dokładne dopasowania unikatowych identyfikatorów lub kodów produktów.

Wymagania wstępne

Wskazówka

Zawartość zawierająca wyjaśnienia lub definicje najlepiej sprawdza się w przypadku klasyfikacji semantycznej.

Tworzenie żądania wyszukiwania przy użyciu ponownego zapisywania zapytań

W tym przykładzie interfejsu API REST użyj funkcji Wyszukaj dokumenty (wersja zapoznawcza), aby sformułować żądanie.

  1. Wklej następujące żądanie do klienta internetowego jako szablon.

    POST https://[search-service-name].search.windows.net/indexes/hotels-sample/docs/search?api-version=2026-08-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
    }
    
    • Zastąp search-service-name nazwą usługi wyszukiwania.

    • Zastąp hotels-sample nazwą swojego indeksu, jeśli jest ona inna.

    • Ustaw wartość "search" na pełnotekstowe zapytanie wyszukiwania. Właściwość wyszukiwania jest wymagana do ponownego zapisywania zapytań, chyba że określono zapytania wektorowe. Jeśli określisz zapytania wektorowe, tekst "wyszukaj" musi być zgodny z właściwością "text""vectorQueries" obiektu. Ciąg wyszukiwania może obsługiwać prostą składnię lub pełną składnię Lucene.

    • Ustaw wartość "semanticConfiguration" na wstępnie zdefiniowaną konfigurację semantyczną osadzoną w indeksie.

    • Ustaw wartość "queryType" na "semantyczną". Musisz ustawić wartość "queryType" na "semantic" lub dołączyć w żądaniu niepustą właściwość "semanticQuery". Klasyfikacja semantyczna jest wymagana do ponownego zapisywania zapytań.

    • Ustaw wartość "queryRewrites" na wartość "generative|count-5", aby uzyskać maksymalnie pięć ponownych zapisywania zapytań. Liczbę można ustawić na dowolną wartość z zakresu od 1 do 10.

    • Ponieważ zażądano ponownego zapisywania zapytań przez ustawienie właściwości "queryRewrites", należy ustawić wartość "queryLanguage" na język tekstu wyszukiwania. Usługa wyszukiwania używa tego samego języka do ponownego zapisywania zapytań. W tym przykładzie użyjesz polecenia "en-US". Obsługiwane ustawienia regionalne to: en-AU, en-CA, en-GB, en-IN, en-US, ar-EG, ar-JO, ar-KW, ar-MA, ar-SA, bg-BG, bn-IN, ca-ES, cs-CZ, da-DK, de-DE, el-GR, es-ES, es-MX, et-EE, eu-ES, fa-AE, fi-FI, fr-CA, fr-FR, ga-IE, gl-ES, gu-IN, he-IL, hi-IN, hr-BA, hr-HR, hu-HU, hy-AM, id-ID, is-IS, it-IT, ja-JP, kn-IN, ko-KR, lt-LT, lv-LV, ml-IN, mr-IN, ms-BN, ms-MY, nb-NO, nl-BE, nl-NL, no-NO, pa-IN, pl-PL, pt-BR, pt-PT, ro-RO, ru-RU, sk-SK, sl-SL, sr-BA, sr-ME, sr-RS, sv-SE, ta-IN, te-IN, th-TH, tr-TR, uk-UA, ur-PK, vi-VN, zh-CN, zh-TW.

    • Ustaw wartość "debug" na wartość "queryRewrites", aby ponownie zapisać zapytanie w odpowiedzi.

      Wskazówka

      Ustaw "debug": "queryRewrites" tylko na potrzeby testowania. Aby uzyskać lepszą wydajność, nie używaj debugowania w środowisku produkcyjnym.

    • Ustaw wartość "top" na 1, aby zwrócić tylko górny wynik wyszukiwania.

  2. Wyślij żądanie, aby wykonać zapytanie i zwrócić wyniki.

Następnie należy ocenić wyniki wyszukiwania przy użyciu ponownie napisanych zapytań.

Ocena odpowiedzi

Oto przykład odpowiedzi zawierającej ponowne zapisywanie zapytań:

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

Oto kilka kluczowych kwestii, które należy zwrócić uwagę:

  • Ponieważ właściwość "debuguj" jest ustawiana na "queryRewrites" na potrzeby testowania, odpowiedź zawiera obiekt z zapytaniem @search.debug wejściowym tekstowym i ponownym zapisywaniem zapytań.
  • Ponieważ dla właściwości "queryRewrites" ustawiono wartość "generative|count-5", odpowiedź zawiera maksymalnie pięć ponownych zapisywania zapytań.
  • Wartość "inputQuery" to zapytanie wysyłane do modelu generowania na potrzeby ponownego zapisywania zapytań. Zapytanie wejściowe nie zawsze jest takie samo jak zapytanie użytkownika "search" .

Oto przykład odpowiedzi bez ponownego zapisywania zapytań.

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

Zapytania wektorowe z ponownym zapisywaniem zapytań

Zapytania wektorowe można uwzględnić w żądaniu wyszukiwania, aby połączyć wyszukiwanie słów kluczowych i wyszukiwanie wektorów w jednym żądaniu i ujednoliconą odpowiedź.

Oto przykład zapytania zawierającego zapytanie wektorowe z ponownym zapisywaniem zapytań. Zmodyfikuj poprzedni przykład , aby uwzględnić zapytanie wektorowe.

  • Dodaj obiekt "vectorQueries" do żądania. Ten obiekt zawiera zapytanie wektorowe z "kind" ustawionym na "text".
  • Wartość "text" jest taka sama jak wartość "search". Te wartości muszą być identyczne, aby ponowne zapisywanie zapytań działało.
POST https://[search-service-name].search.windows.net/indexes/hotels-sample/docs/search?api-version=2026-08-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
}

Odpowiedź zawiera ponowne zapisywanie zapytań zarówno dla zapytania tekstowego, jak i zapytania wektorowego.

Ponowne zapisywanie zapytań testowych przy użyciu debugowania

Należy przetestować przeformułowania zapytań, aby upewnić się, że działają zgodnie z oczekiwaniami. "debug": "queryRewrites" Ustaw właściwość w żądaniu zapytania, aby uzyskać ponowne zapisywanie zapytania w odpowiedzi. Ustawienie "debug" jest opcjonalne do celów testowych. Aby uzyskać lepszą wydajność, nie należy ustawiać tej właściwości w środowisku produkcyjnym.

Przyczyny częściowej odpowiedzi

Możesz zauważyć, że odpowiedź z debugowania (testu) zawiera pustą tablicę dla właściwości text.rewrites i vectors.

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

W poprzednim przykładzie:

  • Odpowiedź zawiera atrybut @search.semanticPartialResponseReason z wartością "Przejściowy". Ten komunikat oznacza, że co najmniej jedno z zapytań nie powiodło się.
  • Odpowiedź również zawiera właściwość @search.semanticQueryRewriteResultType z wartością "OriginalQueryOnly". Ten komunikat oznacza, że ponowne zapisywanie zapytań jest niedostępne. Tylko oryginalne zapytanie jest używane do pobierania wyników wyszukiwania.

Następne kroki

Klasyfikacja semantyczna może być używana w zapytaniach hybrydowych, które łączą wyszukiwanie słów kluczowych i wyszukiwanie wektorów w jednym żądaniu i ujednoliconą odpowiedź.