Condividi tramite


Uso del connettore di MongoDB Vector Store (Anteprima)

Avviso

La funzionalità di archiviazione vettoriale di MongoDB è disponibile in anteprima e i miglioramenti che richiedono cambiamenti significativi possono verificarsi in circostanze limitate prima del rilascio.

Avviso

La funzionalità dello Store vettoriale del kernel semantico è in anteprima e i miglioramenti che richiedono cambiamenti significativi potrebbero ancora verificarsi in circostanze limitate prima del rilascio.

Avviso

La funzionalità dello Store vettoriale del kernel semantico è in anteprima e i miglioramenti che richiedono cambiamenti significativi potrebbero ancora verificarsi in circostanze limitate prima del rilascio.

Panoramica

Il connettore MongoDB Vector Store può essere usato per accedere e gestire i dati in MongoDB. Il connettore presenta le caratteristiche seguenti.

Area delle funzionalità Supporto tecnico
Mappatura delle raccolte su Raccolta e indice mongoDB
Tipi di proprietà chiave supportati corda
Tipi di proprietà dati supportati
  • corda
  • Int
  • lungo
  • doppio
  • galleggiare
  • decimale
  • Boolean
  • Data e ora
  • enumerabili di ognuno di questi tipi
Tipi di proprietà vettoriale supportati
  • ReadOnlyMemory<float>
  • Incorporamento<float>
  • float[]
Tipi di indice supportati N/D
Funzioni di distanza supportate
  • CosenoSimilarità
  • DotProductSimilarity
  • EuclideanDistance
Clausole di filtro supportate
  • EqualTo
Supporta più vettori in un record
Il supporto di IsIndexed è presente?
È supportato IsFullTextIndexed? NO
"StorageName è supportato?" No, usare invece BsonElementAttribute. Per altre informazioni, vedi qui.
"HybridSearch è supportato?"
Area delle funzionalità Supporto tecnico
Mappatura delle raccolte su Raccolta e indice mongoDB
Tipi di proprietà chiave supportati corda
Tipi di proprietà dati supportati
  • corda
  • Int
  • lungo
  • doppio
  • galleggiare
  • decimale
  • Boolean
  • Data e ora
  • e iterabili di ciascuno di questi tipi
Tipi di proprietà vettoriale supportati
  • lista[float]
  • lista[int]
  • ndarray
Tipi di indice supportati
  • Hnsw
  • IvfFlat
Funzioni di distanza supportate
  • CosineDistance
  • DotProductSimilarity
  • EuclideanDistance
Clausole di filtro supportate
  • EqualTo
  • AnyTagsEqualTo
Supporta più vettori in un record
IsFilterable è supportato?
È supportato IsFullTextSearchable? NO

Altre informazioni saranno presto disponibili.

Iniziare

Aggiungere il pacchetto NuGet del connettore dell'archivio vettoriale MongoDB al progetto.

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

È possibile aggiungere l'archivio vettoriale al IServiceCollection contenitore di inserimento delle dipendenze usando i metodi di estensione forniti dal kernel semantico.

using Microsoft.Extensions.DependencyInjection;

// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMongoVectorStore(connectionString, databaseName);

Vengono forniti anche metodi di estensione che non accettano parametri. Per registrare un'istanza di MongoDB.Driver.IMongoDatabase separatamente nel contenitore di inserimento delle dipendenze, è necessario farlo singolarmente.

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();

È possibile costruire direttamente un'istanza del Vector Store MongoDB.

using Microsoft.SemanticKernel.Connectors.MongoDB;
using MongoDB.Driver;

var mongoClient = new MongoClient(connectionString);
var database = mongoClient.GetDatabase(databaseName);
var vectorStore = new MongoVectorStore(database);

È possibile costruire un riferimento diretto a una raccolta denominata.

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");

Mapping dei dati

Il connettore per l'archivio vettoriale MongoDB fornisce un mapper predefinito quando si mappano i dati dal modello all'archiviazione.

Questo mapper esegue una conversione diretta dell'elenco di proprietà nel modello di dati nei campi in MongoDB e usa MongoDB.Bson.Serialization per eseguire la conversione nello schema di archiviazione. Ciò significa che l'utilizzo di MongoDB.Bson.Serialization.Attributes.BsonElement è supportato se è necessario un nome di archiviazione diverso dal nome della proprietà del modello di dati. L'unica eccezione è la chiave del record mappato a un campo di database denominato _id, poiché tutti i record MongoDB devono usare questo nome per gli ID.

Sostituzione del nome della proprietà

Per le proprietà dei dati e le proprietà vettoriali, è possibile fornire nomi di campo di override da usare nell'archiviazione diversi dai nomi delle proprietà nel modello di dati. Questa opzione non è supportata per le chiavi, perché una chiave ha un nome fisso in MongoDB.

La sovrascrittura del nome della proprietà viene eseguita impostando l'attributo BsonElement sulle proprietà del modello di dati.

Di seguito è riportato un esempio di modello di dati con 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; }
}

Iniziare

Aggiungi le dipendenze di MongoDB Atlas Vector Store al tuo ambiente. È necessario il pacchetto pymongo incluso in mongo extra: , è necessario installare con questi componenti aggiuntivi:

pip install semantic-kernel[mongo]

È quindi possibile creare l'archivio vettoriale.

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()

In alternativa, è anche possibile passare un client MongoDB personalizzato se si vuole avere un maggiore controllo sulla costruzione del client.

from pymongo import AsyncMongoClient
from semantic_kernel.connectors.mongodb import MongoDBAtlasStore

client = AsyncMongoClient(...)
store = MongoDBAtlasStore(mongo_client=client)

Quando un client viene passato, il Kernel Semantico non chiuderà la connessione per te, quindi è necessario assicurarsi di chiuderla, ad esempio con un'istruzione async with.

È anche possibile creare una raccolta direttamente, senza il negozio.

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",
)

Serializzazione

Poiché il connettore MongoDB Atlas richiede un semplice dict con i campi corrispondenti all'indice come input, la serializzazione è piuttosto semplice, usa solo una chiave predeterminata _id, quindi sostituiamo la chiave del modello di dati con quella se non è già _id.

Per altri dettagli su questo concetto, vedere la documentazione sulla serializzazione.

Presto disponibile

Altre informazioni saranno presto disponibili.