Использование соединителя Хранилища векторных данных Azure CosmosDB MongoDB (vCore) (предварительная версия)
Предупреждение
Функции хранилища векторов семантического ядра доступны в предварительной версии и улучшения, требующие критических изменений, могут по-прежнему возникать в ограниченных обстоятельствах перед выпуском.
Обзор
Соединитель Azure CosmosDB MongoDB Vector Store можно использовать для доступа к данным и управления ими в Azure CosmosDB MongoDB (vCore). Соединитель имеет следующие характеристики.
Область функций | Поддержка |
---|---|
Коллекция сопоставляется с | Коллекция и индекс Azure Cosmos DB MongoDB (vCore) |
Поддерживаемые типы свойств ключей | строка |
Поддерживаемые типы свойств данных |
|
Поддерживаемые типы свойств вектора |
|
Поддерживаемые типы индексов |
|
Поддерживаемые функции расстояния |
|
Поддерживаемые условия фильтров |
|
Поддержка нескольких векторов в записи | Да |
Поддерживается IsFilterable? | Да |
Поддерживается ЛиFullTextSearchable? | No |
Поддерживается StoragePropertyName? | Нет, используйте вместо этого BsonElementAttribute. Дополнительные сведения см. здесь. |
Ограничения
Этот соединитель совместим с Azure Cosmos DB MongoDB (vCore) и не предназначен для обеспечения совместимости с Azure Cosmos DB MongoDB (RU).
Начало работы
Добавьте в проект пакет NuGet соединителя Azure CosmosDB MongoDB Vector Store.
dotnet add package Microsoft.SemanticKernel.Connectors.AzureCosmosDBMongoDB --prerelease
Хранилище векторов можно добавить в контейнер внедрения зависимостей, доступный в KernelBuilder
контейнере внедрения зависимостей или в IServiceCollection
контейнер внедрения зависимостей, используя методы расширения, предоставляемые семантического ядра.
using Microsoft.SemanticKernel;
// Using Kernel Builder.
var kernelBuilder = Kernel
.CreateBuilder()
.AddAzureCosmosDBMongoDBVectorStore(connectionString, databaseName);
using Microsoft.SemanticKernel;
// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAzureCosmosDBMongoDBVectorStore(connectionString, databaseName);
Методы расширения, которые не принимают параметров, также предоставляются. Для них требуется, чтобы экземпляр MongoDB.Driver.IMongoDatabase
регистрировался отдельно в контейнере внедрения зависимостей.
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;
using MongoDB.Driver;
// Using Kernel Builder.
var kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.Services.AddSingleton<IMongoDatabase>(
sp =>
{
var mongoClient = new MongoClient(connectionString);
return mongoClient.GetDatabase(databaseName);
});
kernelBuilder.AddAzureCosmosDBMongoDBVectorStore();
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;
using MongoDB.Driver;
// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSingleton<IMongoDatabase>(
sp =>
{
var mongoClient = new MongoClient(connectionString);
return mongoClient.GetDatabase(databaseName);
});
builder.Services.AddAzureCosmosDBMongoDBVectorStore();
Вы можете напрямую создать экземпляр Хранилища векторов MongoDB Для Azure CosmosDB.
using Microsoft.SemanticKernel.Connectors.AzureCosmosDBMongoDB;
using MongoDB.Driver;
var mongoClient = new MongoClient(connectionString);
var database = mongoClient.GetDatabase(databaseName);
var vectorStore = new AzureCosmosDBMongoDBVectorStore(database);
Можно создать прямую ссылку на именованную коллекцию.
using Microsoft.SemanticKernel.Connectors.AzureCosmosDBMongoDB;
using MongoDB.Driver;
var mongoClient = new MongoClient(connectionString);
var database = mongoClient.GetDatabase(databaseName);
var collection = new AzureCosmosDBMongoDBVectorStoreRecordCollection<Hotel>(
database,
"skhotels");
Сопоставление данных
Соединитель Хранилища векторов Azure CosmosDB MongoDB предоставляет схему по умолчанию при сопоставлении данных из модели данных в хранилище.
В этом средстве сопоставления выполняется прямое преобразование списка свойств модели данных в поля в Azure CosmosDB MongoDB и используется MongoDB.Bson.Serialization
для преобразования в схему хранилища. Это означает, что использование объекта MongoDB.Bson.Serialization.Attributes.BsonElement
поддерживается, если требуется другое имя хранилища для имени свойства модели данных. Единственным исключением является ключ записи, сопоставленной с полем базы данных с именем _id
, так как все записи MongoDB CosmosDB должны использовать это имя для идентификаторов.
Переопределение имени свойства
Для свойств данных и векторных свойств можно указать переопределение имен полей для использования в хранилище, которое отличается от имен свойств в модели данных. Это не поддерживается для ключей, так как ключ имеет фиксированное имя в MongoDB.
Переопределение имени свойства выполняется путем задания атрибута BsonElement
свойств модели данных.
Ниже приведен пример модели данных с BsonElement
набором.
using Microsoft.Extensions.VectorData;
public class Hotel
{
[VectorStoreRecordKey]
public ulong HotelId { get; set; }
[BsonElement("hotel_name")]
[VectorStoreRecordData(IsFilterable = true)]
public string HotelName { get; set; }
[BsonElement("hotel_description")]
[VectorStoreRecordData(IsFullTextSearchable = true)]
public string Description { get; set; }
[BsonElement("hotel_description_embedding")]
[VectorStoreRecordVector(4, DistanceFunction.CosineDistance, IndexKind.Hnsw)]
public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
}
Скоро
Дополнительные сведения в ближайшее время.
Скоро
Дополнительные сведения в ближайшее время.