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.
Cosmos DB v prostředcích infrastruktury teď nabízí efektivní indexování vektorů a vyhledávání. Tato funkce je navržená tak, aby zpracovávala multimodální, vysoce dimenzionální vektory a umožňovala efektivní a přesné vektorové vyhledávání v libovolném měřítku. Vektory teď můžete ukládat přímo v dokumentech spolu s daty. Každý dokument v databázi může obsahovat nejen tradiční data bez schématu, ale také multimodální vysoce dimenzionální vektory jako další vlastnosti dokumentů. Toto umístění dat a vektorů umožňuje efektivní indexování a vyhledávání, protože vektory jsou uloženy ve stejné logické jednotce jako data, která představují. Udržování vektorů a dat společně zjednodušuje správu dat, architektury aplikací AI a efektivitu operací založených na vektorech.
Cosmos DB v rámci platformy Fabric nabízí flexibilitu při výběru metody indexování vektorů.
Přesné vyhledávání "plochých" nebo k-nejbližších sousedů (někdy označované jako hrubá síla) může poskytnout 100% úplnost vyhledávání pro menší, cílené vektorové vyhledávání. zejména v kombinaci s filtry dotazů a klíči oddílů.
Kvantovaný plochý index, který komprimuje vektory pomocí metod kvantování založených na DiskANN pro lepší efektivitu při hledání kNN.
DiskANN, sada nejmodernějších algoritmů indexování vektorů vyvinutých společností Microsoft Research, která umožňuje efektivní a vysoce přesné multimodální vektorové vyhledávání v libovolném měřítku.
Vektorové vyhledávání ve službě Cosmos DB je možné kombinovat se všemi ostatními podporovanými filtry dotazů NoSQL a indexy pomocí WHERE klauzulí. Tato kombinace umožňuje, aby vektorové vyhledávání byla nejrelevavantnějšími daty pro vaše aplikace.
Tato funkce vylepšuje základní funkce služby Cosmos DB, takže je všestrannější pro zpracování požadavků na vektorová data a vyhledávání v aplikacích AI.
Co je úložiště vektorů?
Vektorové úložiště nebo vektorová databáze je databáze určená k ukládání a správě vkládání vektorů, což jsou matematické reprezentace dat ve vysokodimenzionálním prostoru. V tomto prostoru každá dimenze odpovídá funkci dat a desítky tisíc dimenzí se můžou použít k reprezentaci sofistikovaných dat. Pozice vektoru v tomto prostoru představuje jeho vlastnosti. Slova, fráze nebo celé dokumenty a obrázky, zvuk a další typy dat můžou být vektorizovány.
Jak funguje úložiště vektorů?
V úložišti vektorů se algoritmy vektorového vyhledávání používají k indexování a vkládání dotazů. Mezi dobře známé algoritmy vektorového vyhledávání patří Hierarchical Navigable Small World (HNSW), Inverted File (IVF), DiskANN atd. Vektorové vyhledávání je metoda, která vám pomůže najít podobné položky na základě jejich charakteristik dat, nikoli přesných shod v poli vlastnosti. Tato technika je užitečná v aplikacích, jako je hledání podobného textu, hledání souvisejících obrázků, vytváření doporučení nebo dokonce zjišťování anomálií. Používá se k dotazování vektorových vnoření vašich dat, která jste vytvořili pomocí modelu strojového učení využitím API pro vnoření. Příklady rozhraní API pro embeddování jsou Azure OpenAI Embeddings nebo Hugging Face na Azure. Vektorové vyhledávání měří vzdálenost mezi datovými vektory a vektorem dotazu. Datové vektory, které jsou nejblíže vašemu vektoru dotazu, jsou ty, které jsou nalezeny nejvíce podobné sémanticky.
V integrované vektorové databázi ve Fabricu ve službě Cosmos DB lze embeddingy ukládat, indexovat a dotazovat společně s původními daty. Tento přístup eliminuje dodatečné náklady na replikaci dat v samostatné čistě vektorové databázi. Tato architektura navíc udržuje vektorové vkládání a původní data pohromadě, což usnadňuje operace s více modálními daty a umožňuje větší konzistenci dat, škálování a výkon.
Zásady vektorů kontejnerů
Provádění vektorového vyhledávání ve službě Cosmos DB v rámci Fabric vyžaduje, abyste definovali zásadu vektoru pro kontejner. Tato zásada poskytuje základní informace databázovému stroji, aby prováděl efektivní vyhledávání vektorů nalezených v dokumentech kontejneru. Tato konfigurace také informuje zásadu indexování vektorů o nezbytných informacích, pokud se rozhodnete určit jednu z nich. V politice obsažených vektorů jsou zahrnuty následující informace:
path: vlastnost obsahující vektor (povinné).datatype: datový typ vektorové vlastnosti. Podporované typy jsoufloat32(výchozí)int8auint8.dimensions: Rozměrnost nebo délka každého vektoru v cestě. Všechny vektory v cestě by měly mít stejný počet dimenzí. (výchozí1536).distanceFunction: Metrika použitá k výpočtu vzdálenosti/podobnosti. Podporované metriky jsou:cosine, který obsahuje hodnoty od $-1$ (nejméně podobné) na $+1$ (nejvíce podobné).dot product, který obsahuje hodnoty od $-\infty$ (nejméně podobné) až do $+\infty$ (nejvíce podobné).euclidean, který obsahuje hodnoty od $0$ (nejvíce podobné) na $+\infty$ (nejméně podobné).
Poznámka:
Každá jedinečná cesta může mít maximálně jednu zásadu. Pokud ale všechny cílí na jinou cestu, je možné zadat více zásad.
Zásady vektoru kontejneru je možné popsat jako objekty JSON. Tady jsou dva příklady platných zásad vektoru kontejneru:
Zásada s jednou vektorovou cestou
{
"vectorEmbeddings": [
{
"path": "/vector1",
"dataType": "float32",
"distanceFunction": "cosine",
"dimensions": 1536
}
]
}
Zásada se dvěma vektorovými cestami
{
"vectorEmbeddings": [
{
"path": "/vector1",
"dataType": "float32",
"distanceFunction": "cosine",
"dimensions": 1536
},
{
"path": "/vector2",
"dataType": "int8",
"distanceFunction": "dotproduct",
"dimensions": 100
}
]
}
Další informace a příklady nastavení zásad vektoru kontejneru najdete v ukázkách zásad indexování vektorů.
Zásady indexování vektorů
Vektorové indexy zvyšují efektivitu při provádění vektorových hledání pomocí VectorDistance systémové funkce. Při použití vektorového indexu mají hledání vektorů nižší latenci, vyšší propustnost a nižší spotřebu RU. Můžete zadat tyto typy zásad indexu vektoru:
| Popis | Maximální rozměry | |
|---|---|---|
flat |
Ukládá vektory do stejného indexu jako ostatní indexované vlastnosti. | 505 |
quantizedFlat |
Kvantuje (komprimuje) vektory před uložením do indexu. Tato zásada může zvýšit latenci a propustnost za cenu malé přesnosti. | 4096 |
diskANN |
Vytvoří index založený na diskANN pro rychlé a efektivní přibližné vyhledávání. | 4096 |
Poznámka:
Indexy quantizedFlat a diskANN vyžadují, aby bylo vloženo alespoň 1 000 vektorů. Toto minimum spočívá v zajištění přesnosti procesu kvantování. Pokud existuje méně než 1 000 vektorů, provede se místo toho úplné skanování, které vede k vyšším poplatkům za RU pro vyhledávací dotaz vektorového vyhledávání.
Několik bodů na poznámku:
Typy indexů
flataquantizedFlatpoužívají index služby Cosmos DB k ukládání a čtení jednotlivých vektorů během vyhledávání vektorů. Vektorové vyhledávání sflatindexem je vyhledávání hrubou silou a zaručuje 100% přesnost nebo zachycení. To znamená, že je zaručeno, že v datové sadě najdou nejvíce podobných vektorů. Existuje však omezení505dimenzí vektorů na plochém indexu.Index
quantizedFlatukládá do indexu kvantované (komprimované) vektory. Vektorové vyhledávání s indexemquantizedFlatjsou také hrubou silou hledání, ale jejich přesnost může být o něco menší než 100 %, protože vektory jsou před přidáním do indexu kvantovány. Hledání vektorů pomocíquantized flatale mělo mít nižší latenci, vyšší propustnost a nižší náklady na RU než vektorové vyhledávání v indexuflat. Tento index je dobrou volbou pro menší scénáře nebo scénáře, ve kterých používáte filtry dotazů k zúžení vektorového vyhledávání na relativně malou sadu vektorů.quantizedFlatse doporučuje, když je počet vektorů k indexování přibližně 50 000 nebo méně na jeden fyzický oddíl. Toto doporučení je ale jen obecné vodítko a skutečný výkon by se měl testovat, protože každý scénář se může lišit.Index
diskANNje samostatný index definovaný speciálně pro vektory využívající DiskANN, sadu algoritmů indexování vektorů s vysokým výkonem vyvinutých společností Microsoft Research. Indexy DiskANN můžou nabízet některé dotazy s nejnižší latencí, nejvyšší propustností a nejnižšími náklady na RU a přitom zachovat vysokou přesnost. DiskANN je obecně nejvýkonnější ze všech typů indexů, pokud existuje více než 50 000 vektorů na fyzický oddíl.
Tady jsou příklady platných zásad indexu vektorů:
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/_etag/?"
},
{
"path": "/vector1/*"
}
],
"vectorIndexes": [
{
"path": "/vector1",
"type": "diskANN"
}
]
}
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/_etag/?"
},
{
"path": "/vector1/*",
},
{
"path": "/vector2/*",
}
],
"vectorIndexes": [
{
"path": "/vector1",
"type": "quantizedFlat"
},
{
"path": "/vector2",
"type": "diskANN"
}
]
}
Důležité
Vektorová cesta přidaná do excludedPaths části zásad indexování, aby se zajistil optimalizovaný výkon pro vložení. Nepřidání vektorové cesty k excludedPaths vede k vyššímu poplatku za jednotku požadavku a zvýšené latenci při vkládání vektorů.
Důležité
Zástupné znaky (*, []) nejsou v současné době podporovány v politice vektoru nebo vektorovém indexu.
Provádění vektorových vyhledávání pomocí dotazů pomocí VECTORDISTANCE
Po vytvoření kontejneru s požadovanými zásadami vektoru a vložením vektorových dat do kontejneru můžete provést vektorové vyhledávání pomocí integrované VECTORDISTANCE funkce v dotazu. Příklad dotazu NoSQL, který projektuje skóre podobnosti jako alias score, a seřadí je v pořadí od nejpodobnějších po nejméně podobné.
SELECT TOP 10
c.title,
VECTORDISTANCE(c.contentVector, [1,2,3]) AS score
FROM
container c
ORDER BY
VECTORDISTANCE(c.contentVector, [1,2,3])
Důležité
Vždy použijte TOP N klauzuli v SELECT příkazu dotazu. V opačném případě se vektorové vyhledávání pokusí vrátit mnoho dalších výsledků, což způsobí, že dotaz bude stát více jednotek žádostí (RU) a bude mít vyšší latenci, než je potřeba.