Compartir a través de


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.