前言¶
在 DeepSeek Harness(DSH)裏做長會話時,模型有時會在 reasoning 階段陷入重複:同一句、同一個詞或同一句式反覆出現幾百遍。更麻煩的是,DSH 會把歷史 thinking 原樣發回給模型——一段已經退化的思考會變成下一輪的「範例」,越滾越大,直到整輪幾乎沒有有效產出。
事後刪消息或改提示詞只能部分緩解;需要在 流式接收 reasoning 時 就識別打轉,並把 寫回上下文的那份 換成截斷版,否則下一輪仍會被回灌。下面介紹社區插件 dsh-no-loop-plugin,由維護者 54nanmiao 發佈,分類爲模型推理,在 llm/stream 上掛接檢測與截斷邏輯。
這是什麼¶
dsh-no-loop-plugin 是 DSH 的防循環插件:在 token 流裏檢測重複或自指打轉的 reasoning,命中後丟棄後續 reasoning delta,並把該塊的 block-end 換成截斷版本再落盤,避免退化思考進入下一輪上下文。它不修改正文輸出與工具調用;內部異常時退回原樣透傳。
當前 npm 包版本爲 0.2.0(見倉庫 package.json),許可證 MIT,Node 要求 >=22.13.0。
核心功能¶
流式守衛¶
插件掛在 llm/stream 上,邊收 reasoning-delta 邊判定:
- 命中:丟掉後續 reasoning delta(界面不再刷屏),並把
block-end換成截斷版——落盤內容決定下一輪是否被回灌,這一步比「不刷屏」更重要。 - 未命中:原樣透傳,不做字節級修改。
判定與分檔¶
檢測爲文本啓發式,閾值集中在 detector.mjs 的 CONFIG。默認按 reasoning 塊字數分 嚴格檔(長 reasoning) 與 聊天檔(短回覆):短回覆放寬閾值,降低誤殺。規則涉及週期、單字遊程、句尾、回收率(recycle)、儀式串(ritual)、碎片(frag)、塌縮(collapse)、尾句同構等;代碼塊、表格、hex 串、key=value 日誌行等結構化內容會快速放行。
界面 靈敏度 提供寬鬆 / 標準 / 嚴格三檔,只調整「多容易算打轉」的四個閾值(標準檔示例:回收率 ≥0.85、儀式串 ≥12 等,詳見 README 表格)。
配置與 HTTP 接口¶
可調項在 DSH 設置 → 防循環 中修改,保存後寫入 ~/.dsh/no-loop.json。也可直接編輯該 JSON,例如:
{
"streamGuard": true,
"rule": true,
"sensitivity": "normal",
"minProbe": 80,
"probeStep": 40,
"probeTail": 4000,
"chatMax": 1200
}
宿主提供:GET /plugins/dsh-no-loop-plugin/state(配置、命中統計、日誌路徑);GET|POST /plugins/dsh-no-loop-plugin/config(讀寫上述 JSON,非法值會被鉗到範圍內)。
主要配置項含義(默認值見上表):
| 項 | 作用 |
|---|---|
| 流中熔斷(streamGuard) | 關閉後僅保留 loop__check 工具與提示詞紀律 |
| 提示詞紀律(rule) | 向系統提示詞加入「發現重複 → 換說法/收尾」類約束(改此項需重啓 DSH) |
| 靈敏度 | 寬鬆 / 標準 / 嚴格 |
| 開始判定的字數(minProbe) | 攢夠字數後纔開始判 |
| 判定間隔(probeStep) | 之後每隔多少字再判一次 |
| 只看尾部多少字(probeTail) | 判定窗口 |
| 聊天檔上限(chatMax) | 整塊低於該字數時按聊天檔放寬閾值 |
工具與留痕¶
安裝後模型可使用:
loop__check({text, mode}):自查文本是否打轉;mode:'truncate'可得到截斷版。loop__reset():清零本會話的打轉計數。
命中時寫入插件目錄下(可通過環境變量 NO_LOOP_DATA_DIR 改路徑):
data/halt.log(JSONL,超過 5 MB 輪轉爲halt.log.1)data/samples/<時間>_<會話尾號>_b<塊>.txt(命中原始思考)
不想留痕可定期刪除 data/,或關閉 streamGuard。
安裝與啓用¶
先通過 DSH 官方 profile 安裝(命令來自倉庫 README):
dsh plugin --profile web add dsh-no-loop-plugin
安裝完成後 重啓 DSH 纔會掛載插件。
已知問題與 README 中 dsh-peak-reminder 同源:
- 桌面版自帶 pnpm 但可能不在 PATH,會報
'pnpm' is not recognized,需把 pnpm 加入 PATH 後再執行add。 - pnpm 11 的
minimumReleaseAge可能擋住剛發佈版本;若要立即安裝 0.2.0,可顯式指定:
dsh plugin --profile web add dsh-no-loop-plugin@0.2.0
典型用法¶
- 按上一節安裝並重啓 DSH。
- 打開 設置 → 防循環,按需調整流中熔斷、靈敏度、探測字數等,點保存。
- 長會話中若 reasoning 開始刷屏式重複,插件應在流中截斷;側邊欄可查看當日命中次數與檔位。
- 若需模型主動自檢,可在對話中依賴
loop__check/loop__reset(由插件註冊)。 - 調閾值前,維護者建議在本地查看
data/halt.log與data/samples/,或用node eval-guard.mjs按理由分層評估誤殺風險(開發腳本,見 README)。
適用場景與注意¶
適合誰: 在 DSH 中頻繁使用帶 reasoning 的模型、且遇到過 thinking 復讀導致上下文膨脹的開發者。
邊界:
- 這是文本啓發式,不是形式化證明;誤殺表現爲正常但句式重複的思考被截斷,正文仍會生成。疑誤殺可關
streamGuard並將樣本反饋給維護者。 - 僅作用於 reasoning;正文裏的復讀不在範圍內。
- 插件是兜底,提示詞裏明確「做完一步就換句式」比事後截斷更治本。
安全: 插件以當前 DSH 進程權限運行;安裝前請在 GitHub 閱讀源碼與 MIT 許可證,確認符合你的環境策略。DSH 社區插件目錄(SkillHub 等)爲獨立生態站點,與 DeepSeek / 幻方無官方從屬關係。