MossHubAPI 文档
开发者文档 流式输出

流式输出

下载代码

逐段显示回答,并正确处理结束、取消和异常。

当前示例通用示例
未指定模型
参数只用于生成下方示例代码,不会发起请求。

开启流式请求

在 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)。