Semantic Kernel 在 json 序列化时默认会对中文进行编码,比如下面的 json
{"content":"\u8BF7\u5F00\u706F","role":"user"}
请问如何设置为不编码?
通过 Semantic Kernel 的源码 ClientCore.cs#L299 追踪到在 GetChatMessageContentsAsync
中调用了 Azure.AI.OpenAI.OpenAIClient 的 GetChatCompletionsAsync
方法,在这个方法中调用 ChatCompletions
的 ToRequestContent
方法进行 json 序列化:
RequestContent content = chatCompletionsOptions.ToRequestContent();
注:ChatCompletions
的实现代码是自动生成的
在 ToRequestContent
方法中通过 Utf8JsonRequestContent
的 WriteObjectValue
方法进行序列化
internal virtual RequestContent ToRequestContent()
{
var content = new Utf8JsonRequestContent();
content.JsonWriter.WriteObjectValue(this);
return content;
}
上面代码中的 JsonWriter
是在 Utf8JsonRequestContent 的构造函数中初始化的
public Utf8JsonRequestContent()
{
JsonWriter = new Utf8JsonWriter(_stream);
}
这里的 Utf8JsonWriter
就是 System.Text.Json.Utf8JsonWriter
,
public sealed partial class Utf8JsonWriter : IDisposable, IAsyncDisposable
{
public Utf8JsonWriter(IBufferWriter<byte> bufferWriter, JsonWriterOptions options = default)
{
// ...
}
}
由于 Utf8JsonRequestContent
创建 Utf8JsonWriter
实例时没有给 options
参数传值,所以,没有办法通过设置 JsonWriterOptions
实现 json 序列化时不对中文进行编码。