Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 |
|
Obsługiwane typy właściwości wektorów |
|
Obsługiwane typy indeksów |
|
Obsługiwane funkcje odległości |
|
Obsługiwane klauzule filtru |
|
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 |
|
Obsługiwane typy właściwości wektorów |
|
Obsługiwane typy indeksów |
|
Obsługiwane funkcje odległości |
|
Obsługiwane klauzule filtru |
|
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.