次の方法で共有


さまざまなストアとの間でのデータ モデルのシリアル化 (プレビュー)

間もなく利用できます

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

class または definition として定義されたデータ モデルをデータベースに格納するには、データベースが理解できる形式にシリアル化する必要があります。

セマンティック カーネルによって提供される組み込みのシリアル化を使用するか、独自のシリアル化ロジックを提供することで、2 つの方法を実行できます。

シリアル化オプション

組み込みのシリアル化

組み込みシリアル化を行うには、まずデータ モデルをディクショナリに変換し、次に、組み込みコネクタの一部として定義されているストアごとに、それをストアが認識するモデルにシリアル化します。 逆シリアル化は逆順で行われます。

dict メソッドとの間のカスタム設定

組み込みのシリアル化では、カスタム メソッドを使用して、データ モデルからディクショナリ、およびディクショナリからデータ モデルに移動することもできます。 これは、レコード定義のToDictProtocolプロトコルとFromDictProtocolプロトコルに続くクラスまたは関数のVectorStoreModelToDictFromDictProtocolのメソッドを実装することによって行うことができます。どちらもsemantic_kernel/data/vector_store_model_protocols.pyにあります。

これは、最適化されたコンテナー形式をコードで使用するが、ストア間を簡単に移動できるようにする場合に特に便利です。

Pydantic モデル

Pydantic BaseModel を使用してモデルを定義すると、 model_dump メソッドと model_validate メソッドを使用して、ディクテーションとの間でデータ モデルをシリアル化および逆シリアル化します。

カスタムのシリアル化

また、モデルからデータ ストアのモデルに直接実行するシリアル化を定義することもできます。

これを行うには、 VectorStoreModelFunctionSerdeProtocol プロトコルを実装するか、レコード定義の SerializeProtocolDeserializeProtocol に従う関数を追加することで、両方を semantic_kernel/data/vector_store_model_protocols.pyで確認できます。

ベクターのシリアル化

データ モデルにベクターがある場合は、浮動小数点のリストまたは int のリストである必要があります。これはほとんどのストアで必要になるため、クラスでベクターを別の形式で格納する場合は、VectorStoreRecordVectorField注釈で定義されているserialize_functiondeserialize_functionを使用できます。 たとえば、numpy 配列の場合は、次の注釈を使用できます。

import numpy as np

vector: Annotated[
    np.ndarray | None,
    VectorStoreRecordVectorField(
        dimensions=1536,
        serialize_function=np.ndarray.tolist,
        deserialize_function=np.array,
    ),
] = None

ネイティブ numpy 配列を処理できるベクター ストアを使用していて、それらを前後に変換したくない場合は、モデルとそのストアの直接シリアル化と逆シリアル化を設定する必要があります。

間もなく利用できます

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