Skip to content

多模型流式问答出现断流、乱码、重复输出或重试失败时怎么排查?

题型:问题排查 · 从模型 Provider、适配层、Reactor、网关到浏览器逐段验证。

排查顺序

先用同一个 requestId 对比模型原始流、适配后事件、服务端 SSE 和浏览器接收内容,确定问题在哪一段。断流重点检查 Provider 超时、代理空闲超时、心跳、客户端取消和异常是否被吞掉;乱码检查 UTF-8 增量解码,不能假设每个网络 chunk 都是完整字符;重复输出检查模型重试、Flux 重订阅、网关重放和客户端按 eventId 去重逻辑。

处理方案

  • 每次模型生成分配 generationId,事件带单调 sequence 和 eventId。
  • 适配器维护增量解码状态,将不同厂商结束标记归一化。
  • Flux 避免对冷流无意多次订阅,必要时明确共享与重放边界。
  • 已输出部分内容后不静默切换模型,发送 retrying 或 failed 事件。
  • 客户端断开后取消上游,并记录取消原因和已产生费用。

复盘闭环

补充 Provider 维度的 TTFT、断流率、正常完成率、重试成功率和重复事件监控,并把网关超时、缓冲与压缩配置纳入部署检查。

易错点

  • 连接关闭不一定代表任务成功完成。
  • 只在前端去重会掩盖服务端重复执行和重复计费。

知识关系

从当前问题继续深入,或者回到提出这个问题的知识入口。