前言¶
在 DeepSeek Harness(dsh)裏跑長會話時,上下文會不斷堆疊:整輪對話、助手消息裏的 reasoning 塊、以及工具返回的超長正文,都會佔滿窗口並推高調用成本。常見做法是手動刪消息或整段放棄歷史,既容易打斷工具調用與結果的對應關係,也難以區分「該用模型摘要」和「用截斷就能省 token」的場景。
dsh-compact-arsenal(壓縮工坊)是社區維護者 TacitSay 爲 DSH 提供的可配置上下文壓縮插件:總壓縮、思考壓縮、工具輸出壓縮三個板塊各自獨立開關、閾值與方法,並在左欄提供「上下文壓縮」面板,改完自動保存,無需命令行。設計原則是:能機械解決的先機械解決;需要調用模型的部分由你顯式打開。
這是什麼¶
插件全名 dsh-compact-arsenal,面向 DeepSeek Harness 宿主;源碼與說明見 GitHub,社區目錄頁見 SkillHub。分類爲模型推理相關能力;當前 package 版本爲 0.2.0,許可證 MIT。插件以當前 dsh 進程權限運行,安裝前建議自行審閱源碼與許可證;SkillHub 爲獨立社區目錄,與 DeepSeek / 幻方無官方從屬關係。
三個壓縮板塊¶
下面三個板塊互不影響,各自滿足「開關打開 + 上下文壓力 + 內容量門檻」纔會改寫。
| 板塊 | 對象 | 方式 | 是否調用模型 |
|---|---|---|---|
| 總壓縮 | 最舊的若干整輪對話 | 模型寫檢查點 → 整段替換 | 是 |
| 思考壓縮 | 舊輪次助手消息裏的 reasoning 塊 |
機械截斷 / 整塊清除 / 模型要點 | 機械模式否 |
| 工具輸出壓縮 | 舊輪次裏超長的 tool/result 正文 |
按字符預算 / 模型要點 | 機械模式否 |
思考壓縮不按「單條超過 N 字」觸發:模型思考多爲短片段散落在大量消息裏。插件改爲彙總所有「舊輪次、未壓過」的碎片總字數,達到默認 15,000 字門檻後再處理;最多 8 條、合計不超過 12,000 字的碎片打包成一次模型調用,返回逐條要點(JSON),原位替換爲「頭 + 要點 + 尾」;一次觸發最多處理 12 條、省下 40,000 字,避免單次花銷失控。
左欄面板與配置¶
重啓 DSH 後,左欄會出現「上下文壓縮」圖標。所有板塊默認關閉,裝上不改變任何行爲。
面板提供總開關、各板塊開關;壓縮方式以卡片呈現,未實現的方式爲灰色;參數爲數字輸入框,修改後約 500 ms 自動保存並熱重載。模型方式下,提供方/模型留空即跟隨當前會話模型。底部顯示本進程已執行次數與省下的字符數。
面板通過本機路由讀寫配置,寫入走官方 ctx.configEditor,與手動改 profile 等價:
| 路由 | 方法 | 作用 |
|---|---|---|
/compact-arsenal/api/state |
GET | 當前生效配置與運行統計 |
/compact-arsenal/api/config |
POST | 保存配置(落到 profile 的 cordis.patch.yml) |
也可直接編輯 profile 的 cordis.patch.yml,例如:
- id: compact-arsenal
name: dsh-compact-arsenal
config:
enabled: true
total:
enabled: true
pressureRatio: 0.8 # 本板塊的觸發閾值
retainTurns: 2 # 最近的整輪不動
maxInputChars: 60000 # 一次摘要讀入的上限
provider: '' # 留空 = 當前會話模型
model: ''
reasoning:
enabled: true
pressureRatio: 0.75
mode: truncate # truncate | clear | model
keepLast: 3 # 最近 3 條助手消息不動
minTotalChars: 15000 # 總量門檻
minChars: 200 # 單項下限
headChars: 600
tailChars: 300
batchChars: 12000
maxItems: 12
model:
provider: ''
model: ''
prompt: '' # 留空 = 內置默認提示詞
tools:
enabled: true
mode: truncate
thresholdChars: 8192
keepLast: 2
觸發順序爲:本板塊開關打開;上下文壓力 ≥ 該板塊 pressureRatio;目標內容總量 ≥ 該板塊 minTotalChars(工具板塊用 thresholdChars 作單項預算)。三者都滿足纔會改寫。
安裝與啓用¶
宿主要求(來自 package.json):Node >=22.19.0,DSH >=0.2.0-rc.2 || >=0.2.1-rc.2;文檔中標註與 0.2.1-rc.5 兼容。
安裝命令(README 原文):
# GitHub 源(把 web 換成你的 profile 名)
dsh plugin --profile web add "github:TacitSay/dsh-compact-arsenal#main"
# 或本地目錄(開發)
dsh plugin --profile web add E:\path\to\dsh-compact-arsenal
安裝後重啓 DSH,在左欄打開「上下文壓縮」,按需開啓各板塊並選擇方式與參數即可;不必先改 YAML,面板與配置文件等價。
模型壓縮在消息層的行爲¶
以思考壓縮爲例,一條碎片可能被改寫爲:
[原開頭 600 字]
[... reasoning middle trimmed ...]
<該條的要點>
[... reasoning middle trimmed ...]
[原結尾 300 字]
同一批最多 8 條碎片共用一次模型調用;寫回原來那條消息(表層替換),不新增消息、不打亂順序;原始內容完整保留在會話日誌中;已帶壓縮標記的內容不會再次壓縮;模型不可用時自動退回機械頭尾截斷,不會讓當前步驟失敗。
安全邊界與適用注意¶
插件聲明的安全邊界包括:不動系統提示詞、工具 schema、用戶消息、tool-call 參數;總壓縮按整輪替換,工具調用與結果成對進出;任何改寫失敗只記日誌,不中斷當前步驟;文本按 Unicode 碼點切片。
適合需要長時間 Agent 會話、又希望按板塊控制「是否花模型錢」的 DSH 用戶。總壓縮會改寫歷史整輪,啓用前請理解檢查點摘要可能丟失細節;模型壓縮依賴當前會話或你配置的 provider/model,網絡或配額異常時會降級爲機械截斷。
路線圖(README)包括面板內編輯提示詞模板、工具白名單圖形化、壓縮前後 token 差值圖表、英文界面等,當前面板文案爲中文。
結尾¶
dsh-compact-arsenal 把上下文壓縮拆成總壓縮、思考壓縮、工具輸出三條可獨立配置的鏈路,並用左欄面板降低調參成本,與 DSH「一切皆插件」的擴展方式一致。進一步瞭解可訪問 SkillHub 目錄頁 與 GitHub 倉庫。