流式输出
三套协议的流式开关、事件格式与用量统计。
- 已完成五分钟接通。
- 客户端能处理
text/event-stream。
OpenAI 兼容
Section titled “OpenAI 兼容”请求体加 "stream": true。要在最后一个事件里拿到 Token 用量,再加 stream_options:
{ "model": "your-model", "messages": [{ "role": "user", "content": "Hello" }], "stream": true, "stream_options": { "include_usage": true }}响应是 SSE,每行以 data: 开头,最后一行是 data: [DONE]。
Anthropic 兼容
Section titled “Anthropic 兼容”同样加 "stream": true。SSE 包含 message_start、内容块的 content_block_start / content_block_delta / content_block_stop、message_delta 和 message_stop 等事件。输入用量在 message_start 中,输出累计用量在 message_delta 中。
Gemini 兼容
Section titled “Gemini 兼容”把路径里的 :generateContent 换成 :streamGenerateContent。
curl -N https://ai.roibest.com/v1/chat/completions \ -H "Authorization: Bearer $ROIBEST_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "your-model", "messages": [{"role": "user", "content": "数到十"}], "stream": true, "stream_options": {"include_usage": true} }'curl -N 关闭缓冲,能看到分块到达。最后一块之前会出现一条带 usage 的事件。
内容一次性全部返回,没有分块。
中间有反向代理或客户端在缓冲。curl 加 -N 排除本地因素;确认没有经过会缓冲响应体的代理。
流式请求拿不到 Token 用量。
OpenAI 协议要显式传 stream_options.include_usage,否则最后一个事件不带 usage。控制台的用量明细不受影响,始终有记录。
流中途断开。 上游账号异常时网关会切换到下一个可用账号,但已经开始输出的流无法续接。客户端需要按整条请求重试。
并非所有模型都支持流式。 是否支持由模型决定。不支持时按非流式方式请求。
