Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aviso
A funcionalidade de Armazenamento de Vetores do MongoDB (vCore) do Azure Cosmos DB está em versão prévia, e melhorias que exigem mudanças disruptivas ainda podem ocorrer em circunstâncias limitadas antes do lançamento.
Aviso
A funcionalidade do Repositório de Vetores do Kernel Semântico está em versão de pré-visualização, e melhorias que exigem mudanças drásticas ainda podem ocorrer em circunstâncias limitadas antes do lançamento.
Aviso
A funcionalidade do Repositório de Vetores do Kernel Semântico está em versão de pré-visualização, e melhorias que exigem mudanças drásticas ainda podem ocorrer em circunstâncias limitadas antes do lançamento.
Visão geral
O conector Azure CosmosDB MongoDB Vector Store pode ser usado para acessar e gerenciar dados no MongoDB (vCore) do Azure CosmosDB. O conector tem as seguintes características.
Área de Funcionalidade | Suporte |
---|---|
Mapear coleção para | Coleção MongoDB (vCore) do Azure Cosmos DB + Índice |
Tipos de propriedades de chave suportados | corda |
Tipos de propriedade de dados com suporte |
|
Tipos de propriedades de vetor suportadas |
|
Tipos de índice com suporte |
|
Funções de distância suportadas |
|
Cláusulas de filtro com suporte |
|
Suporta vários vetores em um registro | Sim |
Há suporte para IsIndexed? | Sim |
Há suporte paraFullTextIndexed? | Não |
"StorageName é suportado?" | Não, use BsonElementAttribute em vez disso. Veja aqui para mais informações. |
O HybridSearch é suportado? | Não |
Área de Funcionalidade | Suporte |
---|---|
Mapear coleção para | Coleção MongoDB (vCore) do Azure Cosmos DB + Índice |
Tipos de propriedades de chave suportados | corda |
Tipos de propriedade de dados com suporte |
|
Tipos de propriedades de vetor suportadas |
|
Tipos de índice com suporte |
|
Funções de distância suportadas |
|
Cláusulas de filtro com suporte |
|
Suporta vários vetores em um registro | Sim |
O IsFilterable está suportado? | Sim |
A funcionalidade IsFullTextSearchable é suportada? | Não |
Mais informações em breve.
Limitações
Esse conector é compatível com o MongoDB (vCore) do Azure Cosmos DB e não foi projetado para ser compatível com o Azure Cosmos DB MongoDB (RU).
Começando
Adicione o pacote NuGet do conector de Armazenamento de Vetores do MongoDB do Azure CosmosDB ao seu projeto.
dotnet add package Microsoft.SemanticKernel.Connectors.CosmosMongoDB --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.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;
// Using Kernel Builder.
var kernelBuilder = Kernel
.CreateBuilder();
kernelBuilder.Services
.AddCosmosMongoVectorStore(connectionString, databaseName);
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;
// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddCosmosMongoVectorStore(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 MongoDB.Driver.IMongoDatabase
seja registrada separadamente com o contêiner de injeção de dependência 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.Services.AddCosmosMongoVectorStore();
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.AddCosmosMongoVectorStore();
Você pode construir uma instância do Repositório de Vetores do MongoDB do Azure CosmosDB diretamente.
using Microsoft.SemanticKernel.Connectors.CosmosMongoDB;
using MongoDB.Driver;
var mongoClient = new MongoClient(connectionString);
var database = mongoClient.GetDatabase(databaseName);
var vectorStore = new CosmosMongoVectorStore(database);
É possível construir uma referência direta a uma coleção nomeada.
using Microsoft.SemanticKernel.Connectors.CosmosMongoDB;
using MongoDB.Driver;
var mongoClient = new MongoClient(connectionString);
var database = mongoClient.GetDatabase(databaseName);
var collection = new CosmosMongoCollection<ulong, Hotel>(
database,
"skhotels");
Mapeamento de dados
O conector de Armazenamento de Vetores do MongoDB do Azure CosmosDB fornece um mapeador padrão para mapear dados do modelo de dados para o armazenamento.
Esse mapeador realiza uma conversão direta da lista de propriedades no modelo de dados para os campos no MongoDB do Azure CosmosDB, usando 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
, pois todos os registros do CosmosDB MongoDB devem usar esse nome para ids.
Sobrescriçã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
{
[VectorStoreKey]
public ulong HotelId { get; set; }
[BsonElement("hotel_name")]
[VectorStoreData(IsIndexed = true)]
public string HotelName { get; set; }
[BsonElement("hotel_description")]
[VectorStoreData(IsFullTextIndexed = true)]
public string Description { get; set; }
[BsonElement("hotel_description_embedding")]
[VectorStoreVector(4, DistanceFunction = DistanceFunction.CosineDistance, IndexKind = IndexKind.Hnsw)]
public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
}
Começando
Adicione as dependências do Repositório de Vetores do MongoDB do Azure CosmosDB ao seu ambiente. Como o conector do MongoDB do Azure CosmosDB é construído sobre o conector do Atlas do MongoDB e usa o mesmo cliente que esse, você precisa instalar com os seguintes extras:
pip install semantic-kernel[azure, mongo]
Em seguida, você pode criar o repositório de vetores.
from semantic_kernel.connectors.azure_cosmos_db import CosmosMongoStore
# If the right environment settings are set, namely AZURE_COSMOS_DB_MONGODB_CONNECTION_STRING and optionally AZURE_COSMOS_DB_MONGODB_DATABASE_NAME, this is enough to create the Store:
store = CosmosMongoStore()
Como alternativa, você também pode passar seu próprio cliente MongoDB se quiser ter mais controle sobre a construção do cliente.
from pymongo import AsyncMongoClient
from semantic_kernel.connectors.azure_cosmos_db import CosmosMongoStore
client = AsyncMongoClient(...)
store = CosmosMongoStore(mongo_client=client)
Quando um cliente é passado, o Kernel Semântico não fechará a conexão para você, portanto, você precisa garantir que a feche, por exemplo, com uma instrução async with
.
Você também pode criar uma coleção diretamente, sem a loja.
from semantic_kernel.connectors.azure_cosmos_db import CosmosMongoCollection
# `Hotel` is a class created with the @vectorstoremodel decorator
collection = CosmosMongoCollection(
record_type=Hotel,
collection_name="my_collection"
)
Serialização
Como o conector do Azure CosmosDB para MongoDB precisa de um ditado simples com os campos correspondentes ao índice como entrada, a serialização é muito fácil, ela usa apenas uma chave predeterminada _id
, portanto, substituimos a chave do modelo de dados por isso, se ainda não estiver _id
.
Para obter mais detalhes sobre esse conceito, consulte a documentação de serialização.
Em breve
Mais informações em breve.