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 |
|
Tipos de propriedade vetorial suportados |
|
Tipos de índice suportados |
|
Funções de distância suportadas |
|
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.