次の方法で共有


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

警告

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

警告

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

警告

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

概要

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

機能領域 サポート
コレクションのマップ MongoDB コレクション + インデックス
サポートされているキー プロパティの種類 ひも
サポートされているデータ プロパティ型
  • ひも
  • INT
  • 長い
  • ダブル
  • 浮く
  • 小数
  • ブール (bool)
  • 日付と時刻
  • これらの各タイプの列挙可能なもの
サポートされているベクター プロパティ型
  • 読み取り専用メモリ<float>
  • 埋め込み<float>
  • float[]
サポートされているインデックスの種類 該当なし
サポートされている距離関数
  • コサイン類似度
  • ドットプロダクトシミラリティ
  • EuclideanDistance
サポートされているフィルター句
  • EqualTo
レコード内の複数のベクターをサポートします はい
IsIndexed はサポートされていますか? はい
IsFullTextIndexed がサポートされていますか? いいえ
StorageName がサポートされていますか? いいえ。代わりに BsonElementAttribute を使用してください。 詳細については、こちらを参照してください。
HybridSearch はサポートされていますか? はい
機能領域 サポート
コレクションのマップ MongoDB コレクション + インデックス
サポートされているキー プロパティの種類 ひも
サポートされているデータ プロパティ型
  • ひも
  • INT
  • 長い
  • ダブル
  • 浮く
  • 小数
  • ブール (bool)
  • 日付と時刻
  • 各型のイテラブルおよびその他
サポートされているベクター プロパティ型
  • リスト[float]
  • リスト[整数]
  • ndarray
サポートされているインデックスの種類
  • Hnsw
  • IvfFlat
サポートされている距離関数
  • CosineDistance
  • ドットプロダクトシミラリティ
  • EuclideanDistance
サポートされているフィルター句
  • EqualTo
  • AnyTagsEqualTo
レコード内の複数のベクターをサポートします はい
IsFilterable がサポートされていますか? はい
IsFullTextSearchable がサポートされていますか? いいえ

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

作業の開始

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

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

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

using Microsoft.Extensions.DependencyInjection;

// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMongoVectorStore(connectionString, databaseName);

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

using Microsoft.Extensions.DependencyInjection;
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.AddMongoVectorStore();

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

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

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

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

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

var mongoClient = new MongoClient(connectionString);
var database = mongoClient.GetDatabase(databaseName);
var collection = new MongoCollection<string, Hotel>(
    database,
    "skhotels");

データ マッピング

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

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

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

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

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

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

using Microsoft.Extensions.VectorData;
using MongoDB.Bson.Serialization.Attributes;

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.CosineSimilarity)]
    public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
}

作業の開始

MongoDB Atlas ベクター ストアの依存関係を環境に追加します。 mongo に含まれている pymongo パッケージが必要です。次の追加パッケージと共にインストールする必要があります。

pip install semantic-kernel[mongo]

その後、ベクター ストアを作成できます。

from semantic_kernel.connectors.mongodb import MongoDBAtlasStore

# If the right environment settings are set, namely MONGODB_ATLAS_CONNECTION_STRING and optionally MONGODB_ATLAS_DATABASE_NAME and MONGODB_ATLAS_INDEX_NAME, this is enough to create the Store:
store = MongoDBAtlasStore()

または、クライアントの構築をより詳細に制御する場合は、独自の mongodb クライアントを渡すこともできます。

from pymongo import AsyncMongoClient
from semantic_kernel.connectors.mongodb import MongoDBAtlasStore

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

クライアントが渡されると、セマンティック カーネルは接続を閉じないため、async with ステートメントなどを使用して接続を閉じる必要があります。

ストアを使用せずにコレクションを直接作成することもできます。

from semantic_kernel.connectors.mongodb import MongoDBAtlasCollection

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

シリアリゼーション

MongoDB Atlas コネクタでは、入力としてインデックスに対応するフィールドを持つ単純なディクテーションが必要であるため、シリアル化は非常に簡単で、事前に定義されたキー _idのみを使用するため、データ モデルのキーを、まだ _idされていない場合はそれに置き換えます。

この概念の詳細については、シリアライゼーションのドキュメントを参照してください

近日公開

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