Partager via


Sérialisation de votre modèle de données vers et depuis différents magasins (préversion)

Bientôt disponible

Plus d’informations prochainement.

Pour que votre modèle de données soit défini comme une classe , soit comme une définition à stocker dans une base de données, il doit être sérialisé dans un format que la base de données peut comprendre.

Il existe deux façons de procéder, soit à l’aide de la sérialisation intégrée fournie par le noyau sémantique, soit en fournissant votre propre logique de sérialisation.

Options de sérialisation

Sérialisation intégrée

La sérialisation intégrée est effectuée en convertissant d’abord le modèle de données en dictionnaire, puis en sérialisant le modèle que le magasin comprend, pour chaque magasin différent et défini dans le cadre du connecteur intégré. La désérialisation est effectuée dans l’ordre inverse.

Méthodes dict personnalisées vers et depuis

La sérialisation intégrée peut également utiliser des méthodes personnalisées pour passer du modèle de données à un dictionnaire et d’un dictionnaire au modèle de données. Pour ce faire, implémentez des méthodes à partir d’une VectorStoreModelToDictFromDictProtocol classe ou d’une fonction en suivant les protocoles et FromDictProtocol les ToDictProtocol protocoles de votre définition d’enregistrement, les deux sont disponibles dans semantic_kernel/data/vector_store_model_protocols.py.

Cela est particulièrement utile lorsque vous souhaitez utiliser un format de conteneur optimisé dans votre code, mais souhaitez toujours pouvoir vous déplacer facilement entre les magasins.

Modèles Pydantic

Lorsque vous définissez votre modèle à l’aide d’un BaseModel Pydantic, il utilise les méthodes et model_validate les model_dump méthodes pour sérialiser et désérialiser le modèle de données vers et à partir d’un dict.

Sérialisation personnalisée

Vous pouvez également définir la sérialisation à effectuer directement à partir de votre modèle dans le modèle du magasin de données.

Pour ce faire, implémentez le VectorStoreModelFunctionSerdeProtocol protocole ou ajoutez des fonctions qui suivent la SerializeProtocol définition de votre enregistrement et DeserializeProtocol les deux sont disponibles.semantic_kernel/data/vector_store_model_protocols.py

Sérialisation de vecteurs

Lorsque vous avez un vecteur dans votre modèle de données, il doit être une liste de floats ou de listes d’ints, car c’est ce dont la plupart des magasins ont besoin, si vous souhaitez que votre classe stocke le vecteur dans un autre format, vous pouvez utiliser l’annotation serialize_function et deserialize_function la définir.VectorStoreRecordVectorField Par exemple, pour un tableau numpy, vous pouvez utiliser l’annotation suivante :

import numpy as np

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

Si vous utilisez un magasin de vecteurs qui peut gérer des tableaux numpy natifs et que vous ne souhaitez pas les convertir en arrière et arrière, vous devez configurer la sérialisation directe et la désérialisation pour le modèle et ce magasin.

Bientôt disponible

Plus d’informations prochainement.