前言¶
DeepSeek Harness (DSH) 默認使用 compaction-basic 進行上下文壓縮。如果你希望使用指定的模型(尤其是低價或免費小模型)來壓縮對話,以節省 Token 成本,或者處理上下文窗口較短無法容納完整對話的場景,dsh-quilt-compact 是一個可行的替代方案。它接管了默認的 ctx.compaction 後端。
是什麼¶
由 bvbhu 維護的插件,基於 MIT 協議。它的核心邏輯是用指定的模型池對對話進行“分塊摘要再歸併”的壓縮,最終產出一個小而全的檢查點。
工作流程¶
壓縮過程按以下順序進行:
- Stage 0 預處理:對要壓縮的區域進行預處理,包括合併相鄰重複行、壓縮連續空行、清除終端噪音(ANSI 轉義、光標標記等)、保留文件/圖片附件名稱;可選代碼骨架化與日誌精簡。
- 選模型與切塊:每輪選定一個可用模型,按該模型的上下文容量切分上下文。每塊同時帶上摘要長度上限,保證最終歸併不超出限制。
- 摘要:每個分塊經模型池調用摘要成一個小 digest。
- 歸併:所有 digest 一次調用整合成最終檢查點。
- Checkpoint:最終 digest 替換原區域,寫入會話。
安裝與啓用¶
直接從 GitHub 倉庫安裝:
dsh plugin --profile <name> add github:bvbhu/dsh-quilt-compact
安裝命令會自動激活隨包層並禁用 compaction-basic(本插件成爲 ctx.compaction)。建議用 #<sha> 後綴釘住提交,避免裸倉庫跟隨默認分支:
dsh plugin --profile <name> add github:bvbhu/dsh-quilt-compact#<sha>
配置¶
配置通過 Web UI 的設置頁或直接編輯 profile 的 cordis.patch.yml 進行。
模型池¶
配置多檔模型(tiers),按容量自動選用與降級。
- id: dsh-quilt-compact
config:
tiers:
- name: primary
models:
- provider: openrouter
model: openrouter/free
maxConcurrent: 1
cooldownHours: 1
cooldownHours:失敗後冷卻的小時數(正數,默認 1 小時)。maxConcurrent:默認爲 1。
歸併窗口¶
控制歸併前最多保留多少上下文(token 數),默認 128k。
mergeMaxContextTokens: 64000 # 歸併前最多保留多少上下文(歸併窗口),默認 128000
分塊¶
控制分塊比例與重疊比例。
chunkRatio: 0.8 # 分塊佔用模型可用輸入的比例
chunkOverlapRatio: 0.1 # 相鄰分塊重疊佔分塊預算的比例
預處理¶
啓用 Stage 0 的預處理選項。
preprocessing:
dedup: true # 合併相鄰重複行
purgeErrors: true # 清除終端噪音
astSkeleton: { enabled: false, maxDepth: 2 } # 代碼骨架化(需顯式開啓)
logCondense: { mode: balanced, maxLines: 200 } # 超長日誌冷凝
運行記錄¶
可選的質量評估/診斷記錄,默認關閉。
runRecord:
enabled: false # 關閉時不產生任何運行記錄
maxEntries: 200 # 文件最多保留多少條
snapshotChars: 0 # >0 時每條嵌入一段截斷的對話原文(默認 0 = 不存原文)
path: '' # 固定文件位置;留空用 DSH storage 根目錄
啓用後,每次壓縮會追加一行 JSON 到 <DSH home>/storages/dsh_quilt_compact_runs.jsonl。
* ref:指向會話事件日誌裏的被壓縮區間。
* chunks:每塊模型歸屬信息。
* cooldowns:每次進入冷卻的報錯詳情。
* snapshotChars:需顯式設爲正數纔會嵌入截斷的對話原文副本。
適用場景與注意¶
- 版本依賴:需 DSH 版本
>=0.1.7-alpha.2 <0.2.0-0 || >=0.2.0-rc.1 <0.3.0-0。 - 隱私:默認不保存對話原文,只記錄引用。開啓
runRecord後默認仍不保存原文,需設置snapshotChars > 0。 - 兜底機制:模型池失敗或歸併時無足夠模型,會由會話模型兜底壓縮。