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.