Freigeben über


Verwenden des Azure CosmosDB MongoDB Vector Store-Connectors (Vorschau)

Warnung

Die Funktionalität des semantischen Kernelvektorspeichers befindet sich in der Vorschau, und Verbesserungen, die fehlerhafte Änderungen erfordern, können unter begrenzten Umständen noch vor der Veröffentlichung auftreten.

Übersicht

Der Azure CosmosDB MongoDB Vector Store-Connector kann verwendet werden, um auf Daten in Azure CosmosDB MongoDB zuzugreifen und diese zu verwalten. Der Verbinder weist die folgenden Merkmale auf.

Featurebereich Unterstützung
Auflistungszuordnungen Azure Cosmos DB MongoDB-Auflistung + Index
Unterstützte Schlüsseleigenschaftentypen Zeichenfolge
Unterstützte Datentypen für Datentypen
  • Zeichenfolge
  • int
  • long
  • double
  • float
  • Decimal
  • bool
  • DateTime
  • und Aufzählungen dieser Typen
Unterstützte Vektoreigenschaftentypen
  • ReadOnlyMemory<float>
  • ReadOnlyMemory<Double>
Unterstützte Indextypen
  • Hnsw
  • IvfFlat
Unterstützte Entfernungsfunktionen
  • CosineDistance
  • DotProductSimilarity
  • EuklideanDistance
Unterstützt mehrere Vektoren in einem Datensatz Ja
IstFilterbar unterstützt? Ja
WirdFullTextSearchable unterstützt? No
StoragePropertyName wird unterstützt? Nein, verwenden Sie stattdessen BsonElementAttribute. Weitere Informationen finden Sie hier.

Erste Schritte

Fügen Sie ihrem Projekt das Azure CosmosDB MongoDB Vector Store-Connector-NuGet-Paket hinzu.

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

Sie können den Vektorspeicher dem Container zum Einfügen von Abhängigkeiten hinzufügen, der für den KernelBuilder Container für Abhängigkeitseinfügungen verfügbar ist, oder dem IServiceCollection Container zum Einfügen von Abhängigkeiten mithilfe von Erweiterungsmethoden, die vom semantischen Kernel bereitgestellt werden.

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

Erweiterungsmethoden, die keine Parameter verwenden, werden ebenfalls bereitgestellt. Dazu muss eine Instanz MongoDB.Driver.IMongoDatabase separat beim Abhängigkeitseinfügungscontainer registriert werden.

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

Sie können eine Azure CosmosDB MongoDB Vector Store-Instanz direkt erstellen.

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

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

Es ist möglich, einen direkten Verweis auf eine benannte Auflistung zu erstellen.

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

Datenzuordnung

Der Azure CosmosDB MongoDB Vector Store-Connector stellt beim Zuordnen von Daten aus dem Datenmodell zum Speicher eine Standardzuordnung bereit.

Dieser Mapper führt eine direkte Konvertierung der Liste der Eigenschaften im Datenmodell in die Felder in Azure CosmosDB MongoDB durch und verwendet MongoDB.Bson.Serialization die Konvertierung in das Speicherschema. Dies bedeutet, dass die Verwendung der MongoDB.Bson.Serialization.Attributes.BsonElement Datenmodelleigenschaft unterstützt wird, wenn ein anderer Speichername für den Namen der Datenmodelleigenschaft erforderlich ist. Die einzige Ausnahme ist der Schlüssel des Datensatzes, der einem Datenbankfeld mit dem Namen _idzugeordnet ist, da alle CosmosDB MongoDB-Einträge diesen Namen für IDs verwenden müssen.

Außerkraftsetzung des Eigenschaftsnamens

Für Dateneigenschaften und Vektoreigenschaften können Sie Feldnamen außer Kraft setzen, die im Speicher verwendet werden sollen, die sich von den Eigenschaftennamen im Datenmodell unterscheiden. Dies wird für Schlüssel nicht unterstützt, da ein Schlüssel einen festen Namen in MongoDB hat.

Die Außerkraftsetzung des Eigenschaftennamens erfolgt durch Festlegen des BsonElement Attributs für die Datenmodelleigenschaften.

Hier ist ein Beispiel für ein Datenmodell mit 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; }
}

In Kürze verfügbar

Weitere Informationen werden in Kürze verfügbar sein.

In Kürze verfügbar

Weitere Informationen werden in Kürze verfügbar sein.