DSH(DeepSeek Harness)的壓縮引擎在 Web 設置頁選擇對話壓縮總結器後,沒有內置的故障轉移機制。當總結調用被拒絕或因上下文超限失敗時,整個壓縮過程會直接報錯,後續不會再嘗試其他模型。此外,DSH 的固定字符估算(chars/4)與不同模型的實際分詞結果存在偏差,可能導致一個對聊天模型來說合適的歷史記錄,對選定的總結器來說卻超出了輸入上限。
dsh-compaction-route 旨在解決上述問題。它是一個 DeepSeek Harness 插件,允許你在設置頁爲壓縮總結器指定一個備用模型,當主模型無法處理歷史記錄時自動切換。
核心功能¶
該插件僅對 purpose === "compaction" 的請求生效,攔截 DSH 的 llm/stream 流水線。主要能力包括:
- 目標重寫:將請求的目標重寫爲配置的“主模型”。
- 終端錯誤重試:如果主模型調用結束於終端錯誤塊,自動在同一請求上嘗試“備用模型”。
- 超大歷史回退:爲可能超出輸入上限的重放歷史提供兜底能力。
- 模型選擇:從已安裝的配置文件中讀取可用模型列表。
安裝與啓用¶
安裝過程無需構建步驟,插件掛載後無需重啓應用。
Web UI 安裝¶
- 打開設置頁面。
- 進入 Plugins(插件)。
- 點擊 Add plugin(添加插件)。
- 在輸入框中填入插件規範:
github:643048695/dsh-compaction-route
- 按提示啓用插件。安裝後插入的行 ID 爲
compaction-route,這也是配置頁面的命名空間。
CLI 安裝¶
dsh plugin --profile <profile> add github:643048695/dsh-compaction-route
配置¶
安裝後,進入 Settings → Plugins → dsh-compaction-route → Configuration 進行配置。
| 配置項 | 說明 |
|---|---|
| Enable routing | 開啓路由功能。關閉時,引擎行爲與未安裝插件時一致。 |
| Primary model | 首先嚐試使用的總結器模型。 |
| Fallback model | 僅在主模型返回終端錯誤時嘗試。留空則禁用備用功能。 |
| Reasoning effort | 壓縮調用的推理力度,留空則使用提供商的默認值。 |
下拉菜單中的選項來源於 llm-pi-ai 配置命名空間,僅顯示已安裝在當前配置文件中的模型。配置項爲易失性(volatile),修改後僅對下一次壓縮生效,無需重啓。
選擇備用的前提:備用模型的有效窗口必須大於主模型的有效窗口。如果兩者窗口大小相同或更小,選擇備用模型無法解決問題,配置卡片會提示警告。
工作原理¶
插件攔截 llm/stream 水位線,針對壓縮任務執行以下邏輯:
- 若請求的
purpose不爲"compaction",直接放行,不做任何修改。 - 將目標重寫爲配置的 Primary 模型。
- 若 Primary 成功,返回其數據流。
- 若 Primary 結束於終端錯誤塊,重新進入
ctx.llm.stream(),使用 Fallback 模型重試。 - 返回第一次成功的結果,或最後一次嘗試的結果。
注:插件通過 WeakSet 追蹤自身創建的調用對象,防止重試邏輯再次被攔截。
注意事項與兼容性¶
- 重試範圍:僅在終端錯誤塊時重試。若出現非終端錯誤(如中間態異常),按原行爲處理,不觸發備用。
- 取消優先:若請求被取消,不會觸發重試。
- 僅影響壓縮:插件僅修改
purpose === "compaction"的請求,聊天回合、子代理等其他任務不受影響。 - 日誌記錄:引擎自身的事件仍記錄其配置的目標(
summarizationProvider/summarizationModel),而非插件的實際覆蓋目標。若需日誌一致性,需在引擎設置中將目標指向與插件相同的主模型。 - 兼容版本:兼容
@deepseek-ai/dsh0.1.7-rc.2 及 same-node 0.1.7 線。
總結¶
dsh-compaction-route 通過在壓縮流水線中增加一層路由邏輯,解決了 DSH 壓縮引擎單點故障的問題。當你面臨長對話歷史導致的壓縮失敗,且主模型無法處理時,配置一個具有更大上下文窗口的備用模型是有效的解決方案。
- GitHub 倉庫: https://github.com/643048695/dsh-compaction-route
- 社區目錄: https://www.skillhub.cn/plugins/643048695/dsh-compaction-route