Udostępnij za pośrednictwem


Korzystanie z łącznika Azure CosmosDB dla magazynu wektorów MongoDB (vCore) (wersja zapoznawcza)

Ostrzeżenie

Funkcjonalność magazynu wektorów bazy danych MongoDB (vCore) usługi Azure CosmosDB jest dostępna w wersji zapoznawczej, a ulepszenia wymagające zmian powodujących niezgodność mogą nadal występować w określonych sytuacjach przed premierą produktu.

Ostrzeżenie

Funkcjonalność semantycznego repozytorium wektorów jądra jest w wersji zapoznawczej, a ulepszenia, które mogą wymagać niekompatybilnych zmian, mogą nadal zachodzić w ograniczonych sytuacjach przed oficjalnym wydaniem.

Ostrzeżenie

Funkcjonalność semantycznego repozytorium wektorów jądra jest w wersji zapoznawczej, a ulepszenia, które mogą wymagać niekompatybilnych zmian, mogą nadal zachodzić w ograniczonych sytuacjach przed oficjalnym wydaniem.

Omówienie

Łącznik do magazynu wektorowego Azure CosmosDB MongoDB może być używany do uzyskiwania dostępu do danych i zarządzania nimi w Azure CosmosDB MongoDB (vCore). Łącznik ma następujące cechy.

Obszar funkcji Wsparcie
Mapowanie kolekcji Kolekcja i indeks MongoDB w usłudze Azure Cosmos DB (vCore)
Obsługiwane typy właściwości kluczy sznurek
Obsługiwane typy właściwości danych
  • sznurek
  • int (integer)
  • długi
  • podwójny
  • liczba zmiennoprzecinkowa
  • dziesiętny
  • Bool
  • Data i Czas
  • i wyliczenia dla każdego z tych typów
Obsługiwane typy właściwości wektorów
  • ReadOnlyMemory<float>
  • Osadzanie<float>
  • float[]
Obsługiwane typy indeksów
  • Hnsw
  • IvfFlat
Obsługiwane funkcje odległości
  • CosineDistance
  • DotProductSimilarity
  • EuclideanDistance
Obsługiwane klauzule filtru
  • EqualTo
Obsługuje wiele wektorów w rekordzie Tak
Czy funkcja IsIndexed jest obsługiwana? Tak
Czy funkcja FullTextIndexed jest obsługiwana? Nie.
Czy StorageName jest obsługiwany? Nie, zamiast tego użyj elementu BsonElementAttribute. Aby uzyskać więcej informacji, zobacz tutaj.
Obsługiwane jest wyszukiwanie hybrydowe? Nie.
Obszar funkcji Wsparcie
Mapowanie kolekcji Kolekcja i indeks MongoDB w usłudze Azure Cosmos DB (vCore)
Obsługiwane typy właściwości kluczy sznurek
Obsługiwane typy właściwości danych
  • sznurek
  • int (integer)
  • długi
  • podwójny
  • liczba zmiennoprzecinkowa
  • dziesiętny
  • Bool
  • Data i Czas
  • i iterowalne każdego z tych typów
Obsługiwane typy właściwości wektorów
  • lista[float]
  • lista[int]
  • ndarray
Obsługiwane typy indeksów
  • Hnsw
  • IvfFlat
Obsługiwane funkcje odległości
  • CosineDistance
  • DotProductSimilarity
  • EuclideanDistance
Obsługiwane klauzule filtru
  • EqualTo
  • AnyTagsEqualTo
Obsługuje wiele wektorów w rekordzie Tak
Czy filtrowanie jest obsługiwane? Tak
Czy jest obsługiwany element IsFullTextSearchable? Nie.

Więcej informacji wkrótce.

Ograniczenia

Ten łącznik jest zgodny z usługą Azure Cosmos DB MongoDB (vCore) i nie jest przystosowany do zgodności z usługą Azure Cosmos DB MongoDB (RU).

Wprowadzenie

Dodaj pakiet NuGet konnektora Azure CosmosDB MongoDB Vector Store do projektu.

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

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

using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;

// Using Kernel Builder.
var kernelBuilder = Kernel
    .CreateBuilder();
kernelBuilder.Services
    .AddCosmosMongoVectorStore(connectionString, databaseName);
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;

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

Dostępne są również metody rozszerzeń, które nie przyjmują parametrów. Wymagają one zarejestrowania wystąpienia MongoDB.Driver.IMongoDatabase osobno 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.Services.AddCosmosMongoVectorStore();
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.AddCosmosMongoVectorStore();

Instancję Azure CosmosDB MongoDB Vector Store można skonstruować bezpośrednio.

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

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

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

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

var mongoClient = new MongoClient(connectionString);
var database = mongoClient.GetDatabase(databaseName);
var collection = new CosmosMongoCollection<ulong, 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 konieczne jest użycie innej nazwy magazynu niż nazwa 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.

Nadpisanie nazwy właściwości

W przypadku właściwości danych i właściwości wektorów można podać alternatywne nazwy pól do użycia w pamięci, które 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
{
    [VectorStoreKey]
    public ulong HotelId { get; set; }

    [BsonElement("hotel_name")]
    [VectorStoreData(IsIndexed = true)]
    public string HotelName { get; set; }

    [BsonElement("hotel_description")]
    [VectorStoreData(IsFullTextIndexed = true)]
    public string Description { get; set; }

    [BsonElement("hotel_description_embedding")]
    [VectorStoreVector(4, DistanceFunction = DistanceFunction.CosineDistance, IndexKind = IndexKind.Hnsw)]
    public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
}

Wprowadzenie

Dodaj do swojego środowiska zależności magazynu wektorów MongoDB Azure CosmosDB. Ponieważ łącznik Bazy danych MongoDB usługi Azure CosmosDB jest oparty na łączniku usługi MongoDB Atlas i używa tego samego klienta co ten łącznik, należy zainstalować przy użyciu następujących dodatków:

pip install semantic-kernel[azure, mongo]

Następnie można utworzyć magazyn wektorów.

from semantic_kernel.connectors.azure_cosmos_db import CosmosMongoStore

# If the right environment settings are set, namely AZURE_COSMOS_DB_MONGODB_CONNECTION_STRING and optionally AZURE_COSMOS_DB_MONGODB_DATABASE_NAME, this is enough to create the Store:
store = CosmosMongoStore()

Alternatywnie możesz przekazać własnego klienta MongoDB, jeśli chcesz mieć większą kontrolę nad jego konstrukcją:

from pymongo import AsyncMongoClient
from semantic_kernel.connectors.azure_cosmos_db import CosmosMongoStore

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

Kiedy klient jest przekazany do jądra semantycznego, nie zamknie ono połączenia za Ciebie, więc musisz upewnić się, że zamkniesz je samodzielnie, na przykład za pomocą instrukcji async with.

Możesz również utworzyć kolekcję bezpośrednio bez sklepu.

from semantic_kernel.connectors.azure_cosmos_db import CosmosMongoCollection

# `Hotel` is a class created with the @vectorstoremodel decorator
collection = CosmosMongoCollection(
    record_type=Hotel,
    collection_name="my_collection"
)

Serializacja

Ponieważ łącznik usługi Azure CosmosDB dla bazy danych MongoDB wymaga prostego słownika z polami odpowiadającymi indeksowi jako dane wejściowe, serializacja jest dość łatwa, używa tylko wstępnie określonego klucza _id, więc zastępujemy klucz modelu danych kluczem _id, jeśli nie jest jeszcze .

Aby uzyskać więcej informacji na temat tej koncepcji, zobacz dokumentację serializacji.

Wkrótce

Więcej informacji wkrótce.