前言¶
在 DeepSeek Harness(DSH)里跑智能体时,模型有时会在「深度思考」段里原地打转:同一类确认语、短句交替出现,既不推进任务,又占满上下文。常见应对是白名单加连续命中次数,但阈值低了误伤正常确认,阈值高了又挡不住「好。做。开始。做。」这类不连续的碎片复读。
dsh-degeneration-guard 是社区维护的 DSH 插件,只盯 reasoning-delta(思考段),用滑动窗口做通用重复检测,命中后截断生成并可选自动把下一步推给模型。下面介绍它的定位、判据、安装与配置。
这是什么¶
- 名称:
dsh-degeneration-guard(客户端设置里显示为「复读打断」) - 维护者:bluemika111
- 分类:模型推理(社区目录 SkillHub 插件页)
- 源码:GitHub - bluemika111/dsh-degeneration-guard
- 当前包版本(package.json):
0.1.2 - 许可证:MIT
插件在流式输出里检测思考段复读,截断本次生成,并在开启「自动继续」时通过 agent 机制续跑;聊天里会留下折叠提示,客户端可弹一次浮窗。正文与工具调用原样透传,不参与复读判定。
为什么不用白名单¶
README 里对比了白名单做法:只有整行等于表内固定短句才算命中,且要求连续命中 N 次。阈值设为 1 时,正常确认语也容易误伤;设为 2 及以上时,复读串里一旦出现表外词(如 做。、开始。),连续计数会清零,几乎触发不了。真实退化往往是交替碎片,本插件改为窗口内计数,不查词表。
核心功能与判据¶
监测范围¶
只看 reasoning-delta。明确不参与判定:空行、代码围栏(``` / ~~~)内的行、纯数字或标点组成的装饰行(如 1.、---、===)。
行重复(始终启用)¶
在最近一个滑动窗口内统计整行出现次数。窗口大小为 max(9, 阈值 × 3) 行;同一整行在窗口内出现达到「重复次数阈值」即判复读。看窗口而非「连续相等」,因此交替复读也能拦住。
行内重复(可选,默认关闭)¶
检测单行由同一单元重复构成的情况,例如 好。好。好。。关闭时只认跨换行的整行重复(独立段落)。
拦截之后的行为¶
- 触发命中的 delta 照常放行,补
block-end闭合思考块,再补finish(stop),对 agent-loop 而言等同一次正常完成。 - 在
agent/turn-stopping里调用agent.steer(...)推入「拦截提示词」,本轮自行继续(需开启自动继续)。 - 累计拦截次数加一并写回配置;同一段流命中后立即结束,一轮内不会反复截断。
README 示例(思考段被截断后聊天提示):
[深度思考]
先检查服务器状态和崩溃日志。
关键:看最新日志和 crash-reports。
执行。 ← 命中
好。
做。
开始。
做。 ← 同一行出现三次
[复读打断] 已截断 · 第 3 次 · 已自动继续
(聊天里摘要文案可在设置里改,默认含 {count} 等占位符。)
安装与启用¶
要求 DSH / dsh-agent 等 0.1.7 及以上(0.2.x 亦可)。Node 引擎要求 >=20(见 package.json)。
插件市场:在 Harness 的「插件市场」里搜索 dsh-degeneration-guard,一键安装。
命令行(桌面版 PATH 里通常没有 dsh,用 npx):
npx -y @deepseek-ai/dsh@latest plugin --profile desktop add dsh-degeneration-guard
--profile 填你的 profile 名,桌面版默认是 desktop(不确定可看 ~/.dsh/profiles/ 下的目录名)。若 npx 拉起的 CLI 与桌面版不一致导致 profile 不兼容,可改用插件市场安装。
装好后在 设置 → 复读打断 里配置。
设置项¶
| 项 | 默认 | 说明 |
|---|---|---|
| 累计拦截 | 0 | 自上次清零以来的拦截次数,持久保存,插件加载时不归零 |
| 重复次数阈值 | 3 | 同一句在窗口内出现几次才判定复读;2 最敏感,3 最稳 |
| 行内重复检测 | 关 | 关闭时只检测独立段落(跨换行的整行重复) |
| 自动继续 | 开 | 打断后自动把下一步推给模型,不需要手动继续 |
| 拦截提示词 | 见下 | 推给模型的那一段,支持 {count} / {line} |
| 提示摘要 | 复读已打断(第 {count} 次)· 已自动继续 |
聊天里折叠提示的文字,仅用户可见 |
默认拦截提示词:
[拦截复读]
你上一段思考已经出现推理退化,系统已截断。
请直接继续执行下一步,不要再输出任何确认语、寒暄或空话。
{count} 为累计第几次拦截,{line} 为触发拦截的那一行,可写进提示词与摘要。
与 dsh-repeat-guard 的关系¶
两者功能重叠,不要同时启用:同时开会双重拦截,且旧插件每次加载会把计数清零。README 建议只装本插件。
适用场景与注意¶
适合:长时间 agent 任务、模型经常在思考段输出无意义重复短句、希望少手动点「继续」的 DSH 用户。
注意:
- 插件在 当前 dsh 进程权限 下运行,安装前请自行查看 源码仓库 与 MIT 许可证。
- 社区目录 SkillHub 为独立站点,与 DeepSeek / 幻方无官方从属关系;插件由社区作者维护,星标与版本以仓库与目录页为准。
- 敏感任务可把「重复次数阈值」调到 3,或先关「行内重复」观察误报;若仍频繁打断,再微调阈值与提示词。
结尾¶
dsh-degeneration-guard 用滑动窗口在思考段做通用复读检测,打断后可选自动 steer 续跑,并可在设置里改阈值、行内检测与提示文案。需要安装或 issue 时,可看社区目录页与 GitHub:
- 目录页:https://www.skillhub.cn/plugins/bluemika111/dsh-degeneration-guard
- 仓库:https://github.com/bluemika111/dsh-degeneration-guard