Dela via


Använda Azure CosmosDB MongoDB Vector Store-anslutningsappen (förhandsversion)

Varning

Funktionen Semantic Kernel Vector Store är i förhandsversion, och förbättringar som kräver icke-bakåtkompatibla ändringar kan fortfarande ske under begränsade omständigheter före lanseringen.

Översikt

Azure CosmosDB MongoDB Vector Store-anslutningsappen kan användas för att komma åt och hantera data i Azure CosmosDB MongoDB. Anslutningsappen har följande egenskaper.

Funktionsområde Support
Samlingskartor till Azure Cosmos DB MongoDB Collection + Index
Nyckelegenskapstyper som stöds sträng
Dataegenskapstyper som stöds
  • sträng
  • heltal
  • lång
  • dubbel
  • flyttal
  • decimal
  • bool
  • Datum/tid
  • och uppräkningar av var och en av dessa typer
Egenskapstyper för vektorer som stöds
  • ReadOnlyMemory-flyttal<>
  • ReadOnlyMemory<dubbel>
Indextyper som stöds
  • Hnsw
  • IvfFlat
Avståndsfunktioner som stöds
  • CosineDistance
  • DotProductSimilarity
  • EuclideanDistance
Stöder flera vektorer i en post Ja
Stöds IsFilterable? Ja
Stöds IsFullTextSearchable? Nej
Stöds StoragePropertyName? Nej, använd BsonElementAttribute i stället. Mer information finns här.

Komma igång

Lägg till NuGet-paketet för Azure CosmosDB MongoDB Vector Store-anslutningsappen i projektet.

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

Du kan lägga till vektorlagret i den beroendeinmatningscontainer som är tillgänglig i containern KernelBuilder eller till containern för IServiceCollection beroendeinmatning med hjälp av tilläggsmetoder som tillhandahålls av semantisk kernel.

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

Tilläggsmetoder som inte har några parametrar tillhandahålls också. Dessa kräver att en instans av MongoDB.Driver.IMongoDatabase registreras separat med containern för beroendeinmatning.

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

Du kan skapa en Azure CosmosDB MongoDB Vector Store-instans direkt.

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

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

Det går att skapa en direktreferens till en namngiven samling.

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

Mappning av data

Azure CosmosDB MongoDB Vector Store-anslutningsappen tillhandahåller en standardmappare när data mappas från datamodellen till lagringen.

Den här mapparen gör en direkt konvertering av listan med egenskaper i datamodellen till fälten i Azure CosmosDB MongoDB och använder MongoDB.Bson.Serialization för att konvertera till lagringsschemat. Det innebär att användning av MongoDB.Bson.Serialization.Attributes.BsonElement stöds om ett annat lagringsnamn än datamodellens egenskapsnamn krävs. Det enda undantaget är nyckeln för posten som mappas till ett databasfält med namnet _id, eftersom alla CosmosDB MongoDB-poster måste använda det här namnet för ID:n.

Åsidosättning av egenskapsnamn

För dataegenskaper och vektoregenskaper kan du ange åsidosättningsfältnamn som ska användas i lagring som skiljer sig från egenskapsnamnen i datamodellen. Detta stöds inte för nycklar eftersom en nyckel har ett fast namn i MongoDB.

Åsidosättningen BsonElement av egenskapsnamnet görs genom att ange attributet för datamodellegenskaperna.

Här är ett exempel på en datamodell med BsonElement set.

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

Kommer snart

Mer information kommer snart.

Kommer snart

Mer information kommer snart.