Delen via


Vector Search in Azure Cosmos DB voor NoSQL (preview)

VAN TOEPASSING OP: NoSQL

Azure Cosmos DB voor NoSQL biedt nu vectorindexering en zoekopdrachten in preview. Deze functie is ontworpen om high-dimensionale vectoren te verwerken, waardoor een efficiënte en nauwkeurige vectorzoekopdracht op elke schaal mogelijk is. U kunt nu vectoren rechtstreeks opslaan in de documenten naast uw gegevens. Elk document in uw database kan niet alleen traditionele schemavrije gegevens bevatten, maar ook high-dimensionale vectoren als andere eigenschappen van de documenten. Deze colocatie van gegevens en vectoren maakt efficiënte indexering en zoekopdrachten mogelijk, omdat de vectoren worden opgeslagen in dezelfde logische eenheid als de gegevens die ze vertegenwoordigen. Het bijeenhouden van vectoren en gegevens vereenvoudigt het beheer van gegevens, AI-toepassingsarchitecturen en de efficiëntie van vectorbewerkingen.

Azure Cosmos DB for NoSQL biedt de flexibiliteit die het biedt bij het kiezen van de vectorindexeringsmethode:

  • Een "platte" of k-dichtstbijzijnde buren exacte zoekopdrachten (ook wel brute-force genoemd) kunnen 100% terughalen voor kleinere, gerichte vectorzoekopdrachten. met name in combinatie met queryfilters en partitiesleutels.
  • Een gekwantiseerde platte index die vectoren comprimeert met behulp van op DiskANN gebaseerde kwantisatiemethoden voor een betere efficiëntie in de kNN-zoekopdracht.
  • DiskANN, een suite met geavanceerde vectorindexeringsalgoritmen die door Microsoft Research zijn ontwikkeld om efficiënt en nauwkeurig vectorzoekopdrachten op elke schaal mogelijk te maken.

Meer informatie over vectorindexering vindt u hier

Vectorzoekopdrachten in Azure Cosmos DB kunnen worden gecombineerd met alle andere ondersteunde Azure Cosmos DB NoSQL-queryfilters en -indexen met behulp van WHERE componenten. Hierdoor kunnen uw vectorzoekopdrachten de meest relevante gegevens voor uw toepassingen zijn.

Deze functie verbetert de kernmogelijkheden van Azure Cosmos DB, waardoor het veelzijdiger is voor het verwerken van vectorgegevens en zoekvereisten in AI-toepassingen.

Wat is een vectorarchief?

Een vectorarchief of vectordatabase is een database die is ontworpen voor het opslaan en beheren van vector-insluitingen, die wiskundige representaties van gegevens in een hoogdimensionale ruimte zijn. In deze ruimte komt elke dimensie overeen met een functie van de gegevens en kunnen tienduizenden dimensies worden gebruikt om geavanceerde gegevens weer te geven. De positie van een vector in deze ruimte vertegenwoordigt de kenmerken. Woorden, woordgroepen of volledige documenten en afbeeldingen, audio en andere typen gegevens kunnen allemaal worden gevectoriseerd.

Hoe werkt een vectorarchief?

In een vectorarchief worden vectorzoekalgoritmen gebruikt om insluitingen te indexeren en op te vragen. Sommige bekende vectorzoekalgoritmen omvatten Hiërarchische Navigable Small World (HNSW), Omgekeerd bestand (IVF), DiskANN, enzovoort. Vectorzoekopdrachten is een methode waarmee u vergelijkbare items kunt vinden op basis van hun gegevenskenmerken in plaats van door exacte overeenkomsten in een eigenschapsveld. Deze techniek is handig in toepassingen zoals het zoeken naar vergelijkbare tekst, het vinden van gerelateerde afbeeldingen, het maken van aanbevelingen of zelfs het detecteren van afwijkingen. Het wordt gebruikt om een query uit te voeren op de vector-insluitingen van uw gegevens die u hebt gemaakt met behulp van een machine learning-model met behulp van een API voor insluitingen. Voorbeelden van insluitings-API's zijn Azure OpenAI Embeddings of Hugging Face in Azure. Vectorzoekopdrachten meten de afstand tussen de gegevensvectoren en uw queryvector. De gegevensvectoren die zich het dichtst bij uw queryvector bevinden, zijn de vectoren die het meest vergelijkbaar zijn met semantisch.

In de Integrated Vector Database in Azure Cosmos DB for NoSQL kunnen insluitingen naast de oorspronkelijke gegevens worden opgeslagen, geïndexeerd en opgevraagd. Deze aanpak elimineert de extra kosten voor het repliceren van gegevens in een afzonderlijke pure vectordatabase. Bovendien houdt deze architectuur de vector insluitingen en oorspronkelijke gegevens bij elkaar, waardoor multimodale gegevensbewerkingen beter worden gefaciliteerd en betere gegevensconsistentie, schaal en prestaties mogelijk zijn.

Inschrijven bij de preview-functie Vector Search

