Udostępnij za pośrednictwem


Używanie abstrakcji magazynu wektorów bez definiowania własnego modelu danych (wersja zapoznawcza)

Ostrzeżenie

Funkcja semantycznego magazynu wektorów jądra jest dostępna w wersji zapoznawczej, a ulepszenia wymagające zmian powodujących niezgodność mogą nadal występować w ograniczonych okolicznościach przed wydaniem.

Omówienie

Łączniki semantycznego magazynu wektorów jądra używają modelu pierwszego podejścia do interakcji z bazami danych. Dzięki temu użycie łączników jest łatwe i proste, ponieważ model danych odzwierciedla schemat rekordów bazy danych i dodaje dodatkowe wymagane informacje o schemacie, możesz po prostu dodać atrybuty do właściwości modelu danych.

Istnieją przypadki, w których nie jest pożądane lub można zdefiniować własny model danych. Załóżmy na przykład, że nie wiesz w czasie kompilacji, jak wygląda schemat bazy danych, a schemat jest udostępniany tylko za pośrednictwem konfiguracji. Utworzenie modelu danych, który odzwierciedla schemat, byłoby niemożliwe w tym przypadku.

Aby zaspokoić ten scenariusz, udostępniamy ogólny model danych.

Ogólny model danych

Ogólny model danych to klasa o nazwie VectorStoreGenericDataModel i jest dostępna w pakiecie Microsoft.Extensions.VectorData.Abstractions .

Aby obsługiwać dowolny typ bazy danych, typ klucza elementu VectorStoreGenericDataModel jest określony za pośrednictwem parametru ogólnego.

Wszystkie inne właściwości są podzielone na Data właściwości i .Vector Każda właściwość, która nie jest wektorem lub kluczem, jest traktowana jako właściwość danych. Data zestawy właściwości i Vector są przechowywane jako słowniki ciągów obiektów.

Dostarczanie informacji o schemacie podczas korzystania z ogólnego modelu danych

W przypadku korzystania z ogólnego modelu danych łączniki nadal muszą wiedzieć, jak wygląda schemat bazy danych. Bez informacji o schemacie łącznik nie będzie mógł utworzyć kolekcji lub wiedzieć, jak mapować na i z reprezentacji magazynu używanej przez każdą bazę danych.

Definicję rekordu można użyć do podania informacji o schemacie. W przeciwieństwie do modelu danych definicję rekordu można utworzyć na podstawie konfiguracji w czasie wykonywania, zapewniając rozwiązanie, gdy informacje o schemacie nie są znane w czasie kompilacji.

Napiwek

Aby zobaczyć, jak utworzyć definicję rekordu, zapoznaj się z definiowaniem schematu przy użyciu definicji rekordu.

Przykład

Aby użyć ogólnego modelu danych z łącznikiem, po prostu określ go jako model danych podczas tworzenia kolekcji i jednocześnie podaj definicję rekordu.

// 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"])

Podczas bezpośredniego konstruowania wystąpienia kolekcji definicja rekordu jest przekazywana jako opcja. Na przykład poniżej przedstawiono przykład konstruowania wystąpienia kolekcji usługi Azure AI Search z ogólnym modelem danych.

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

Wkrótce

Więcej informacji wkrótce.

Wkrótce

Więcej informacji wkrótce.