Skip to content

v0.6.1 — 流式对话断流修复:停滞看门狗 + SSE 心跳 + 错误可见化

Latest

Choose a tag to compare

@toddpan toddpan released this 27 Oct 14:50

v0.6.1 · 流式对话断流修复(对齐 pi-web-service 修复)

修复三方集成中「>180s 长对话必然断流」的一组问题(与 pi-web-service 的修复同语义)。

什么是坏了

  • 同步入口(POST /sessions/:id/prompt、OpenAI 非流式 chat/completions)按 180s 整轮总耗时超时:长文本生成、多轮工具调用的轮次在 180 秒整被静默掐断,调用方只拿到半截内容(且 HTTP 200、ok:true)。
  • SSE 通道(prompt-stream / events / OpenAI 流式)无任何心跳:思考或工具执行的长沉默期会被 Nginx / 网关 / 浏览器空闲策略静默掉线。
  • prompt-stream 停滞无终点:轮次卡死时客户端永远挂在打开的 SSE 上。
  • 事件处理的静默 catch 让断流无声无息,无从排查。
  • OpenAI 流式在 prompt 提交失败时因「响应头已发出」走不到错误响应,客户端挂在空流上。

修复语义

停滞看门狗取代总时长上限 —— 每收到一个会话事件就重置计时;持续产出(哪怕远超数分钟)绝不打断;只有持续收不到任何会话事件(真停滞)才显式报 turn stalled 收流。

  • timeoutMs(同步入口):语义由「总时长上限」改为「停滞阈值」,默认 180s,完全兼容。
  • stallTimeoutMs(prompt-stream 新增):停滞收流阈值,默认 300s。
  • 所有 SSE 通道每 15s 下发 ': ping' 注释帧心跳(标准 SSE / OpenAI 解析器均忽略),收流时自动停止。
  • 流内任意内部错误以 error 事件显式可见并补 done 收流。
  • OpenAI 流式提交失败按 OpenAI 错误块 + [DONE] 收流。

验证

离线回归 scripts/verify-stream-fix.mjs 四场景全过:

  1. prompt-stream 完整流 + 16.5s 全静默期心跳保活;
  2. 停滞看门狗显式 error(turn stalled) + done 收流;
  3. 同步 prompt 整轮耗时大于阈值时完整返回全部内容(旧语义半途截断);
  4. OpenAI 流式提交失败收到错误块 + [DONE],不再空流挂死。

安装 / 升级

# GitHub Release tarball
dsh plugin --profile web add \
  https://github.com/toddpan/dsh-webapi/releases/latest/download/dsh-web-service.tgz

# npm
npm i dsh-web-service@0.6.1

Full Changelog: v0.5.0...v0.6.1(含 v0.6.0:GET /plugins 插件清单接口;以及本版断流修复)。