Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Azure Cosmos DB for NoSQL erbjuder nu effektiv vektorindexering och sökning. Den här funktionen är utformad för att hantera flermodala, 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 flermodala 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 ger flexibilitet genom att du kan välja 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 ge effektiv sökning med flera modala vektorer med hög noggrannhet i alla storlekar.
Mer information om vektorindexering finns i Vektorindex.
Vektorsökning i Azure Cosmos DB kan kombineras med alla andra stödda Azure Cosmos DB NoSQL-frågefilter och -index genom att använda WHERE satser. På så sätt kan dina vektorsökningar tillhandahålla 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 en vektorbutik?
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) och DiskANN. 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.
Aktivera vektorindexerings- och sökfunktionen
Följ dessa steg för att aktivera den här funktionen för Azure Cosmos DB for NoSQL:
- Gå till resurssidan för Azure Cosmos DB för NoSQL.
- I den vänstra rutan, under Inställningar, väljer du Funktioner.
- Välj Vektorsökning för NoSQL API.
- Läs beskrivningen av funktionen för att bekräfta att du vill aktivera den.
- Välj Aktivera för att aktivera vektorsökning i Azure Cosmos DB för NoSQL.
Tips
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
Registreringsbegäran godkänns automatiskt, men det kan ta 15 minuter att börja gälla.
Principer för containervektorer
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: Egenskapssökvägen som innehåller vektorer (krävs).
- 
              datatype: Datatypen för vektoregenskapen. Typer som stöds ärfloat32(standard),int8, ochuint8.
- 
              dimensions: Dimensionaliteten eller längden på varje vektor i sökvägen. Alla vektorer i en sökväg bör ha samma antal dimensioner. Standardvärdet är1536.
- 
              distanceFunction: Måttet som används för att beräkna avstånd/likhet. Mått som stöds är:- cosinin (standard), 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 liknande).
 
Anteckning
Varje unik sökväg kan ha högst en princip. Flera policyer kan dock anges om de alla riktar in sig på olika sökvägar.
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 | Maximala 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 | 
Anteckning
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, vilket leder till högre RU-avgifter för en vektorsökningsfråga.
Några saker att tänka på:
- Indextyperna - flatoch- quantizedFlatanvä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 ett- flat-index är brute force-sökningar och ger 100 % noggrannhet och återkallning. Det vill: det är garanterat att hitta de mest liknande vektorerna i datamängden. Det finns dock en begränsning av- 505dimensioner för vektorer i ett platt index.
- Indexet - quantizedFlatlagrar kvantiserade (komprimerade) vektorer i indexet. Vektorsökningar med- quantizedFlatindex ä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 med- quantized flatbör dock ha lägre svarstid, högre dataflöde och lägre RU-kostnad än vektorsökningar i ett- flatindex. 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.- quantizedFlatrekommenderas när antalet vektorer som ska indexeras är någonstans runt 50 000 eller färre per fysisk partition. Detta är dock bara en allmän riktlinje och faktiska prestanda bör testas eftersom varje scenario kan skilja sig åt.
- 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. I allmänhet är DiskANN den mest högpresterande av alla indextyper om det finns fler än 50 000 vektorer per fysisk partition.
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": "diskANN"
        }
    ]
}
{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [
        {
            "path": "/*"
        }
    ],
    "excludedPaths": [
        {
            "path": "/_etag/?"
        }
    ],
    "vectorIndexes": [
        {
            "path": "/vector1",
            "type": "quantizedFlat"
        },
        {
            "path": "/vector2",
            "type": "diskANN"
        }
    ]
}
Viktigt!
Wildcard-tecken (*, []) och inbäddade vektorsökvägar i arrayer stöds för närvarande inte i vektorpolicy eller vektorindex.
Utföra vektorsökning med frågor med hjälp av 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 funktionen VectorDistance-system i en fråga. I följande exempel visas en NoSQL-fråga som projicerar likhetspoängen som alias SimilarityScoreoch sorterar i den ordning som mest liknar minst lika:
SELECT TOP 10 c.title, VectorDistance(c.contentVector, [1,2,3]) AS SimilarityScore   
FROM c  
ORDER BY VectorDistance(c.contentVector, [1,2,3])   
Viktigt!
Använd alltid en TOP N villkor i SELECT uttrycket för en fråga. Annars försöker vektorsökningen returnera många fler resultat och frågan kostar fler RU:er och har högre svarstid än nödvändigt.
Aktuella begränsningar
Vektorindexering och sökning i Azure Cosmos DB för NoSQL har vissa begränsningar.
- 
              quantizedFlatochdiskANNindex kräver att minst 1 000 vektorer indexeras för att säkerställa att kvantiseringen är korrekt. Om färre än 1 000 vektorer indexeras används en fullständig genomsökning i stället och RU-avgifterna kan vara högre.
- Vektorer som indexeras med flatindextypen kan vara högst 505 dimensioner. Vektorer som indexeras medquantizedFlatindextypen ellerDiskANNkan vara högst 4 096 dimensioner.
- Vektorinfogningshastigheten bör begränsas. Mycket stor inmatning (utöver 5M-vektorer) kan kräva mer indexgenereringstid.
- Vektorsökningsfunktionen stöds för närvarande inte på befintliga containrar. Om du vill använda den måste en ny container skapas och inbäddningsprincipen för vektorinbäddning på containernivå måste anges.
- Databaser för delat dataflöde stöds inte.
- För närvarande stöds inte vektorindexering och sökning på konton med delat dataflöde.
- När vektorindexering och sökning har aktiverats i en container kan den inte inaktiveras.
Relaterat innehåll
- DiskANN + Azure Cosmos DB – Microsoft Mechanics Video
- .NET – Hur man indexerar och gör förfrågningar om vektordata
- Python – Hur indexera och fråga vektordata
- Java – Hur man indexerar och gör förfrågningar om vektordata
- Systemfunktionen VectorDistance
- Översikt över vektorindex
- Principer för vektorindex
- Principexempel för vektorindexering
- Integrationer: