Udostępnij za pośrednictwem


Korzystanie z łącznika usługi Azure CosmosDB 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 usługi Azure CosmosDB może służyć do uzyskiwania dostępu do danych w usłudze Azure CosmosDB MongoDB i zarządzania nimi. Łącznik ma następujące cechy.

Obszar funkcji Pomoc techniczna
Mapowania kolekcji na Kolekcja i indeks bazy danych MongoDB w usłudze Azure Cosmos DB
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
  • Hnsw
  • IvfFlat
Obsługiwane funkcje odległości
  • CosineDistance
  • 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 do projektu pakiet NuGet łącznika Azure CosmosDB MongoDB Vector Store.

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

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

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

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

Wystąpienie usługi Azure CosmosDB MongoDB Vector Store można skonstruować bezpośrednio.

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

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

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

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

Mapowanie danych

Łącznik magazynu wektorów bazy danych MongoDB usługi Azure CosmosDB 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 usłudze Azure CosmosDB 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 usługi CosmosDB 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.CosineDistance, IndexKind.Hnsw)]
    public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
}

Wkrótce

Więcej informacji wkrótce.

Wkrótce

Więcej informacji wkrótce.