dsh-guard-degen:在模型邊界攔截退化符號流

前言

在 DeepSeek Harness(DSH)裏跑智能體時,模型偶發會把推理或正文退化成 endless 的符號重複:單字符連寫,或整塊多字符單元反覆出現。這類輸出會寫進會話歸檔,也可能通過寫文件類工具落進倉庫;會話一旦被污染,繼續對話往往只會續寫同一條流,而文件裏的污染還會帶到下一次會話。

單靠換模型或手動刪文件,很難在「流式輸出到達 UI 之前」就截斷,也缺少統一的掃描與修復入口。社區插件 dsh-guard-degen(維護者 chunqing286,分類 admin-security)面向上述問題:在模型邊界做流 containment,對寫入做校驗,並提供工件與會話的掃描、預覽與修復能力。DSH 生態裏插件各自獨立;目錄站點 SkillHub 插件頁 與 GitHub 倉庫並不等同於 DeepSeek / 幻方官方應用商店。

這是什麼

dsh-guard-degen 是 DeepSeek Harness 的退化守衛(Degeneration guard):攔截失控符號流,並附帶修復被污染工件與會話的工具鏈。npm 包名與倉庫名均爲 dsh-guard-degen,當前 README 與 package.json 所示版本爲 0.1.1,許可證 MIT,要求宿主 DSH 版本 >=0.1.6-alpha.2 <0.3.0-0。

README 說明,在其測量中,此類退化在 MiniMax 系列模型上較爲集中;檢測規則針對的是符號 run(連續重複),而非單個合法標點,以避免把倉庫里正常的 ★ 等標記誤判爲退化。

核心功能

插件 README 歸納了四塊能力,下面按同一順序說明。

1. 流 containment(Stream containment)

在輸出到達 UI 之前檢測符號 run,並按策略截斷、摺疊或刪除。推理通道(reasoning)與文本通道(text)可分別配置,策略共四種:

策略 對退化 run 的處理
off 不檢測、不改動
truncate(默認) 截斷該通道,本輪以 degeneration 錯誤結束
sanitize 摺疊爲標記 〔退化符號流×N〕,本輪繼續
remove 整段刪除,不在流中留標記;刪除內容仍記入 verdict 日誌

除單符號 run 外,插件還支持多字符單元整段重複(例如 ⇒⇒§ 塊反覆出現)。stream.unitRun / stream.unitRepeats(默認開啓 / 4)僅作用於流守衛;工件修復、工具守衛、會話遮蔽各有獨立開關與閾值,互不影響。

2. 寫入校驗(Write verification)

寫類型工具執行後,插件可回讀文件:若發現污染,則阻止結果並把發現反饋給模型。對應配置項 postExecute.enabled 默認爲 false(開啓會產生 IO 成本);postExecute.roots 爲空時限定在工作區內。

3. 重試與換模型(Retry and model switch)

請求失敗時可按策略重試:retry.policy 默認 same-model,retry.maxSameModelRetries 默認 1;retry.switchModel.enabled 默認 false,啓用後可切換到你在配置裏顯式指定的模型。

4. 工件與會話清理(Artifact and session cleanup)

掃描工作區與會話歷史,生成報告;默認 僅預覽(artifacts.apply 爲 false),勾選條目後可 preview repair,界面以紅/綠 diff 展示修復前後,確認後再寫入。

會話遮蔽有兩種內容模式:Collapse(〔退化內容已遮蔽×N〕)與 Remove(默認,刪除 run 且不佔位)。落地方式可選寫入副本或原地改寫歸檔(默認 sessions.mode 爲 replace)。工具調用參數在遮蔽時保持字節一致,README 說明約 24% 落在 tool 參數內的污染符號會刻意保留,以免破壞配對。

安裝完成後,Settings 會出現 Degeneration guard(與 Plugins 同級),下設 Config、Logs、Artifacts 三個獨立頁面:配置表單、verdict 日誌(含 session 過濾與誤報反饋)、工件/會話掃描與修復。當前會話視圖行中另有 Degeneration guard 視圖,範圍限定爲當前會話的工作目錄與會話本身。

安裝與啓用

包已發佈到 npm,推薦一條命令安裝(將 <your profile> 換成宿主實際使用的 profile;dsh web 常用 web,桌面端 profile 名可能不同):

