流式输出
边生成边展示回复,并正确处理流结束、用量与网络中断。
选择对应协议
Chat Completions、Messages 与 Responses 使用不同的流事件结构。优先使用对应 SDK 的解析能力,避免把一种协议的解析器用于另一种接口。
用 SDK 读取 Chat Completions
先按 OpenAI Node.js 安装 SDK、配置 UOUO_API_KEY 和 UOUO_MODEL。将以下代码保存为 stream.mjs,运行 node stream.mjs。
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.UOUO_API_KEY,
baseURL: "https://uouo.cloud/v1",
});
const stream = await client.chat.completions.create({
model: process.env.UOUO_MODEL,
messages: [{ role: "user", content: "Hello" }],
stream: true,
});
try {
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
process.stdout.write("\n");
} catch (error) {
console.error("流式响应中断,请保留当前输出并检查请求日志。", error.message);
}如果直接处理 SSE
网络分片不等于一条完整 SSE 事件。一条事件可能跨多个分片到达;保存未完成片段,只消费完整事件,避免重复拼接已处理的缓冲区。
Chat Completions 的结束标记与 Messages 的结束事件不同,按所选接口判断完成状态。
中断后怎么处理?
保留已有输出,并把界面标记为未完成。不要把连接关闭一概视为成功,也不要自动把整段请求再次发送而不考虑重复生成。
用量核对
流内用量信息取决于模型与参数;连接中断时可能收不到最后的统计。到 调用日志 与 Usage 核对消耗。