流式用于降低首字延迟、边生成边展示。OpenAI 与 Anthropic 两面的传输格式不同,需分别处理。

OpenAI 兼容对话

请求

Body streamtrue
Accepttext/event-stream
curl -sSN "https://51kik.com/v1/chat/completions" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: text/event-stream" \
  -d '{"model":"YOUR_MODEL_ID","stream":true,"messages":[{"role":"user","content":"你好"}]}'

SSE 格式

每行 data: 后为 JSON,对象类型为 chat.completion.chunk

data: {"choices":[{"delta":{"content":"你"}}],...}
data: {"choices":[{"delta":{"content":"好"}}],...}
data: [DONE]

delta 可能包含 contenttool_calls 等。Tools 流式需按 OpenAI 规范拼接 partial tool_calls

用量分片

网关对每次请求设置 stream_options.include_usage: true。上游支持时,流末尾会出现带 usage 的 chunk,便于计费与监控。

流中错误

若某个 data: 行 JSON 含 error 字段,应终止处理并走错误逻辑(SDK 会抛 GatewaySseError)。见 错误响应

Anthropic 兼容 Messages

POST https://51kik.com/anthropic/v1/messagesstream: trueAccept: text/event-stream

事件类型对齐 Anthropic(如 message_startcontent_block_deltamessage_stop)。详见 Messages API

反向代理 / CDN

现象处理
长时间无输出后一次性显示关闭响应缓冲(nginx:proxy_buffering off
连接中途断开提高 proxy_read_timeout;客户端支持断线重试策略
HTTP/2 与 SSE确认中间层对 SSE 兼容

客户端实现清单

  • 使用流式 HTTP 客户端,勿把整个 body 读入内存再解析
  • 处理 [DONE] 与连接关闭
  • 区分用户取消与上游错误
  • 生产环境代理已关闭 SSE 缓冲

相关