Vytvoření hybridního dotazu ve službě Azure AI Search
Hybridní vyhledávání kombinuje jeden nebo více dotazů klíčových slov s jedním nebo více vektorovými dotazy v jednom požadavku hledání. Dotazy se provádějí paralelně. Výsledky se sloučí a přeuspořádají podle nových skóre hledání pomocí reciproční fúzní rank fusion (RRF) a vrátí jednu seřazenou sadu výsledků.
Ve většině případů vrátí hybridní dotazy s sémantické řazení nejrelevavantnější výsledky na testy srovnávacích testů.
Pokud chcete definovat hybridní dotaz, použijte rozhraní REST API 2023-11-01, 2023-10-01-preview, 2024-03-01-preview, Průzkumník služby Search na webu Azure Portal nebo novější verze sad SDK Azure.
Požadavky
Index vyhledávání obsahující
searchable
vektorová a nevectorová pole. Viz Vytvoření indexu a Přidání vektorových polí do indexu vyhledávání.(Volitelné) Pokud chcete sémantické řazení, musí být vaše vyhledávací služba úroveň Basic nebo vyšší s povoleným sémantickým řazením.
(Volitelné) Pokud chcete převod řetězce dotazu typu text-to-vector (aktuálně ve verzi Preview), vytvořte a přiřaďte vektorizátor vektorovým polím v indexu vyhledávání.
Spuštění hybridního dotazu v Průzkumníku služby Search
V Průzkumníku služby Search se ujistěte, že verze rozhraní API je 2023-10-01-preview nebo novější.
V části Zobrazení vyberte zobrazení JSON.
Nahraďte výchozí šablonu dotazu hybridním dotazem, například šablonou začínající na řádku 539 pro příklad rychlého startu vektoru. Pro stručnost je vektor zkrácený v tomto článku.
Hybridní dotaz má textový dotaz zadaný v
search
a vektorový dotaz zadaný v částivectorQueries.vector
.Textový dotaz a vektorový dotaz by měly být ekvivalentní nebo alespoň nekonfliktu. Pokud se dotazy liší, nezískute výhodu hybridního nasazení.
{ "count": true, "search": "historic hotel walk to restaurants and shopping", "select": "HotelId, HotelName, Category, Tags, Description", "top": 7, "vectorQueries": [ { "vector": [0.01944167, 0.0040178085, -0.007816401 ... <remaining values omitted> ], "k": 7, "fields": "DescriptionVector", "kind": "vector", "exhaustive": true } ] }
Vyberte Hledat.
Žádost o hybridní dotaz (REST API)
Hybridní dotaz kombinuje vyhledávání textu a vektorové vyhledávání, kde search
parametr přebírá řetězec dotazu a vectorQueries.vector
přebírá vektorový dotaz. Vyhledávací web spouští paralelně fulltextové a vektorové dotazy. Sjednocení všech shod se vyhodnocuje z hlediska relevance pomocí reciproční rank fusion (RRF) a v odpovědi se vrátí jedna sada výsledků.
Výsledky se vrátí ve formátu prostého textu, včetně vektorů v polích označených jako retrievable
. Vzhledem k tomu, že číselné vektory nejsou ve výsledcích hledání užitečné, zvolte jiná pole v indexu jako proxy pro shodu vektoru. Pokud má například index pole descriptionVector a descriptionText, dotaz se může shodovat s "descriptionVector", ale výsledek hledání může zobrazit "descriptionText". Pomocí parametru select
můžete ve výsledcích zadat pouze pole čitelná pro člověka.
Následující příklad ukazuje konfiguraci hybridního dotazu.
POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2023-11-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
"vectorQueries": [{
"vector": [
-0.009154141,
0.018708462,
. . .
-0.02178128,
-0.00086512347
],
"fields": "DescriptionVector",
"kind": "vector",
"exhaustive": true,
"k": 10
}],
"search": "historic hotel walk to restaurants and shopping",
"select": "HotelName, Description, Address/City",
"top": "10"
}
Klíčové body:
Řetězec vektorového
vectorQueries.vector
dotazu je určen prostřednictvím vlastnosti. Dotaz se spustí v poli DescriptionVector. Nastavtekind
na "vector" pro označení typu dotazu. Volitelně můžete nastavitexhaustive
hodnotu true pro dotazování na úplný obsah vektorového pole.Hledání klíčových slov je zadáno prostřednictvím
search
vlastnosti. Provede se paralelně s vektorovým dotazem.k
určuje, kolik nejbližších shod sousedů se vrátí z vektorového dotazu a poskytne ho rankeru RRF.top
určuje, kolik shod se vrátí v odpovědi all-up. V tomto příkladu odpověď obsahuje 10 výsledků za předpokladu, že ve sloučených výsledcích je alespoň 10 shod.
Hybridní vyhledávání s filtrem
Tento příklad přidá filtr, který se použije u filterable
polí nevectoru indexu vyhledávání.
POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2023-11-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
"vectorQueries": [
{
"vector": [
-0.009154141,
0.018708462,
. . .
-0.02178128,
-0.00086512347
],
"fields": "DescriptionVector",
"kind": "vector",
"k": 10
}
],
"search": "historic hotel walk to restaurants and shopping",
"vectorFilterMode": "postFilter",
"filter": "ParkingIncluded",
"top": "10"
}
Klíčové body:
Filtry se použijí na obsah filtrovatelných polí. V tomto příkladu je pole ParkingIncluded logická hodnota a je označená jako
filterable
ve schématu indexu.V hybridních dotazech je možné filtry použít před provedením dotazu, aby se snížila plocha dotazu nebo po provedení dotazu, aby se výsledky ořízly.
"preFilter"
je výchozí možnost. Pokud chcete použítpostFilter
, nastavte režim zpracování filtru, jak je znázorněno v tomto příkladu.Při postfiltrování výsledků dotazu může být počet výsledků menší než prvních n.
Sémantické hybridní vyhledávání
Za předpokladu, že jste povolili sémantické řazení a definice indexu obsahuje sémantickou konfiguraci, můžete formulovat dotaz, který zahrnuje vyhledávání vektorů a vyhledávání klíčových slov, sémantické řazení nad sloučenou sadou výsledků. Volitelně můžete přidat popis a odpovědi.
POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2023-11-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
"vectorQueries": [
{
"vector": [
-0.009154141,
0.018708462,
. . .
-0.02178128,
-0.00086512347
],
"fields": "DescriptionVector",
"kind": "vector",
"k": 50
}
],
"search": "historic hotel walk to restaurants and shopping",
"select": "HotelName, Description, Tags",
"queryType": "semantic",
"semanticConfiguration": "my-semantic-config",
"captions": "extractive",
"answers": "extractive",
"top": "50"
}
Klíčové body:
Sémantické hodnocení přijímá až 50 výsledků z sloučené odpovědi. U obou dotazů nastavte "k" a "top" na 50.
Vyžaduje se "queryType" a "sémanticConfiguration".
"popis" a "odpovědi" jsou volitelné. Hodnoty se ve výsledcích extrahují z doslovného textu. Odpověď se vrátí pouze v případě, že výsledky obsahují obsah, který má charakteristiky odpovědi na dotaz.
Sémantické hybridní vyhledávání s využitím filtru
Tady je poslední dotaz v kolekci. Jedná se o stejný sémantický hybridní dotaz jako v předchozím příkladu, ale s filtrem.
POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2023-11-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
"vectorQueries": [
{
"vector": [
-0.009154141,
0.018708462,
. . .
-0.02178128,
-0.00086512347
],
"fields": "DescriptionVector",
"kind": "vector",
"k": 50
}
],
"search": "historic hotel walk to restaurants and shopping",
"select": "HotelName, Description, Tags",
"queryType": "semantic",
"semanticConfiguration": "my-semantic-config",
"captions": "extractive",
"answers": "extractive",
"filter": "ParkingIsIncluded'",
"vectorFilterMode": "postFilter",
"top": "50"
}
Klíčové body:
Režim filtru může ovlivnit počet výsledků dostupných pro sémantickou reranker. Osvědčeným postupem je dát sémantickému rankeru maximální počet dokumentů (50). Pokud jsou prefiltery nebo postfiltery příliš selektivní, možná si zarezervujete sémantický ranker tím, že mu poskytnete méně než 50 dokumentů, se kterými můžete pracovat.
Před spuštěním dotazu se použije před filtrováním. Pokud prefilter zmenšuje vyhledávací oblast na 100 dokumentů, provede vektorový dotaz u těchto 100 dokumentů pole PopisVector a vrátí nejlepší shody k=50. Tyto 50 odpovídajících dokumentů pak předají RRF pro sloučené výsledky a pak do sémantického rankeru.
Postfilter se použije po spuštění dotazu. Pokud k=50 vrátí 50 shod na straně vektorového dotazu, použije se postfiltr na 50 shod, čímž se sníží počet výsledků splňujících kritéria filtru a nechá vás méně než 50 dokumentů, které se předávají sémantickému rankeru.
Konfigurace odpovědi dotazu
Při nastavování hybridního dotazu se zamyslete nad strukturou odpovědí. Odpověď je zploštěná sada řádků. Parametry dotazu určují, která pole jsou v každém řádku a kolik řádků je v odpovědi. Vyhledávací web řadí odpovídající dokumenty a vrací nejrelevavantnější výsledky.
Pole v odpovědi
Výsledky hledání se skládají z retrievable
polí z indexu vyhledávání. Výsledek je jeden z těchto:
- Všechna
retrievable
pole (výchozí rozhraní REST API). - Pole jsou explicitně uvedena v parametru "select" v dotazu.
Příklady v tomto článku použily příkaz "select" k určení textových polí (nonvector) v odpovědi.
Poznámka:
Vektory nejsou zpětně analyzovat do čitelného textu člověka, takže je v odpovědi nevracejte. Místo toho zvolte nevectorová pole, která jsou reprezentativní pro hledaný dokument. Pokud například dotaz cílí na pole PopisVector, vrátí ekvivalentní textové pole, pokud máte v odpovědi jedno pole ("Popis").
Počet výsledků
Dotaz se může shodovat s libovolným počtem dokumentů, tolik jako všechny, pokud jsou vyhledávací kritéria slabá (například "search=*" pro dotaz s hodnotou null). Vzhledem k tomu, že vrácení nevázaných výsledků je velmi praktické, měli byste pro odpověď zadat maximum:
"k": n
výsledky pro dotazy pouze s vektory"top": n
výsledky pro hybridní dotazy, které obsahují parametr "search".
"k" i "top" jsou volitelné. Není zadáno, výchozí počet výsledků v odpovědi je 50. Můžete nastavit "horní" a "přeskočit" na stránku prostřednictvím dalších výsledků nebo změnit výchozí.
Pokud používáte sémantické hodnocení, je osvědčeným postupem nastavit "k" i "top" alespoň na 50. Sémantický ranker může trvat až 50 výsledků. Zadáním hodnoty 50 pro každý dotaz získáte stejnou reprezentaci z obou vyhledávacích subsystémů.
Hodnocení
Pro hybridní dotazy se vytvoří více sad s volitelným sémantickým pořadím nebo bez. Hodnocení výsledků se počítá podle reciproční Rank Fusion (RRF).
V této části porovnejte odpovědi mezi vyhledáváním s jedním vektorem a jednoduchým hybridním vyhledáváním pro nejlepší výsledek. Různé algoritmy řazení, metrika podobnosti HNSW a RRF jsou v tomto případě výsledkem skóre s různými velikostmi. Toto chování je záměrné. Skóre RRF se může objevit poměrně nízká, i když se shodou s vysokou podobností. Nižší skóre jsou charakteristickým prvkem algoritmu RRF. V hybridním dotazu s RRF se do výsledků zahrne více recipročních dokumentů seřazených dokumentů vzhledem k relativně menšímu skóre seřazených dokumentů RRF na rozdíl od čistě vektorového vyhledávání.
Jednoduché hledání vektorů: @search.score výsledky seřazené podle kosinus podobnosti (výchozí funkce vzdálenosti vektoru).
{
"@search.score": 0.8399121,
"HotelId": "49",
"HotelName": "Old Carrabelle Hotel",
"Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center.",
"Category": "Luxury",
"Address": {
"City": "Arlington"
}
}
Hybridní hledání: @search.score Hybridní výsledky seřazené pomocí reciproční Rank Fusion.
{
"@search.score": 0.032786883413791656,
"HotelId": "49",
"HotelName": "Old Carrabelle Hotel",
"Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center.",
"Category": "Luxury",
"Address": {
"City": "Arlington"
}
}
Další kroky
Jako další krok doporučujeme projít si ukázkový kód pro Python, C# nebo JavaScript.