Compartilhar via


Usando o conector do Repositório de Vetores do MongoDB do Azure CosmosDB (versão prévia)

Aviso

A funcionalidade do Repositório de Vetores do Kernel Semântico está em versão prévia e as melhorias que exigem alterações significativas ainda podem ocorrer em circunstâncias limitadas antes do lançamento.

Visão geral

O conector do Repositório de Vetores do MongoDB do Azure CosmosDB pode ser usado para acessar e gerenciar dados no MongoDB do Azure CosmosDB. O conector tem as seguintes características.

Área de recurso Suporte
A coleção é mapeada para Coleção + Índice do MongoDB do Azure Cosmos DB
Tipos de propriedade de chave com suporte string
Tipos de propriedade de dados com suporte
  • string
  • INT
  • longo
  • duplo
  • float
  • decimal
  • bool
  • Datetime
  • e enumeráveis de cada um desses tipos
Tipos de propriedade de vetor com suporte
  • Float ReadOnlyMemory<>
  • ReadOnlyMemory<duplo>
Tipos de índice com suporte
  • Hnsw
  • Fertilização in vitro plana
Funções de distância suportadas
  • Distância do cosseno
  • DotProductSimilarity
  • Distância Euclidiana
Suporta vários vetores em um registro Sim
IsFilterable suportado? Sim
IsFullTextSearchable suportado? Não
StoragePropertyName com suporte? Não, use BsonElementAttribute em vez disso. Veja aqui para mais informações.

Introdução

Adicione o pacote NuGet do conector do Repositório de Vetores do MongoDB do Azure CosmosDB ao seu projeto.

dotnet add package Microsoft.SemanticKernel.Connectors.AzureCosmosDBMongoDB --prerelease

Você pode adicionar o repositório de vetores ao contêiner de injeção de dependência disponível no KernelBuilder ou ao IServiceCollection contêiner de injeção de dependência usando métodos de extensão fornecidos pelo Semantic Kernel.

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);

Métodos de extensão que não usam parâmetros também são fornecidos. Eles exigem que uma instância de seja registrada separadamente com o contêiner de injeção de MongoDB.Driver.IMongoDatabase dependência.

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();

Você pode construir uma instância do Repositório de Vetores do MongoDB do Azure CosmosDB diretamente.

using Microsoft.SemanticKernel.Connectors.AzureCosmosDBMongoDB;
using MongoDB.Driver;

var mongoClient = new MongoClient(connectionString);
var database = mongoClient.GetDatabase(databaseName);
var vectorStore = new AzureCosmosDBMongoDBVectorStore(database);

É possível construir uma referência direta a uma coleção nomeada.

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");

Mapeamento de dados

O conector do Repositório de Vetores do MongoDB do Azure CosmosDB fornece um mapeador padrão ao mapear dados do modelo de dados para o armazenamento.

Esse mapeador faz uma conversão direta da lista de propriedades no modelo de dados para os campos no MongoDB do Azure CosmosDB e usa MongoDB.Bson.Serialization para converter no esquema de armazenamento. Isso significa que o uso do MongoDB.Bson.Serialization.Attributes.BsonElement será suportado se um nome de armazenamento diferente do nome da propriedade do modelo de dados for necessário. A única exceção é a chave do registro que é mapeada para um campo de banco de dados chamado _id, pois todos os registros do CosmosDB MongoDB devem usar esse nome para ids.

Substituição do nome da propriedade

Para propriedades de dados e propriedades de vetor, você pode fornecer nomes de campo de substituição a serem usados no armazenamento que sejam diferentes dos nomes de propriedade no modelo de dados. Isso não é suportado para chaves, pois uma chave tem um nome fixo no MongoDB.

A substituição do nome da propriedade é feita definindo o BsonElement atributo nas propriedades do modelo de dados.

Aqui está um exemplo de um modelo de dados com BsonElement set.

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; }
}

Em breve

Mais informações em breve.

Em breve

Mais informações em breve.