Dela via


Använda 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

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

Funktionsområde Stöd
Samlingskartor till MongoDB-samling + index
Nyckelegenskapstyper som stöds sträng
Dataegenskapstyper som stöds
  • sträng
  • int
  • 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
  • ReadOnlyMemory<dubbel>
Indextyper som stöds Ej tillämpligt
Avståndsfunktioner som stöds
  • CosineSimilarity
  • DotProduktsimilaritet
  • EuclideanDistance
Filtersatser som stöds
  • EqualTo
Stödjer flera vektorer i ett register Ja
Stöds IsFilterable? Ja
Är IsFullTextSearchable stödd? Nej
Stöds StoragePropertyName? Nej, använd BsonElementAttribute i stället. Mer information finns här.
Stöds HybridSearch? Ja
Funktionsområde Stöd
Samlingskartor till MongoDB-samling + index
Nyckelegenskapstyper som stöds sträng
Dataegenskapstyper som stöds
  • sträng
  • heltal
  • lång
  • dubbel
  • flyttal
  • decimal
  • bool
  • Datum/tid
  • och iterbara objekt av var och en av dessa typer
Egenskapstyper för vektorer som stöds
  • list[float]
  • lista[int]
  • ndarray
Indextyper som stöds
  • Hnsw
  • IvfFlat
Avståndsfunktioner som stöds
  • CosineDistance
  • DotProductSimilarity
  • EuclideanDistance
Filtersatser som stöds
  • EqualTo
  • AnyTagsEqualTo
Stödjer flera vektorer i en postering Ja
Stöds IsFilterable? Ja
Stöds IsFullTextSearchable? Nej

Mer information kommer snart.

Komma igång

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

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

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

using Microsoft.SemanticKernel;

// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMongoDBVectorStore(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 i beroendeinjektionscontainern.

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

Du kan skapa en MongoDB Vector Store-instans direkt.

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

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

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

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

var mongoClient = new MongoClient(connectionString);
var database = mongoClient.GetDatabase(databaseName);
var collection = new MongoDBVectorStoreRecordCollection<Hotel>(
    database,
    "skhotels");

Mappning av data

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

Den här mapparen utför en direkt konvertering av listan med egenskaper i datamodellen till fälten i 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 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ättning av egenskapsnamnet görs genom att ange BsonElement attributet på datamodellens egenskaper.

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.CosineSimilarity)]
    public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
}

Komma igång

Lägg till Beroenden för MongoDB Atlas Vector Store i din miljö. Det behöver pymongo-paketet, som ingår i mongo extra, men du måste installera det med dessa extrafunktioner:

pip install semantic-kernel[mongo]

Du kan sedan skapa vektorlager.

from semantic_kernel.connectors.memory.mongodb_atlas 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()

Du kan också skicka in din egen mongodb-klient om du vill ha mer kontroll över klientkonstruktionen:

from pymongo import AsyncMongoClient
from semantic_kernel.connectors.memory.mongodb_atlas import MongoDBAtlasStore

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

När en klient skickas in stänger semantisk kernel inte anslutningen åt dig, så du måste se till att stänga den, till exempel med en async with-instruktion.

Du kan också skapa en samling direkt, utan butiken.

from semantic_kernel.connectors.memory.mongodb_atlas import MongoDBAtlasCollection

# `hotel` is a class created with the @vectorstoremodel decorator
collection = MongoDBAtlasCollection(
    collection_name="my_collection",
    data_model_type=hotel
)

Serialisering

Eftersom MongoDB Atlas-anslutningsappen behöver en enkel diktering med fälten som motsvarar indexet som indata, är serialiseringen ganska enkel, den använder bara en fördefinierad nyckel _id, så vi ersätter nyckeln för datamodellen med att om den inte redan är _id.

Mer information om det här konceptet finns i serialiseringsdokumentationen.

Kommer snart

Mer information kommer snart.