Udostępnij za pośrednictwem


Korzystanie z łącznika usługi MongoDB Vector Store (wersja zapoznawcza)

Ostrzeżenie

Funkcja semantycznego magazynu wektorów jądra jest dostępna w wersji zapoznawczej, a ulepszenia wymagające zmian powodujących niezgodność mogą nadal występować w ograniczonych okolicznościach przed wydaniem.

Omówienie

Łącznik magazynu wektorów bazy danych MongoDB może służyć do uzyskiwania dostępu do danych w bazie danych MongoDB i zarządzania nimi. Łącznik ma następujące cechy.

Obszar funkcji Pomoc techniczna
Mapowania kolekcji na Kolekcja i indeks bazy danych MongoDB
Obsługiwane typy właściwości kluczy string
Obsługiwane typy właściwości danych
  • string
  • int
  • długi
  • double
  • liczba zmiennoprzecinkowa
  • decimal
  • bool
  • DateTime
  • i wyliczalne każdego z tych typów
Obsługiwane typy właściwości wektorów
  • ReadOnlyMemory<float>
  • ReadOnlyMemory<podwójnie>
Obsługiwane typy indeksów Nie dotyczy
Obsługiwane funkcje odległości
  • CosineSimilarity
  • DotProductSimilarity
  • EuclideanDistance
Obsługuje wiele wektorów w rekordzie Tak
Czy filtrowanie jest obsługiwane? Tak
Czy jest obsługiwany element IsFullTextSearchable? Nie.
Obsługiwana nazwa_właściwości_magazynu? Nie, zamiast tego użyj elementu BsonElementAttribute. Aby uzyskać więcej informacji, zobacz tutaj.

Wprowadzenie

Dodaj pakiet NuGet łącznika magazynu wektorowego bazy danych MongoDB do projektu.

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

Magazyn wektorów można dodać do kontenera IServiceCollection wstrzykiwania zależności przy użyciu metod rozszerzeń udostępnianych przez jądro semantyczne.

using Microsoft.SemanticKernel;

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

Dostępne są również metody rozszerzeń, które nie przyjmują parametrów. Wymagają one osobnego zarejestrowania MongoDB.Driver.IMongoDatabase wystąpienia w kontenerze wstrzykiwania zależności.

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

Wystąpienie magazynu wektorów bazy danych MongoDB można utworzyć bezpośrednio.

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

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

Istnieje możliwość utworzenia bezpośredniego odwołania do nazwanej kolekcji.

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

Mapowanie danych

Łącznik magazynu wektorów bazy danych MongoDB udostępnia domyślny maper podczas mapowania danych z modelu danych na magazyn.

Ten maper wykonuje bezpośrednią konwersję listy właściwości modelu danych na pola w bazie MongoDB i używa MongoDB.Bson.Serialization ich do konwersji na schemat magazynu. Oznacza to, że użycie elementu MongoDB.Bson.Serialization.Attributes.BsonElement jest obsługiwane, jeśli wymagana jest inna nazwa magazynu dla nazwy właściwości modelu danych. Jedynym wyjątkiem jest klucz rekordu mapowanego na pole bazy danych o nazwie _id, ponieważ wszystkie rekordy bazy danych MongoDB muszą używać tej nazwy dla identyfikatorów.

Zastępowanie nazwy właściwości

W przypadku właściwości danych i właściwości wektorów można podać nazwy pól przesłonięć do użycia w magazynie, który różni się od nazw właściwości w modelu danych. Nie jest to obsługiwane w przypadku kluczy, ponieważ klucz ma stałą nazwę w bazie danych MongoDB.

Zastąpienie nazwy właściwości odbywa się przez ustawienie atrybutu BsonElement we właściwościach modelu danych.

Oto przykład modelu danych z zestawem BsonElement .

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

Wkrótce

Więcej informacji wkrótce.

Wkrótce

Więcej informacji wkrótce.