Vector search for Azure Cosmos DB for NoSQL vereist preview-functieregistratie op de pagina Functies van uw Azure Cosmos DB. Volg de onderstaande stappen om u te registreren:

  1. Navigeer naar de resourcepagina van Azure Cosmos DB for NoSQL.

  2. Selecteer het deelvenster Functies onder het menu-item Instellingen.

  3. Selecteer voor Vector Search in Azure Cosmos DB voor NoSQL.

  4. Lees de beschrijving van de functie om te bevestigen dat u zich wilt inschrijven in de preview.

  5. Selecteer Inschakelen om u in te schrijven voor de preview.

Notitie

De registratieaanvraag wordt automatisch goedgekeurd, maar het kan enkele minuten duren voordat het van kracht wordt.

Tip

U kunt ook de Azure CLI gebruiken om de mogelijkheden van uw account bij te werken om NoSQL Vector Search te ondersteunen.

az cosmosdb update \
     --resource-group <resource-group-name> \
     --name <account-name> \
     --capabilities EnableNoSQLVectorSearch

Container Vector-beleid

Als u vectorzoekopdrachten uitvoert met Azure Cosmos DB voor NoSQL, moet u een vectorbeleid voor de container definiëren. Dit biedt essentiële informatie voor de database-engine om efficiënte overeenkomsten te zoeken naar vectoren die in de documenten van de container zijn gevonden. Dit informeert ook het vectorindexeringsbeleid van de benodigde informatie, als u ervoor kiest om er een op te geven. De volgende informatie is opgenomen in het ingesloten vectorbeleid:

  • "pad": de eigenschap met de vector (vereist).
  • "datatype": het gegevenstype van de vectoreigenschap (standaard Float32). 
  • "dimensies": de dimensionaliteit of lengte van elke vector in het pad. Alle vectoren in een pad moeten hetzelfde aantal dimensies hebben. (standaard 1536).
  • "distanceFunction": de metrische waarde die wordt gebruikt voor het berekenen van afstand/gelijkenis. Ondersteunde metrische gegevens zijn:
    • cosinus, die waarden heeft van -1 (minst vergelijkbaar) met +1 (meest vergelijkbaar).
    • dot product, dat waarden van -inf (minst vergelijkbaar) heeft met +inf (meest vergelijkbaar).
    • euclidean, die waarden heeft van 0 (meest vergelijkbaar) met +inf) (minst vergelijkbaar).

Notitie

Elk uniek pad kan maximaal één beleid hebben. Er kunnen echter meerdere beleidsregels worden opgegeven op voorwaarde dat ze allemaal een ander pad richten.

Het containervectorbeleid kan worden beschreven als JSON-objecten. Hier volgen twee voorbeelden van geldig containervectorbeleid:

Een beleid met één vectorpad

{
    "vectorEmbeddings": [
        {
            "path":"/vector1",
            "dataType":"float32",
            "distanceFunction":"cosine",
            "dimensions":1536
        }
    ]
}

Een beleid met twee vectorpaden

{
    "vectorEmbeddings": [
        {
            "path":"/vector1",
            "dataType":"float32",
            "distanceFunction":"cosine",
            "dimensions":1536
        },
        {
            "path":"/vector2",
            "dataType":"int8",
            "distanceFunction":"dotproduct",
            "dimensions":100
        }
    ]
}

Beleid voor vectorindexering

Vectorindexen verhogen de efficiëntie bij het uitvoeren van vectorzoekopdrachten met behulp van de VectorDistance systeemfunctie. Vectorenzoekopdrachten hebben een lagere latentie, hogere doorvoer en minder RU-verbruik bij het gebruik van een vectorindex. U kunt de volgende typen vectorindexbeleid opgeven:

Type Description Maximumdimensies
flat Slaat vectoren op dezelfde index op als andere geïndexeerde eigenschappen. 505
quantizedFlat Kwantificeert vectoren (comprimeert) voordat deze op de index worden opgeslagen. Dit kan de latentie en doorvoer verbeteren ten koste van een kleine hoeveelheid nauwkeurigheid. 4096
diskANN Hiermee maakt u een index op basis van DiskANN voor snelle en efficiënte zoekopdrachten. 4096

Notitie

Voor de quantizedFlat en diskANN indexen moeten ten minste 1000 vectoren worden ingevoegd. Dit is om de nauwkeurigheid van het kwantisatieproces te garanderen. Als er minder dan 1000 vectoren zijn, wordt in plaats daarvan een volledige scan uitgevoerd en leidt dit tot hogere RU-kosten voor een vectorzoekquery.

