Serialização do modelo de dados de e para diferentes repositórios (versão prévia)
Em breve
Mais informações em breve.
Para que seu modelo de dados definido como uma classe ou uma definição seja armazenado em um banco de dados, ele precisa ser serializado em um formato que o banco de dados possa entender.
Há duas maneiras de fazer isso, usando a serialização interna fornecida pelo Kernel Semântico ou fornecendo sua própria lógica de serialização.
Opções de serialização
Serialização interna
A serialização interna é feita primeiro convertendo o modelo de dados em um dicionário e, em seguida, serializando-o no modelo que esse repositório entende, para cada repositório diferente e definido como parte do conector interno. A desserialização é feita na ordem inversa.
Métodos de dicionário personalizados de e para
A serialização interna também pode usar métodos personalizados para ir do modelo de dados para um dicionário e de um dicionário para o modelo de dados. Isso pode ser feito implementando métodos de VectorStoreModelToDictFromDictProtocol
uma classe ou funções para uma classe ou funções seguindo os ToDictProtocol
protocolos e FromDictProtocol
em sua definição de registro, ambos podem ser encontrados em semantic_kernel/data/vector_store_model_protocols.py
.
Isso é especialmente útil quando você deseja usar um formato de contêiner otimizado em seu código, mas ainda deseja poder se mover facilmente entre as lojas.
Modelos Pydantic
Quando você define seu modelo usando um Pydantic BaseModel, ele usará os model_dump
métodos and model_validate
para serializar e desserializar o modelo de dados de e para um dict.
Serialização personalizada
Você também pode definir a serialização a ser feita diretamente do seu modelo para o modelo do armazenamento de dados.
Isso pode ser feito implementando o VectorStoreModelFunctionSerdeProtocol
protocolo ou adicionando funções que seguem o SerializeProtocol
e DeserializeProtocol
em sua definição de registro, ambos podem ser encontrados em semantic_kernel/data/vector_store_model_protocols.py
.
Serialização de vetores
Quando você tem um vetor em seu modelo de dados, ele precisa ser uma lista de floats ou uma lista de ints, já que é isso que a maioria das lojas precisa, se você quiser que sua classe armazene o vetor em um formato diferente, você pode usar o serialize_function
e deserialize_function
definido na VectorStoreRecordVectorField
anotação. Por exemplo, para uma matriz numpy, você pode usar a seguinte anotação:
import numpy as np
vector: Annotated[
np.ndarray | None,
VectorStoreRecordVectorField(
dimensions=1536,
serialize_function=np.ndarray.tolist,
deserialize_function=np.array,
),
] = None
Se você usar um repositório vetorial que possa lidar com matrizes numpy nativas e não quiser que elas sejam convertidas para frente e para trás, configure a serialização direta e a desserialização para o modelo e esse armazenamento.
Em breve
Mais informações em breve.