流式响应 — Markdown 源文
以下为可直接复制或提供给 AI Agent 的 Markdown 原文。
> **AI Agents**: 索引 `/api/llms.txt` | 英文全文 `/api/llms-full-en.txt` | 中文全文 `/api/llms-full-zh.txt` | OpenAPI `/api/openapi.yaml`
> Base URL: `<BASE_URL>/v1`
# 流式响应
使用 **Server-Sent Events (SSE)** 流式返回 Chat Completions token。
## 启用流式
在请求体中设置 `"stream": true`:
```json
{
"model": "deepseek/deepseek-chat",
"messages": [{"role": "user", "content": "数到五。"}],
"stream": true
}
```
**思考型 / 长推理模型请务必使用 `stream: true`。** 非流式请求在 CDN(如 Cloudflare)后可能受约 100s 首字节限制而中断。流式路径下网关会周期性发送 SSE 注释行(`: keepalive`),各语言 SDK 会忽略注释,不影响解析。
## 响应格式
- **Content-Type**:`text/event-stream`
- 每行:`data: <json chunk>`
- 结束:`data: [DONE]`
示例(`data:` 后 JSON 实际传输多为单行,此处换行便于阅读):
```http
data: {
"id": "chatcmpl-...",
"object": "chat.completion.chunk",
"choices": [
{
"index": 0,
"delta": { "content": "一" },
"finish_reason": null
}
]
}
data: {
"id": "chatcmpl-...",
"object": "chat.completion.chunk",
"choices": [
{
"index": 0,
"delta": { "content": "、二" },
"finish_reason": null
}
]
}
data: [DONE]
```
## 流式 usage
流式响应末尾可能包含 `usage` 对象(取决于模型支持情况)。
## curl 示例
```bash
curl -N "${SNX_BASE_URL}/chat/completions" \
-H "Authorization: Bearer ${SNX_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek/deepseek-chat",
"stream": true,
"messages": [{"role": "user", "content": "打个招呼"}]
}'
```
使用 `-N` 禁用 curl 缓冲。
## OpenAI SDK(Python)
```python
stream = client.chat.completions.create(
model="deepseek/deepseek-chat",
messages=[{"role": "user", "content": "打个招呼"}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content or ""
print(delta, end="", flush=True)
```
## 错误处理
| 阶段 | 行为 |
|------|------|
| **流开始前** | HTTP 4xx/5xx + JSON `error`(与非流式相同) |
| **流进行中** | 客户端应处理 SSE 截断 |
配额、余额、认证错误通常在**首字节之前**返回。
## 相关
- [Chat Completions](./chat-completions.md)
- [错误处理](./errors.md)