Compartilhar via


Usando o conector do MongoDB Vector Store (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 MongoDB Vector Store pode ser usado para acessar e gerenciar dados no MongoDB. O conector tem as seguintes características.

Área de recurso Suporte
A coleção é mapeada para Coleção MongoDB + Índice
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 N/D
Funções de distância suportadas
  • Semelhança de cosseno
  • DotProductSimilarity
  • Distância Euclidiana
Cláusulas de filtro com suporte
  • EqualTo
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 ao seu projeto.

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

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

using Microsoft.SemanticKernel;

// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMongoDBVectorStore(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 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.AddMongoDBVectorStore();

Você pode construir uma instância do MongoDB Vector Store diretamente.

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

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

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

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

var mongoClient = new MongoClient(connectionString);
var database = mongoClient.GetDatabase(databaseName);
var collection = new MongoDBVectorStoreRecordCollection<Hotel>(
    database,
    "skhotels");

Mapeamento de dados

O conector do Repositório de Vetores do MongoDB 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 e usa MongoDB.Bson.Serialization para converter para o 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, já que todos os registros do 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.CosineSimilarity)]
    public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
}

Em breve

Mais informações em breve.

Em breve

Mais informações em breve.