Skip to content

流式(SSE) ​

所有协议端点均支持 SSE 流式;事件格式跟随端点协议。

OpenAI 协议(chat / responses) ​

"stream": true:

text
data: {"id":"chatcmpl-xxx","choices":[{"delta":{"content":"你"}}],...}

data: {"id":"chatcmpl-xxx","choices":[],"usage":{"prompt_tokens":32,"completion_tokens":8,...}}

data: [DONE]
  • Chat Completions:网关自动向上游注入 usage 统计,最后一个空 choices 块携带 usage,随后 [DONE];
  • Responses:分类型事件(response.created、response.output_text.delta、response.completed…),usage 在 response.completed。

Anthropic 协议(messages) ​

"stream": true,命名事件:

text
event: message_start
data: {"type":"message_start","message":{"id":"msg_xxx","usage":{"input_tokens":32,...}}}

event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"你"}}

event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":8,...}}

event: message_stop
data: {"type":"message_stop"}
  • message_delta 的 usage 为累计值,以最后一个为准;
  • 长空闲期会收到 event: ping 保活;
  • HTTP 200 之后仍可能收到 event: error(上游中断):客户端必须处理流内错误事件,不能仅凭状态码判定成功。

客户端实践 ​

事项建议
超时首字节超时 ≥ 60s(大上下文预热慢);块间超时 ≥ 30s
中断计费流中断按网关捕获到的 usage 结算;无 usage 不计费
重试429 读取 Retry-After 并退避;流已输出或已执行工具后不要自动重放。普通文本端点不能仅凭添加幂等键就假定不会重复执行
代理链中间代理需关闭缓冲(X-Accel-Buffering: no 语义),否则首字节延迟劣化
连接复用在进程内复用同一个 SDK / HTTP 客户端;每次新建客户端会重复 DNS、TCP 和 TLS 建连
首输出统计ping、message_start、response.created 不代表已有模型文字;分别记录首响应头、首个有效内容和完整结束时间

排查“等待很久才出字”时,请记录客户端所在地区和运营商、模型、流式开关、输入长度及请求 ID。大上下文和推理过程可能增加首输出等待;在满足任务要求的前提下,减少重复上下文、保留稳定的提示前缀并使用流式展示。API Key 和客户原文不要附在故障报告中。

NexusKey · 一个 Key 接入多协议模型 API