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.
Využijte integrovanou vektorovou databázi ve službě Azure Cosmos DB pro MongoDB (vCore) k bezproblémovému propojení aplikací založených na umělé inteligenci s daty uloženými ve službě Azure Cosmos DB. Tato integrace může zahrnovat aplikace, které jste vytvořili pomocí vkládání Azure OpenAI. Nativní integrovaná vektorová databáze umožňuje efektivně ukládat, indexovat a dotazovat vysoce dimenzionální vektorová data uložená přímo ve službě Azure Cosmos DB pro MongoDB (vCore) spolu s původními daty, ze kterých se vektorová data vytvářejí. Eliminuje nutnost přenášet data do alternativních úložišť vektorů a vyžadovat další náklady.
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) a DiskANN. 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í na vektorová zakódování (seznamy čísel) dat, která jste vytvořili modelem strojového učení pomocí rozhraní API pro zakódování. Příklady rozhraní API pro embedding jsou embedding Azure OpenAI 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 službě Azure Cosmos DB pro MongoDB (vCore) je možné vklá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.
Hledání vektorové podobnosti
Azure Cosmos DB pro MongoDB (virtuální jádro) poskytuje robustní funkce vektorového vyhledávání, které umožňují provádět vysokorychlostní vyhledávání podobností napříč komplexními datovými sadami. Pokud chcete ve službě Azure Cosmos DB for MongoDB provádět vektorové vyhledávání, musíte nejprve vytvořit vektorový index. Azure Cosmos DB pro MongoDB (virtuální jádro) sice nabízí několik možností, ale tady jsou některé obecné pokyny, které vám pomůžou začít na základě velikosti datové sady:
| IVF | HNSW | DiskANN (doporučeno) | |
|---|---|---|---|
| Description | Index IVFFlat rozděluje vektory do seznamů a pak prohledá podmnožinu nejblíže vektoru dotazu. | Index HNSW vytvoří vícevrstevný graf. | DiskANN je přibližný vyhledávací algoritmus nejbližšího souseda navržený pro efektivní vektorové vyhledávání v libovolném měřítku. |
| Klíčové kompromisy |
Profesionálové: Rychlejší časy sestavení, nižší využití paměti. Nevýhody: Nižší výkon dotazů (z hlediska kompromisu mezi rychlostí a odvoláním). |
Výhody: Lepší výkon dotazů (z hlediska kompromisu mezi rychlostí a přesností) lze vytvořit na prázdné tabulce. Nevýhody: Pomalejší časy sestavení, vyšší využití paměti. |
Výhody: Efektivní v jakémkoli měřítku, vysoká přesnost, vysoká propustnost, nízká latence. |
| Počet vektorů | Méně než 10 000 | Až 50 000 | Až 500 000+ |
| Doporučená úroveň clusteru | M10 nebo M20 | M30 a vyšší | M30 a vyšší |
Indexy DiskANN jsou k dispozici na úrovních M30 a vyšších úrovních. Pokud chcete vytvořit index DiskANN, nastavte "kind" parametr na "vector-diskann" následující šablonu:
{
"createIndexes": "<collection_name>",
"indexes": [
{
"name": "<index_name>",
"key": {
"<path_to_property>": "cosmosSearch"
},
"cosmosSearchOptions": {
"kind": "vector-diskann",
"dimensions": <integer_value>,
"similarity": <string_value>,
"maxDegree" : <integer_value>,
"lBuild" : <integer_value>,
}
}
]
}
| Pole | Typ | Popis |
|---|---|---|
index_name |
řetězec | Jedinečný název indexu |
path_to_property |
řetězec | Cesta k vlastnosti, která obsahuje vektor. Tato cesta může být vlastností nejvyšší úrovně nebo cestou pomocí notace s tečkami k vlastnosti. Vektory musí být number[] před tím, než jsou indexovány a použity ve výsledcích vyhledávání vektorů. Použití jiného typu, například double[], zabrání indexování dokumentu. Neindexované dokumenty se nevracejí ve výsledku vektorového hledání. |
kind |
řetězec | Typ vektorového indexu, který chcete vytvořit. Možnosti jsou vector-ivf, vector-hnswa vector-diskann. |
dimensions |
integer | Počet dimenzí pro podobnost vektorů DiskANN podporuje až 16 000 dimenzí (s kvantací produktu) s budoucí podporou plánovanou na 40 000 +. |
similarity |
řetězec | Metrika podobnosti, která se má použít s indexem Možné možnosti jsou COS (kosinusová vzdálenost), L2 (euklidová vzdálenost) a IP (vnitřní součin). |
maxDegree |
integer | Maximální počet hran na uzel v grafu Tento parametr se pohybuje od 20 do 2048 (výchozí hodnota je 32). Vyšší maxDegree je vhodný pro datové sady s vysokou dimenzionalitou a/nebo požadavky na vysokou přesnost. |
lBuild |
integer | Nastaví počet kandidátských sousedů vyhodnocených během sestavování indexu DiskANN. Tento parametr, který se pohybuje od 10 do 500 (výchozí hodnota je 50), vyrovnává přesnost a výpočetní režii: vyšší hodnoty zlepšují kvalitu a přesnost indexu, ale zvyšují dobu sestavování. |
Provedení vektorového vyhledávání pomocí DiskANN
K provedení vektorového vyhledávání použijte $search fázi kanálu agregace a dotazujte se s operátorem cosmosSearch . DiskANN umožňuje vysoce výkonné vyhledávání v rozsáhlých datových sadách s volitelným filtrováním, jako jsou geoprostorové nebo textové filtry.
{
"$search": {
"cosmosSearch": {
"path": "<path_to_property>",
"query": "<query_vector>",
"k": <num_results_to_return>,
"filter": {"$and": [
{ "<attribute_1>": { "$eq": <value> } },
{"<location_attribute>": {"$geoWithin": {"$centerSphere":[[<longitude_integer_value>, <latitude_integer_value>], <radius>]}}}
]}
}
}
},
| Pole | Typ | Popis |
|---|---|---|
lSearch |
integer | Určuje velikost dynamického seznamu kandidátů pro vyhledávání. Výchozí hodnota je 40 s konfigurovatelným rozsahem od 10 do 1000. Zvýšení hodnoty zvyšuje přesnost, ale může snížit rychlost vyhledávání. |
k |
integer | Definuje počet výsledků hledání, které se mají vrátit. Hodnota k musí být menší nebo rovna lSearch. |
Příklad použití indexu DiskANN s filtrováním
Přidání vektorů do databáze
Pokud chcete použít vektorové vyhledávání s geoprostorovými filtry, přidejte dokumenty, které obsahují jak vektorové vkládání, tak souřadnice umístění. Vytváření embeddings můžete realizovat pomocí vlastního modelu, Azure OpenAI embeddings nebo rozhraní API, jako je Hugging Face na Azure.
from pymongo import MongoClient
client = MongoClient("<your_connection_string>")
db = client["test"]
collection = db["testCollection"]
documents = [
{"name": "Eugenia Lopez", "bio": "CEO of AdventureWorks", "is_open": 1, "location": [-118.9865, 34.0145], "contentVector": [0.52, 0.20, 0.23]},
{"name": "Cameron Baker", "bio": "CFO of AdventureWorks", "is_open": 1, "location": [-0.1278, 51.5074], "contentVector": [0.55, 0.89, 0.44]},
{"name": "Jessie Irwin", "bio": "Director of Our Planet initiative", "is_open": 0, "location": [-118.9865, 33.9855], "contentVector": [0.13, 0.92, 0.85]},
{"name": "Rory Nguyen", "bio": "President of Our Planet initiative", "is_open": 1, "location": [-119.0000, 33.9855], "contentVector": [0.91, 0.76, 0.83]}
]
collection.insert_many(documents)
Vytvoření indexu vektoru DiskANN
Následující příklad ukazuje, jak nastavit index vektoru DiskANN s možnostmi filtrování. To zahrnuje vytvoření vektorového indexu pro vyhledávání podobnosti, přidání dokumentů s vektorovými a geoprostorovými vlastnostmi a indexování polí pro další filtrování.
db.command({
"createIndexes": "testCollection",
"indexes": [
{
"name": "DiskANNVectorIndex",
"key": {
"contentVector": "cosmosSearch"
},
"cosmosSearchOptions": {
"kind": "vector-diskann",
"dimensions": 3,
"similarity": "COS",
"maxDegree": 32,
"lBuild": 64
}
},
{
"name": "is_open",
"key": {
"is_open": 1
}
},
{
"name": "locationIndex",
"key": {
"location": 1
}
}
]
})
Tento příkaz vytvoří na poli contentVectorindex exampleCollection vektoru DiskANN, který umožňuje vyhledávání podobnosti. Přidá také:
- Index v
is_openpoli, který umožňuje filtrovat výsledky na základě toho, jestli jsou firmy otevřené. - Geoprostorový index
locationpole pro filtrování podle geografické blízkosti.
Provedení vektorového vyhledávání
Pokud chcete najít dokumenty s podobnými vektory v určitém geografickém poloměru, zadejte queryVector hledání podobnosti a zahrňte geoprostorový filtr.
query_vector = [0.52, 0.28, 0.12]
pipeline = [
{
"$search": {
"cosmosSearch": {
"path": "contentVector",
"vector": query_vector,
"k": 5,
"filter": {
"$and": [
{"is_open": {"$eq": 1}},
{"location": {"$geoWithin": {"$centerSphere": [[-119.7192861804, 34.4102485028], 100 / 3963.2]}}}
]
}
}
}
}
]
results = list(collection.aggregate(pipeline))
for result in results:
print(result)
V tomto příkladu vyhledávání podle vektorové podobnosti vrátí k nejbližších vektorů na základě zadané COS metriky podobnosti, přičemž výsledky jsou filtrovány tak, aby zahrnovaly pouze otevřené firmy v okruhu 100 mil.
[
{
similarityScore: 0.9745354109084544,
document: {
_id: ObjectId("645acb54413be5502badff94"),
name: 'Eugenia Lopez',
bio: 'CEO of AdventureWorks',
is_open: 1,
location: [-118.9865, 34.0145],
contentVector: [0.52, 0.20, 0.23]
}
},
{
similarityScore: 0.9006955671333992,
document: {
_id: ObjectId("645acb54413be5502badff97"),
name: 'Rory Nguyen',
bio: 'President of Our Planet initiative',
is_open: 1,
location: [-119.7302, 34.4005],
contentVector: [0.91, 0.76, 0.83]
}
}
]
Tento výsledek ukazuje nejpodobnější dokumenty k queryVector, omezené na okruh 100 mil a podniky, které jsou otevřené. Každý výsledek zahrnuje skóre podobnosti a metadata a ukazuje, jak DiskANN ve službě Cosmos DB pro MongoDB podporuje kombinované vektory a geoprostorové dotazy pro rozšířené vyhledávání citlivé na umístění.
Získání definic vektorových indexů
K načtení definice vektorového indexu z kolekce použijte listIndexes příkaz:
db.exampleCollection.getIndexes();
V tomto příkladu se vectorIndex vrátí se všemi cosmosSearch parametry použitými k vytvoření indexu:
[
{ v: 2, key: { _id: 1 }, name: '_id_', ns: 'test.exampleCollection' },
{
v: 2,
key: { vectorContent: 'cosmosSearch' },
name: 'vectorSearchIndex',
cosmosSearch: {
kind: <index_type>, // options are `vector-ivf`, `vector-hnsw`, and `vector-diskann`
numLists: 3,
similarity: 'COS',
dimensions: 3
},
ns: 'test.exampleCollection'
}
]
Filtrované vektorové vyhledávání
Teď můžete spouštět vektorové vyhledávání s libovolným podporovaným filtrem dotazů, jako jsou $lt, $lte, $eq, $neq, $gte, $gt, $in, $nin a $regex.
Pokud chcete použít předfiltrování, musíte nejprve definovat standardní index vlastnosti, podle které chcete kromě vektorového indexu filtrovat. Tady je příklad vytvoření indexu filtru:
db.runCommand({
"createIndexes": "<collection_name>",
"indexes": [ {
"key": {
"<property_to_filter>": 1
},
"name": "<name_of_filter_index>"
}
]
});
Jakmile je index filtru zavedený, můžete klauzuli začlenit "filter" přímo do vektorového vyhledávacího dotazu. Tento příklad ukazuje, jak filtrovat výsledky, kde hodnota vlastnosti "title"není v zadaném seznamu:
db.exampleCollection.aggregate([
{
'$search': {
"cosmosSearch": {
"vector": "<query_vector>",
"path": <path_to_vector>,
"k": num_results,
"filter": {<property_to_filter>: {"$nin": ["not in this text", "or this text"]}}
},
"returnStoredSource": True }},
{'$project': { 'similarityScore': { '$meta': 'searchScore' }, 'document' : '$$ROOT' }
}
]);
Důležité
Pokud chcete optimalizovat výkon a přesnost předfiltrovaných vektorových hledání, zvažte úpravu parametrů indexu vektoru. U indexů DiskANN může zvýšení maxDegree nebo lBuild vést k lepším výsledkům. Pro indexy HNSW můžete experimentovat s vyššími hodnotami pro m, efConstructionnebo efSearch může zvýšit výkon. Podobně u indexů IVF by ladění numLists nebo nProbes mohlo vést k uspokojivějším výsledkům. Je důležité otestovat konkrétní konfiguraci s vašimi daty, aby výsledky splňovaly vaše požadavky. Tyto parametry ovlivňují strukturu indexu a chování vyhledávání a optimální hodnoty se můžou lišit v závislosti na charakteristikách dat a vzorech dotazů.
Použijte nástroje pro orchestraci LLM
Použijte jako vektorovou databázi se sémantickým jádrem
Pomocí sémantického jádra můžete orchestrovat načítání informací z virtuálních jader Azure Cosmos DB pro MongoDB a LLM. Další informace najdete v úložišti GitHub.
Použijte jako vektorovou databázi s LangChain
Pomocí Jazyka LangChain můžete orchestrovat načítání informací z virtuálních jader Azure Cosmos DB pro MongoDB a LLM. Další informace najdete v Azure Cosmos DB Mongo vCore.
Použití LangChain jako sémantické mezipaměti
Pomocí jazyka LangChain a Azure Cosmos DB for MongoDB (vCore) orchestrujte sémantické ukládání do mezipaměti pomocí dříve zaznamenaných odpovědí LLM, které vám můžou ušetřit náklady na rozhraní LLM API a snížit latenci odpovědí. Další informace najdete v tématu Azure Cosmos DB Mongo vCore
Funkce a omezení
- Podporované metriky vzdálenosti: L2 (Euclidean), vnitřní produkt a kosinus.
- Podporované metody indexování: IVFFLAT, HNSW a DiskANN.
- Pomocí diskANN a kvantování produktů můžete indexovat vektory až do 16 000 dimenzí.
- Použití HNSW nebo IVF s poloviční přesností umožňuje indexování vektorů až do 4 000 dimenzí.
- Bez komprese je výchozí maximální rozměr vektoru indexování 2 000.
- Indexování se vztahuje pouze na jeden vektor na cestu.
- Na cestu vektoru lze vytvořit pouze jeden index.
Shrnutí
Tato příručka ukazuje, jak vytvořit vektorový index, přidat dokumenty, které obsahují vektorová data, provést vyhledávání podobnosti a načíst definici indexu. Pomocí naší integrované vektorové databáze můžete efektivně ukládat, indexovat a dotazovat vysoce dimenzionální vektorová data přímo ve službě Azure Cosmos DB pro virtuální jádra MongoDB. Umožňuje vám odemknout plný potenciál vašich dat prostřednictvím vektorových vkládání a umožňuje vytvářet přesnější, efektivnější a výkonnější aplikace.
Související obsah
- Referenční řešení pro maloobchod založené na vzoru .NET RAG
- Model RAG v jazyce C# – Integrace služeb OpenAI se službou Cosmos DB
- Model RAG v Pythonu – Chatovací robot produktu Azure
- Kurz poznámkového bloku Pythonu – Integrace vektorové databáze prostřednictvím jazyka LangChain
- Kurz poznámkového bloku Pythonu – Integrace ukládání do mezipaměti LLM prostřednictvím LangChain
- Python - Integrace LlamaIndex
- Python - Integrace paměti sémantického jádra