Sdílet prostřednictvím


Použití konektoru pro úložiště vektorů Azure CosmosDB MongoDB (vCore) (Preview)

Varování

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 Azure CosmosDB MongoDB Vector Store je možné použít k přístupu a správě dat v MongoDB (vCore). Konektor má následující charakteristiky.

Oblast funkcí Technická podpora
Mapování kolekce na Kolekce a index MongoDB (vCore) služby Azure Cosmos DB
Podporované typy vlastností klíče řetězec
Podporované typy datových vlastností
  • řetězec
  • int
  • dlouhý
  • dvojitý
  • float (plovoucí desetinná čárka)
  • desetinný
  • bool
  • Datum a čas
  • a výčtové typy každého z těchto typů
Podporované typy vektorových vlastností
  • Paměť pouze pro čtení<float>
  • PaměťPouzeProČtení<double>
Podporované typy indexů
  • Hnsw
  • IvfFlat
Podporované funkce vzdálenosti
  • KosineDistance
  • DotProductSimilarity
  • EuclideanDistance
Podporované klauzule filtru
  • EqualTo
Podporuje více vektorů v záznamu. Ano
Je podporováno Filtrování? Ano
Podporuje se IsFullTextSearchable? Ne
StoragePropertyName se podporuje? Ne, místo toho použijte BsonElementAttribute. Další informace najdete tady.
Podporuje se HybridSearch? Ne
Oblast funkcí Technická podpora
Mapování kolekce na Kolekce a index MongoDB (vCore) služby Azure Cosmos DB
Podporované typy klíčových vlastností řetězec
Podporované typy datových vlastností
  • řetězec
  • int
  • dlouhý
  • dvojitý
  • float (plovoucí desetinná čárka)
  • desetinný
  • bool
  • Datum a čas
  • a iterovatelné prvky každého z těchto typů
Podporované typy vektorových vlastností
  • seznam[float]
  • list[int]
  • ndarray
Podporované typy indexů
  • Hnsw
  • IvfFlat
Podporované funkce vzdálenosti
  • KosineDistance
  • DotProductSimilarity (Podobnost podle skalárního součinu)
  • EuclideanDistance
Podporované klauzule filtru
  • EqualTo
  • AnyTagsEqualTo
Podporuje více vektorů v záznamu. Ano
Je podporováno Filtrování? Ano
Podporuje se IsFullTextSearchable? Ne

Další informace budou brzy k dispozici.

Omezení

Tento konektor je kompatibilní se službou Azure Cosmos DB MongoDB (vCore) a není navržený tak, aby byl kompatibilní se službou Azure Cosmos DB MongoDB (RU).

Začínáme

Do projektu přidejte balíček NuGet konektoru Azure CosmosDB MongoDB Vector Store.

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

Můžete přidat vektorový úložiště do kontejneru pro injektáž závislostí dostupného na KernelBuilder nebo do kontejneru pro injektáž závislostí na IServiceCollection prostřednictvím rozšiřujících metod, které nabízí rámec Semantic Kernel.

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

K dispozici jsou také metody rozšíření, které nepoužívají žádné parametry. Je nutné, aby byla instance MongoDB.Driver.IMongoDatabase samostatně registrována v kontejneru pro injektáž závislostí.

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

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

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

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

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

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

Mapování dat

Konektor Azure CosmosDB 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 služby Azure CosmosDB 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 cosmos DB musí pro ID používat tento název.

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 s BsonElement nastavením.

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

Začínáme

Přidejte do svého prostředí závislosti Azure CosmosDB MongoDB Vector Store. Vzhledem k tomu, že konektor MongoDB Služby Azure CosmosDB je založený na konektoru MongoDB Atlas a používá stejného klienta jako ten, musíte ho nainstalovat pomocí těchto dodatečných funkcí:

pip install semantic-kernel[azure, mongo]

Pak můžete vytvořit vektorové úložiště.

from semantic_kernel.connectors.memory.azure_cosmos_db import AzureCosmosDBforMongoDBStore

# 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 = AzureCosmosDBforMongoDBStore()

Alternativně můžete použít svého vlastního klienta MongoDB, pokud chcete mít větší kontrolu nad konstrukcí klienta:

from pymongo import AsyncMongoClient
from semantic_kernel.connectors.memory.azure_cosmos_db import AzureCosmosDBforMongoDBStore

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

Když je předán klient, Semantic Kernel nezavře připojení za vás, takže je na vás, abyste připojení zavřeli, například pomocí příkazu async with.

Můžete také vytvořit kolekci přímo bez úložiště.

from semantic_kernel.connectors.memory.azure_cosmos_db import AzureCosmosDBforMongoDBCollection

# `hotel` is a class created with the @vectorstoremodel decorator
collection = AzureCosmosDBforMongoDBCollection(
    collection_name="my_collection",
    data_model_type=hotel
)

Serializace

Vzhledem k tomu, že konektor Azure CosmosDB pro MongoDB potřebuje jednoduchý slovník s poli odpovídajícími indexu jako vstup, serializace je poměrně snadná; používá pouze předem určený klíč _id, takže klíč datového modelu nahradíme tímto, pokud již není klíč _id.

Další podrobnosti o tomto konceptu najdete v dokumentaci k serializaci.

Již brzy

Další informace budou brzy k dispozici.