Freigeben über


Umschreiben von Abfragen mit einem semantischen Sortierer in Azure KI-Suche (Vorschau)

Hinweis

Dieses Feature ist zurzeit als öffentliche Preview verfügbar. Diese Vorschau wird ohne Vereinbarung zum Servicelevel bereitgestellt und nicht für Produktionsworkloads empfohlen. Manche Features werden möglicherweise nicht unterstützt oder sind nur eingeschränkt verwendbar. Weitere Informationen finden Sie unter Zusätzliche Nutzungsbestimmungen für Microsoft Azure-Vorschauen.

Bei der Abfrageumschreibung handelt es sich um den Prozess der Transformation einer Benutzerabfrage in eine effektivere Abfrage. Der Suchdienst sendet die Suchabfrage (oder eine Variation davon) an ein generatives Modell, das alternative Abfragen generiert.

Die Suche mit Abfrageumschreibung funktioniert wie folgt:

  • Die Benutzerabfrage wird über die search-Eigenschaft in der Anforderung übermittelt.
  • Der Suchdienst sendet die Suchabfrage (oder eine Variation davon) an ein generatives Modell, das alternative Abfragen generiert.
  • Der Suchdienst verwendet die ursprüngliche Abfrage und die umgeschriebenen Abfragen, um Suchergebnisse abzurufen.

Die Abfrageumschreibung ist ein optionales Feature. Ohne Abfrageumschreibung verwendet der Suchdienst nur die ursprüngliche Abfrage, um Suchergebnisse abzurufen.

Hinweis

Die Abfrageumschreibung ist derzeit in den Regionen „USA, Osten“, „Europa, Norden“ und „Asien, Südosten“ verfügbar.

Gründe für die Verwendung der Abfrageumschreibung

Wenn Sie die Abfrageumschreibung in Azure KI-Suche aktivieren, erzielen Sie eventuell höhere BM25-Scores, die angeben, wie relevant ein Dokument für eine Abfrage ist. Bei der Abfrageumschreibung wird generative KI verwendet, um die ursprüngliche Abfrage zu erweitern, weitere Ausdrücke hinzuzufügen und die Suchergebnisse zu verfeinern.

Wann die Abfrageumschreibung möglicherweise hilfreich ist:

  • Korrigieren von Tipp- oder Rechtschreibfehlern in Benutzerabfragen
  • Erweitern von Abfragen mit Synonymen zur Verbesserung der Suchergebnisse

Wann die Abfrageumschreibung möglicherweise nicht hilfreich ist:

  • Hochspezifische Abfragen, die genaue Übereinstimmungen erfordern
  • Suchen eindeutiger Bezeichner oder Produktcodes

Voraussetzungen

  • Ein Suchdienst ab der Dienstebene „Basic“ mit aktiviertem semantischem Sortierer. Bei Bedarf finden Sie hier eine Einführung in das Feature.

Wichtig

Der semantische Sortierer ist zurzeit für die Abfrageumschreibung erforderlich.

  • Vorhandener Suchindex mit semantischer Konfiguration und Rich-Text-Inhalt In den Beispielen in diesem Leitfaden werden die Beispieldaten aus dem hotels-sample-index verwendet, um die Abfrageumschreibung zu veranschaulichen. Sie können eigene Daten und einen eigenen Index verwenden, um die Abfrageumschreibung zu testen.

  • Sie benötigen einen Webclient, der REST-API-Anforderungen unterstützt. Die Beispiele in diesem Leitfaden wurden mit Visual Studio Code und der Erweiterung für den REST-Client getestet.

Tipp

Inhalte, die Erläuterungen oder Definitionen enthalten, funktionieren mit dem semantischen Sortierer am besten.

Erstellen einer Suchanforderung mit Abfrageumschreibung

