stream: true,响应通常为 text/event-stream。建议交给 SDK 解析;网络数据块不等于一个 SSE 事件,事件也可能跨多个数据块。
两种接口的区别
角色块、工具调用块或用量块可能不含文本;
choices 也可能为空。Chat 的 length 表示达到生成限制,tool_calls 表示需要处理工具,并非完整自然语言回复。
HTTP 200 后仍可能出现事件级错误或网络中断。保留已收到的文字时应标记“不完整”,不要把 EOF 当作成功,也不要自动重放已开始的生成请求。
Python:Chat Completions
按 Python SDK安装依赖、设置环境变量;保存为stream-chat.py,运行 python stream-chat.py。这是纯文本示例,只有 finish_reason=stop 视为完整输出。
TypeScript:Responses
按 TypeScript SDK安装依赖;保存为stream-responses.mts,运行 node stream-responses.mts。选择支持 Responses 流式输出的模型。
部署与用量
如果文字一次性出现,检查网关或反向代理的响应缓冲设置和超时。取消客户端读取不保证上游停止执行。 Chat 的stream_options.include_usage 需渠道支持;用量事件可能没有 choices。Responses 的用量通常在最终响应中。连接中断时可能拿不到最终用量,应结合控制台日志核对,不能把缺失用量视为零。
参考:OpenAI 流式事件说明。