dsh-loop-breaker: DSH 流式复读熔断器

DSH(DeepSeek Harness)是一个插件化平台。在实际开发中,模型有时会出现 “退化复读” 的现象:思考链或正文反复输出同一小段内容(如 “好的”、”好的,执行”、”好”),且长时间不产出有效结果,导致 token 白白烧掉。

现有的社区方案(如 dsh-thinking-loop-guard)通常挂在 agent/turn-stopping 上,只在回合边界检测完整输出。这存在一个明显缺陷:回合边界 = 这一轮的 token 已经烧完了。它能阻止循环蔓延到下一轮,却救不回正在烧的那一轮。

dsh-loop-breaker 挂载在 DSH 的 llm/stream 瀑布事件上。通过逐块统计 reasoning 和 text,它能在流式输出过程中实时检测复读形态,命中后当场取消底层 HTTP 请求(停止计费),并注入补救提示让模型重新作答,同时通过 L0 消毒机制防止复读原文污染会话历史。

核心功能

  • 流式拦截:挂载在 llm/stream 事件,在流式输出层进行检测。
  • 多形态检测:支持检测碎片周期循环(如 “做。→执行。→好。”)、字符塌缩、句子回收、16-gram 回收及短句冗余。
  • 熔断计费:命中规则后,适配器生成器执行 consumer.abort(),底层 HTTP 请求立即取消,停止 token 计费。
  • 补救机制:注入补救提示引导模型重新作答。
  • L0 消毒:写回会话历史时,保留开头部分,其余替换为占位符,防止复读原文污染后续生成。
  • 工具块推迟:检测到非 text/reasoning 的工具调用块未关闭时,推迟熔断,避免误杀。

安装

在终端中执行以下命令:

git clone https://github.com/CHIP-PHILO-GH/dsh-loop-breaker
cd dsh-loop-breaker
pwsh -File install.ps1

install.ps1 是幂等的,可重复执行。默认安装路径为 $env:DSH_HOME\profiles\node_modules\dsh-loop-breaker。改动配置后需重启 dsh web 生效。

注意:使用 Windows PowerShell 5.1 跑 install.ps1 可能因中文编码报错,建议使用 PowerShell 7 (pwsh)。

配置

在 DSH 的配置文件中添加以下片段(示例):

- id: loop-breaker
  name: 'dsh-loop-breaker'
  config:
    enabled: true                # 总开关
    recover: true                # 命中后是否注入补救提示
    maxRecoveriesPerTurn: 2      # 同一轮最多补救次数
    nudge: ''                    # 补救提示文本,留空使用内置文案

    # --- L0 消毒 ---
    sanitize: true               # 是否改写正文
    sanitizeHeadChars: 240       # 保留原文开头的字数(0=全丢)
    degradePlaceholder: ''       # 替换复读原文的占位符

    # --- 检测阈值 ---
    windowChars: 1600            # 滚动统计窗口
    periodMax: 48                # 短周期检测最大周期
    periodMatch: 0.92            # 短周期自吻合率阈值
    periodMaxPieces: 6           # 窗口内片段种类上限
    collapseUniqueRatio: 0.10    # 去重字符占比阈值
    sentRecycle: 0.80            # 句子回收率阈值
    gramRecycle16: 0.80          # 16-gram 回收率阈值
    tightRedundancy: 0.90        # 窗口字面冗余度阈值
    maxChars: 200000             # 单次输出硬上限
    maxReasoningChars: 120000    # 单次思考链硬上限

测试

插件提供了回归测试和集成测试脚本。

  • 回归测试:验证核心检测逻辑。
    node test.mjs
  • 集成测试:在装了 DSH 的环境里运行,验证流协议合法性、熔断和消毒逻辑。
    node tests/guard.test.mjs

适用场景与注意事项

  • 主要针对:紧邻的短周期复读(如 “做。→执行。→好。”)。此类复读通常由少量短碎片连续拼装而成。
  • 已知边界:长间隔重复、较短英文周期、或长度不足的样本可能漏检;正常的长技术报告、含大量近似函数的代码等正常长输出可能因结构性重复而误杀。
  • 环境依赖:
    • 需要 Node.js >= 18。
    • 需要宿主环境提供 @deepseek-ai/dsh-llm 和 @deepseek-ai/schemastery。
    • 使用前请检查源码与许可证(MIT)。

插件通过在流式传输中即时切断无效生成,避免了类似 Ollama 报告中失控跑 31M token 的情况,确保每一轮交互都在可控范围内。

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

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

小夜