Vektorsuche in Azure Cosmos DB for NoSQL (Vorschau)

GILT FÜR: NoSQL

Azure Cosmos DB for NoSQL bietet jetzt Vektorindizierung und Suche in der Vorschau an. Dieses Feature wurde entwickelt, um hochdimensionale Vektoren zu verarbeiten und eine effiziente und genaue Vektorsuche in beliebiger Größenordnung zu ermöglichen. Sie können Vektoren jetzt direkt in den Dokumenten zusammen mit Ihren Daten speichern. Jedes Dokument in Ihrer Datenbank kann nicht nur herkömmliche schemafreie Daten, sondern auch hochdimensionale Vektoren als andere Eigenschaften der Dokumente enthalten. Diese Colocation von Daten und Vektoren ermöglicht eine effiziente Indizierung und Suche, da die Vektoren in derselben logischen Einheit wie die daten gespeichert werden, die sie darstellen. Vektoren und Daten zusammenzuhalten vereinfacht die Datenverwaltung, KI-Anwendungsarchitekturen und die Effizienz von vektorbasierten Vorgängen.

Azure Cosmos DB for NoSQL bietet die Flexibilität bei der Auswahl der Vektorindizierungsmethode:

  • Eine "flache" oder k-nächste Nachbarn genaue Suche (manchmal als Brute-Force bezeichnet) kann einen Abruf von 100 % für kleinere, fokussierte Vektorsuchen bereitstellen. insbesondere in Kombination mit Abfragefiltern und Partitionsschlüsseln.
  • Ein quantisierter flacher Index, der Vektoren mithilfe diskANN-basierter Quantisierungsmethoden komprimiert, um die Effizienz bei der kNN-Suche zu verbessern.
  • DiskANN, eine Suite modernster Vektorindizierungsalgorithmen, die von Microsoft Research entwickelt wurden, um eine effiziente, präzise Vektorsuche in jedem Maßstab zu unterstützen.

Weitere Informationen zur Vektorindizierung

Die Vektorsuche in Azure Cosmos DB kann mit allen anderen unterstützten Azure Cosmos DB NoSQL-Abfragefiltern und -Indizes mithilfe von WHERE Klauseln kombiniert werden. Auf diese Weise können Ihre Vektorsuchen die relevantesten Daten für Ihre Anwendungen sein.

Dieses Feature verbessert die Kernfunktionen von Azure Cosmos DB und macht es flexibler für die Verarbeitung von Vektordaten und Suchanforderungen in KI-Anwendungen.

Was ist ein Vektorspeicher?

Ein Vektorspeicher oder eine Vektordatenbank ist eine Datenbank zum Speichern und Verwalten von Vektoreinbettungen, mathematischen Darstellungen von Daten in einem hochdimensionalen Raum. In diesem Raum entspricht jede Dimension einem Merkmal der Daten, und zehntausende Dimensionen können verwendet werden, um komplexe Daten darzustellen. Die Position eines Vektors in diesem Raum stellt seine Merkmale dar. Wörter, Ausdrücke oder ganze Dokumente sowie Bilder, Audioinhalte und andere Datentypen können vektorisiert werden.

Wie funktioniert ein Vektorspeicher?

In einem Vektorspeicher werden Vektorsuchalgorithmen verwendet, um Einbettungen zu indizieren und abzufragen. Zu den bekannten Vektorsuchalgorithmen zählen unter anderem „Hierarchical Navigable Small World“ (HNSW), „Inverted File“ (IVF), „DiskANN“ usw. Die Vektorsuche ist eine Methode, mit der Sie ähnliche Elemente basierend auf ihren Datenmerkmalen anstatt exakter Übereinstimmungen in einem Eigenschaftenfeld finden können. Diese Technik ist nützlich für Anwendungsfälle wie die Suche nach ähnlichem Text, das Suchen ähnlicher Bilder, das Abgeben von Empfehlungen oder sogar das Erkennen von Anomalien. Sie wird zum Abfragen der Vektoreinbettungen Ihrer Daten verwendet, die Sie mit einem Machine Learning-Modell unter Verwendung einer Einbettungs-API erstellt haben. Beispiele für Einbettungs-APIs sind Azure OpenAI Embeddings oder Hugging Face in Azure. Anschließend misst die Vektorsuche den Abstand zwischen den Datenvektoren und Ihrem Abfragevektor. Die Datenvektoren, die Ihrem Abfragevektor am nächsten liegen, sind semantisch am ähnlichsten.

In der integrierten Vektordatenbank im virtuellen Kern von Azure Cosmos DB for NoSQL können Einbettungen zusammen mit den ursprünglichen Daten gespeichert, indiziert und abgefragt werden. So vermeiden Sie zusätzliche Kosten für die Replikation der Daten in einer separaten reinen Vektordatenbank. Außerdem bleiben Ihre Vektoreinbettungen und Ihre Originaldaten in dieser Architektur zusammen, was multimodale Datenvorgänge erleichtert und eine höhere Datenkonsistenz, Skalierbarkeit und Leistung ermöglicht.

