Compartir a través de


Uso del conector de almacén de vectores de MongoDB de Azure CosmosDB (versión preliminar)

Advertencia

La funcionalidad Almacén de vectores de kernel semántico está en versión preliminar y las mejoras que requieren cambios importantes pueden producirse en circunstancias limitadas antes de la versión.

Información general

El conector del almacén de vectores de MongoDB de Azure CosmosDB se puede usar para acceder a los datos y administrarlos en MongoDB de Azure CosmosDB. El conector tiene las siguientes características.

Área de características Soporte técnico
La colección se asigna a Colección y índice de MongoDB de Azure Cosmos DB
Tipos de propiedades de clave admitidos string
Tipos de propiedad de datos admitidos
  • string
  • int
  • long
  • double
  • FLOAT
  • decimal
  • bool
  • DateTime
  • y enumerables de cada uno de estos tipos
Tipos de propiedades vectoriales admitidos
  • ReadOnlyMemory<float>
  • ReadOnlyMemory<double>
Tipos de índice admitidos
  • Hnsw
  • OvarianFlat
Funciones de distancia admitidas
  • CosineDistance
  • DotProductSimilarity
  • EuclideanDistance
Admite varios vectores en un registro
¿Se admite IsFilterable?
¿Se admite IsFullTextSearchable? No
¿Se admite StoragePropertyName? No, use BsonElementAttribute en su lugar. Consulta aquí para obtener más información.

Introducción

Agregue el paquete NuGet del conector del almacén de vectores de MongoDB de Azure CosmosDB al proyecto.

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

Puede agregar el almacén de vectores al contenedor de inserción de dependencias disponible en KernelBuilder o al IServiceCollection contenedor de inserción de dependencias mediante métodos de extensión proporcionados por kernel semántico.

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

También se proporcionan métodos de extensión que no toman parámetros. Estos requieren que una instancia de MongoDB.Driver.IMongoDatabase se registre por separado con el contenedor de inserción de dependencias.

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

Puede construir directamente una instancia de Almacén vectorial de MongoDB de Azure CosmosDB.

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

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

Es posible construir una referencia directa a una colección con nombre.

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

Asignación de datos

El conector del almacén de vectores de MongoDB de Azure CosmosDB proporciona un asignador predeterminado al asignar datos del modelo de datos al almacenamiento.

Este asignador realiza una conversión directa de la lista de propiedades del modelo de datos a los campos de MongoDB de Azure CosmosDB y usa MongoDB.Bson.Serialization para convertir en el esquema de almacenamiento. Esto significa que se admite el uso de si se requiere un nombre de almacenamiento diferente al nombre de MongoDB.Bson.Serialization.Attributes.BsonElement la propiedad del modelo de datos. La única excepción es la clave del registro que se asigna a un campo de base de datos denominado _id, ya que todos los registros de MongoDB de CosmosDB deben usar este nombre para los identificadores.

Invalidación del nombre de propiedad

En el caso de las propiedades de datos y las propiedades vectoriales, puede proporcionar nombres de campo de invalidación para usarlos en el almacenamiento que es diferente a los nombres de propiedad del modelo de datos. Esto no se admite para las claves, ya que una clave tiene un nombre fijo en MongoDB.

La invalidación del nombre de propiedad se realiza estableciendo el BsonElement atributo en las propiedades del modelo de datos.

Este es un ejemplo de un modelo de datos con BsonElement establecido.

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

Próximamente

Más información próximamente.

Próximamente

Más información próximamente.