unknowbug/dsh-thinking-loop-guard ↗★ 0
@dsh-external/dsh-thinking-loop-guard
Detect thinking-chain loops at agent/turn-stopping and steer to break them (DSH plugin, no proxy)
安装
此插件尚未提供可验证的 bundle,或兼容性检查未通过。请先阅读仓库说明。 阅读完整 README ↗
说明文档
阅读完整 README ↗检测规则(全部可配置)
| 规则 | 默认 | 说明 |
|---|---|---|
| reasoning 重复 | repeat_span_min=24 | 剥离标点后主体 ≥5 字符、重复串 ≥24 字符 |
| 变体重复 | 同句 ≥3 次 | "继续分析!…继续分析?…继续分析。" |
| 长程块重复 | block_repeat_min=100, count=3 | 归一化后 100 字符窗口出现 ≥3 次(抓"大块分析反复重算"循环) |
| reasoning 空转 | max_reasoning_sec=60 | 思考阶段无可见内容超时 |
| reasoning 溢出 | reasoning_char_limit=20000 | reasoning 字符量超限 |
| 内容重复 | content_repeat_span_min=100 | 可见 content 重复 |
| 总超时 | max_total_sec=120 | 单 turn 总时长上限 |
| 重试 | max_retries=2 | 逐级升级干预 |
长程块重复是参考项目没有的规则:真实死循环常表现为"一大段分析文本整体重复多次, 块之间有不同内容"(如反复重算同一问题)。参考项目的紧循环正则(连续重复 / 带标点变体) 抓不到这种,故新增:把 reasoning 归一化(去标点空白)后,滑动 100 字符窗口,任一窗口出现 ≥3 次即判循环。
tests/real_loop.txt是真实循环样本,已纳入测试。
配置
thinking-loop-guard:
enabled: true
max_reasoning_sec: 60
max_total_sec: 120
max_retries: 2
reasoning_char_limit: 20000
repeat_span_min: 24
content_repeat_span_min: 100
block_repeat_min: 100
block_repeat_count: 3
intervention: "检测到重复推理,请停止循环,直接给出最终答案。"
escalation_reasoning_effort: "low" # 升级时降到该档位(思维链仍开启)