In diesem REST-API-Beispiel wird Dokumente durchsuchen verwendet, um die Anforderung zu formulieren. Weitere Informationen zu den Anforderungs- und Antworteigenschaften finden Sie in der API-Referenzdokumentation.

  1. Fügen Sie die folgende Anforderung als Vorlage in einen Webclient ein.

    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
    }
    
    • Ersetzen Sie search-service-name durch den Namen Ihres Suchdiensts.
    • Ersetzen Sie hotels-sample-index durch den Namen Ihres Index, falls er abweicht.
    • Legen Sie „search“ auf eine Volltextsuchabfrage fest. Die search-Eigenschaft ist für die Abfrageumschreibung erforderlich, sofern Sie keine Vektorabfragen angeben. Wenn Sie Vektorabfragen angeben, muss der Text „search“ mit der "text"-Eigenschaft des "vectorQueries"-Objekts übereinstimmen. Ihre Suchzeichenfolge kann entweder die einfache Syntax oder die vollständige Lucene-Syntax unterstützen.
    • Legen Sie „semanticConfiguration“ auf eine vordefinierte semantische Konfiguration fest, die in Ihren Index eingebettet ist.
    • Legen Sie „queryType“ auf „semantic“ fest. Sie müssen entweder „queryType“ auf „semantic“ festlegen oder eine nicht leere semanticQuery-Eigenschaft in die Anforderung einschließen. Der semantische Sortierer ist für die Abfrageumschreibung erforderlich.
    • Legen Sie „queryRewrites“ auf „generative|count-5“ fest, um bis zu fünf Abfrageumschreibungen abzurufen. Sie können die Anzahl auf einen beliebigen Wert zwischen 1 und 10 festlegen.
    • Legen Sie „queryLanguage“ auf die Zielsprache („en-US“) Für die Abfrageumschreibungen fest. Die unterstützten Gebietsschemas sind: 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 und zh-TW.
    • Legen Sie „debug“ auf „queryRewrites“ fest, um die Abfrageumschreibungen in der Antwort abzurufen. Legen Sie die "debug": "queryRewrites"-Eigenschaft zu Testzwecken fest. Verwenden Sie für eine bessere Leistung in der Produktion kein Debugging.
    • Legen Sie „top“ auf „1“ fest, um nur das beste Suchergebnis zurückzugeben.
  2. Senden Sie die Anforderung, um die Abfrage auszuführen und Ergebnisse zurückzugeben.

Als Nächstes bewerten Sie die Suchergebnisse mit den Abfrageumschreibungen.

Auswertung der Antwort

Im Folgenden finden Sie ein Beispiel für eine Antwort, die Abfrageumschreibungen enthält:

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

Beachten Sie vor allem die folgenden Punkte:

  • Da Sie die debug-Eigenschaft auf „queryRewrites“ festgelegt haben, enthält die Antwort ein @search.debug-Objekt mit der Texteingabeabfrage und die Abfrageumschreibungen.
  • Da Sie die queryRewrites-Eigenschaft auf „generative|count-5“ festgelegt haben, enthält die Antwort bis zu fünf Abfrageumschreibungen.
  • Der "inputQuery"-Wert ist die Abfrage, die für die Abfrageumschreibung an das generative Modell übermittelt wird. Die Eingabeabfrage ist nicht immer mit der "search"-Benutzerabfrage identisch.

Im Folgenden finden Sie ein Beispiel für eine Antwort ohne Abfrageumschreibungen.

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

Vektorabfragen mit Abfrageumschreibung

Sie können Vektorabfragen in Ihre Suchanforderung einschließen, um die Stichwortsuche und die Vektorsuche in einer einzelnen Anforderung und einer einheitlichen Antwort zu kombinieren.

Im Folgenden finden Sie ein Beispiel für eine Abfrage, die eine Vektorabfrage mit Abfrageumschreibungen enthält. Dazu wurde ein früheres Beispiel geändert, um eine Vektorabfrage einzuschließen.

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",
    "debug":"queryRewrites",
    "top": 1
}

Beachten Sie vor allem die folgenden Punkte:

  • Sie haben in der Anforderung ein vectorQueries-Objekt hinzugefügt. Dieses Objekt enthält eine Vektorabfrage, bei der „kind“ auf „text“ festgelegt ist.
  • Der Wert „text“ ist identisch mit dem Wert „search“. Diese Werte müssen identisch sein, damit die Abfrageumschreibung funktioniert.

Die Antwort enthält Abfrageumschreibungen sowohl für die Textabfrage als auch für die Vektorabfrage.

Debuggen von Abfrageumschreibungen

Sie sollten die Abfrageumschreibungen testen, um sicherzustellen, dass sie wie erwartet funktionieren. Legen Sie die "debug": "queryRewrites"-Eigenschaft in Ihrer Abfrageanforderung fest, um die Abfrageumschreibungen in der Antwort abzurufen. Die Einstellung "debug" ist bei Tests optional. Für eine bessere Leistung legen Sie diese Eigenschaft in der Produktion nicht fest.

Sie werden möglicherweise feststellen, dass die Antwort ein leeres Array für die Eigenschaften text.rewrites und vectors enthält.

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

Im vorherigen Beispiel enthält die Antwort eine @search.semanticPartialResponseReason-Eigenschaft mit dem Wert „Transient“. Diese Meldung bedeutet, dass mindestens eine der Abfragen nicht abgeschlossen werden konnte. Die Antwort enthält auch eine @search.semanticQueryRewriteResultType-Eigenschaft mit dem Wert „OriginalQueryOnly“. Diese Meldung bedeutet, dass keine Abfrageumschreibungen verfügbar sind. Nur die ursprüngliche Abfrage wird zum Abrufen von Suchergebnissen verwendet.

Nächste Schritte

Die semantische Rangfolge kann in Hybridabfragen verwendet werden, die die Schlüsselwortsuche und die Vektorsuche in einer einzelnen Anforderung und einer einheitlichen Antwort kombinieren.