dsh-cot-flow:流式场景下展开思考链的增量渲染

前言

在 DeepSeek Harness(DSH)里打开「展开 reasoning / thinking」时,模型每推一个 delta,客户端就要把整段思考文本重新交给 Markdown 解析。文本越长,单帧成本越高,流式输出容易越流越卡。社区插件 dsh-cot-flow(维护者 yutaosheng004-bit)走客户端补丁路线:按段落增量解析、已定稿段落只算一次,仍走官方 reasoning 内容的 Factory,不另写一套 Markdown 渲染。

这是什么

dsh-cot-flow 是 DSH 的客户端插件(package 名 dsh-cot-flow,当前版本 0.1.0,MIT 许可证)。它针对「展开的长思维链在流式输出时的渲染开销」:官方实现每帧对整段思考做 Markdown 解析,复杂度随长度近似平方级;本插件在围栏外的空行处切段,已定稿段落只解析一次,每帧只处理尚未定稿的尾部,并做轻量排版清理(多余空行、孤立分隔线;段间距交给 CSS)。

渲染结果与官方一致——每段仍通过官方注册的 conversation.chat.reasoning.content Factory(经 renderFactorySlot),插件不自行实现 Markdown。设计与推导见仓库 docs/DESIGN.md。

目录页:skillhub.cn/plugins/yutaosheng004-bit/dsh-cot-flow(社区目录,与 DeepSeek / 幻方无官方从属关系)。源码:github.com/yutaosheng004-bit/dsh-cot-flow。

核心功能

下面介绍插件在资料中明确写出的能力边界。

增量分段与 memoization

  • 按「围栏外的空行」把思考文本切成段落。
  • 已定稿段落只解析一次;每帧只解析最后一截未写完的尾巴。
  • 去掉多余空行与孤立分隔线,段间距由 CSS 控制。

与官方渲染路径对齐

段落内容仍走 conversation.chat.reasoning.content 的 Factory,不替换为自定义 Markdown 引擎。

失败时静默降级

任一步失败会回退官方渲染,不会白屏。

复杂度(README 对照表)

每帧 全程
官方 O(n_k) O(N²/Δ)
本插件 O(δ + tail) O(N) + O(D·t̄)

安装与启用

插件在 DSH profile 目录下安装,并写入 dsh.profile.bundles 后重启 DSH。package.json 要求 Node >= 22.13.0,DSH >= 0.1.7-0 且 < 0.3.0-0。

先从 GitHub 安装(资料原文命令):

# 在 DSH profile 目录下,直接从 GitHub 装
pnpm add github:yutaosheng004-bit/dsh-cot-flow

若已在本地有仓库副本,可用 link 方式(同样来自 README):

pnpm add link:<path-to-this-repo>

然后把包名加进 profile 的 package.json 的 dsh.profile.bundles,重启 DSH。

README 还提到一种手工挂载方式:将包目录 junction 到 <profile>/node_modules/dsh-cot-flow,在 profile 的 dependencies 里写 "dsh-cot-flow": "link:<path>",并在 dsh.profile.bundles 末尾加上 "dsh-cot-flow"。

启用前建议:插件以当前 DSH 进程权限在客户端运行,安装前应自行查看源码与 MIT 许可证,确认 patch 行为可接受。

验证是否生效

打开开发者工具,在控制台输入:

__dshCotFlow

若返回形如 { renders, scans, scanMs, lastScanMs, segs, chars } 的对象,表示已接管。判据是 lastScanMs 不随 chars 增长而同步增长。

元素检查器中若出现 <div data-cot-flow data-cot-flow-segments="N">,也是接管标记。

无法开控制台时,可读持久探针(最初几次渲染会写入 localStorage)。在 Windows 上路径示例:

%APPDATA%\@deepseek-ai\dsh-desktop\Local Storage\leveldb\*.log   → 搜 dsh-cot-flow:probe

README 给出的实测样本(供对照量级,非普遍承诺):

{"at":"2026-10-27T09:45:52.573Z","renders":394,"scans":387,"segs":3,"chars":333,"lastScanMs":0,"scanMs":3.7}

关掉插件

从 dsh.profile.bundles 删除 "dsh-cot-flow" 并重启;或临时注释本包 cordis.patch.yml 里的 insert 项。

已知边界

安装前宜知晓 README 列出的限制:

  • 缩进代码块、HTML 块、引用块、松散列表项内部若允许空行,可能被切成相邻两段(内容不丢,结构被拆)。
  • 没有任何空行的超长单段,或尚未闭合的超长代码围栏:尾部无界,行为退化为与官方相同(不会更差)。

测试(维护者仓库)

若你本地克隆了仓库并想跑测试,README 提供:

npm test                     # 两套一起跑
node test/scan.test.mjs      # 分段、围栏闭合、续写判定:25 项
node test/render.test.mjs    # 装配、渲染树、流式稳定性、持久探针:30 项

两套测试只依赖 Node,不需要 React 运行时。

适用场景

适合经常在 DSH 客户端展开长 reasoning、且流式过程中感到界面卡顿的开发者。不适合指望改变模型输出内容本身——它只优化客户端渲染路径。

DSH 生态强调「一切皆插件」;本插件通过 cordis.patch.yml 注入 @deepseek-ai/dsh-client-ui-chat,属于典型的客户端 bundle 扩展。

结尾

dsh-cot-flow 用段落级增量解析缓解展开思考链时的 Markdown 重算问题,并保持官方 Factory 渲染语义。需要细节时查 GitHub README 与设计文档;在社区目录可检索同一插件条目。

  • 目录页:https://www.skillhub.cn/plugins/yutaosheng004-bit/dsh-cot-flow
  • GitHub:https://github.com/yutaosheng004-bit/dsh-cot-flow
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