解决ChatGPT Stream API中文乱码问题

421 阅读1分钟

用NextJS搭了个AI助手,但是ChatGPT在Stream模式下,中文偶尔会有乱码的问题,就像下面这样:

image.png

前端渲染代码:

const reader = response.body.getReader();
const decoder = new TextDecoder('utf-8'); // 默认UTF-8,可以不加
while (true) {
  const { done, value } = await reader.read();
  if (done) {
    break;
  }
  const chunk = decoder.decode(value); // 这里有时会截断
  console.log(chunk);
  responseMessage.content += chunk;
  setConversation((prevMessages) => [...prevMessages]);
}

解决:

由于汉字通常使用多个字节表示,解码中可能会遇到不完整的字节序列,从而导致乱码。

解决方法就是给decoder.decode()方法加上stream:true的参数,以支持流式区块解码。

- const chunk = decoder.decode(value);
+ const chunk = decoder.decode(value, { stream: true });

最终效果不再有乱码。

image.png

参考:

developer.mozilla.org/en-US/docs/… github.com/ChatGPTNext…