Enkele punten om te noteren:

  • De flat indextypen en quantizedFlat indextypen maken gebruik van de index van Azure Cosmos DB om elke vector op te slaan en te lezen bij het uitvoeren van een vectorzoekopdracht. Vectorzoekopdrachten met een flat index zijn brute-force zoekopdrachten en produceren 100% nauwkeurigheid of relevante overeenkomsten. Dat wil gezegd, het is gegarandeerd dat de meest vergelijkbare vectoren in de gegevensset worden gevonden. Er is echter een beperking van 505 dimensies voor vectoren op een platte index.

  • De quantizedFlat index slaat gekwantiseerde (gecomprimeerde) vectoren op de index op. Vectorzoekopdrachten met quantizedFlat indexen zijn ook brute-force zoekopdrachten, maar hun nauwkeurigheid kan iets minder zijn dan 100% omdat de vectoren worden gekwantiseerd voordat ze aan de index worden toegevoegd. Vectorzoekopdrachten met quantized flat moeten echter lagere latentie, hogere doorvoer en lagere RU-kosten hebben dan vectorzoekopdrachten in een flat index. Dit is een goede optie voor kleinere scenario's of scenario's waarbij u queryfilters gebruikt om de vectorzoekopdracht te beperken tot een relatief kleine set vectoren. quantizedFlat moet worden gebruikt wanneer er ten minste 1.000 vectoren en minder dan 100.000 vectoren in de container zijn.

  • De diskANN index is een afzonderlijke index die specifiek is gedefinieerd voor vectoren die gebruikmaken van DiskANN, een suite met high performance vector indexeringsalgoritmen die zijn ontwikkeld door Microsoft Research. DiskANN-indexen kunnen een aantal van de laagste latentie, de hoogste doorvoer en de laagste RU-kostenquery's bieden, terwijl ze nog steeds hoge nauwkeurigheid behouden.

Belangrijk

Tijdens een vroege preview kunnen vectorindexen niet meer worden gewijzigd nadat ze zijn gemaakt. In plaats daarvan moet u een nieuwe container maken met een nieuw vectorindexbeleid als er een wijziging nodig is.

Hier volgen voorbeelden van geldig vectorindexbeleid:

{
    "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"
        }
    ]
}

Belangrijk

Het vectorpad is toegevoegd aan de sectie 'excludedPaths' van het indexeringsbeleid om te zorgen voor geoptimaliseerde prestaties voor invoeging. Als u het vectorpad niet toevoegt aan 'excludedPaths', leidt dit tot hogere RU-kosten en latentie voor vectorinvoegingen.

Belangrijk

Op dit moment in het voorbeeld van vectorzoekopdrachten worden geen geneste pad- of jokertekens gebruikt in het pad van het vectorbeleid. Vervangingsbewerkingen op het vectorbeleid worden momenteel niet ondersteund.

Vectorzoekopdrachten uitvoeren met query's met VectorDistance()

Zodra u een container met het gewenste vectorbeleid hebt gemaakt en vectorgegevens in de container hebt ingevoegd, kunt u een vectorzoekopdracht uitvoeren met behulp van de functie Vector Distance in een query. Een voorbeeld van een NoSQL-query die de overeenkomstscore als alias SimilarityScoreprojecteert en sorteert in volgorde van meest vergelijkbaar met minst vergelijkbaar:

SELECT TOP 10 c.title, VectorDistance(c.contentVector, [1,2,3]) AS SimilarityScore   
FROM c  
ORDER BY VectorDistance(c.contentVector, [1,2,3])   

Huidige limieten en beperkingen

Vectorindexering en -zoekopdrachten in Azure Cosmos DB voor NoSQL hebben enkele beperkingen, terwijl ze zich in een vroeg stadium van openbare preview bevinden.

  • U kunt maximaal één DiskANN-indextype per container opgeven

  • Vectorindexering wordt alleen ondersteund voor nieuwe containers.

  • Vectoren die zijn geïndexeerd met het flat indextype kunnen maximaal 505 dimensies zijn. Vectoren die zijn geïndexeerd met het quantizedFlat of DiskANN indextype kunnen maximaal 4096 dimensies zijn.

  • HierbijquantizedFlat wordt dezelfde kwantisatiemethode gebruikt als DiskANN.

  • De snelheid van vectorinvoegingen moet worden beperkt tijdens het gebruik van een vroege preview van DiskANN. Zeer grote opname (meer dan 5M-vectoren) kan extra opbouwtijd van de index vereisen.

  • Gedeelde doorvoerdatabases worden niet ondersteund.

  • Op dit moment in de preview wordt Vector Search niet ondersteund voor accounts met Analytical Store (en Synapse Link), gedeelde doorvoer, door de klant beheerde sleutels, continue back-up, Opslaganalyse en alle versies en wijzigingenfeed verwijderen. Zodra de Vector Search Preview is ingeschakeld, kan deze niet worden uitgeschakeld.

    Belangrijk

Op dit moment in de preview wordt Vector Search niet ondersteund voor accounts met Analytical Store (en Synapse Link), gedeelde doorvoer, door de klant beheerde sleutels, continue back-up, Opslaganalyse en alle versies en wijzigingenfeed verwijderen. Zodra de Vector Search Preview is ingeschakeld, kan deze niet worden uitgeschakeld.

Volgende stap