Megosztás a következőn keresztül:


Lekérdezések átírása szemantikai rangsorolóval az Azure AI Searchben (előzetes verzió)

Feljegyzés

Ez a funkció jelenleg nyilvános előzetes verzióban érhető el. Ez az előzetes verzió szolgáltatásszintű szerződés nélkül érhető el, és éles számítási feladatokhoz nem ajánlott. Előfordulhat, hogy néhány funkció nem támogatott, vagy korlátozott képességekkel rendelkezik. További információ: Kiegészítő használati feltételek a Microsoft Azure előzetes verziójú termékeihez.

A lekérdezés újraírása a felhasználó lekérdezésének hatékonyabbvá alakításának folyamata, további kifejezések hozzáadásával és a keresési eredmények finomításával. A keresési szolgáltatás elküldi a keresési lekérdezést (vagy annak egy változatát) egy olyan generatív modellnek, amely alternatív lekérdezéseket hoz létre.

A lekérdezések újraírása javítja a szemantikai rangsorolás eredményeit a felhasználói lekérdezések elírási vagy helyesírási hibáinak kijavításával, valamint a lekérdezések szinonimáival való kibővítésével.

A lekérdezés újraírásával történő keresés a következőképpen működik:

  • A felhasználói lekérdezést a rendszer a search kérelem tulajdonságán keresztül küldi el.
  • A keresési szolgáltatás elküldi a keresési lekérdezést (vagy annak egy változatát) egy olyan generatív modellnek, amely alternatív lekérdezéseket hoz létre.
  • A keresési szolgáltatás az eredeti lekérdezést és az újraírt lekérdezéseket használja a keresési eredmények lekéréséhez.

A lekérdezés újraírása nem kötelező funkció. A lekérdezés újraírása nélkül a keresési szolgáltatás csak az eredeti lekérdezést használja a keresési eredmények lekéréséhez.

Feljegyzés

Előfordulhat, hogy az újraírt lekérdezések nem tartalmazzák az eredeti lekérdezés összes pontos kifejezését. Ez hatással lehet a keresési eredményekre, ha a lekérdezés nagyon specifikus volt, és pontos egyezéseket igényelt az egyedi azonosítókhoz vagy termékkódokhoz.

Előfeltételek

  • Keresési szolgáltatás, alapszintű vagy magasabb szintű.

Feljegyzés

A lekérdezések újraírása jelenleg Észak-Európában és Délkelet-Ázsiában érhető el.

Fontos

A szemantikai rangsoroló jelenleg szükséges a lekérdezések újraírásához.

  • Meglévő keresési index szemantikai konfigurációval és rich text tartalommal. Az útmutatóban szereplő példák a hotels-sample-index mintaadatokat használják a lekérdezés újraírásának szemléltetésére. Saját adataival és indexével tesztelheti a lekérdezések újraírását.

  • Olyan webes ügyfélre van szüksége, amely támogatja a REST API-kéréseket. Az útmutatóban szereplő példákat a Visual Studio Code-tal teszteltük a REST-ügyfélbővítménnyel.

Tipp.

A magyarázatokat vagy definíciókat tartalmazó tartalom a szemantikai rangsorolás szempontjából működik a legjobban.

Keresési kérelem kérése lekérdezés újraírásával

Ebben a REST API-példában a Keresési dokumentumok használatával fogalmazzuk meg a kérést. A kérelem- és választulajdonságokkal kapcsolatos további információkért tekintse meg az API referenciadokumentációját.

  1. Illessze be a következő kérést egy webügyfélbe sablonként.

    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
    }
    
    • A keresési szolgáltatás nevére cseréli search-service-name .

    • Ha nem azonos, akkor az index nevére kell cserélnie hotels-sample-index .

    • A "keresés" egy teljes szöveges keresési lekérdezésre van beállítva. A keresési tulajdonság a lekérdezés újraírásához szükséges, hacsak nem ad meg vektoros lekérdezéseket. Ha vektoros lekérdezéseket ad meg, a "keresés" szövegnek meg kell egyeznie az "text" "vectorQueries" objektum tulajdonságával. A keresési sztring támogatja az egyszerű vagy a teljes Lucene szintaxist.

    • A "szemanticConfiguration" beállítást egy előre definiált szemantikai konfigurációra állítjuk be az indexbe ágyazva.

    • A "queryType" értékét "szemantikai" értékre állítjuk. Vagy be kell állítani a "queryType" értéket "szemantikus" értékre, vagy bele kell foglalnunk egy nem létező "szemanticQuery" tulajdonságot a kérelembe. A szemantikai rangsorolás szükséges a lekérdezés újraírásához.

    • A "queryRewrites" értéket "generative|count-5" értékre állítjuk, hogy legfeljebb öt lekérdezés újraírása legyen. A darabszámot tetszőleges, 1 és 10 közötti értékre állíthatja.

    • Mivel a lekérdezés újraírását a "queryRewrites" tulajdonság beállításával kértük, a "queryLanguage" értéket a keresési szöveg nyelvére kell állítani. A Search szolgáltatás ugyanazt a nyelvet használja a lekérdezés újraírásához. Ebben a példában az "en-US" kifejezést használjuk. A támogatott területi beállítások a következők: en-AU, en-CA, , en-INen-GBen-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-IN, te-IN, th-TH, tr-TRuk-UA, ur-PK, vi-VN, zh-CNzh-TW.

    • A "hibakeresést" a "queryRewrites" értékre állítjuk, hogy a lekérdezés újraírásokat kapjon a válaszban.

      Tipp.

      Csak tesztelési célokra van beállítva "debug": "queryRewrites" . A jobb teljesítmény érdekében ne használjon hibakeresést éles környezetben.

    • A "felső" értéket 1 értékre állítottuk, hogy csak a legfelső találatot adja vissza.

  2. Küldje el a kérést a lekérdezés végrehajtására és az eredmények visszaadására.

