前言¶
在 DeepSeek Harness(DSH)里跑本地或小模型时,输出有时会卡在字面重复(例如连续 ssssss...)或语义上的「反复分析同一段推理」。常见的循环防护只是在检测到后截断并结束本轮,任务往往就此中断,需要人工新开对话或重试。
dsh-loop-recover 面向同一类问题,但把处理做成一条完整的救援链:流式检测 → 剪掉重复后缀 → 用 checkpoint 摘要替换被污染的上下文 → 在同一 agent 循环里自动 followup 续跑,不新建 session、不重启应用。下面介绍它的定位、能力与安装配置要点。
这是什么¶
维护者为 GitHub 用户 terry2010,仓库 terry2010/dsh-loop-recover,在 SkillHub 插件目录中归类为工作流。插件简介(英文原文):A guard for DeepSeek Harness: stops model repeat loops mid-stream, prunes and compacts context, then resumes the task.
当前 npm 包版本为 0.3.4(见仓库 package.json),许可证 MIT,可在插件页 GUI 配置,无需手写 YAML。
核心功能¶
README 将能力概括为四步,且都在同一次 agent 循环内完成:
- Detect(检测) — 五层检测器:周期性、n-gram、锚点、字符连续段、句子池,并有意图层面的 tool-query 跟踪。
- Prune(剪枝) — 在流式输出中途切掉重复后缀,并留一行 marker,让模型知道有一段内容被移除。
- Compact(压缩) — 用 checkpoint 摘要替换「中毒」上下文(v4
compaction/*事务),避免模型沿同一路推理再跑一遍。 - Resume(续跑) — 对同一任务自动 followup,并刷新采样参数;不新开 session、不重启。
挂钩范围:仅包装 agent 调用的 llm/stream;标题/摘要等非 agent 请求原样透传。
安装与启用¶
推荐在 DSH 桌面端通过界面安装;也可用 CLI(命令来自官方 README)。
GUI:
打开 Plugins → Add plugin,搜索 dsh-loop-recover,点击 Install。
CLI:
dsh plugin --profile desktop add dsh-loop-recover
# then restart the app
安装后需重启应用。运行环境要求 Node >= 22.18.0(见 package.json 的 engines)。
配置与典型用法¶
配置项在插件页面编辑,共约 32 个字段,分组为 Basics / Rescue / Resume / Intent / Detection / Detector (Advanced)。README 摘录的关键项如下。
| 分组 | 主要字段 |
|---|---|
| Basics | mode、watch、language、keepLanguage、marker、debugLog |
| Rescue | maxConsecutiveRescues、compactOnRescue、stallCalls |
| Resume | retryTemperature、retryReasoningEffort、retryRequests |
| Intent | intentEnabled、intentNoveltyThreshold、intentConfirmCount |
运行模式(mode):
rescue(默认):剪枝 + 压缩 + 续跑。cut:仅剪枝,不续跑。observe:只记录日志、不干预;适合先在真实 workload 上观察阈值再开救援。
典型工作流:新装插件时先用 observe 看检测是否误报,确认后再改为 rescue。若只需截断重复、不需要自动续跑,可用 cut。
处理链路(README 示意):
llm/stream (agent calls only)
↓ StreamLoopDetector — watches reasoning & text blocks
loop hit → cut repeated suffix → rewrite block-end → finish: stop
↓ commitLoopCompaction — v4 transaction, old context → checkpoint
↓ followup() — resume same task, fresh sampling params
适用场景与注意¶
适合谁: 经常在 DSH 里用较小本地模型(README 举例 Ornith、部分 Qwen 变体等)做长任务,且遇到过 token 或推理死循环、希望任务能在原会话内继续的开发者。
与其它 loop 类插件不要叠用(README 明确说明会冲突):
| 插件 | 作用 | 冲突原因 |
|---|---|---|
dsh-agent-loop-guard |
检测到循环即截断并结束 turn | 二者都包装 llm/stream,可能双重截断、状态混乱 |
dsh-client-auto-continue |
中断后自动继续 | 可能触发两次互相矛盾的续跑 |
dsh-session-shift |
上下文压力 compaction 并切新 session | 与 rescue 的 compaction 重叠 |
使用本插件时,应禁用上述插件。
安全与权限: 插件在当前 DSH 进程权限下运行,会改写流式输出与会话上下文;安装前建议阅读仓库源码与 MIT 许可证及 NOTICE 中的上游归属说明。
社区目录页:SkillHub — terry2010/dsh-loop-recover。DSH 生态强调「一切皆插件」;SkillHub 为社区站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-loop-recover 把「发现循环」从单纯的停轮,扩展为剪枝、v4 压缩与原地续跑,适合作为工作流类防护插件与 observe 模式联调阈值。更多细节见 GitHub 仓库(含 中文 README)。