Skip to Content
GGPU API流式响应

流式响应

当用户需要尽快看到首段内容时,把文本对话切换为流式返回,并在客户端按 SSE 事件持续拼接结果。

流式与同步文本对话使用同一个 /v1/chat/completions 接口。核心差别是请求体中的 stream: true,以及客户端从“一次读取 JSON”改为“持续消费事件”。

先判断是否需要流式

选择更适合客户端需要处理
同步响应短回答、后台任务、必须拿到完整结果后再处理等待完整 JSON,统一进入成功或错误分支
流式响应长回答、聊天界面、希望缩短首段内容等待时间增量解析、界面更新、主动取消和中途断开

流式不会减少模型实际生成的内容。它改善的是结果到达和展示方式,同时也增加了客户端状态管理。

发起流式请求

先配置固定网关与访问凭证:

export BASE_API_URI="https://api.ggpu.ai" export GGPU_ACCESS_CREDENTIAL_SECRET="<access-credential-secret>"

请求时增加 stream: true,并用 curl -N 关闭命令行输出缓冲:

curl -N -X POST "${BASE_API_URI}/v1/chat/completions" \ -H 'Content-Type: application/json' \ -H "Authorization: Bearer ${GGPU_ACCESS_CREDENTIAL_SECRET}" \ -d '{ "model": "qwen-plus", "messages": [ { "role": "user", "content": "请分三点介绍GGPU API。" } ], "stream": true }'

流式响应使用 SSE 格式。客户端需要按协议读取 data: 内容,而不是把每个网络数据块直接当作一条完整消息。

客户端处理顺序

建立连接

发送请求后先检查 HTTP 状态。鉴权、额度或参数错误可能在流开始前直接返回,此时应按普通错误响应处理。

解析增量事件

持续读取 SSE 事件,解析每条 data: 数据,再从事件载荷中提取当前增量内容。网络分片不等于业务事件,解析器需要保留尚未完整的数据。

更新业务状态

将增量内容追加到当前回答;同时更新“生成中”状态。界面刷新可以适当合并,避免每个极小片段都触发一次重渲染。

识别正常结束

收到服务端结束信号或连接正常关闭后,停止读取并把当前结果标记为完成。若响应提供结束原因或用量信息,应一并保存。

处理中断

连接异常断开时,把已接收内容与“未完整完成”状态一起保留,并给用户明确的重试入口。

用状态而不是字符串驱动界面

客户端状态页面表现关键动作
等待连接显示请求已提交允许取消,限制重复提交
正在接收持续展示新增内容解析事件、累计文本
已完成展示完整结果保存结束原因和可用的用量数据
已中断保留已生成内容并提示未完成记录错误与请求 ID,决定是否重试
已取消停止继续读取主动关闭连接并恢复交互控件

已经向用户展示部分内容后,不要无条件自动重放整个请求,否则可能产生重复回答和额外用量。是否重试应由业务根据幂等性和已展示状态决定。

上线前检查

  • 客户端真正支持 SSE 增量解析,而不只是一次性读取响应体
  • 连接与读取超时分别符合业务时长
  • 页面离开或用户取消时会主动结束读取
  • 异常断开后保留已接收内容,并显示明确状态
  • 对 429 和临时 5xx 的重试有次数上限与退避
  • 服务端日志不记录完整 API Key 或敏感输入

继续接入