流式输出
SSE 流式响应、用量统计块与两种协议的差异。
任意模型都可以在请求中加 stream: true 开启流式输出,响应以 SSE(Server-Sent Events)逐块返回,显著降低首字等待。
OpenAI 协议
stream = client.chat.completions.create(
model="z-ai/glm-5.2",
messages=[{"role": "user", "content": "写一首关于算力的短诗"}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="")推理模型的思考过程在增量块的 delta.reasoning_content 中返回,正文在 delta.content 中。
流式下获取用量
默认流式响应不带 usage。加上 stream_options 后,最后一个数据块会携带完整用量(该块 choices 为空数组):
{"stream": true, "stream_options": {"include_usage": true}}Anthropic 协议
Messages 端点的流式遵循 Anthropic SSE 事件序列:message_start → content_block_start → content_block_delta(text_delta / thinking_delta / input_json_delta)→ content_block_stop → message_delta(含 stop_reason 与输出 token 数)→ message_stop。
Anthropic 官方 SDK 的 client.messages.stream(...) 可直接使用。
建议
- 长输出任务(生成长文、复杂推理)务必开流式,避免触发客户端或中间代理的读超时
- 流式计费与非流式一致:按最终实际生成的 token 数计费
- 流中途发生的上游错误会终止流;客户端应把「流提前结束且无
finish_reason/message_stop」视为失败并重试