Partager via


Utilisation du connecteur Azure CosmosDB MongoDB Vector Store (préversion)

Avertissement

La fonctionnalité de magasin de vecteurs du noyau sémantique est en préversion et des améliorations nécessitant des modifications cassants peuvent toujours se produire dans des circonstances limitées avant la mise en production.

Vue d’ensemble

Le connecteur Azure CosmosDB MongoDB Vector Store peut être utilisé pour accéder aux données et les gérer dans Azure CosmosDB MongoDB. Le connecteur présente les caractéristiques suivantes.

Zone Fonctionnalités Support
Mappages de collection à Azure Cosmos DB MongoDB Collection + Index
Types de propriétés de clé pris en charge string
Types de propriétés de données pris en charge
  • string
  • int
  • long
  • double
  • virgule flottante
  • decimal
  • bool
  • Date/Heure
  • et énumérables de chacun de ces types
Types de propriétés vectorielles pris en charge
  • Float ReadOnlyMemory<>
  • ReadOnlyMemory<double>
Types d’index pris en charge
  • Hnsw
  • IvfFlat
Fonctions de distance prises en charge
  • CosineDistance
  • DotProductSimilarity
  • EuclideanDistance
Prend en charge plusieurs vecteurs dans un enregistrement Oui
Est-il pris en charge ? Oui
IsFullTextSearchable pris en charge ? Non
StoragePropertyName pris en charge ? Non, utilisez BsonElementAttribute à la place. Pour plus d’informations, voir ici.

Mise en route

Ajoutez le package NuGet du connecteur Azure CosmosDB MongoDB Vector Store à votre projet.

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

Vous pouvez ajouter le magasin de vecteurs au conteneur d’injection de dépendances disponible sur le KernelBuilder conteneur ou au conteneur d’injection de dépendances à l’aide IServiceCollection de méthodes d’extension fournies par le noyau sémantique.

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

Les méthodes d’extension qui ne prennent aucun paramètre sont également fournies. Celles-ci nécessitent une instance d’être MongoDB.Driver.IMongoDatabase inscrite séparément auprès du conteneur d’injection de dépendances.

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

Vous pouvez construire une instance Azure CosmosDB MongoDB Vector Store directement.

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

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

Il est possible de construire une référence directe à une collection nommée.

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

Mappage de données

Le connecteur Azure CosmosDB MongoDB Vector Store fournit un mappeur par défaut lors du mappage des données du modèle de données au stockage.

Ce mappeur effectue une conversion directe de la liste des propriétés sur le modèle de données vers les champs dans Azure CosmosDB MongoDB et utilise MongoDB.Bson.Serialization pour convertir le schéma de stockage. Cela signifie que l’utilisation de l’objet MongoDB.Bson.Serialization.Attributes.BsonElement est prise en charge si un nom de stockage différent du nom de propriété du modèle de données est requis. La seule exception est la clé de l’enregistrement mappé à un champ de base de données nommé _id, car tous les enregistrements MongoDB CosmosDB doivent utiliser ce nom pour les ID.

Remplacement du nom de propriété

Pour les propriétés de données et les propriétés vectorielles, vous pouvez fournir des noms de champs de remplacement à utiliser dans le stockage différent des noms de propriétés sur le modèle de données. Cela n’est pas pris en charge pour les clés, car une clé a un nom fixe dans MongoDB.

Le remplacement du nom de propriété est effectué en définissant l’attribut BsonElement sur les propriétés du modèle de données.

Voici un exemple de modèle de données avec BsonElement un jeu.

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; }
}

Bientôt disponible

Plus d’informations prochainement.

Bientôt disponible

Plus d’informations prochainement.