Registrieren im Vorschaufeature für die Vektorsuche

Die Vektorsuche für Azure Cosmos DB for NoSQL erfordert eine Vorschau-Featureregistrierung auf der Seite "Features" Ihrer Azure Cosmos DB. Führen Sie die folgenden Schritte aus, um sich zu registrieren:

  1. Navigieren Sie zu Ihrer Azure Cosmos DB for NoSQL-Ressourcenseite.

  2. Wählen Sie den Bereich "Features" unter dem Menüelement "Einstellungen" aus.

  3. Wählen Sie für "Vektorsuche in Azure Cosmos DB for NoSQL" aus.

  4. Lesen Sie die Beschreibung des Features, um zu bestätigen, dass Sie sich in der Vorschau registrieren möchten.

  5. Wählen Sie "Aktivieren" aus, um sich bei der Vorschau zu registrieren.

Hinweis

Die Registrierungsanforderung wird automatisch genehmigt, es kann jedoch mehrere Minuten dauern, bis sie wirksam wird.

Tipp

Alternativ können Sie die Azure CLI verwenden, um die Funktionen Ihres Kontos zu aktualisieren und die NoSQL-Vektorsuche zu unterstützen.

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

Containervektorrichtlinien

Zum Ausführen der Vektorsuche mit Azure Cosmos DB for NoSQL müssen Sie eine Vektorrichtlinie für den Container definieren. Dies stellt wichtige Informationen für das Datenbankmodul bereit, um eine effiziente Ähnlichkeitssuche für Vektoren durchzuführen, die in den Dokumenten des Containers gefunden werden. Dies informiert auch die Vektorindizierungsrichtlinie über die erforderlichen Informationen, wenn Sie eine angeben möchten. Die folgenden Informationen sind in der enthaltenen Vektorrichtlinie enthalten:

  • "path": die Eigenschaft, die den Vektor enthält (erforderlich).
  • "datatype": Der Datentyp der Vektoreigenschaft (Standard Float32). 
  • "dimensions": Die Dimensionalität oder Länge jedes Vektors im Pfad. Alle Vektoren in einem Pfad sollten dieselbe Anzahl von Dimensionen aufweisen. (Standardwert 1536).
  • „distanceFunction“: Die Metrik, die zum Berechnen der Entfernung/Ähnlichkeit verwendet wird. Unterstützte Metriken:
    • cosine, das Werte von -1 (am wenigsten ähnlich) bis +1 (am ähnlichsten) hat.
    • dot product, enthält Werte von -inf (am wenigsten ähnlich) bis +inf (am ähnlichsten).
    • euclidean, das Werte von -0 (am wenigsten ähnlich) bis +inf (am ähnlichsten) hat.

Hinweis

Jeder eindeutige Pfad kann höchstens eine Richtlinie aufweisen. Es können jedoch mehrere Richtlinien angegeben werden, sofern sie alle auf einen anderen Pfad abzielen.

Die Containervektorrichtlinie kann als JSON-Objekte beschrieben werden. Hier sind zwei Beispiele für gültige Containervektorrichtlinien:

Eine Richtlinie mit einem einzelnen Vektorpfad

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

Eine Richtlinie mit zwei Vektorpfaden

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

Vektorindizierungsrichtlinien

Vektorindizes erhöhen die Effizienz beim Ausführen von Vektorsuchen mithilfe der VectorDistance Systemfunktion. Vektorsuchen haben geringere Latenz, einen höheren Durchsatz und weniger RU-Verbrauch bei Verwendung eines Vektorindexes. Sie können die folgenden Typen von Vektorindexrichtlinien angeben:

Typ Beschreibung Max. Abmessungen
flat Speichert Vektoren im selben Index wie andere indizierte Eigenschaften. 505
quantizedFlat Quantisiert (komprimiert) Vektoren vor dem Speichern im Index. Dies kann die Latenz und den Durchsatz auf Kosten einer geringeren Genauigkeit verbessern. 4096
diskANN Erstellt einen Index basierend auf DiskANN für schnelle und effiziente Näherungssuche. 4096

Hinweis

Für die quantizedFlat- und diskANN-Indizes müssen mindestens 1.000 Vektoren eingefügt werden. Dadurch wird die Genauigkeit des Quantisierungsprozesses sichergestellt. Wenn weniger als 1.000 Vektoren vorhanden sind, wird stattdessen ein vollständiger Scan ausgeführt, was zu höheren RU-Gebühren für eine Vektorsuchabfrage führt.

