前言¶
在 DeepSeek Harness(DSH)里跑 agent 时,模型偶发会在同一回合里反复输出相同片段,或按「第 N 步」换数字假进度。这类跑飞回合会持续消耗 token,且已输出的内容无法撤回。常见做法是人工盯着对话区手动停掉,或事后从日志里筛。下面介绍维护者 XiaoSHang05 发布的独立插件 dsh-rice-guard(README 中称「米饭守卫」):它不生成任何模型文本,只订阅当前回合的思考流与正式输出流,在检测到重复模式时报警,并可选自动取消该回合。
这是什么¶
dsh-rice-guard 是 DSH 的工作流类插件:被动监视 agent/assistant-stream 的实时增量,命中规则后可通过宿主调用 agent.cancel 做回合级止损。无需群聊插件;功能坞桥接可用时会注册入口,不可用仍可走监控页与全局浮层报警。
仓库:https://github.com/XiaoSHang05/dsh-rice-guard
许可证:MIT(见仓库 LICENSE)。
核心功能¶
插件自身不产字,检测在尾部窗口内增量进行。默认同时监视全部会话的思考流与输出流;可在监控页全局开关,或对单个会话暂停/恢复。
四条检测规则按固定顺序评估,先命中者生效:周期重复 → 自定义短语 → 编号循环 → 重复行密度。
- 周期重复:在尾部窗口寻找连续相同片段;「重复次数」默认 5,控制连续周期重复阈值。
- 自定义短语(默认关闭):在监控页开启并一行一句填写最怕复读的句子(每句至少两字),在短跨度内出现
customRepeat(默认 5)次即报警;长文里正常引用不会误触。 - 编号循环:识别「同一句式、每行只换一个数字」的假进度;默认连续 ≥12 行同句式且字母占字母加数字的比例 ≥60%。可用
structLines: 0关闭,或调高行数阈值。 - 重复行密度:归一化行首尾与连续空白后比较相同行;「重复行占比」默认最近 8 行中 75% 为已出现行。调高「重复次数」不会关闭本条,需同时改占比。
命中后展示会话、流、重复片段、次数与打断状态。报警卡片需点击「知道了」才关闭;提示音走 WebAudio,浏览器可能要求先与页面交互。同一流在同一请求中只报告一次。
行为开关(配置或监控页):
cancel: false:只报警,不自动打断。alarm: false:不显示报警卡片。sound: false:关闭提示音。
打断实现为回合级取消,已输出字符无法收回;keepInbox: true 保留排队输入,不等于撤销已执行的工具操作。
安装与启用¶
README 写明兼容当前验证的 DSH 0.2.0-rc.2;包声明 peer 范围为 >=0.2.0-0 <0.3.0。宿主需提供 webServer、agent 运行时,以及 @deepseek-ai/schemastery ^3.18.1。
在包含 README 与 package.json 的插件目录中,本地链接安装:
dsh plugin --profile desktop add "link:$($PWD.Path)"
从 GitHub 安装(无需 clone):
dsh plugin --profile desktop add "github:XiaoSHang05/dsh-rice-guard"
安装或更新宿主代码后重启 DSH,再刷新网页。对话区会出现「监控」标签页;报警挂在全局浮层。若本机曾登记旧目录链接,请先在插件管理器处理旧链接再装交付目录,避免同名插件混用。安装走 DSH 包流程;若 profile 其他依赖触发供应链限制,安装可能失败——不要为本插件放宽整个 profile 的安全策略,按失败信息处理对应依赖。
典型用法¶
- 安装并重启 DSH 后,打开对话区「监控」标签页。
- 确认「启用监控」为开;按需调整「重复次数」「重复行占比」「编号循环占比」。
- 若已知模型常卡在某几句,打开自定义短语开关并逐行填写句子。
- 某会话临时不需要盯防时,在会话行暂停监控;需要全局静默时可设
cancel: false仅保留报警。
监控页修改会立即生效,并尽力通过宿主 Settings 持久化;Settings 不可用或写入失败时,配置仅保存在内存。会话级暂停名单与命中历史为内存数据,重启后清空;历史最多 50 条,界面默认展示最新 20 条。
HTTP 读写位于 /dsh-rice-guard/api/(如 health、state、config、monitor、hits、events);SSE 仅通知重新读取,状态以 GET state 为准。
配置要点¶
| 配置键 | 默认值 | 含义 |
|---|---|---|
| enabled | true | 全局监控开关 |
| minRepeat | 5 | 连续周期重复阈值 |
| minUnit / maxUnit | 6 / 1024 | 搜索周期长度范围 |
| windowChars | 8192 | 各流保留的尾部窗口 |
| densityLines / densityRatio | 8 / 0.75 | 重复行窗口与占比 |
| structLines / structShare | 12 / 0.6 | 编号循环行数与字母占比 |
| customPhrases | [] |
自定义短语,空数组即关闭 |
| customRepeat | 5 | 自定义短语命中次数 |
| cancel / alarm / sound | true | 自动打断、报警卡片、提示音 |
| scopeDefault | all | 默认监控全部会话 |
checkEvery=32 为内部扫描步长,不是宿主 HTTP 配置字段。
适用场景与注意¶
适合:长时间 unattended 跑 agent、担心思考流或输出流复读/编号循环刷字的 DSH 桌面 profile 用户。
边界(README 明示的取舍):很长的正常枚举(例如多行 port xxxx is listening)可能与编号循环在语法上重叠,可能触发报警;不认同时可关闭编号循环或调高阈值。单字符刷屏、超出窗口/周期长度的重复可能漏检;插件加载前的输出无法回溯。正常文章里故意大量重复也可能被打断,可按场景暂停监控或改为只报警。
安全:插件以当前 DSH 进程权限运行,安装前请阅读源码与 MIT 许可证,确认接受其订阅全局 assistant 流并在命中时调用 cancel 的行为。接口使用宿主 Web 的认证边界,不额外提供公网认证。
社区目录站点 skillhub.cn 与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,本插件为社区独立交付。
结尾¶
dsh-rice-guard 把重复输出检测做成零 token 开销的旁路看门狗:思考与输出双流、四条互补规则、可选自动 cancel 与可关闭的报警。需要细节、验证记录与开发说明时,请直接查阅仓库 README、CONTRACT.md 与 VALIDATION.md。