Delen via


De Vector Store-connector van Azure CosmosDB MongoDB (vCore) gebruiken (Preview)

Waarschuwing

De functie van de Semantische Kernel Vector Store is in preview en verbeteringen waarvoor ingrijpende wijzigingen nodig zijn, kunnen nog steeds in beperkte omstandigheden optreden voordat de release plaatsvindt.

Overzicht

De Azure CosmosDB MongoDB Vector Store-connector kan worden gebruikt voor toegang tot en beheer van gegevens in Azure CosmosDB MongoDB (vCore). De verbindingslijn heeft de volgende kenmerken.

Functiegebied Ondersteuning
Verzamelingtoewijzingen Azure Cosmos DB MongoDB -verzameling (vCore) + index
Ondersteunde kenmerktypen string
Ondersteunde gegevenseigenschapstypen
  • tekenreeks
  • int
  • lang
  • dubbel
  • zwevend
  • decimaal
  • bool
  • Datum en tijd
  • en opsommingen van elk van deze typen
Ondersteunde vectoreigenschappentypen
  • ReadOnlyMemory<float>
  • ReadOnlyMemory<double>
Ondersteunde indextypen
  • Hnsw
  • IvfFlat
Ondersteunde afstandsfuncties
  • CosineDistance
  • DotProductSimilarity
  • EuclideanDistance
Ondersteunde filterclausules
  • EqualTo
Ondersteunt meerdere vectoren in een record Ja
Wordt Filterable ondersteund? Ja
WordtFullTextSearchable ondersteund? Nee
Wordt StoragePropertyName ondersteund? Nee, gebruik in plaats daarvan BsonElementAttribute. Zie hier voor meer informatie.
HybridSearch ondersteund? Nee
Functiegebied Ondersteuning
Verzameling wijst naar Azure Cosmos DB MongoDB-collectie (vCore) + index
Ondersteunde sleuteleigenschapstypen tekenreeks
Ondersteunde gegevenseigenschapstypen
  • tekenreeks
  • int
  • lang
  • dubbel
  • zwevend
  • decimaal
  • bool
  • Datum en tijd
  • en iterables van elk van deze typen
Ondersteunde vectoreigenschappentypen
  • lijst[float]
  • list[int]
  • ndarray
Ondersteunde indextypen
  • Hnsw
  • IvfFlat
Ondersteunde afstandsfuncties
  • CosineDistance
  • DotProductSimilariteit
  • EuclideanDistance
Ondersteunde filterclausules
  • EqualTo
  • AnyTagsEqualTo
Ondersteunt meerdere vectoren in een record Ja
Wordt Filterable ondersteund? Ja
WordtFullTextSearchable ondersteund? Nee

Binnenkort meer informatie.

Beperkingen

Deze connector is compatibel met Azure Cosmos DB MongoDB (vCore) en is niet ontworpen om compatibel te zijn met Azure Cosmos DB MongoDB (RU).

Aan de slag

Voeg het NuGet-pakket azure CosmosDB MongoDB Vector Store-connector toe aan uw project.

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

U kunt de vectorwinkel toevoegen aan de afhankelijkheidsinjectiecontainer die beschikbaar is op KernelBuilder of aan de IServiceCollection afhankelijkheidsinjectiecontainer met behulp van extensiemethoden die worden geleverd door 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);

Extensiemethoden waarvoor geen parameters worden gebruikt, worden ook opgegeven. Hiervoor moet een exemplaar MongoDB.Driver.IMongoDatabase afzonderlijk worden geregistreerd bij de container voor afhankelijkheidsinjectie.

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

U kunt rechtstreeks een Azure CosmosDB MongoDB Vector Store-exemplaar maken.

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

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

Het is mogelijk om een directe verwijzing naar een benoemde verzameling te maken.

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

Gegevenstoewijzing

De Azure CosmosDB MongoDB Vector Store-connector biedt een standaardtoewijzingsfunctie bij het toewijzen van gegevens uit het gegevensmodel aan opslag.

Deze mapper voert een directe conversie uit van de lijst met eigenschappen in het gegevensmodel naar de velden in Azure CosmosDB MongoDB en gebruikt MongoDB.Bson.Serialization om te converteren naar het opslagschema. Dit betekent dat het gebruik van het MongoDB.Bson.Serialization.Attributes.BsonElement bestand wordt ondersteund als een andere opslagnaam voor de naam van de gegevensmodeleigenschap is vereist. De enige uitzondering is de sleutel van de record die is toegewezen aan een databaseveld met de naam _id, omdat alle CosmosDB MongoDB-records deze naam moeten gebruiken voor id's.

Eigenschapsnaam herdefiniƫren

Voor gegevenseigenschappen en vectoreigenschappen kunt u veldnamen overschrijven die moeten worden gebruikt in de opslag die verschilt van de eigenschapsnamen in het gegevensmodel. Dit wordt niet ondersteund voor sleutels, omdat een sleutel een vaste naam heeft in MongoDB.

De eigenschapsnaam wordt overschreven door het kenmerk BsonElement in te stellen op de eigenschappen van het datamodel.

Hier volgt een voorbeeld van een gegevensmodel met BsonElement set.

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

Aan de slag

Voeg de Azure CosmosDB MongoDB Vector Store-afhankelijkheden toe aan uw omgeving. Omdat de Azure CosmosDB MongoDB-connector is gebouwd op de MongoDB Atlas-connector en dezelfde client gebruikt als die, moet u deze extra's installeren:

pip install semantic-kernel[azure, mongo]

Vervolgens kunt u de vectoropslag maken.

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

U kunt ook uw eigen MongoDB-client doorgeven als u meer controle wilt hebben over het bouwen van de client.

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

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

Wanneer een client wordt doorgegeven, zal de Semantic Kernel de verbinding niet voor u sluiten, dus moet u ervoor zorgen dat u deze sluit, bijvoorbeeld met een async with-verklaring.

U kunt ook rechtstreeks een verzameling maken zonder de store.

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
)

Serialisatie

Omdat de Azure CosmosDB voor MongoDB-connector een eenvoudige dicteerfunctie nodig heeft met de velden die overeenkomen met de index als invoer, is de serialisatie vrij eenvoudig, maar wordt alleen een vooraf bepaalde sleutel gebruikt _id, dus vervangen we de sleutel van het gegevensmodel door dat als het nog niet _idis.

Zie de serialisatiedocumentatie voor meer informatie over dit concept.

Binnenkort beschikbaar

Binnenkort meer informatie.