启用流式响应
在支持的模型和协议中设置 stream 为 true。服务端应把上游数据持续转发给浏览器,避免先缓存完整响应后一次性返回。
const stream = await client.chat.completions.create({
model: "your-model",
messages: [{ role: "user", content: "你好" }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}SSE 解析注意事项
网络分片不等于一条完整 SSE 消息。解析器应按事件分隔符累积数据,并处理空行、结束标记和不同协议的事件类型。不要直接对每个网络 chunk 执行 JSON.parse。
断线与超时处理
用户主动停止时应取消上游请求。连接异常后是否重试取决于任务是否幂等;对已经产生部分输出的请求自动重试可能导致重复内容和重复计费。
常见问题
关于AI API 流式响应与 SSE 接入的常见问题
为什么设置 stream 后仍一次返回?
检查中间代理是否缓冲响应,并确认客户端正在逐块读取。
每个网络 chunk 都是完整 JSON 吗?
不是,网络分片可能截断事件,必须使用合适的 SSE 解析器。
用户停止生成后要做什么?
取消客户端连接并通知服务端终止对应上游请求。