Sdílet prostřednictvím


Použití konektoru MongoDB Vector Store (Preview)

Upozorňující

Funkce sémantického úložiště vektorů jádra je ve verzi Preview a vylepšení, která vyžadují zásadní změny, se můžou vyskytovat za omezených okolností před vydáním.

Přehled

Konektor MongoDB Vector Store lze použít pro přístup k datům v MongoDB a jejich správě. Konektor má následující charakteristiky.

Oblast funkcí Technická podpora
Kolekce map na MongoDB Collection + Index
Podporované typy vlastností klíče string
Podporované typy datových vlastností
  • string
  • int
  • long
  • double
  • float (číslo s plovoucí řádovou čárkou)
  • decimal
  • bool
  • DateTime
  • a výčty každého z těchto typů
Podporované typy vektorových vlastností
  • ReadOnlyMemory<float>
  • ReadOnlyMemory<double>
Podporované typy indexů
Podporované funkce vzdálenosti
  • KosineSimilarita
  • DotProductSimilarity
  • EuclideanDistance
Podporované klauzule filtru
  • EqualTo
Podporuje více vektorů v záznamu. Ano
Je podporováno Filtrování? Ano
Podporuje se IsFullTextSearchable? No
StoragePropertyName se podporuje? Ne, místo toho použijte BsonElementAttribute. Další informace najdete tady.

Začínáme

Přidejte do projektu balíček NuGet konektoru MongoDB Vector Store.

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

Do kontejneru IServiceCollection injektáže závislostí můžete přidat vektorové úložiště pomocí rozšiřujících metod poskytovaných sémantickým jádrem.

using Microsoft.SemanticKernel;

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

K dispozici jsou také metody rozšíření, které nepoužívají žádné parametry. Vyžadují samostatnou registraci instance MongoDB.Driver.IMongoDatabase kontejneru injektáže závislostí.

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

Instanci MongoDB Vector Store můžete vytvořit přímo.

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

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

Je možné vytvořit přímý odkaz na pojmenovanou kolekci.

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

Mapování dat

Konektor MongoDB Vector Store poskytuje výchozí mapovač při mapování dat z datového modelu do úložiště.

Tento mapovač provede přímý převod seznamu vlastností datového modelu na pole v MongoDB a používá MongoDB.Bson.Serialization k převodu na schéma úložiště. To znamená, že použití tohoto objektu MongoDB.Bson.Serialization.Attributes.BsonElement se podporuje, pokud se vyžaduje jiný název úložiště s názvem vlastnosti datového modelu. Jedinou výjimkou je klíč záznamu, který je namapován na pole databáze s názvem _id, protože všechny záznamy MongoDB musí používat tento název pro ID.

Přepsání názvu vlastnosti

U vlastností dat a vektorových vlastností můžete zadat názvy polí přepsání, které se mají použít v úložišti, které se liší od názvů vlastností datového modelu. U klíčů to není podporované, protože klíč má pevný název v MongoDB.

Přepsání názvu vlastnosti se provádí nastavením atributu BsonElement u vlastností datového modelu.

Tady je příklad datového modelu se BsonElement sadou.

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

Již brzy

Další informace budou brzy k dispozici.

Již brzy

Další informace budou brzy k dispozici.