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