Einige Punkte sind zu beachten:

  • Die Indextypen flat und quantizedFlat Indextypen verwenden den Index von Azure Cosmos DB, um jeden Vektor zu speichern und zu lesen, wenn eine Vektorsuche ausgeführt wird. Vektorsuchen mit einem flat Index sind Brute-Force-Suchvorgänge und erzeugen 100 % Genauigkeit oder Rückruf. Das heißt, es ist garantiert, die ähnlichsten Vektoren im Dataset zu finden. Es gibt jedoch eine Einschränkung der 505 Dimensionen für Vektoren in einem flachen Index.

  • Der quantizedFlat Index speichert quantisierte (komprimierte) Vektoren im Index. Vektorsuchen mit quantizedFlat Index sind auch Brute-Force-Suchvorgänge, ihre Genauigkeit kann jedoch etwas kleiner als 100 % sein, da die Vektoren vor dem Hinzufügen zum Index quantisiert werden. Vektorsuchen mit quantized flat sollten jedoch eine geringere Latenz, einen höheren Durchsatz und niedrigere RU-Kosten als Vektorsuchen in einem flat-Index aufweisen. Dies ist eine gute Option für weniger umfangreiche Szenarios oder Szenarios, in denen Sie Abfragefilter verwenden, um die Vektorsuche auf wenige Vektoren einzugrenzen. quantizedFlat sollten verwendet werden, wenn mindestens 1.000 Vektoren und weniger als 100.000 Vektoren im Container vorhanden sind.

  • Der diskANN Index ist ein separater Index, der speziell für Vektoren mit DiskANN definiert ist, einer Suite von Hochleistungsvektorindizierungsalgorithmen, die von Microsoft Research entwickelt wurden. DiskANN-Indizes können einige der niedrigsten Latenz, den höchsten Durchsatz und die niedrigsten RU-Kostenabfragen bieten und gleichzeitig eine hohe Genauigkeit beibehalten.

Wichtig

Während der frühen Vorschau können Vektorindizes nach der Erstellung nicht mehr geändert werden. Stattdessen müssen Sie einen neuen Container mit einer neuen Vektorindexrichtlinie erstellen, wenn eine Änderung erforderlich ist.

Hier sind Beispiele für gültige Vektorindexrichtlinien:

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

Wichtig

Dieser Vektorpfad wurde dem Abschnitt „excludedPaths“ der Indizierungsrichtlinie hinzugefügt, um eine optimierte Leistung für das Einfügen sicherzustellen. Wenn der Vektorpfad nicht zu „excludedPaths“ hinzugefügt wird, führt dies zu einer höheren RU-Belastung und Latenz für Vektoreinfügungen.

Wichtig

Zurzeit werden in der Vektorsuchvorschau keine geschachtelten Pfad- oder Platzhalterzeichen im Pfad der Vektorrichtlinie verwendet. Ersetzungsvorgänge für die Vektorrichtlinie werden derzeit nicht unterstützt.

Durchführen der Vektorsuche mit Abfragen mithilfe von VectorDistance()

Nachdem Sie einen Container mit der gewünschten Vektorrichtlinie erstellt und Vektordaten in den Container eingefügt haben, können Sie eine Vektorsuche mithilfe der Systemfunktion Vektordistanz in einer Abfrage durchführen. Ein Beispiel für eine NoSQL-Abfrage, die den Ähnlichkeitswert als Alias SimilarityScore projiziert und in der Reihenfolge von den ähnlichsten zu den am wenigsten ähnlichen sortiert wird:

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

Aktuelle Grenzwerte und Einschränkungen

Die Vektorindizierung und Suche in Azure Cosmos DB for NoSQL hat einige Einschränkungen, während sie in frühen Phasen der öffentlichen Vorschau auftreten.

  • Sie können höchstens einen DiskANN-Indextyp pro Container angeben

  • Die Vektorindizierung wird nur für neue Container unterstützt.

  • Vektoren, die mit dem flat Indextyp indiziert sind, können höchstens 505 Dimensionen aufweisen. Vektoren, die mit dem Indextyp quantizedFlat oder DiskANN indiziert sind, können höchstens 4.096 Dimensionen aufweisen.

  • Die quantizedFlat verwendet dieselbe Quantisierungsmethode wie DiskANN.

  • Die Häufigkeit der Vektoreinfügungen sollte begrenzt sein, während eine frühe Vorschau von DiskANN verwendet wird. Sehr große Aufnahme (über 5M-Vektoren) erfordert möglicherweise zusätzliche Indexbuildzeit.

  • Freigegebene Durchsatzdatenbanken werden nicht unterstützt.

  • Zum jetzigen Zeitpunkt in der Vorschau wird die Vektorsuche für Konten mit Analysespeicher (und Synapse Link), freigegebenem Durchsatz, kundenseitig verwalteten Schlüsseln, fortlaufende Sicherung, Speicheranalyse und dem Änderungsfeed „Alle Versionen und Löschvorgänge“ nicht unterstützt. Sobald die Vektorsuchvorschau aktiviert ist, kann sie nicht deaktiviert werden.

    Wichtig

Zum jetzigen Zeitpunkt in der Vorschau wird die Vektorsuche für Konten mit Analysespeicher (und Synapse Link), freigegebenem Durchsatz, kundenseitig verwalteten Schlüsseln, fortlaufende Sicherung, Speicheranalyse und dem Änderungsfeed „Alle Versionen und Löschvorgänge“ nicht unterstützt. Sobald die Vektorsuchvorschau aktiviert ist, kann sie nicht deaktiviert werden.

Nächster Schritt