开发者文档 流式输出
流式输出
逐段显示回答,并正确处理结束、取消和异常。
当前示例通用示例
未指定模型参数只用于生成下方示例代码,不会发起请求。
开启流式请求
在 POST /v1/chat/completions 的请求体中设置 "stream": true。成功时响应为 text/event-stream,网关按原样逐个转发上游事件。鉴权、预算和模型检查在推流前完成,失败时返回普通 JSON 错误和对应状态码。
网关计费需要上游的用量,所以流式请求发往上游时总会把 stream_options.include_usage 设为 true。你的请求没有这样设置时,网关会过滤掉上游返回的只含用量、choices 为空的块;自己设为 true 时,这个块会转发给你,位于 [DONE] 之前。
解析 SSE
流中的 data: 行承载增量 JSON。文本增量通常位于 choices[0].delta.content,正常结束时收到 data: [DONE]。空增量、工具调用和结束字段不能当成文本直接拼接;以 : 开头的注释行直接忽略。
网络数据块不等于 SSE 事件。一条 JSON 可能跨多个块;应累计缓冲区,按事件边界解码。
停止与失败
- 用户点击停止时,主动取消网络请求,并保留已收到的内容。网关会随之取消对应的上游请求。
- 以是否收到
[DONE]判断输出是否完整。状态码 200 之后仍可能中断,不能只检查最初的 HTTP 状态;没有收到[DONE]就断开时,标记为中断,不把部分输出显示成完成。 - 上游中断或连续 5 分钟没有数据时,网关直接结束这条流,不补发
[DONE],也不发送错误事件。 - 请求已发往上游后再取消,仍会计费:已收到上游用量时按上游用量,否则按请求体估算输入、按已收到的增量估算输出。
示例的覆盖范围
Python 与 JavaScript 示例解析文本增量和正常结束标记,处理跨网络块与 UTF-8 文本。它们不是完整工具调用客户端:工具参数应在应用中单独累计,其他协议的事件格式见协议兼容。
示例总超时/读取超时是客户端选择,并非平台 SLA。中断流没有自动重试,避免重复内容和重复调用。生产接入还应限制事件大小、记录响应头 X-Request-Id,并按应用需求保存已经收到的内容。
请求示例
终端逐段输出原始 SSE。使用 Ctrl+C 停止,不自动重试。
curl -N --fail-with-body "$MOSSHUB_API_BASE/v1/chat/completions" \
-H "Authorization: Bearer $MOSSHUB_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"YOUR_MODEL_ID","messages":[{"role":"user","content":"你好"}],"stream":true}'实际可调用的模型、授权与价格以控制台为准。
页面字体:MiSans(小米,依《MiSans 字体知识产权许可协议》使用);Google Sans Flex(SIL Open Font License 1.1)。
页面字体:MiSans(小米,依《MiSans 字体知识产权许可协议》使用);Google Sans Flex(SIL Open Font License 1.1)。