Freigeben über


Verwenden von Vektorspeicherabstraktionen ohne Definition Ihres eigenen Datenmodells (Vorschau)

Warnung

Die Funktionalität des semantischen Kernelvektorspeichers befindet sich in der Vorschau, und Verbesserungen, die fehlerhafte Änderungen erfordern, können unter begrenzten Umständen noch vor der Veröffentlichung auftreten.

Übersicht

Die Connectors für den semantischen Kernelvektorspeicher verwenden zunächst einen Modellansatz für die Interaktion mit Datenbanken. Dadurch wird die Verwendung der Connectors einfach und einfach, da Ihr Datenmodell das Schema Ihrer Datenbankdatensätze widerspiegelt und alle erforderlichen zusätzlichen Schemainformationen hinzufügen kann, können Sie einfach Attribute zu den Datenmodelleigenschaften hinzufügen.

Es gibt jedoch Fälle, in denen es nicht wünschenswert oder möglich ist, Ihr eigenes Datenmodell zu definieren. Angenommen, Sie wissen zur Kompilierungszeit nicht, wie Ihr Datenbankschema aussieht, und das Schema wird nur über die Konfiguration bereitgestellt. Das Erstellen eines Datenmodells, das das Schema widerspiegelt, wäre in diesem Fall unmöglich.

Um dieses Szenario zu erfüllen, stellen wir ein generisches Datenmodell bereit.

Generisches Datenmodell

Das generische Datenmodell ist eine Klasse mit dem Namen VectorStoreGenericDataModel und steht im Microsoft.Extensions.VectorData.Abstractions Paket zur Verfügung.

Zur Unterstützung eines beliebigen Datenbanktyps wird der Schlüssel des VectorStoreGenericDataModel Schlüssels über einen generischen Parameter angegeben.

Alle anderen Eigenschaften sind in Data und Vector Eigenschaften unterteilt. Jede Eigenschaft, die kein Vektor oder ein Schlüssel ist, wird als Dateneigenschaft betrachtet. Data und Vector Eigenschaftensätze werden als Zeichenfolgenschlüsselwörterbücher von Objekten gespeichert.

Bereitstellen von Schemainformationen bei Verwendung des generischen Datenmodells

Bei Verwendung des generischen Datenmodells müssen Connectors immer noch wissen, wie das Datenbankschema aussieht. Ohne die Schemainformationen konnte der Connector keine Sammlung erstellen oder wissen, wie sie der von jeder Datenbank verwendeten Speicherdarstellung zugeordnet werden.

Eine Datensatzdefinition kann verwendet werden, um die Schemainformationen bereitzustellen. Im Gegensatz zu einem Datenmodell kann eine Datensatzdefinition zur Laufzeit aus der Konfiguration erstellt werden, wodurch eine Lösung bereitgestellt wird, wenn Schemainformationen zur Kompilierungszeit nicht bekannt sind.

Tipp

Informationen zum Erstellen einer Datensatzdefinition finden Sie unter Definieren des Schemas mit einer Datensatzdefinition.

Beispiel

Wenn Sie das generische Datenmodell mit einem Verbinder verwenden möchten, geben Sie es einfach beim Erstellen einer Sammlung als Datenmodell an, und stellen Sie gleichzeitig eine Datensatzdefinition bereit.

// Create the definition to define the schema.
VectorStoreRecordDefinition vectorStoreRecordDefinition = new()
{
    Properties = new List<VectorStoreRecordProperty>
    {
        new VectorStoreRecordKeyProperty("Key", typeof(string)),
        new VectorStoreRecordDataProperty("Term", typeof(string)),
        new VectorStoreRecordDataProperty("Definition", typeof(string)),
        new VectorStoreRecordVectorProperty("DefinitionEmbedding", typeof(ReadOnlyMemory<float>)) { Dimensions = 1536 }
    }
};

// When getting your collection instance from a vector store instance
// specify the generic data model, using the appropriate key type for your database
// and also pass your record definition.
var genericDataModelCollection = vectorStore.GetCollection<string, VectorStoreGenericDataModel<string>>(
    "glossary",
    vectorStoreRecordDefinition);

// Since we have schema information available from the record definition
// it's possible to create a collection with the right vectors, dimensions,
// indexes and distance functions.
await genericDataModelCollection.CreateCollectionIfNotExistsAsync();

// When retrieving a record from the collection, data and vectors can
// now be accessed via the Data and Vector dictionaries respectively.
var record = await genericDataModelCollection.GetAsync("SK");
Console.WriteLine(record.Data["Definition"])

Beim direkten Erstellen einer Sammlungsinstanz wird die Datensatzdefinition als Option übergeben. Hier sehen Sie z. B. ein Beispiel für das Erstellen einer Azure AI Search-Sammlungsinstanz mit dem generischen Datenmodell.

new AzureAISearchVectorStoreRecordCollection<VectorStoreGenericDataModel<string>>(
    searchIndexClient,
    "glossary",
    new() { VectorStoreRecordDefinition = vectorStoreRecordDefinition });

In Kürze verfügbar

Weitere Informationen werden in Kürze verfügbar sein.

In Kürze verfügbar

Weitere Informationen werden in Kürze verfügbar sein.