切换主题
流式响应
流式请求会在模型生成内容时持续返回事件,降低用户等待首字的时间。客户端必须能够读取 Server-Sent Events(SSE)。
Chat Completions 流式请求
bash
curl -N https://sprelaytoken.com/v1/chat/completions \
-H "Authorization: Bearer $SPRELAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.4",
"stream": true,
"messages": [
{"role": "user", "content": "分三点解释流式输出。"}
]
}'curl -N 会关闭输出缓冲,便于观察增量事件。
Python SDK
python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["SPRELAY_API_KEY"],
base_url="https://sprelaytoken.com/v1",
)
stream = client.chat.completions.create(
model="gpt-5.4",
stream=True,
messages=[{"role": "user", "content": "分三点解释流式输出。"}],
)
for chunk in stream:
text = chunk.choices[0].delta.content
if text:
print(text, end="", flush=True)客户端必须处理的情况
- 单个事件可能没有文本,只包含角色、工具调用或结束原因。
- UTF-8 字符可能跨网络分片,使用标准 SSE/SDK 解析器。
- HTTP 已返回 200 后,流中仍可能出现错误事件。
- 用户取消请求时,应关闭连接并停止后续处理。
- 设置首字超时和总超时,不要只设置一个极短的固定超时。
代理配置
反向代理或 CDN 若缓存响应,会让用户等到全部完成后一次收到。应确保 SSE 路径不会被响应缓冲,并允许足够长的空闲连接时间。
重试原则
流中断后不能盲目重放带有副作用的请求。纯文本生成可在业务允许时重试;工具调用、写操作或已经向用户展示部分结果的请求,需要由业务层决定是否继续。
排错见流式输出问题。
