dsh-doom-loop-guard:在流式推理里识别 doom loop 并干预

前言

在 DeepSeek Harness(DSH)里跑带推理链的智能体任务时,模型有时会在输出里陷入重复:破折号铺满一行、括号层层嵌套、短句机械复读。这类「doom loop」不一定立刻报错,但会拖长会话、占满上下文,后续步骤也很难纠偏。手工盯流式输出成本高,事后翻日志也难量化某次会话到底卡了多久。

社区插件 dsh-doom-loop-guard(维护者 dixieWithHeart,分类:工作流)在 llm/stream 路径上做实时检测,命中后可只记录、注入提醒、或截断并可选自动续跑,并支持扫描历史会话生成报告。下面介绍其定位、能力、安装与配置要点。

这是什么

dsh-doom-loop-guard 是 DSH 工作流类插件:检测推理输出中的重复循环(doom loop),命中时以 提醒(nudge)、截断(cut) 或 响铃 等方式响应,并可生成历史报告。当前仓库版本为 1.1.0(MIT 许可证)。

与同类现象插件 dsh-loop-rescue 的差异在于检测器不同:文档记载在约 1.4 万条真实推理样本上,本插件召回 100%、loop-rescue 约 60.5%,后者漏检的主要是纯符号填充。两者均包装 llm/stream,若同时启用 cut,可能重复截断,宜二选一。

核心功能

实时检测

插件包装 llm/stream,在流式输出过程中识别:

  • 破折号填充过长
  • 括号嵌套异常
  • 短句重复

检测规则随 防护等级(宽松 / 普通 / 敏感)变化;普通(standard) 为默认校准档。

命中后的处置

模式 行为
observe 只记录,不改动输出
nudge 注入提醒(提醒落在下一步请求,不能当场打断当前流)
cut 截断当前流,并可配合 autoResume 自动续跑

还可配置 生效门槛:仅当上下文占用达到设定百分比后才启用检测(默认 warnAbovePercent 为 0,即全程生效)。

音效与报告

命中时可播放提示音:默认启用内置 assets/loop-alert.mp3,也可通过 soundPath 指定自定义音频。

报告能力会扫描会话存档,给出会话 doom 分与 14 天趋势;扫描范围由 reportDays、reportLimit 等字段控制(默认 7 天、最多 20 条相关范围,以配置表为准)。

防护等级阈值

README 给出的三档示例如下(普通档为默认 preset: standard):

等级 破折号 括号 短句重复 间隔 占比
宽松 1200 300 20 6 8%
普通 800 200 15 8 5%
敏感 500 120 10 12 3%

文档说明:普通档在 1.4 万条真实推理上召回 100%、误报 0。除 preset 外,也可在 patch 中直接写 maxDashRun、maxParenRun、shortSentenceRepeat、maxRepeatGap、shortRepeatRatio 覆盖阈值。

安装与启用

环境要求(来自 README 与 package.json):

  • DSH >= 0.2.1
  • Node >= 22.15(依赖内置 zstd 解压)

面向用户的安装命令如下。将 <profile> 换成你实际使用的 DSH profile 名称:

dsh plugin --profile <profile> add dsh-doom-loop-guard

本地开发插件时,文档提到可用 install_bundle 指向插件目录,此处不展开。

插件以当前 dsh 进程权限 运行;安装前建议浏览仓库源码与 MIT 许可证,确认符合你的安全与合规要求。

配置

配置有两条路径:

  1. 写在 profile 的 cordis.patch.yml(插件 id:dsh-doom-loop-guard)
  2. 在 DSH 设置页修改(会写入 ~/.dsh/dsh-doom-loop-guard.json)

常用字段默认值与含义如下:

字段 默认 说明
preset standard relaxed / standard / sensitive
intervention nudge observe / nudge / cut
warnAbovePercent 0 生效门槛,0 为全程
autoResume true cut 后自动续跑
maxConsecutiveCuts 3 连续截断上限
soundEnabled true 是否播放音效
soundPath '' 自定义音频,留空用内置
reportDays / reportLimit 7 / 20 历史扫描范围

设置页文案支持中文与英文,跟随 DSH「设置 → 常规 → 语言」切换,无需重启。插件清单中的名称与描述由 locale/zh.json、locale/en.json 提供;若宿主缺少 locale 服务,界面退回中文并在控制台输出 warn。

典型用法思路

没有单独的可复制 CLI「演示会话」时,可按下面顺序落地:

  1. 用上述命令把插件装进目标 profile,重启或按 DSH 惯例加载插件。
  2. 先用 intervention: observe 跑一两轮真实任务,确认误报可接受,再改为 nudge 或 cut。
  3. 长上下文任务可将 warnAbovePercent 调高,仅在接近窗口上限时加强干预。
  4. 需要强打断时用 cut,并视任务是否可分段,决定是否保持 autoResume: true 与 maxConsecutiveCuts。
  5. 定期查看报告中的 doom 分与趋势,决定要不要从 standard 调到 sensitive 或放宽到 relaxed。

若已安装 dsh-loop-rescue,请避免两者同时对 llm/stream 做 cut,以免重复截断。

适用场景与边界

适合:

  • 经常在 DSH 里跑长推理、工具链较长的智能体工作流
  • 需要可观测的 doom 指标(报告、趋势),而不只是肉眼盯流
  • 希望用等级或自定义阈值平衡召回与打扰

不适合或需注意:

  • 插件只覆盖 符号崩坏与低信息循环,不包含语义层面的「打转」;语义重复仍需提示词、工具或上层编排处理。
  • nudge 不能当场中断当前流;要即时止损需用 cut。
  • 星标与社区热度不以本文为准;请以 GitHub 与 SkillHub 页面实时信息为准(撰写时仓库星标为 0)。

DSH 生态强调「一切皆插件」;SkillHub 等为社区目录,与 DeepSeek / 幻方无官方从属关系,本文仅作技术介绍,不代表官方背书。

结尾

dsh-doom-loop-guard 把 doom loop 检测接到 llm/stream 上,用可配置的观察、提醒或截断减轻重复输出对上下文和工时的消耗,并用报告把单次会话与短期趋势摊开。若你在同类插件之间选择,可按文档中的召回差异与 cut 互斥说明,与 dsh-loop-rescue 二选一搭配。

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

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

小夜