Vektorsökning i Azure Cosmos DB för NoSQL (förhandsversion)
GÄLLER FÖR: NoSQL
Azure Cosmos DB for NoSQL erbjuder nu vektorindexering och sökning i förhandsversion. Den här funktionen är utformad för att hantera högdimensionella vektorer, vilket möjliggör effektiv och korrekt vektorsökning i valfri skala. Nu kan du lagra vektorer direkt i dokumenten tillsammans med dina data. Varje dokument i databasen kan inte bara innehålla traditionella schemafria data, utan även högdimensionella vektorer som andra egenskaper för dokumenten. Den här samlokaliseringen av data och vektorer möjliggör effektiv indexering och sökning, eftersom vektorerna lagras i samma logiska enhet som de data de representerar. Att hålla ihop vektorer och data förenklar datahantering, AI-programarkitekturer och effektiviteten för vektorbaserade åtgärder.
Azure Cosmos DB for NoSQL erbjuder den flexibilitet som erbjuds när du väljer vektorindexeringsmetod:
- En "platt" eller k-närmaste granne exakt sökning (kallas ibland brute-force) kan ge 100% hämtningsåterkallelse för mindre, fokuserade vektorsökningar. särskilt när de kombineras med frågefilter och partitionsnycklar.
- Ett kvantiserat platt index som komprimerar vektorer med hjälp av DiskANN-baserade kvantiseringsmetoder för bättre effektivitet i kNN-sökningen.
- DiskANN, en uppsättning toppmoderna vektorindexeringsalgoritmer som utvecklats av Microsoft Research för att driva effektiv vektorsökning med hög noggrannhet i valfri skala.
Läs mer om vektorindexering här
Vektorsökning i Azure Cosmos DB kan kombineras med alla andra Azure Cosmos DB NoSQL-frågefilter och -index som stöds med hjälp av WHERE
satser. På så sätt kan dina vektorsökningar vara de mest relevanta data för dina program.
Den här funktionen förbättrar kärnfunktionerna i Azure Cosmos DB, vilket gör den mer mångsidig för hantering av vektordata och sökkrav i AI-program.
Vad är ett vektorlager?
Ett vektorlager eller en vektordatabas är en databas som är utformad för att lagra och hantera inbäddningar av vektorer, som är matematiska representationer av data i ett högdimensionellt utrymme. I det här utrymmet motsvarar varje dimension en funktion i data och tiotusentals dimensioner kan användas för att representera avancerade data. En vektors position i det här utrymmet representerar dess egenskaper. Ord, fraser eller hela dokument och bilder, ljud och andra typer av data kan alla vektoriseras.
Hur fungerar ett vektorlager?
I ett vektorlager används algoritmer för vektorsökning för att indexera och fråga inbäddningar. Några välkända vektorsökningsalgoritmer är HNSW (Hierarchical Navigable Small World), Inverted File (IVF), DiskANN osv. Vektorsökning är en metod som hjälper dig att hitta liknande objekt baserat på deras dataegenskaper i stället för exakta matchningar i ett egenskapsfält. Den här tekniken är användbar i program som att söka efter liknande text, hitta relaterade bilder, göra rekommendationer eller till och med identifiera avvikelser. Den används för att köra frågor mot vektorinbäddningar av dina data som du skapade med hjälp av en maskininlärningsmodell med hjälp av ett inbäddnings-API. Exempel på API:er för inbäddningar är Azure OpenAI-inbäddningar eller Hugging Face på Azure. Vektorsökning mäter avståndet mellan datavektorerna och frågevektorn. De datavektorer som är närmast din frågevektor är de som är mest lika semantiskt.
I den integrerade vektordatabasen i Azure Cosmos DB för NoSQL kan inbäddningar lagras, indexeras och efterfrågas tillsammans med de ursprungliga data. Den här metoden eliminerar den extra kostnaden för att replikera data i en separat ren vektordatabas. Dessutom håller den här arkitekturen samman vektorbäddningar och ursprungliga data, vilket bättre underlättar multimodala dataåtgärder och ger bättre datakonsekvens, skalning och prestanda.
Registrera dig i funktionen Förhandsgranskning av vektorsökning
Vektorsökning för Azure Cosmos DB for NoSQL kräver förhandsversion av funktionsregistrering på sidan Funktioner i Azure Cosmos DB. Följ stegen nedan för att registrera dig:
Gå till resurssidan för Azure Cosmos DB for NoSQL.
Välj fönstret "Funktioner" under menyalternativet "Inställningar".
Välj "Vector Search in Azure Cosmos DB for NoSQL".
Läs beskrivningen av funktionen för att bekräfta att du vill registrera dig i förhandsversionen.
Välj "Aktivera" för att registrera dig i förhandsversionen.
Kommentar
Registreringsbegäran godkänns automatiskt, men det kan ta flera minuter att börja gälla.
Kommentar
DiskANN är tillgängligt i tidig gated-preview och kräver att du fyller i det här formuläret. Du kommer att kontaktas av en medlem i Azure Cosmos DB-teamet när din resurs har registrerats för att använda DiskANN-indexet.
Dricks
Du kan också använda Azure CLI för att uppdatera funktionerna i ditt konto för att stödja NoSQL-vektorsökning.
az cosmosdb update \
--resource-group <resource-group-name> \
--name <account-name> \
--capabilities EnableNoSQLVectorSearch
Principer för containervektor
Om du utför vektorsökning med Azure Cosmos DB för NoSQL måste du definiera en vektorprincip för containern. Detta ger viktig information för databasmotorn för att utföra effektiv likhetssökning efter vektorer som finns i containerns dokument. Detta informerar också vektorindexeringsprincipen om nödvändig information, om du väljer att ange en. Följande information ingår i policyn för inneslutna vektorer:
- "path": egenskapen som innehåller vektorn (krävs).
- "datatype": datatypen för vektoregenskapen (standard float32).
- "dimensions": Dimensioniteten eller längden på varje vektor i sökvägen. Alla vektorer i en sökväg bör ha samma antal dimensioner. (standard 1536).
- "distanceFunction": Måttet som används för att beräkna avstånd/likhet. Mått som stöds är:
- cosinin, som har värden från -1 (minst lika) till +1 (mest liknande).
- dot-produkt, som har värden från -inf (minst liknande) till +inf (mest liknande).
- euclidean, som har värden från 0 (mest liknande) till +inf) (minst lika).
Kommentar
Varje unik sökväg kan ha högst en princip. Flera principer kan dock anges förutsatt att de alla riktar in sig på en annan sökväg.
Containervektorprincipen kan beskrivas som JSON-objekt. Här är två exempel på giltiga principer för containervektorer:
En princip med en enda vektorsökväg
{
"vectorEmbeddings": [
{
"path":"/vector1",
"dataType":"float32",
"distanceFunction":"cosine",
"dimensions":1536
}
]
}
En princip med två vektorsökvägar
{
"vectorEmbeddings": [
{
"path":"/vector1",
"dataType":"float32",
"distanceFunction":"cosine",
"dimensions":1536
},
{
"path":"/vector2",
"dataType":"int8",
"distanceFunction":"dotproduct",
"dimensions":100
}
]
}
Principer för vektorindexering
Vektorindex ökar effektiviteten när du utför vektorsökningar med hjälp av VectorDistance
systemfunktionen. Vektorsökningar har lägre svarstid, högre dataflöde och mindre RU-förbrukning när du använder ett vektorindex. Du kan ange följande typer av vektorindexprinciper:
Typ | Beskrivning | Maximalt antal dimensioner |
---|---|---|
flat |
Lagrar vektorer i samma index som andra indexerade egenskaper. | 505 |
quantizedFlat |
Kvantifierar (komprimerar) vektorer innan de lagras i indexet. Detta kan förbättra svarstiden och dataflödet på bekostnad av en liten mängd noggrannhet. | 4096 |
diskANN |
Skapar ett index baserat på DiskANN för snabb och effektiv ungefärlig sökning. | 4096 |
Kommentar
Indexen quantizedFlat
och diskANN
kräver att minst 1 000 vektorer infogas. Detta för att säkerställa noggrannheten i kvantiseringsprocessen. Om det finns färre än 1 000 vektorer körs en fullständig genomsökning i stället och leder till högre RU-avgifter för en vektorsökningsfråga.
Några punkter att notera:
Indextyperna
flat
ochquantizedFlat
använder Azure Cosmos DB:s index för att lagra och läsa varje vektor när du utför en vektorsökning. Vektorsökningar med ettflat
index är råstyrkesökningar och ger 100 % noggrannhet eller återkallande. Det vill: det är garanterat att hitta de mest liknande vektorerna i datamängden. Det finns dock en begränsning av505
dimensioner för vektorer i ett platt index.Indexet
quantizedFlat
lagrar kvantiserade (komprimerade) vektorer i indexet. Vektorsökningar medquantizedFlat
index är också råstyrkesökningar, men deras noggrannhet kan vara något mindre än 100 % eftersom vektorerna kvantifieras innan de läggs till i indexet. Vektorsökningar medquantized flat
bör dock ha lägre svarstid, högre dataflöde och lägre RU-kostnad än vektorsökningar i ettflat
index. Det här är ett bra alternativ för mindre scenarier eller scenarier där du använder frågefilter för att begränsa vektorsökningen till en relativt liten uppsättning vektorer.quantizedFlat
ska användas när det finns minst 1 000 vektorer och färre än 100 000 vektorer i containern.Indexet
diskANN
är ett separat index som definierats specifikt för vektorer som använder DiskANN, en uppsättning vektorindexeringsalgoritmer med höga prestanda som utvecklats av Microsoft Research. DiskANN-index kan erbjuda några av de lägsta svarstiderna, det högsta dataflödet och de lägsta RU-kostnadsfrågorna, samtidigt som hög noggrannhet bibehålls. Men eftersom DiskANN är ett ungefärligt närmsta grannindex (ANN) kan noggrannheten vara lägre änquantizedFlat
ellerflat
. DiskANN är tillgängligt i tidig gated-preview och kräver att du fyller i det här formuläret.
Viktigt!
Under tidig förhandsversion kan vektorindex inte ändras när de har skapats. I stället måste du skapa en ny container med en ny vektorindexprincip om det behövs en ändring.
Här är exempel på giltiga principer för vektorindex:
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/_etag/?"
},
{
"path": "/vector1/*"
}
],
"vectorIndexes": [
{
"path": "/vector1",
"type": "quantizedFlat"
}
]
}
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/_etag/?"
},
{
"path": "/vector1/*",
},
{
"path": "/vector2/*",
}
],
"vectorIndexes": [
{
"path": "/vector1",
"type": "quantizedFlat"
},
{
"path": "/vector2",
"type": "DiskANN"
}
]
}
Viktigt!
Vektorsökvägen har lagts till i avsnittet "excludedPaths" i indexeringsprincipen för att säkerställa optimerad prestanda för infogning. Om du inte lägger till vektorsökvägen till "excludedPaths" resulterar det i högre RU-laddning och svarstid för vektorinfogningar.
Viktigt!
I förhandsversionen av vektorsökningen används för närvarande inte kapslade sökvägar eller jokertecken i vektorprincipens sökväg. Ersätt åtgärder för vektorprincipen stöds för närvarande inte.
Utföra vektorsökning med frågor med VectorDistance()
När du har skapat en container med önskad vektorprincip och infogat vektordata i containern kan du utföra en vektorsökning med hjälp av systemfunktionen Vektoravstånd i en fråga. Ett exempel på en NoSQL-fråga som projicerar likhetspoängen som alias SimilarityScore
och sorterar i den ordning som mest liknar minst lika:
SELECT c.title, VectorDistance(c.contentVector, [1,2,3]) AS SimilarityScore
FROM c
ORDER BY VectorDistance(c.contentVector, [1,2,3])
Aktuella gränser och begränsningar
Vektorindexering och sökning i Azure Cosmos DB för NoSQL har vissa begränsningar i tidiga skeden av den offentliga förhandsversionen.
- Du kan som mest ange en indextyp per sökväg i vektorindexprincipen
- Du kan som mest ange en DiskANN-indextyp per container
- Vektorindexering stöds endast på nya containrar.
- Vektorer som indexeras med
flat
indextypen kan vara högst 505 dimensioner. Vektorer som indexeras medquantizedFlat
indextypen ellerDiskANN
kan vara högst 4 096 dimensioner. quantizedFlat
använder samma kvantiseringsmetod som DiskANN och kan inte konfigureras just nu.- Databaser med delat dataflöde kan för närvarande inte använda funktionen för förhandsversion av vektorsökning.
- Inmatningshastigheten bör begränsas när du använder en tidig förhandsversion av DiskANN.
- För närvarande i förhandsversionen stöds inte vektorsökning på konton med analysarkiv, delat dataflöde, kundhanterade nycklar, kontinuerlig säkerhetskopiering, lagringsanalys och alla versioner och tar bort ändringsflöde.
Gå vidare
- DiskANN + Azure Cosmos DB – Microsoft Mechanics Video
- .NET – Instruktioner för indexering och frågevektordata
- Python – Instruktioner för indexering och frågevektordata
- Java – Indexering och frågevektordata
- Funktionen VectorDistance-system
- Översikt över vektorindex
- Principer för vektorindex
- Hantera index
- Integrationer: