Поделиться через


Использование абстракций векторного хранилища без определения собственной модели данных (предварительная версия)

Предупреждение

Функциональность хранилища векторов семантического ядра доступна в предварительной версии, и улучшения, требующие кардинальных изменений, могут по-прежнему возникать в ограниченных случаях до выпуска.

Предупреждение

Функциональность хранилища векторов семантического ядра доступна в предварительной версии, и улучшения, требующие кардинальных изменений, могут по-прежнему возникать в ограниченных случаях до выпуска.

Обзор

Соединители хранилища векторов семантического ядра используют подход, при котором модель имеет первостепенное значение для взаимодействия с базами данных. Это делает использование соединителей простым и простым, так как модель данных отражает схему записей базы данных и добавлять дополнительные сведения о схеме, необходимые, можно просто добавить атрибуты в свойства модели данных.

Существуют случаи, когда нежелательно или возможно определить собственную модель данных. Например, предположим, что вы не знаете во время компиляции, как выглядит схема базы данных, и схема предоставляется только с помощью конфигурации. Создание модели данных, которая отражает схему, будет невозможно в этом случае.

Чтобы обеспечить выполнение этого сценария, мы разрешаем использовать Dictionary<string, object?> тип записи. Свойства добавляются в словарь с ключом в качестве имени свойства и значения в качестве значения свойства.

Предоставление сведений о схеме при использовании словаря

При использовании словаря соединители по-прежнему должны знать, как выглядит схема базы данных. Без сведений схемы соединитель не сможет создать коллекцию или узнать, как сопоставить и из представления хранилища, которое использует каждая база данных.

Определение записи можно использовать для предоставления сведений о схеме. В отличие от модели данных, определение записи можно создать из конфигурации во время выполнения, предоставляя решение, если сведения о схеме не известны во время компиляции.

Подсказка

Чтобы узнать, как создать определение записи, обратитесь к определению схемы с определением записи.

Пример

Чтобы использовать словарь с соединителем, просто укажите его в качестве модели данных при создании коллекции и одновременно предоставьте определение записи.

// Create the definition to define the schema.
VectorStoreCollectionDefinition definition = new()
{
    Properties = new List<VectorStoreProperty>
    {
        new VectorStoreKeyProperty("Key", typeof(string)),
        new VectorStoreDataProperty("Term", typeof(string)),
        new VectorStoreDataProperty("Definition", typeof(string)),
        new VectorStoreVectorProperty("DefinitionEmbedding", typeof(ReadOnlyMemory<float>), dimensions: 1536)
    }
};

// When getting your collection instance from a vector store instance
// specify the Dictionary, using object as the key type for your database
// and also pass your record definition.
// Note that you have to use GetDynamicCollection instead of the regular GetCollection method
// to get an instance of a collection using Dictionary<string, object?>.
var dynamicDataModelCollection = vectorStore.GetDynamicCollection(
    "glossary",
    definition);

// 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 dynamicDataModelCollection.EnsureCollectionExistsAsync();

// When retrieving a record from the collection, key, data and vector values can
// now be accessed via the dictionary entries.
var record = await dynamicDataModelCollection.GetAsync("SK");
Console.WriteLine(record["Definition"]);

При создании экземпляра коллекции непосредственно определение записи передается в качестве параметра. Например, ниже приведен пример создания экземпляра коллекции поиска ИИ Azure с помощью словаря.

Обратите внимание, что каждая реализация коллекции хранилища векторов имеет отдельный *DynamicCollection класс, который можно использовать с строкой словаря<, объектом?>. Это связано с тем, что эти реализации могут поддерживать NativeAOT/Trimming.

new AzureAISearchDynamicCollection(
    searchIndexClient,
    "glossary",
    new() { Definition = definition });

Обзор

В Python можно использовать VectorStoreRecordDefinition в сочетании с любым универсальным типом, например диктом или кадром данных Pandas. Дополнительные сведения см. здесь: определение схемы с помощью определения записи.

Скоро

Дополнительные сведения в ближайшее время.