dsh-compact-arsenal:可配置的三段式上下文壓縮

前言

在 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 倉庫。

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

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

小夜