Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Von Bedeutung
Dieses Feature befindet sich in der Vorschauphase.
Cosmos DB in Microsoft Fabric bietet jetzt eine effiziente Vektorindizierung und Suche. Dieses Feature wurde entwickelt, um modale, 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 enthalten, sondern auch multimodale hochdimensionale Vektoren als weitere Eigenschaften der Dokumente. 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.
Cosmos DB in Fabric 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 multi modale Vektorsuche in beliebiger Größenordnung zu unterstützen.
Die Vektorsuche in Cosmos DB kann mit allen anderen unterstützten NoSQL-Abfragefiltern und Indizes mithilfe von WHERE Klauseln kombiniert werden. Diese Kombination ermöglicht Es Ihren Vektorsuchen, die relevantesten Daten für Ihre Anwendungen zu sein.
Dieses Feature verbessert die Kernfunktionen von 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, die mathematische Darstellungen von Daten in einem hochdimensionalen Raum sind. 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 in Cosmos DB in Fabric 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.
Containervektorrichtlinien
Zum Ausführen der Vektorsuche mit Cosmos DB in Fabric müssen Sie eine Vektorrichtlinie für den Container definieren. Diese Richtlinie 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. Diese Konfiguration 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. Unterstützte Typen sindfloat32(Standard),int8unduint8.dimensions: Die Dimensionalität oder Länge jedes Vektors im Pfad. Alle Vektoren in einem Pfad sollten dieselbe Anzahl von Dimensionen aufweisen. (Standardeinstellung1536).distanceFunction: Die Metrik, die zum Berechnen der Entfernung/Ähnlichkeit verwendet wird. Unterstützte Metriken sind:cosine, die Werte von $-1$ (am wenigsten ähnlich) auf $+1$ (am ähnlichsten) hat.dot product, die Werte von $-\infty$ (am wenigsten ähnlich) mit $+\infty$ (am ähnlichsten) hat.euclidean, die Werte von $0$ (am ähnlichsten) auf $+\infty$ (am wenigsten ähnlich) hat.
Hinweis
Jeder eindeutige Pfad kann höchstens eine Richtlinie aufweisen. Mehrere Richtlinien können jedoch angegeben werden, wenn 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
}
]
}
Weitere Informationen und Beispiele für Einstellungen einer Containervektorrichtlinie finden Sie unter Beispiele für Vektorindizierungsrichtlinien.
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 diese Typen von Vektorindexrichtlinien angeben:
| BESCHREIBUNG | Max. Abmessungen | |
|---|---|---|
flat |
Speichert Vektoren im selben Index wie andere indizierte Eigenschaften. | 505 |
quantizedFlat |
Quantisiert (komprimiert) Vektoren vor dem Speichern im Index. Diese Richtlinie kann die Latenz und den Durchsatz zu kosten einer kleinen 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 erfordern, dass mindestens 1.000 Vektoren eingefügt werden. Dieses Minimum besteht darin, die Genauigkeit des Quantisierungsprozesses sicherzustellen. Wenn weniger als 1.000 Vektoren vorhanden sind, wird stattdessen eine vollständige Überprüfung ausgeführt und führt zu höheren RU-Gebühren für eine Vektorsuchabfrage.
Einige Punkte sind zu beachten:
Die
flatIndextypen undquantizedFlatIndextypen verwenden den Index von Cosmos DB, um jeden Vektor während einer Vektorsuche zu speichern und zu lesen. Vektorsuchen mit einemflatIndex sind Brute-Force-Suchvorgänge und erzeugen 100 % Genauigkeit oder Rückruf. Das heißt, sie werden garantiert die ähnlichsten Vektoren im Dataset finden. Es gibt jedoch eine Einschränkung der505Dimensionen für Vektoren in einem flachen Index.Der
quantizedFlatIndex speichert quantisierte (komprimierte) Vektoren im Index. Vektorsuchen mit demquantizedFlat-Index sind ebenfalls Brute-Force-Suchvorgänge, ihre Genauigkeit kann jedoch etwas niedriger als 100 % sein, da die Vektoren vor dem Hinzufügen zum Index quantisiert werden. Vektorsuchen mitquantized flatsollten jedoch eine geringere Latenz, einen höheren Durchsatz und niedrigere RU-Kosten als Vektorsuchen in einemflat-Index aufweisen. Dieser Index ist eine gute Option für kleinere Szenarien oder Szenarien, in denen Sie Abfragefilter verwenden, um die Vektorsuche auf eine relativ kleine Gruppe von Vektoren einzugrenzen.quantizedFlatwird empfohlen, wenn die Anzahl der zu indizierenden Vektoren etwa 50.000 oder weniger pro physische Partition beträgt. Diese Empfehlung ist jedoch nur eine allgemeine Richtlinie, und die tatsächliche Leistung sollte getestet werden, da jedes Szenario unterschiedlich sein kann.Der
diskANNIndex 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 Latenzzeiten, den höchsten Durchsatz und die niedrigsten RU-Kosten für Abfragen bieten und gleichzeitig eine hohe Genauigkeit beibehalten. Im Allgemeinen ist DiskANN der leistungsfähigste aller Indextypen, wenn pro physischer Partition mehr als 50.000 Vektoren vorhanden sind.
Hier sind Beispiele für gültige Vektorindexrichtlinien:
{
"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/?"
},
{
"path": "/vector1/*",
},
{
"path": "/vector2/*",
}
],
"vectorIndexes": [
{
"path": "/vector1",
"type": "quantizedFlat"
},
{
"path": "/vector2",
"type": "diskANN"
}
]
}
Von Bedeutung
Der Vektorpfad, der dem excludedPaths Abschnitt der Indizierungsrichtlinie hinzugefügt wurde, um eine optimierte Leistung für die Einfügung sicherzustellen. Das Nicht-Hinzufügen des Vektorpfads zu excludedPaths führt zu höheren Anforderungen an die Einheitsladung und Latenz bei Vektoreinfügungen.
Von Bedeutung
Wildcardzeichen (*, []) werden derzeit nicht in der Vektorrichtlinie oder im Vektorindex 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 integrierten VECTORDISTANCE Funktion in einer Abfrage durchführen. Ein Beispiel für eine NoSQL-Abfrage, die den Ähnlichkeitswert als Alias score 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 score
FROM
container c
ORDER BY
VECTORDISTANCE(c.contentVector, [1,2,3])
Von Bedeutung
Verwenden Sie immer eine TOP N-Klausel in der SELECT-Anweisung einer Abfrage. Andernfalls versucht die Vektorsuche, viele weitere Ergebnisse zurückzugeben, was dazu führt, dass die Abfrage mehr Anforderungseinheiten (RUs) kostet und eine höhere Latenz als erforderlich hat.