流式、超时与取消
先在公开模型目录确认流式支持。Chat、Responses 和 Messages 请求设置 stream: true;Gemini 使用 :streamGenerateContent?alt=sse,不在请求正文添加 stream。收到成功 HTTP 状态和 text/event-stream 内容类型后再开始消费。
| 协议 | 正常结束方式 |
|---|---|
| Chat Completions | data: [DONE] |
| Responses | response.completed;还需处理失败或未完成的终态事件 |
| Messages | message_stop |
| Gemini | 消费生成事件,结合候选项结束原因与流结束判断结果 |
SSE 按空行分隔事件,不按网络分块划分 JSON。一个事件可以有多行 data:;UTF-8 字符也可能跨网络分块。不要要求所有协议都返回 [DONE]。流中的 error、失败或未完成事件不能当作正常生成结果。
官方 SDK
TypeScript 0.3.0 提供 streamChatCompletion、streamResponse、streamMessage、streamGeminiContent,返回异步事件迭代器。事件的 event、原始 data 和可选 id 保持协议语义,由调用方解析 JSON 和识别终态/错误事件。
const controller = new AbortController()
const timeout = setTimeout(() => controller.abort(), 60_000)
try {
for await (const event of gateway.streamResponse(
{ model, input: '<YOUR_PROMPT>' },
{ signal: controller.signal },
)) {
// 按 event.event 和 JSON.parse(event.data) 更新界面;不要记录正文。
}
} finally {
clearTimeout(timeout)
}退出迭代会关闭响应流;AbortSignal 可中止等待中的网络请求。SDK 不自动重试或重放流。单个 SSE 事件最多累计 1,048,576 个 UTF-16 代码单元,超限会报错。Swift/Kotlin 当前的传输层读取完整 JSON,收到 stream: true 会在发请求前报错;原生应用需要流式体验时使用支持 SSE 的传输实现。
设置符合业务需要的连接、首字节和整体超时;上例只提供整体超时。Swift/Kotlin 可用 GatewayRequestOptions.timeout 设置请求超时。取消后已产生的用量仍可能结算,剩余预留按平台规则释放;断开连接不等于零费用。保留 X-Request-Id,不要记录请求或响应正文。
中国模型的推理与工具增量
DeepSeek、Kimi、MiniMax、GLM 的 Chat 流可能包含 delta.reasoning_content,请与最终 delta.content 分开累加。工具参数可能跨多个事件,按 tool_calls 索引组合,收齐后再解析 JSON。保留推理与工具消息供下一轮使用,具体参数和协议以型号声明为准。参阅中国大模型接入。