Использование абстракций векторного хранилища без определения собственной модели данных (предварительная версия)
Предупреждение
Функции хранилища векторов семантического ядра доступны в предварительной версии и улучшения, требующие критических изменений, могут по-прежнему возникать в ограниченных обстоятельствах перед выпуском.
Обзор
Соединители хранилища векторов семантического ядра используют модель первого подхода к взаимодействию с базами данных. Это делает использование соединителей простым и простым, так как модель данных отражает схему записей базы данных и добавлять дополнительные сведения о схеме, необходимые, можно просто добавить атрибуты в свойства модели данных.
Существуют случаи, когда нежелательно или возможно определить собственную модель данных. Например, предположим, что вы не знаете во время компиляции, как выглядит схема базы данных, и схема предоставляется только с помощью конфигурации. Создание модели данных, которая отражает схему, будет невозможно в этом случае.
Для обеспечения этого сценария мы предоставляем универсальную модель данных.
Универсальная модель данных
Универсальная модель данных — это класс с именем VectorStoreGenericDataModel
и доступен в пакете Microsoft.Extensions.VectorData.Abstractions
.
Для поддержки любого типа базы данных тип ключа указывается с помощью универсального VectorStoreGenericDataModel
параметра.
Все остальные свойства разделены на Data
Vector
и свойства. Любое свойство, которое не является вектором или ключом, считается свойством данных.
Data
и Vector
наборы свойств хранятся в виде словарей объектов с ключом строки.
Предоставление сведений о схеме при использовании универсальной модели данных
При использовании универсальной модели данных соединители по-прежнему должны знать, как выглядит схема базы данных. Без сведений схемы соединитель не сможет создать коллекцию или узнать, как сопоставить и из представления хранилища, которое использует каждая база данных.
Определение записи можно использовать для предоставления сведений о схеме. В отличие от модели данных, определение записи можно создать из конфигурации во время выполнения, предоставляя решение, если сведения о схеме не известны во время компиляции.
Совет
Чтобы узнать, как создать определение записи, обратитесь к определению схемы с определением записи.
Пример
Чтобы использовать универсальную модель данных с соединителем, просто укажите ее в качестве модели данных при создании коллекции и одновременно предоставьте определение записи.
// 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"])
При создании экземпляра коллекции непосредственно определение записи передается в качестве параметра. Например, ниже приведен пример создания экземпляра сбора поиска ИИ Azure с помощью универсальной модели данных.
new AzureAISearchVectorStoreRecordCollection<VectorStoreGenericDataModel<string>>(
searchIndexClient,
"glossary",
new() { VectorStoreRecordDefinition = vectorStoreRecordDefinition });
Скоро
Дополнительные сведения в ближайшее время.
Скоро
Дополнительные сведения в ближайшее время.