跳转到内容

流式输出

三套协议的流式开关、事件格式与用量统计。

请求体加 "stream": true。要在最后一个事件里拿到 Token 用量,再加 stream_options

{
"model": "your-model",
"messages": [{ "role": "user", "content": "Hello" }],
"stream": true,
"stream_options": { "include_usage": true }
}

响应是 SSE,每行以 data: 开头,最后一行是 data: [DONE]

OpenAI SSE 示意:启用 stream 和 include_usage,逐段接收内容,读取 usage,再收到 DONE 结束标记
流式事件示意图,省略部分 JSON 字段,非真实响应截图。其他协议使用各自的事件格式;点击图片查看大图。

同样加 "stream": true。SSE 包含 message_start、内容块的 content_block_start / content_block_delta / content_block_stopmessage_deltamessage_stop 等事件。输入用量在 message_start 中,输出累计用量在 message_delta 中。

把路径里的 :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。控制台的用量明细不受影响,始终有记录。

流中途断开。 上游账号异常时网关会切换到下一个可用账号,但已经开始输出的流无法续接。客户端需要按整条请求重试。

并非所有模型都支持流式。 是否支持由模型决定。不支持时按非流式方式请求。

ROIBest AI 文档