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


Использование соединителя Хранилища векторных данных Azure CosmosDB MongoDB (vCore) (предварительная версия)

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

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

Обзор

Соединитель Azure CosmosDB MongoDB Vector Store можно использовать для доступа к данным и управления ими в Azure CosmosDB MongoDB (vCore). Соединитель имеет следующие характеристики.

Область функций Поддержка
Коллекция сопоставляется с Коллекция и индекс Azure Cosmos DB MongoDB (vCore)
Поддерживаемые типы свойств ключей строка
Поддерживаемые типы свойств данных
  • строка
  • INT
  • длинный
  • двойной точности
  • с плавающей запятой
  • десятичное
  • bool
  • Дата/время
  • и перечисление каждого из этих типов
Поддерживаемые типы свойств вектора
  • ReadOnlyMemory<float>
  • ReadOnlyMemory<double>
Поддерживаемые типы индексов
  • Hnsw
  • IvfFlat
Поддерживаемые функции расстояния
  • CosineDistance
  • DotProductSimilarity
  • EuclideanDistance
Поддерживаемые условия фильтров
  • EqualTo
Поддержка нескольких векторов в записи Да
Поддерживается 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; }
}

Скоро

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

Скоро

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