前言¶
DeepSeek Harness(DSH)的內置壓縮機制通常僅基於請求壓力和提供者確認的上下文溢出來工作,它不會詢問一個會話已經閒置了多久。dsh-idle-compactor 插件爲此增加了一個新的維度:當會話既超出了令牌閾值,又長時間保持安靜(空閒)時,觸發壓縮。這樣可以避免在每次請求時都爲過時的上下文尾部付費。
核心功能¶
該插件實現了以下能力:
- 空閒觸發的上下文壓縮。
- 壓縮那些在超出配置令牌閾值後依然保持安靜的會話。
- 支持空閒時間和上下文大小作爲觸發器。
- 可配置掃描間隔。
- 支持幹運行模式。
- 能夠處理已存檔的會話。
- 能夠處理後臺工作(background work)。
安裝與依賴¶
前置要求:
* DeepSeek Harness 版本 0.1.2-alpha.3(已驗證)。
* Harness 內置的 compaction 接口和 tokenMeter。
該插件沒有運行時依賴。源代碼中所有的 @deepseek-ai/* 導入均爲 import type,會被編譯器擦除,因此 lib/index.js 是一個單文件自包含的 ESM 模塊。
安裝步驟:
在項目目錄下執行以下命令:
dsh plugin --profile web add ./dsh-idle-compactor
安裝完成後,需要重啓配置文件(profile),補丁層會重新加載,而捆綁掛載不會。
配置與使用¶
配置文件位於 Profile 的 cordis.patch.yml 中。插件的配置項通過 thresholdTokens(上下文大小)和 idleMs(空閒時間)來控制壓縮行爲。這兩個條件必須同時滿足,壓縮纔會發生。
在 cordis.patch.yml 中添加如下配置:
- id: idle-compactor
config:
thresholdTokens: 131072 # 128K
idleMs: 600000 # 10 分鐘
配置項說明(部分):
| Key | Default | Meaning |
|---|---|---|
enabled |
true |
當爲 false 時,完全禁用掃描。 |
thresholdTokens |
131072 |
上下文大小的門檻。 |
idleMs |
600000 |
會話被視爲空閒的時間窗口。 |
scanMs |
30000 |
掃描間隔,決定 idleMs 後多久觸發壓縮。 |
skipAwaitingWork |
true |
遇到後臺任務時跳過壓縮,防止在任務執行期間重寫上下文。 |
適用場景與注意事項¶
- 適用場景: 需要管理長對話上下文大小的場景,特別是當對話長時間沒有新的用戶輸入,但上下文體積卻不斷膨脹時。
- 後臺工作處理: 插件會檢查會話及其子會話是否在處理後臺任務(如作業、收件箱消息或子代理)。如果檢測到後臺工作仍在進行,該會話將被跳過,不會進行壓縮,以避免影響正在進行的後臺任務。
- 存檔會話: 插件會跳過存檔集中的會話 ID。
- 安全檢查: 安裝前請檢查源碼與許可證。插件以當前 DSH 進程的權限運行。
總結¶
dsh-idle-compactor 爲 DSH 增加了一套基於時間和狀態的自動壓縮策略。通過配置 thresholdTokens 和 idleMs,可以在保持上下文精簡的同時,避免在後臺任務或非活躍期打斷對話流。
- GitHub 倉庫: https://github.com/QuanhuZeYu/dsh-idle-compactor
- 插件目錄: https://www.skillhub.cn/plugins/QuanhuZeYu/dsh-idle-compactor