流式聊天中途关闭标签页,已经生成的内容还收费吗?
§1 关闭标签页,不等于模型立即停止生成
聊天回复正在逐字出现,你突然关掉标签页,这次请求还会收费吗?通常,已经产生的可计费消耗不会因为关页而消失;后续是否继续消耗,取决于取消信号有没有传到上游。页面停止显示、网络连接断开和模型停止工作,是三个不同的时刻。
可以把流式回复想成正在送来的餐点:你离开餐桌,不代表厨房立刻收到退单通知。理解这段通知链路,比盯着屏幕上最后出现的字更重要。
§2 流式账单通常包含输入和输出令牌
令牌是模型处理文字的计量单位,并不固定等于一个汉字。一次请求可能包含用户问题、系统提示和历史对话,这些构成输入;模型生成的回答构成输出。具体费用还要看所选模型、缓存规则和服务商的计费口径。
例如,你让 Gemini 2.5 Flash 总结一篇文章,即使只看到了回答开头,已经处理的输入和已经产生的可计费输出仍可能收费。流式传输改变的是回复到达的方式,不是“只按用户看见的文字收费”。
§3 浏览器、后端和上游之间有两段连接
常见架构是浏览器连接你的后端,后端再连接模型接口。用户关闭标签页,首先影响的是浏览器这一侧。如果后端没有处理断开事件,它仍可能继续读取上游回复,甚至把完整结果保存下来。
- – 浏览器停止显示,只能说明用户不再看到新内容。
- – 后端检测到连接断开后,需要主动取消对应的上游请求。
- – 上游收到并处理取消后,生成才可能停止,期间仍可能产生少量额外消耗。
如果产品本来就支持后台完成任务,关页后继续生成也可能是设计行为,但应提前向用户说明。
§4 取消生成不能保证账单停在最后一个可见字
即使取消逻辑正确,也很难做到用户关页的瞬间精准停表。网络传输、缓冲和取消处理都有延迟,上游可能已经生成了尚未显示的内容。通过 SSE 收到的一段数据,也不一定恰好对应一个令牌。
因此,不要用页面上的字数推算最终费用,也不要把“前端已取消”当成“上游确认停止”。准确的计费边界应以服务商文档和最终用量记录为准。
§5 开发者可以补上的四道消耗保护
- – 提供明确的停止按钮,并让停止操作真正取消后端对应的上游请求,而不只是停止页面渲染。
- – 监听客户端断开事件,为该请求释放连接和相关资源,同时记录取消发生的时间。
- – 设置合理的最大输出长度、请求超时和用户预算,限制异常情况下的持续消耗。
- – 为每次请求保存标识和状态,避免断开后自动重试,把同一个问题重新生成一遍。
§6 断流后没有收到用量,不代表费用为零
部分接口会在流末尾返回用量信息,中途断开可能收不到这条记录。此时应将请求标记为用量待核对,再结合控制台、账单或服务商提供的查询能力确认。应用自己统计的已接收文本,只适合辅助排查,不应冒充最终账单。
§7 使用 Fluxio 时,同样需要打通取消链路
如果你希望以统一接口接入流式模型,Fluxio 是一个适合评估的选择:它面向流式场景,按令牌计费,并兼容 OpenAI 风格的客户端。但接入中转服务并不意味着关闭标签页就必然停止计费;上线前仍应测试浏览器断开后,后端是否发出取消,以及用量记录如何呈现。
对新手而言,最稳妥的原则是:把关页当成需要处理的事件,而不是天然的计费开关。
欢迎注册 Fluxio,体验流式接入。