Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Pokud máte ve službě Azure AI Search vektorový index, tento článek vysvětluje, jak:
Tento článek používá rest pro ilustraci. Jakmile porozumíte základnímu pracovnímu postupu, pokračujte ukázkami kódu sady Azure SDK v úložišti azure-search-vector-samples , která poskytují kompletní řešení, která zahrnují vektorové dotazy.
Průzkumníka služby Search můžete také použít na webu Azure Portal.
Požadavky
Služba Azure AI Search v libovolné oblasti a na libovolné úrovni.
Vektorový index. Zkontrolujte oddíl v indexu
vectorSearch
a ověřte jeho přítomnost.Volitelně můžete do indexu přidat vektorizátor pro předdefinovaný převod textu na vektor nebo převod obrázků na vektor během dotazů.
Visual Studio Code s klientem REST a ukázkovými daty, pokud chcete tyto příklady spustit sami. Pokud chcete začít s klientem REST, přečtěte si článek Rychlý start: Fulltextové vyhledávání pomocí REST.
Převod vstupu řetězce dotazu na vektor
Pokud chcete dotazovat vektorové pole, musí být samotný dotaz vektorem.
Jedním z přístupů k převodu textového řetězce dotazu uživatele na jeho vektorové vyjádření je volání vložené knihovny nebo rozhraní API do kódu aplikace. Osvědčeným postupem je vždy použít stejné modely vkládání, které se používají k vygenerování vkládání ve zdrojových dokumentech. Ukázky kódu ukazující jak generovat embedding, v úložišti azure-search-vector-samples.
Druhým přístupem je použití integrované vektorizace, která je nyní obecně dostupná, aby služba Azure AI Search zpracovávala vstupy a výstupy vektorizace dotazů.
Tady je příklad rozhraní REST API řetězce dotazu odeslaného do nasazení modelu vkládání Azure OpenAI:
POST https://{{openai-service-name}}.openai.azure.com/openai/deployments/{{openai-deployment-name}}/embeddings?api-version={{openai-api-version}}
Content-Type: application/json
api-key: {{admin-api-key}}
{
"input": "what azure services support generative AI'"
}
Očekávaná odpověď je 202 pro úspěšné volání nasazeného modelu.
Pole embedding
v těle odpovědi je vektorové znázornění řetězce input
dotazu . Pro účely testování byste zkopírovali hodnotu embedding
pole do vectorQueries.vector
požadavku dotazu pomocí syntaxe uvedené v následujících několika částech.
Skutečná odpověď na tento POST požadavek nasazeného modelu zahrnuje 1 536 embeddingů. Pro čitelnost tento příklad ukazuje pouze několik prvních vektorů.
{
"object": "list",
"data": [
{
"object": "embedding",
"index": 0,
"embedding": [
-0.009171937,
0.018715322,
...
-0.0016804502
]
}
],
"model": "ada",
"usage": {
"prompt_tokens": 7,
"total_tokens": 7
}
}
V tomto přístupu zodpovídá kód aplikace za připojení k modelu, generování vložených objektů a zpracování odpovědi.
Žádost o vektorový dotaz
Tato část ukazuje základní strukturu vektorového dotazu. K formulování vektorového dotazu můžete použít Azure Portal, rozhraní REST API nebo sady Azure SDK.
Pokud migrujete z verze 2023-07-01-Preview, dojde k zásadním změnám. Další informace najdete v tématu Upgrade na nejnovější rozhraní REST API.
2024-07-01 je stabilní verze rozhraní REST API Search POST. Tato verze podporuje:
-
vectorQueries
je konstruktor pro vektorové vyhledávání. -
vectorQueries.kind
nastavte navector
pro vektorové pole nebotext
, pokud je vstup řetězec a pokud máte vektorizátor. -
vectorQueries.vector
je dotaz (vektorové znázornění textu nebo obrázku). -
vectorQueries.exhaustive
(volitelné) vyvolá vyčerpávající síť KNN v době dotazu, i když je pole indexováno pro HNSW. -
vectorQueries.fields
(volitelné) cílí na konkrétní pole pro provádění dotazů (až 10 na dotaz). -
vectorQueries.weight
(volitelné) určuje relativní váhu každého vektorového dotazu zahrnutého do vyhledávacích operací. Další informace naleznete v tématu Hmotnost vektoru. -
vectorQueries.k
je počet shod, které mají být vráceny.
V následujícím příkladu je vektor reprezentací tohoto řetězce: "what Azure services support full text search"
. Dotaz cílí na contentVector
pole a vrátí k
výsledky. Skutečný vektor má 1 536 vkládání, které jsou v tomto příkladu oříznuté kvůli čitelnosti.
POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2024-07-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
"count": true,
"select": "title, content, category",
"vectorQueries": [
{
"kind": "vector",
"vector": [
-0.009154141,
0.018708462,
. . .
-0.02178128,
-0.00086512347
],
"exhaustive": true,
"fields": "contentVector",
"weight": 0.5,
"k": 5
}
]
}
Odpověď vektorových dotazů
Ve službě Azure AI Search se odpovědi na dotazy ve výchozím nastavení skládají ze všech retrievable
polí. Je ale běžné omezit výsledky hledání na podmnožinu retrievable
polí jejich výpisem select
v příkazu.
V vektorovém dotazu pečlivě zvažte, jestli v odpovědi potřebujete vektorová pole. Vektorová pole nejsou čitelná člověkem, takže pokud odesíláte odpověď na webovou stránku, měli byste zvolit nevectorová pole, která představují výsledek. Pokud se například dotaz provede contentVector
proti, můžete místo toho vrátit content
.
Pokud chcete ve výsledku vektorová pole, tady je příklad struktury odpovědi.
contentVector
je pole řetězcových embeddingů, které jsou v tomto příkladu zkráceny kvůli lepší čitelnosti. Skóre hledání označuje relevanci. Další nevectorová pole jsou zahrnuta pro kontext.
{
"@odata.count": 3,
"value": [
{
"@search.score": 0.80025613,
"title": "Azure Search",
"category": "AI + Machine Learning",
"contentVector": [
-0.0018343845,
0.017952163,
0.0025753193,
...
]
},
{
"@search.score": 0.78856903,
"title": "Azure Application Insights",
"category": "Management + Governance",
"contentVector": [
-0.016821077,
0.0037742127,
0.016136652,
...
]
},
{
"@search.score": 0.78650564,
"title": "Azure Media Services",
"category": "Media",
"contentVector": [
-0.025449317,
0.0038463024,
-0.02488436,
...
]
}
]
}
Klíčové body:
k
určuje, kolik výsledků nejbližšího souseda se vrátí, v tomto případě tři. Vektorové dotazy vždy vracík
výsledky za předpokladu, že existují alespoňk
dokumenty, i když některé dokumenty mají špatnou podobnost. Důvodem je to, že algoritmus najde nejbližšík
sousedy vektoru dotazu.Algoritmus vektorového vyhledávání určuje
@search.score
.Pole ve výsledcích hledání jsou všechna
retrievable
pole nebo pole vselect
klauzuli. Během provádění vektorových dotazů se porovnávání provádí pouze na vektorových datech. Odpověď však může obsahovat libovolnéretrievable
pole v indexu. Vzhledem k tomu, že neexistuje žádné zařízení pro dekódování výsledku vektorového pole, je zahrnutí nevectorových textových polí užitečné pro jejich hodnoty čitelné člověkem.
Více vektorových polí
Vlastnost můžete nastavit vectorQueries.fields
na více vektorových polí. Vektorový dotaz se provede pro každé vektorové pole, které zadáte v fields
seznamu. Můžete zadat až 10 polí.
Při dotazování více vektorových polí se ujistěte, že každý z nich obsahuje vkládání ze stejného modelu vkládání. Dotaz by se měl vygenerovat také ze stejného modelu vkládání.
POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2024-07-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
"count": true,
"select": "title, content, category",
"vectorQueries": [
{
"kind": "vector",
"vector": [
-0.009154141,
0.018708462,
. . .
-0.02178128,
-0.00086512347
],
"exhaustive": true,
"fields": "contentVector, titleVector",
"k": 5
}
]
}
Více vektorových dotazů
Víceotázové vektorové vyhledávání odesílá více dotazů napříč více vektorovými poli ve vyhledávacím indexu. Tento typ dotazu se běžně používá s modely, jako je CLIP pro multimodální vyhledávání, kde stejný model může vektorizovat text i obrázky.
Následující příklad dotazu hledá podobnost jak v myImageVector
, tak v myTextVector
, ale odesílá příslušné vložené dotazy, přičemž každý se provádí paralelně. Výsledek tohoto dotazu se vyhodnotí pomocí reciproční fúze pořadí (RRF).
-
vectorQueries
poskytuje pole vektorových dotazů. -
vector
obsahuje vektory obrázků a textové vektory v indexu vyhledávání. Každá instance je samostatný dotaz. -
fields
určuje, které vektorové pole se má cílit. -
k
je počet nejbližších sousedů, které se mají zahrnout do výsledků.
{
"count": true,
"select": "title, content, category",
"vectorQueries": [
{
"kind": "vector",
"vector": [
-0.009154141,
0.018708462,
. . .
-0.02178128,
-0.00086512347
],
"fields": "myimagevector",
"k": 5
},
{
"kind": "vector"
"vector": [
-0.002222222,
0.018708462,
-0.013770515,
. . .
],
"fields": "mytextvector",
"k": 5
}
]
}
Indexy vyhledávání nemůžou ukládat obrázky. Za předpokladu, že index obsahuje pole pro soubor obrázku, výsledky hledání by zahrnovaly kombinaci textu a obrázků.
Dotazování pomocí integrované vektorizace
Tato část ukazuje vektorový dotaz, který vyvolá integrovanou vektorizaci pro převod textového nebo obrázkového dotazu na vektor. Pro tuto funkci doporučujeme stabilní 2024-07-01 rozhraní REST API, Průzkumník služby Search nebo novější balíčky sady Azure SDK.
Předpokladem je index vyhledávání, který má nakonfigurovaný vektorizátor a přiřazený k vektorovým polím. Vektorizátor poskytuje informace o připojení k modelu vkládání použitému v době dotazu.
Průzkumník služby Search podporuje integrovanou vektorizaci v době dotazu. Pokud index obsahuje vektorová pole a vektorizátor, můžete použít předdefinovaný převod textu na vektor.
Přihlaste se k webu Azure Portal a vyhledejte vyhledávací službu.
V nabídce vlevo vyberte správy vyhledávání>Indexy a pak vyberte svůj index.
Vyberte kartu Vektorové profily a potvrďte, že máte vektorizátor.
Vyberte kartu Průzkumník služby Search . Pomocí výchozího zobrazení dotazu můžete do vyhledávacího panelu zadat textový řetězec. Integrovaný vektorizátor převede řetězec na vektor, provede hledání a vrátí výsledky.
Případně můžete vybrat zobrazení ZOBRAZIT>JSON a zobrazit nebo upravit dotaz. Pokud jsou vektory přítomné, Průzkumník služby Search automaticky nastaví vektorový dotaz. Pomocí zobrazení JSON můžete vybrat pole pro použití ve vyhledávání a odpovědi, přidat filtry a vytvořit pokročilejší dotazy, jako jsou hybridní dotazy. Pokud chcete zobrazit příklad JSON, vyberte kartu ROZHRANÍ REST API v této části.
Počet seřazených výsledků v odpovědi vektorového dotazu
Vektorový dotaz určuje k
parametr, který určuje, kolik shod se vrátí ve výsledcích. Vyhledávací web vždy vrátí k
počet shod. Pokud k
je větší než počet dokumentů v indexu, určuje počet dokumentů horní mez toho, co lze vrátit.
Pokud jste obeznámeni s fulltextovým vyhledáváním, víte, že očekáváte nulové výsledky, pokud index neobsahuje termín nebo frázi. Při vektorovém vyhledávání ale operace hledání identifikuje nejbližší sousedy a vždy vrací k
výsledky, i když nejbližší sousedé nejsou tak podobné. Je možné získat výsledky pro nesmyslné dotazy nebo dotazy mimo téma, zejména pokud nepoužíváte výzvy k nastavení hranic. Méně relevantní výsledky mají horší skóre podobnosti, ale stále jsou "nejbližšími" vektory, pokud není nic bližšího. Odpověď bez smysluplných výsledků proto může stále vracet k
výsledky, ale skóre podobnosti každého výsledku by bylo nízké.
Tento problém může zmírnit hybridní přístup , který zahrnuje fulltextové vyhledávání. Dalším řešením je nastavit minimální prahovou hodnotu pro skóre hledání, ale pouze v případě, že je dotaz čistě jedním vektorovým dotazem. Hybridní dotazy nejsou příznivé pro minimální prahové hodnoty, protože rozsahy RRF jsou mnohem menší a nestálější.
Mezi parametry dotazu, které ovlivňují počet výsledků, patří:
-
"k": n
výsledky pro dotazy pouze s vektory. -
"top": n
výsledky pro hybridní dotazy, které obsahujísearch
parametr.
Obě k
a top
jsou volitelné. Pokud není zadaný, výchozí počet výsledků v odpovědi je 50. Můžete nastavit top
a skip
pro procházení více výsledků nebo změnit výchozí nastavení.
Algoritmy řazení používané ve vektorovém dotazu
Pořadí výsledků se vypočítá buď takto:
- Metrika podobnosti.
- RRF, pokud existuje více sad výsledků hledání.
Metrika podobnosti
Metrika podobnosti zadaná v části indexu vectorSearch
dotazu jen pro vektor. Platné hodnoty jsou cosine
, euclidean
a dotProduct
.
Modely vkládání Azure OpenAI používají kosinusovou podobnost, takže pokud používáte modely vkládání Azure OpenAI, cosine
je doporučená metrika. Mezi další podporované metriky řazení patří euclidean
a dotProduct
.
RRF
Více sad se vytvoří, pokud dotaz cílí na více vektorových polí, spustí paralelně více vektorových dotazů nebo je hybridní vektorové a fulltextové vyhledávání s sémantickým řazením nebo bez.
Během provádění dotazu může vektorový dotaz cílit pouze na jeden interní vektorový index. U více vektorových polí a více vektorových dotazů vygeneruje vyhledávací web více dotazů, které cílí na odpovídající vektorové indexy každého pole. Výstup je sada seřazených výsledků pro každý dotaz, které jsou sloučeny pomocí RRF. Další informace naleznete v tématu Hodnocení relevance pomocí reciproční fúze pořadí.
Vektorové váhy
weight
Přidejte parametr dotazu, který určuje relativní váhu každého vektorového dotazu zahrnutého do vyhledávacích operací. Tato hodnota se používá při kombinování výsledků více seznamů řazení vytvořených dvěma nebo více vektorovými dotazy ve stejném požadavku nebo z vektorové části hybridního dotazu.
Výchozí hodnota je 1,0 a hodnota musí být kladné číslo větší než nula.
Váhy se používají při výpočtu skóre RRF každého dokumentu. Výpočet je násobitelem weight
hodnoty oproti skóre pořadí dokumentu v příslušné sadě výsledků.
Následující příklad je hybridní dotaz se dvěma řetězci vektorového dotazu a jedním textovým řetězcem. Váhy se přiřazují vektorům dotazů. První dotaz je 0,5 nebo polovina váhy, což snižuje jeho důležitost v požadavku. Druhý vektorový dotaz je dvakrát důležitý.
POST https://[service-name].search.windows.net/indexes/[index-name]/docs/search?api-version=2024-07-01
{
"vectorQueries": [
{
"kind": "vector",
"vector": [1.0, 2.0, 3.0],
"fields": "my_first_vector_field",
"k": 10,
"weight": 0.5
},
{
"kind": "vector",
"vector": [4.0, 5.0, 6.0],
"fields": "my_second_vector_field",
"k": 10,
"weight": 2.0
}
],
"search": "hello world"
}
Hmotnost vektorů se vztahuje pouze na vektory. Textový dotaz v tomto příkladu "hello world"
má implicitní neutrální váhu 1,0. V hybridním dotazu ale můžete zvýšit nebo snížit důležitost textových polí nastavením maxTextRecallSize.
Nastavení prahových hodnot pro vyloučení výsledků s nízkým skóre (Preview)
Vzhledem k tomu, že hledání nejbližšího souseda vždy vrací požadované k
sousedy, je možné získat více shod s nízkým skóre v rámci splnění k
požadavku na počet výsledků hledání. Pokud chcete vyloučit výsledky hledání s nízkým skóre, můžete přidat threshold
parametr dotazu, který vyfiltruje výsledky na základě minimálního skóre. Filtrování probíhá před rozdělením výsledků z různých sad úplností.
Tento parametr je ve verzi Preview. Doporučujeme verzi rozhraní REST API verze 2024-05-01-preview .
V tomto příkladu jsou všechny shody s hodnocením pod 0,8 vyloučeny z výsledků vektorového hledání, a to i když počet výsledků klesne pod k
.
POST https://[service-name].search.windows.net/indexes/[index-name]/docs/search?api-version=2024-05-01-preview
Content-Type: application/json
api-key: [admin key]
{
"vectorQueries": [
{
"kind": "vector",
"vector": [1.0, 2.0, 3.0],
"fields": "my-cosine-field",
"threshold": {
"kind": "vectorSimilarity",
"value": 0.8
}
}
]
}
MaxTextSizeRecall pro hybridní vyhledávání (Preview)
Vektorové dotazy se často používají v hybridních konstruktorech, které obsahují nevectorová pole. Pokud zjistíte, že výsledky seřazené podle BM25 jsou ve výsledcích hybridních dotazů vyšší nebo nižší, můžete nastavit maxTextRecallSize
zvýšení nebo snížení výsledků seřazených podle BM25 pro hybridní řazení.
Tuto vlastnost můžete nastavit pouze v hybridních požadavcích, které zahrnují obě search
i vectorQueries
komponenty.
Tento parametr je ve verzi Preview. Doporučujeme verzi rozhraní REST API verze 2024-05-01-preview .
Další informace naleznete v tématu Set maxTextRecallSize – Vytvoření hybridního dotazu.
Další kroky
V dalším kroku si projděte příklady kódu vektorového dotazu v Pythonu, C# nebo JavaScriptu.