dsh plugin --profile <your profile> add dsh-guard-degen

也可從倉庫安裝:

dsh plugin --profile <your profile> add github:chunqing286/dsh-guard-degen

或在 UI:Plugins → Discover,添加索引源 https://cdn.jsdelivr.net/npm/dsh-plugin-catalog/index.json,搜索 “degeneration guard” 後 Install。

無論哪種方式,包內 cordis.patch.yml 會作爲 bundle 層一併應用;宿主重載後 Settings 中即可看到 Degeneration guard。

手動安裝時,可向 $DSH_HOME/profiles/<profile>/cordis.patch.yml 追加 insert 塊,或在 profile manifest 裏通過 bundles 與 dependencies 引用包名;相對路徑安裝需自行滿足 @deepseek-ai/dsh-typert-protocol、@deepseek-ai/schemastery 等運行時依賴,npm 安裝會自動拉取。

典型用法

設置頁

  1. 打開 Settings → Degeneration guard → Config,確認 enabled(默認 true)及 stream.reasoning / stream.text 策略是否符合預期。
  2. 若只需對部分模型啓用守衛,配置 modelIncludes(空數組表示全部模型)。
  3. 在 Logs 中按 session 篩選 verdict,查看觸發的規則與紅/綠 diff;誤報可使用頁面內的 false-positive 反饋,或命令 /degen-ack 將最新 verdict 記爲誤報並放寬該規則一步。

斜槓命令

README 列出以下命令(在 DSH 會話或宿主支持的入口中使用):

命令 作用
/degen-status 守衛狀態、規則表、近期 verdict
/degen-scan [paths…] 只讀掃描工件(默認工作區)
/degen-fix <file…> 修復指定文件(改寫前備份)
/degen-clean 遮蔽當前會話中的退化內容(默認原地改寫歸檔)
/degen-ack 將最新 verdict 記爲誤報並放寬規則

工件與會話修復流程

  1. 進入 Artifacts 或會話內的 Degeneration guard 視圖,執行掃描。
  2. 勾選需要處理的文件或會話,選擇遮蔽/修復模式,點擊 preview(repair 或 masking)。
  3. 確認紅/綠 diff 無誤後,再執行 apply;默認 preview 階段不會寫盤。

運行時修改的配置會寫入 ~/.dsh/guard-degen/config.json,疊在 profile 配置之上。常用鍵包括:toolGuard.mode(默認 warn)、artifacts.mode(默認 remove)、sessions.maskMode(默認 remove)、logging.enabled(默認 true)。完整表格見 GitHub README 的 Configuration 節。

適用場景與注意

適合誰: 長期在 DSH 裏接多模型、且遇到過推理/正文符號流退化、或倉庫與會話已被重複符號污染的團隊或個人。分類 admin-security 反映其側重治理與邊界控制,而非通用業務插件。

安全與權限: 插件以當前 DSH 進程權限運行;啓用 postExecute、執行 /degen-fix 或 apply 修復時會讀寫工作區與會話歸檔。安裝前應閱讀源碼與 MIT 許可證,確認備份策略(如 .degen-backup、~/.dsh/guard-degen/backups/)符合你的合規要求。README 強調:artifact 掃描與修復默認綁定 artifacts.roots(默認工作目錄);瀏覽器端不能自行指定寫目標或放寬檢測閾值。

行爲細節: 流守衛在已釋放的 run 頭部無法撤回時,會選擇截斷流而非只摺疊尾部;單次調用干預次數受 stream.maxInterventionsPerCall(默認 1)限制,用盡後會截斷並結束,避免 raw 符號進入對話。會話原地遮蔽後,聊天 UI 不會立刻刷新,需重新打開會話才能看到改寫結果;運行中的會話仍會繼續追加新消息。

結尾

dsh-guard-degen 把「退化符號流」從被動清理變成可配置的四層防線:流 containment、工具寫入校驗、失敗重試/換模、以及可預覽的工件與會話修復。若你在 Harness 裏遇到過 ⇒ 一類 run 佔滿上下文或污染倉庫,可以先從 npm 安裝並在 Settings 裏打開 Degeneration guard,用 /degen-scan 與 preview diff 評估影響再決定是否 apply。

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

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

小夜