dsh-reasoning-loop-guard:检测 DSH 推理循环

前言

DeepSeek Harness (DSH) 在处理长链推理时,偶尔会出现模型已完成思考,却卡在「准备输出」阶段反复空转的情况。这种静默卡死会消耗大量算力与字符数,直到用户手动停止。

dsh-reasoning-loop-guard 插件挂在 llm/stream 钩子上,通过测量流式推理文本,评估五条判据。一旦命中循环特征,它会立即停止向上游拉取数据,并返回终止块,将静默故障转化为可见的错误信息。

插件介绍

名称:himi-li/dsh-reasoning-loop-guard
所有者:himi-li
类别:模型推理
许可证:MIT

本插件专注于检测并提前中断 DSH 中的推理复读,提供火警日志和 reasoning_loop_log 工具,支持恢复功能与 GUI 面板。

安装

本包尚未发布到 npm,需从 GitHub 源码安装。DSH 按 profile 隔离,桌面版使用 desktop,网页版使用 web。

  1. 桌面版:必须使用 DSH Desktop 内置命令运行时,且需先启动应用初始化。
  2. 网页版:任意 dsh CLI 均可,web profile 不存在时会自动初始化。
# 桌面版
dsh plugin --profile desktop add github:himi-li/dsh-reasoning-loop-guard

# 网页版
dsh plugin --profile web add github:himi-li/dsh-reasoning-loop-guard

安装后需重启 DSH 进程,而非仅刷新页面。

配置与启用

安装后,在 profile 的 cordis.patch.yml 中启用并配置参数:

- insert:
    - id: reasoning-loop-guard
      name: dsh-reasoning-loop-guard
      config:
        enabled: true
        # 判据阈值配置
        minUnits: 4                # periodic-run:连续重复单元数
        kgramThreshold: 12         # kgram-repeat:尾部 k-gram 的出现次数
        lineCount: 3               # line-repeat:重复行出现次数
        lineShare: 0.1             # line-repeat:重复行占窗口的最低比例
        blockCount: 4              # block-repeat:同一块的重复次数
        fillerRun: 400             # filler-run:末尾连续装饰字符数
        minChars: 800              # 低于这么多字符不做判定
        every: 200                 # 每 N 个字符评估一次
        failureCode: REASONING_LOOP_GUARD

        # 日志配置
        journal: true
        journalPath: ""            # 默认:$DSH_HOME/dsh-reasoning-loop-guard/fires.jsonl
        journalMaxBytes: 524288
        journalPreviewChars: 120
        logTool: true              # 注册 reasoning_loop_log 工具

工作原理

插件每 every 个字符在滚动缓冲区上评估五条判据:

  1. periodic-run:缓冲区尾部存在 ≥ minUnits 个连续相同的单元。
  2. block-repeat:同一 blockMin 字符的块在窗口内出现 ≥ blockCount 次。
  3. line-repeat:同一散文行(≥ lineMin 字符)出现 ≥ lineCount 次,且占窗口比例 ≥ lineShare。
  4. kgram-repeat:末尾 kgram 个字符在窗口内出现 ≥ kgramThreshold 次。
  5. filler-run:原始文本末尾连续 ≥ fillerRun 个装饰字符。

五条判据是析取关系,任意一条命中即触发中断。插件只测量 reasoning-delta,不测量 text-delta 或 block-end,以避免误杀正常的长输出(如表格、代码)。

功能特性

  • 检测与中断:检测推理循环并提前切断,返回终止块。
  • 零依赖 Cordis 插件:独立运行。
  • 火警日志:记录触发情况的 JSONL 文件。
  • 工具支持:注册 reasoning_loop_log 工具。
  • 恢复功能:提供中断后的恢复能力。
  • GUI 面板:提供可视化界面。

注意事项

  • 本插件不测量 text-delta,不测量 block-end。
  • 不报告代码行、标记或 diff 行认定为代码。
  • 装饰(如分隔线)不是复读,但持续输出装饰会触发兜底规则。
  • 桌面版必须使用 DSH Desktop 内置命令运行时。
羽毛球分组比赛记分
小程序二维码

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

小夜