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 的情況,確保每一輪交互都在可控範圍內。