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 do Repositório de Vetores do MongoDB está em versão prévia e melhorias que exigem alterações significativas 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 prévia e as melhorias que exigem alterações significativas 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 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 Funcionalidade | Suporte |
|---|---|
| A coleção é mapeada para | Coleção MongoDB + Índice |
| Tipos de propriedade de chave com suporte | corda |
| Tipos de propriedade de dados com suporte |
|
| Tipologias de propriedades de vetor suportadas |
|
| Tipos de índice com suporte | N/D |
| 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? | Sim |
| Área de Funcionalidade | Suporte |
|---|---|
| A coleção é mapeada para | Coleção MongoDB + Índice |
| Tipos de propriedade de chave com suporte | corda |
| Tipos de propriedade de dados com suporte |
|
| Tipologias 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 é suportado? | Sim |
| IsFullTextSearchable é suportado? | Não |
Mais informações em breve.
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.Extensions.DependencyInjection;
// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMongoVectorStore(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.
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.AddMongoVectorStore();
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 MongoVectorStore(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 MongoCollection<string, 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;
using MongoDB.Bson.Serialization.Attributes;
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.CosineSimilarity)]
public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
}
Introdução
Adicione as dependências do Repositório de Vetores do Atlas do MongoDB ao seu ambiente. Ele precisa do pacote pymongo que está incluído nos extras do mongo; você precisa instalar usando esses extras.
pip install semantic-kernel[mongo]
Em seguida, você pode criar o repositório de vetores.
from semantic_kernel.connectors.mongodb import MongoDBAtlasStore
# If the right environment settings are set, namely MONGODB_ATLAS_CONNECTION_STRING and optionally MONGODB_ATLAS_DATABASE_NAME and MONGODB_ATLAS_INDEX_NAME, this is enough to create the Store:
store = MongoDBAtlasStore()
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.mongodb import MongoDBAtlasStore
client = AsyncMongoClient(...)
store = MongoDBAtlasStore(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.mongodb import MongoDBAtlasCollection
# `hotel` is a class created with the @vectorstoremodel decorator
collection = MongoDBAtlasCollection(
record_type=hotel,
collection_name="my_collection",
)
Serialização
Como o conector do Atlas do MongoDB precisa de um dicionário simples com os campos correspondentes ao índice como entrada, a serialização é bastante simples, ela usa apenas uma chave predeterminada _id, então substituímos a chave do modelo de dados por esta chave, se ainda não for _id.
Para obter mais detalhes sobre esse conceito, consulte a documentação de serialização.
Em breve
Mais informações em breve.