有个功能需要在数据库中配置模板将用户输入填入占位符, 因为要配置多轮message以及各个参数,使用自己配置的方式会比较麻烦,就想着把ChatCompletionsOptions
整个序列化到数据库里,然后拿出来再填入占位符.
但是直接使用jackson会导致对于user的ChatRequestUserMessage
会序列化和反序列化都失败.
序列化会变为:
1 | { |
因为整个类型的定义:
1 | public final class ChatRequestUserMessage extends ChatRequestMessage { |
content是个BinaryData
自己写openai的格式反序列化也一样
解决方法很简单,因为引入了微软自己的BinaryData 使用这个进行序列化和反序列化就行了:
反序列化例子:
1 | String template = """ |
不过试验了下还是会有点问题…因为用了BinaryData
所以反序列化它没法识别是List
还是String
,最后全部变成了String
结构破坏了.
提了一个issue: [BUG] The result is inconsistent after serializing and deserializing ChatRequestUserMessage
弄了个不怎么优雅的临时解法:
1 | private void fixMessage(ChatCompletionsOptions options) { |
就先这样吧… …