Speicher für legacy-semantischen Kernelspeicher
Tipp
Es wird empfohlen, die Vektorspeicherabstraktionen anstelle der älteren Speicherspeicher zu verwenden. Weitere Informationen zur Verwendung der Vektorspeicherabstraktionen beginnen hier.
Der semantische Kernel stellt eine Reihe von Speicherspeicherabstraktionen bereit, bei denen die primäre Schnittstelle ist Microsoft.SemanticKernel.Memory.IMemoryStore
.
Speicher im Vergleich zu Vektorspeicherabstraktionen
Als Teil der Bemühungen, den Vektorspeicher und die Suchkapazität des semantischen Kernels zu entwickeln und zu erweitern, haben wir einen neuen Satz von Abstraktionen veröffentlicht, um die Speicherspeicherabstraktionen zu ersetzen. Wir rufen die Ersetzungsabstraktionen von Vektorspeicherabstraktionen auf. Beides ist ähnlich, aber ihre Schnittstellen unterscheiden sich, und die Vektorspeicher-Abstraktionen bieten erweiterte Funktionen.
Merkmal | Speicher für ältere Speicher | Vektorspeicher |
---|---|---|
Hauptschnittstelle | IMemoryStore | IVectorStore |
Abstraktions-Nuget-Paket | Microsoft.SemanticKernel.Abstractions | Microsoft.Extensions.VectorData.Abstractions |
Benennungskonvention | {Provider}MemoryStore, z. B. RedisMemoryStore | {Provider}VectorStore, z. B. RedisVectorStore |
Unterstützt Datensatz-Upsert, Abrufen und Löschen | Ja | Ja |
Unterstützt das Erstellen und Löschen von Sammlungen. | Ja | Ja |
Unterstützt die Vektorsuche | Ja | Ja |
Unterstützt die Auswahl des bevorzugten Vektorsuchindex und der Entfernungsfunktion. | No | Ja |
Unterstützt mehrere Vektoren pro Datensatz | No | Ja |
Unterstützt benutzerdefinierte Schemas | No | Ja |
Unterstützt metadatenvorfilterung für die Vektorsuche | No | Ja |
Unterstützt die Vektorsuche in Nicht-Vektordatenbanken, indem das gesamte Dataset auf den Client heruntergeladen und eine lokale Vektorsuche durchgeführt wird. | Ja | No |
Verfügbare Speicherkonnektoren
Der semantische Kernel bietet mehrere Speicherspeicherconnectors zu Vektordatenbanken, mit denen Sie Informationen speichern und abrufen können. Dazu gehören:
Dienst | C# | Python |
---|---|---|
Vektordatenbank in Azure Cosmos DB for NoSQL | C# | Python |
Vektordatenbank in V-Kern-basiertem Azure Cosmos DB for MongoDB | C# | Python |
Azure KI Cognitive Search | C# | Python |
Azure PostgreSQL Server | C# | |
Azure SQL-Datenbank | C# | |
Chroma | C# | Python |
DuckDB | C# | |
Milvus | C# | Python |
MongoDB Atlas-Vektorsuche | C# | Python |
Pinecone | C# | Python |
Postgres | C# | Python |
Qdrant | C# | |
Redis | C# | |
Sqlite | C# | |
Weaviate | C# | Python |
Migrieren von Speicherspeichern zu Vektorspeichern
Wenn Sie von der Verwendung der Speicherspeicherabstraktionen zu den Vektorspeicherabstraktionen migrieren möchten, gibt es verschiedene Möglichkeiten, dies zu tun.
Verwenden der vorhandenen Auflistung mit den Vektorspeicherabstraktionen
Die einfachste Möglichkeit in vielen Fällen könnte die Verwendung der Vektorspeicher-Abstraktionen sein, um auf eine Sammlung zuzugreifen, die mithilfe der Speicherspeicherabstraktionen erstellt wurde. In vielen Fällen ist dies möglich, da die Vektorspeicher-Abstraktion Ihnen ermöglicht, das Schema auszuwählen, das Sie verwenden möchten. Die Hauptanforderung besteht darin, ein Datenmodell zu erstellen, das dem Schema entspricht, das von der älteren Speicherspeicherimplementierung verwendet wird.
Um z. B. auf eine Sammlung zuzugreifen, die vom Azure AI Search Memory Store erstellt wurde, können Sie das folgende Vector Store-Datenmodell verwenden.
using Microsoft.Extensions.VectorData;
class VectorStoreRecord
{
[VectorStoreRecordKey]
public string Id { get; set; }
[VectorStoreRecordData]
public string Description { get; set; }
[VectorStoreRecordData]
public string Text { get; set; }
[VectorStoreRecordData]
public bool IsReference { get; set; }
[VectorStoreRecordData]
public string ExternalSourceName { get; set; }
[VectorStoreRecordData]
public string AdditionalMetadata { get; set; }
[VectorStoreRecordVector(VectorSize)]
public ReadOnlyMemory<float> Embedding { get; set; }
}
Tipp
Ausführlichere Beispiele zur Verwendung der Vektorspeicherabstraktionen für den Zugriff auf Sammlungen, die mit einem Speicherspeicher erstellt wurden, finden Sie hier.
Erstellen einer neuen Sammlung
In einigen Fällen ist die Migration zu einer neuen Sammlung möglicherweise vorzuziehen, als die vorhandene Sammlung direkt zu verwenden. Das vom Speicher ausgewählte Schema stimmt möglicherweise nicht mit Ihren Anforderungen überein, insbesondere im Hinblick auf die Filterung.
Der Redis-Speicherspeicher verwendet z. B. ein Schema mit drei Feldern:
- Zeichenfolgenmetadaten
- langer Zeitstempel
- float[] Embedding
Alle anderen Daten als das Einbetten oder Zeitstempel werden als serialisierte JSON-Zeichenfolge im Metadatenfeld gespeichert. Dies bedeutet, dass es nicht möglich ist, die einzelnen Werte zu indizieren und nach ihnen zu filtern. Vielleicht möchten Sie z. B. mithilfe des ExternalSourceName filtern, dies ist jedoch nicht möglich, während sie sich in einer JSON-Zeichenfolge befindet.
In diesem Fall ist es möglicherweise besser, die Daten in eine neue Sammlung mit einem flachen Schema zu migrieren. Hier gibt es zwei Optionen. Sie können eine neue Sammlung aus Ihren Quelldaten erstellen oder einfach die Daten aus dem alten in das neue zuordnen und kopieren. Die erste Option kann teurer sein, da Sie die Einbettungen aus den Quelldaten neu generieren müssen.