DeepSeek Harness (DSH) 实时重复输出守卫

前言

DeepSeek Harness (DSH) 是面向大模型推理的插件化框架。在开发或使用过程中,模型有时会陷入“复读”状态,即连续输出相同的字符串或段落。这不仅浪费 Token,还会污染会话上下文。

dsh-dupguard 是一个 DSH 实时重复输出守卫插件,用于在模型生成流中实时检测重复内容,一旦检测到同一字符串连续重复达到阈值,立即停止本次生成。

是什么

名称:zqh260619/dsh-dupguard

定位:模型推理插件,解决大模型输出中的循环复读问题。

核心能力:
- 实时监测:在流式输出过程中逐增量检测。
- 精准截停:当同一字符串在输出中连续重复 ≥ 10 次时(默认值),立即中断生成流。
- 兼容性:支持 DSH 动态插件与 npm 常驻版双入口交付。

安装与启用

安装前请确保环境满足以下要求:
- DSH 版本 ≥ 0.1.2-rc.1(宿主 API 下限为 ≥ 0.1.1-rc.1)
- Node.js 版本 ≥ 20

执行以下命令安装插件(示例使用 web profile,请替换为你的实际 profile 名称):

dsh plugin --profile web add dsh-dupguard

安装后需要重启 DSH 才能生效,因为宿主代码只在进程启动时加载。

安装成功的判断标准:
1. 设置页新增“重复守卫”分节。
2. 宿主日志中出现 [dupguard] 生效参数:…(以日志为准)。

核心功能

检测机制

  • 逐增量检测:每个 text-delta 到达时即触发判定,命中即停止。
  • 复读形态:支持单字符、词语、带空格/换行分隔的字符串、逐行重复等多种形态。

代码区域放宽

默认情况下,代码区域(包括围栏代码块、行内代码、缩进代码块)的检测阈值会放宽至默认值的 3 倍。这防止了正常代码编写或测试夹具中的字符重复被误判。

思考守卫

默认开启对 reasoning(思考)文本的检测。如果模型在思考过程中陷入循环,也会被立即截停。可在设置中通过 monitorReasoning: false 关闭。

截停通知

插件提供全局通知功能。无论用户当前打开哪个会话,截停发生时都会弹出通知,显示重复的字符串和重复次数,并提供“继续”或“不发送”的选项。

配置与设置

通过设置页可调整参数,改完无需重启,配置会写回 cordis.patch.yml 并由宿主热读取。

默认配置

  • 触发阈值:默认连续重复 ≥ 10 次。
  • 代码倍数:代码区域倍数默认为 3。

检测范围

  • 忽略白名单:支持忽略特定字符(如 Markdown 表格分隔符 - |)和特定字符串片段。
  • 工具参数:默认不检测工具调用参数(monitorToolArguments: false)。

分段表模式(实验性)

设置页支持分段表模式,限制为 1-16 行,用于根据输出单元长度动态设置不同的重复次数阈值。

注意事项与限制

  • 版本依赖:插件依赖 DSH >= 0.1.2-rc.1 和 Node >= 20。
  • 已知缺陷:fixStandingMountConflict 默认开启,但在 DSH 0.1.1-rc.1 和 0.1.2-rc.1 版本上实测存在缺陷。
  • 通知机制:截停通知是全局通知,与当前打开的会话无关。
  • 配置演进:配置键从 1.0.0 版本起只增不减,配置项取值范围只会放宽,不会收缩。
  • 实验性功能:advancedThresholdFile 为实验性功能。

总结

dsh-dupguard 通过在 DSH 流式输出中增加一层实时检测,有效防止模型陷入无意义的复读循环。其默认的宽松代码检测策略和全局通知机制,使其在开发调试和生产环境中都能保持较高的实用性。

GitHub 仓库

羽毛球分组比赛记分
小程序二维码

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

小夜