Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aviso
A funcionalidade do Azure DocumentDB Vector Store está em pré-visualização, e melhorias que exijam alterações disruptivas podem ainda ocorrer em circunstâncias limitadas antes do lançamento.
Aviso
A funcionalidade da loja de vetores do Kernel Semântico está em versão prévia, e melhorias que exigem alterações de impacto ainda podem ocorrer em circunstâncias limitadas antes do lançamento.
Aviso
A funcionalidade da loja de vetores do Kernel Semântico está em versão prévia, e melhorias que exigem alterações de impacto ainda podem ocorrer em circunstâncias limitadas antes do lançamento.
Descrição geral
O conector Azure CosmosDB MongoDB Vector Store pode ser usado para aceder e gerir dados no Azure DocumentDB. O conector tem as seguintes características.
| Área de funcionalidades | Suporte |
|---|---|
| Mapeamento da coleção para | Azure DocumentDB Coleção + Índice |
| Tipos de propriedade de chave suportados | cadeia (de caracteres) |
| Tipos de propriedade de dados suportados |
|
| Tipos de propriedade vetorial suportados |
|
| Tipos de índice suportados |
|
| Funções de distância suportadas |
|
| Cláusulas de filtro suportadas |
|
| Suporta vários vetores em um registro | Sim |
| IsIndexed é suportado? | Sim |
| "É suportado IsFullTextIndexed?" | Não |
| Está StorageName suportado? | Não, use BsonElementAttribute em vez disso. Veja aqui mais informações. |
| O HybridSearch é suportado? | Não |
| Área de funcionalidades | Suporte |
|---|---|
| Mapeamento da coleção para | Azure DocumentDB Coleção + Índice |
| Tipos de propriedade de chave suportados | cadeia (de caracteres) |
| Tipos de propriedade de dados suportados |
|
| Tipos de propriedade vetorial suportados |
|
| Tipos de índice suportados |
|
| Funções de distância suportadas |
|
| Cláusulas de filtro suportadas |
|
| Suporta vários vetores em um registro | Sim |
| IsFilterable é suportado? | Sim |
| IsFullTextSearchable é suportado? | Não |
Mais informações em breve.
Limitações
Este conector é compatível com o Azure DocumentDB e não foi concebido para ser compatível com o Azure Cosmos DB MongoDB (RU).
Introdução
Adicione o pacote NuGet do conector do Azure CosmosDB MongoDB Vetor Store ao seu projeto.
dotnet add package CommunityToolkit.VectorData.AzureDocumentDB
Pode adicionar o armazenamento vetorial ao contentor de injeção de dependências disponível no KernelBuilder ou ao IServiceCollection contentor de injeção de dependências usando métodos de extensão fornecidos pelo pacote conector.
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;
// Using Kernel Builder.
var kernelBuilder = Kernel
.CreateBuilder();
kernelBuilder.Services
.AddDocumentDBVectorStore(connectionString, databaseName);
using Microsoft.Extensions.DependencyInjection;
// 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 no contentor de injeção de 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.Services.AddCosmosMongoVectorStore();
using Microsoft.Extensions.DependencyInjection;
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 Azure CosmosDB MongoDB Vetor Store diretamente.
using CommunityToolkit.VectorData.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 CommunityToolkit.VectorData.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 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 uso do MongoDB.Bson.Serialization.Attributes.BsonElement é suportado se for necessário um nome de armazenamento diferente para o nome da propriedade do modelo de dados. 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 definido.
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; }
}
Introdução
Adicione as dependências do Azure CosmosDB MongoDB Vetor Store ao seu ambiente. Como o conector MongoDB do Azure CosmosDB é baseado no conector MongoDB Atlas e usa o mesmo cliente, é necessário 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()
Alternativamente, você também pode passar o 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 é fornecido, o Kernel Semântico não fechará a conexão para você, então você precisa garantir que vai fechá-la, 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 dicionário simples com campos correspondentes ao índice como entrada, a serialização é bastante fácil, pois usa apenas uma chave predeterminada _id, então substituímos a chave do modelo de dados por essa se ainda não for _id.
Para obter mais detalhes sobre este conceito, consulte a documentação de serialização.
Brevemente
Mais informações em breve.