流式输出说明#
流式输出用于 Chat 和 Responses 接口,逐块返回内容,用户体验更好(不用等全部生成完才显示)。开启方式#
{
"model": "deepseek-v3",
"messages": [{"role": "user", "content": "写一首诗"}],
"stream": true
}
响应格式(SSE)#
流式响应使用 Server-Sent Events (SSE) 协议,Content-Type 为 text/event-stream。data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","created":1713833628,"model":"deepseek-v3","choices":[{"index":0,"delta":{"content":"你"},"finish_reason":null}]}
data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","created":1713833628,"model":"deepseek-v3","choices":[{"index":0,"delta":{"content":"好"},"finish_reason":null}]}
data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","created":1713833628,"model":"deepseek-v3","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: [DONE]
每个chunk 的 delta.content 是本次新增的文本片段,拼起来就是完整回复
finish_reason 为 stop 表示正常结束
cURL 流式调用#
Python SDK 流式调用#
Node.js SDK 流式调用#
流式输出中的 Usage 信息#
默认流式响应不包含 usage(Token 用量)。如果需要,设置 stream_options:{
"model": "deepseek-v3",
"messages": [{"role": "user", "content": "你好"}],
"stream": true,
"stream_options": {"include_usage": true}
}
设置后,最后一个 chunk 会包含完整的 usage 字段:{
"id": "chatcmpl-abc123",
"object": "chat.completion.chunk",
"choices": [{"index": 0, "delta": {}, "finish_reason": "stop"}],
"usage": {"prompt_tokens": 10, "completion_tokens": 20, "total_tokens": 30}
}
Responses 接口的流式输出#
Responses API 同样支持 stream: true,格式与 Chat 类似,也是 SSE 协议,最后以 data: [DONE] 结束。自行解析 SSE 的注意事项#
如果你不用 SDK,自己解析 SSE 流,注意以下几点:2.
跳过空行:SSE 协议中空行是事件分隔符,不影响数据
3.
检测结束:遇到 data: [DONE] 就停止读取
4.
处理断连:网络中断时可以重试,但无法从断点续传,需要重新发起请求
5.
超时设置:建议 HTTP 客户端超时设为 60 秒以上,长文本生成可能耗时较久
流式 vs 非流式对比#
| 维度 | 非流式 (stream: false) | 流式 (stream: true) |
|---|
| 响应方式 | 一次性返回完整结果 | 逐块返回文本片段 |
| 用户感知 | 等待时间较长 | 逐字出现,体感更快 |
| 响应格式 | chat.completion | chat.completion.chunk |
| Usage | 默认包含 | 需设置 stream_options |
| 适用场景 | 后端批处理、API 串联 | 前端对话、实时交互 |
| 解析难度 | 简单,直接读 JSON | 需要 SSE 解析 |
Modified at 2026-06-29 08:45:13