Freigeben über


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.

Tipp

Ein Beispiel mit Redis, das zeigt, wie Daten aus einer Sammlung kopiert werden, die mithilfe der Speicherspeicherabstraktionen erstellt wurde, auf eine, die mit den Vektorspeicherabstraktionen erstellt wurde, finden Sie hier.