切换主题
流式输出问题
等到最后才一次显示
请求可能已经使用流式接口,但客户端或中间代理在缓冲响应。
检查:
- 请求正文是否包含
"stream": true。 - curl 是否使用
-N。 - 反向代理是否启用响应缓冲。
- 客户端是否真正读取流,而不是先调用
response.json()。
输出到一半中断
可能原因包括客户端总超时、代理空闲超时、网络切换、上游终止或用户取消。
处理时记录已经收到的事件、结束原因和错误内容。不要自动把所有中断请求完整重放,尤其是包含工具或写操作时。
出现乱码或 JSON 被拆开
网络分片不等于一个完整 SSE 事件。使用标准 SDK、SSE 解析器或按空行组合事件,不要对每个 TCP 分片直接执行 JSON.parse。
浏览器中应使用流读取器和增量 UTF-8 解码:
javascript
const decoder = new TextDecoder('utf-8')
const reader = response.body.getReader()
while (true) {
const { value, done } = await reader.read()
if (done) break
const text = decoder.decode(value, { stream: true })
// 将 text 交给 SSE 解析器,而不是直接当作完整 JSON。
}内容重复
确认客户端拿到的是增量 delta 还是累计文本。增量应追加,累计文本应替换;混用会造成重复。
工具调用参数不完整
流式工具参数可能分多个事件返回。等到工具调用结束后再拼接并解析 JSON,不要在第一个片段到达时执行工具。
建议超时
分别设置连接超时、首字超时和总超时。不同模型响应速度不同,不能用一个极短总超时覆盖所有场景。
开发示例见流式响应。
