流式响应 (SSE)
网关对流式响应做字节级透传——客户端体验与直连上游 完全相同,包括 data: 前缀、空行分隔、[DONE] 终止帧。
开启
OpenAI 接口 stream: true;Anthropic 接口 stream: true。
curl -N https://heiyutv.com/api/v1/chat/completions \
-H "Authorization: Bearer sk-gw-XXX" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-5.6-terra","messages":[{"role":"user","content":"hi"}],"stream":true}'计费时机
每次请求结束后扣费一次。网关在 SSE 终止帧([DONE]或 Anthropic 的 message_stop)后旁路解析 usage 字段:
- OpenAI 流式必须设
stream_options: {include_usage: true}才能拿到 usage - Anthropic 流式 usage 在
message_delta事件里 - 客户端断连:网关已收到 chunk 的 token 仍计费(公平分摊上游成本)
断连处理
客户端在中途断开时,网关继续读完上游 stream 直到 EOF, 正确解析 usage 并扣费。不会因为 client 早退而漏计。
对延迟的影响
网关侧的 SSE 转发是 zero-copy 写——不缓冲、不解析、不阻塞。 我们测到的中位延迟 overhead 在 1-3ms。
错误流
如果上游在 stream 中途失败(典型:rate limit、上游超时), 网关会发送一个 data: {"error": {...}} 帧后立即data: [DONE],并把整次请求记为status_label = "error"。