Ezután a lekérdezés újraírásával kiértékeljük a keresési eredményeket.

A válasz kiértékelése

Íme egy példa a lekérdezés újraírását tartalmazó válaszra:

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

Íme néhány fontos megjegyzés:

  • Mivel a "debug" tulajdonságot a "queryRewrites" értékre állítjuk teszteléshez, a válasz tartalmaz egy @search.debug objektumot a szövegbeviteli lekérdezéssel és a lekérdezés újraírásával.
  • Mivel a "queryRewrites" tulajdonságot "generative|count-5" értékre állítjuk, a válasz legfeljebb öt lekérdezési átírást tartalmaz.
  • Az "inputQuery" érték a lekérdezés újraírásához a generatív modellnek küldött lekérdezés. A bemeneti lekérdezés nem mindig ugyanaz, mint a felhasználó lekérdezése "search" .

Íme egy példa a lekérdezés újraírása nélküli válaszra.

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

Vektoros lekérdezések lekérdezés újraírásával

A keresési kérelembe vektoros lekérdezéseket is belefoglalhat, így a kulcsszókeresést és a vektorkeresést egyetlen kérelemben és egységes válaszban kombinálhatja.

Íme egy példa egy olyan lekérdezésre, amely egy vektoros lekérdezést tartalmaz a lekérdezés újraírásával. Az előző példát úgy módosítjuk, hogy egy vektoros lekérdezést is tartalmazzon.

  • Hozzáadunk egy "vectorQueries" objektumot a kéréshez. Ez az objektum tartalmaz egy vektoros lekérdezést, amelynek "kind" értéke "text".
  • A "szöveg" érték megegyezik a "keresés" értékével. Ezeknek az értékeknek azonosnak kell lenniük ahhoz, hogy a lekérdezés újraírása működjön.
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
}

A válasz a szöveges és a vektoros lekérdezés lekérdezési átírását is tartalmazza.

Lekérdezés újraírásának tesztelése hibakereséssel

Tesztelje a lekérdezés újraírásait, hogy biztosan a várt módon működjenek. Állítsa be a tulajdonságot a "debug": "queryRewrites" lekérdezési kérelemben, hogy a lekérdezés átírja a választ. A beállítás "debug" tesztelési célokra nem kötelező. A jobb teljesítmény érdekében ne állítsa be ezt a tulajdonságot éles környezetben.

Részleges válasz okai

Megfigyelheti, hogy a hibakeresési (tesztelési) válasz tartalmaz egy üres tömböt a tulajdonságokhoz és vectors a text.rewrites tulajdonságokhoz.

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

Az előző példában:

  • A válasz tartalmaz egy @search.semanticPartialResponseReason "Átmeneti" értékű tulajdonságot. Ez az üzenet azt jelenti, hogy legalább az egyik lekérdezés nem fejeződött be.
  • A válasz tartalmaz egy @search.semanticQueryRewriteResultType "OriginalQueryOnly" értékű tulajdonságot is. Ez az üzenet azt jelenti, hogy a lekérdezés újraírása nem érhető el. A rendszer csak az eredeti lekérdezést használja a keresési eredmények lekéréséhez.

Következő lépések

A szemantikai rangsorolás olyan hibrid lekérdezésekben használható, amelyek a kulcsszókeresést és a vektorkeresést egyetlen kérelemben és egységes válaszban egyesítik.