前言¶
在 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