Partilhar via


Usando o conector do Azure CosmosDB MongoDB Vetor Store (Visualização)

Aviso

A funcionalidade Semantic Kernel Vetor Store está em pré-visualização, e melhorias que exigem alterações de quebra ainda podem ocorrer em circunstâncias limitadas antes do lançamento.

Descrição geral

O conector do Azure CosmosDB MongoDB Vetor Store pode ser usado para acessar e gerenciar dados no Azure CosmosDB MongoDB. O conector tem as seguintes características.

Área de funcionalidades Suporte
Mapas da coleção para Azure Cosmos DB MongoDB Collection + Índice
Tipos de propriedade de chave suportados string
Tipos de propriedade de dados suportados
  • string
  • número inteiro
  • long
  • duplo
  • flutuante
  • decimal
  • booleano
  • DateTime
  • e enumeráveis de cada um destes tipos
Tipos de propriedade vetorial suportados
  • Float ReadOnlyMemory<>
  • ReadOnlyMemory<duplo>
Tipos de índice suportados
  • Hnsw
  • IvfFlat
Funções de distância suportadas
  • CosineDistância
  • DotProductSimilarity
  • Distância Euclidiana
Suporta vários vetores em um registro Sim
IsFilterable suportado? Sim
IsFullTextSearchable suportado? Não
StoragePropertyName suportado? Não, use BsonElementAttribute em vez disso. Veja aqui mais informações.

Introdução

Adicione o pacote NuGet do conector do Azure CosmosDB MongoDB Vetor Store ao seu projeto.

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

Você pode adicionar o armazenamento vetorial ao contêiner de injeção de dependência disponível no KernelBuilder ou ao contêiner de IServiceCollection 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 Azure CosmosDB MongoDB Vetor Store 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 Azure CosmosDB MongoDB Vetor Store 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 Azure CosmosDB MongoDB e usa MongoDB.Bson.Serialization para converter para o esquema de armazenamento. Isso significa que o MongoDB.Bson.Serialization.Attributes.BsonElement uso do é suportado se um nome de armazenamento diferente para o 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 MongoDB do CosmosDB 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 para uso no armazenamento que sejam diferentes dos nomes de propriedade no modelo de dados. Isso não é suportado para chaves, uma vez que 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 conjunto.

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

Brevemente

Mais informações em breve.

Brevemente

Mais informações em breve.