我也遇到了这个问题,当 stream: true 的时候,openai实际上使用了SSE的方式返回了数据。遇到乱码的原因是因为读取SSE的返回结果没有使用 \n 作为结束,而是固定读取一定的长度,如果这个长度正好读取到某个UTF-8字符的一半,就会导致乱码的产生。具体可以参考:https://github.com/haibbo/cf-openai-azure-proxy/issues/6
如果你跟我一样使用Ktor作为客户端,使用http方式调用api,那么可以按照下面的方法解决这个问题
val channel: ByteReadChannel = httpResponse.body()
while (!channel.isClosedForRead) {
val line = channel.readUTF8Line() ?: return@execute // 这一行保证每次读取一个完整的sse响应
log.debug("receive: {}", line)
}