Repository navigation
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 四场景全过:
- prompt-stream 完整流 + 16.5s 全静默期心跳保活;
- 停滞看门狗显式
error(turn stalled)+done收流; - 同步
prompt整轮耗时大于阈值时完整返回全部内容(旧语义半途截断); - 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 插件清单接口;以及本版断流修复)。