次の方法で共有


Azure CosmosDB MongoDB (仮想コア) ベクター ストア コネクタの使用 (プレビュー)

警告

セマンティック カーネル ベクター ストア機能はプレビュー段階であり、破壊的変更を必要とする機能強化は、リリース前の限られた状況で引き続き発生する可能性があります。

概要

Azure CosmosDB MongoDB ベクター ストア コネクタを使用して、Azure CosmosDB MongoDB (仮想コア) のデータにアクセスして管理できます。 コネクタには次の特性があります。

機能領域 サポート
コレクションのマップ Azure Cosmos DB MongoDB (仮想コア) コレクション + インデックス
サポートされているキー プロパティの種類 string
サポートされているデータ プロパティ型
  • string
  • INT
  • long
  • 倍精度浮動小数点
  • float
  • 小数
  • bool
  • DateTime
  • これらの各型の列挙可能な値
サポートされているベクター プロパティ型
  • ReadOnlyMemory<float>
  • ReadOnlyMemory<double>
サポートされているインデックスの種類
  • Hnsw
  • IvfFlat
サポートされている距離関数
  • CosineDistance
  • DotProductSimilarity
  • EuclideanDistance
サポートされているフィルター句
  • EqualTo
レコード内の複数のベクターをサポートします はい
IsFilterable がサポートされていますか? はい
IsFullTextSearchable がサポートされていますか? いいえ
StoragePropertyName がサポートされていますか? いいえ。代わりに BsonElementAttribute を使用してください。 詳細については、こちらを参照してください。

制限

このコネクタは Azure Cosmos DB MongoDB (仮想コア) と互換性があり、azure Cosmos DB MongoDB (RU) と互換性 設計 ではありません。

作業の開始

Azure CosmosDB MongoDB ベクター ストア コネクタ NuGet パッケージをプロジェクトに追加します。

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

セマンティック カーネルによって提供される拡張メソッドを使用して、 KernelBuilder で使用できる依存関係挿入コンテナーまたは IServiceCollection 依存関係挿入コンテナーにベクター ストアを追加できます。

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

パラメーターを受け取たない拡張メソッドも提供されます。 これらには、 MongoDB.Driver.IMongoDatabase のインスタンスを依存関係挿入コンテナーに個別に登録する必要があります。

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

Azure CosmosDB MongoDB ベクター ストア インスタンスを直接構築できます。

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

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

名前付きコレクションへの直接参照を構築できます。

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

データ マッピング

Azure CosmosDB MongoDB ベクター ストア コネクタは、データ モデルからストレージにデータをマッピングするときに、既定のマッパーを提供します。

このマッパーは、データ モデルのプロパティの一覧を Azure CosmosDB MongoDB のフィールドに直接変換し、 MongoDB.Bson.Serialization を使用してストレージ スキーマに変換します。 つまり、データ モデルのプロパティ名に別のストレージ名が必要な場合は、 MongoDB.Bson.Serialization.Attributes.BsonElement の使用がサポートされます。 唯一の例外は、すべての CosmosDB MongoDB レコードで ID にこの名前を使用する必要があるため、 _idという名前のデータベース フィールドにマップされるレコードのキーです。

プロパティ名のオーバーライド

データ プロパティとベクター プロパティの場合、データ モデルのプロパティ名とは異なるストレージで使用するオーバーライド フィールド名を指定できます。 MongoDB ではキーの名前が固定されているため、これはキーではサポートされません。

プロパティ名のオーバーライドは、データ モデルのプロパティに BsonElement 属性を設定することによって行われます。

BsonElementセットを持つデータ モデルの例を次に示します。

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

間もなく利用できます

詳細については、近日公開予定です。

間もなく利用できます

詳細については、近日公開予定です。