Serialización del modelo de datos hacia y desde diferentes almacenes (versión preliminar)
Próximamente
Más información próximamente.
Para que el modelo de datos se defina como una clase o una definición que se va a almacenar en una base de datos, debe serializarse en un formato que la base de datos pueda comprender.
Hay dos maneras de hacerlo, ya sea mediante la serialización integrada proporcionada por el kernel semántico o proporcionando su propia lógica de serialización.
Opciones de serialización
Serialización integrada
La serialización integrada se realiza mediante la conversión del modelo de datos en un diccionario y, a continuación, serializarlo en el modelo que el almacén entiende, para cada almacén diferente y definido como parte del conector integrado. La deserialización se realiza en orden inverso.
Métodos personalizados a y desde dict
La serialización integrada también puede usar métodos personalizados para pasar del modelo de datos a un diccionario y de un diccionario al modelo de datos. Esto se puede hacer mediante la VectorStoreModelToDictFromDictProtocol
implementación de métodos desde para una clase o funciones siguiendo los protocolos y FromDictProtocol
en la ToDictProtocol
definición de registro, ambos se pueden encontrar en semantic_kernel/data/vector_store_model_protocols.py
.
Esto resulta especialmente útil cuando se quiere usar un formato de contenedor optimizado en el código, pero todavía desea poder moverse entre almacenes fácilmente.
Modelos pydantices
Al definir el modelo mediante un modelo BaseModel pydantic, usará los model_dump
métodos y model_validate
para serializar y deserializar el modelo de datos hacia y desde un dict.
Serialización personalizada
También puede definir la serialización que se va a realizar directamente desde el modelo en el modelo del almacén de datos.
Esto se puede hacer mediante la implementación del VectorStoreModelFunctionSerdeProtocol
protocolo o agregando funciones que siguen a y DeserializeProtocol
en la SerializeProtocol
definición de registro, ambas se pueden encontrar en semantic_kernel/data/vector_store_model_protocols.py
.
Serialización de vectores
Cuando tiene un vector en el modelo de datos, debe ser una lista de floats o una lista de ints, ya que es lo que necesitan la mayoría de los almacenes, si desea que la clase almacene el vector en un formato diferente, puede usar y serialize_function
deserialize_function
definir en la VectorStoreRecordVectorField
anotación. Por ejemplo, para una matriz numpy, puede usar la anotación siguiente:
import numpy as np
vector: Annotated[
np.ndarray | None,
VectorStoreRecordVectorField(
dimensions=1536,
serialize_function=np.ndarray.tolist,
deserialize_function=np.array,
),
] = None
Si usa un almacén de vectores que puede controlar matrices numpy nativas y no desea convertirlos hacia atrás y hacia adelante, debe configurar la serialización directa y la deserialización para el modelo y ese almacén.
Próximamente
Más información próximamente.