前言¶
在 DeepSeek Harness(DSH)裏,長會話往往要靠壓縮把上下文收進可管理的範圍。DSH 自帶手動壓縮命令 /compact,也有可選的自動壓縮後端。社區插件 billion-context 走另一套自動壓縮方案;裝上之後,原生 /compact 會從命令面板裏消失——這不是偶然 bug,而是其配套 gate 在配置解析階段把 DSH 的兩個壓縮相關包標成禁用。
部分場景下 billion 自己的壓縮並不生效(例如非標準線路、攔截未命中),此時既沒有 billion 的自動壓,也沒有 DSH 的手動壓,會話容易頂滿上下文。下面介紹維護者 k-ying 發佈的 manualcompact-billion:在不動 billion 自動壓縮的前提下,把 DSH 原生手動 /compact 和壓縮後端重新掛回來,並把後端釘在「隻手動、不自動」。
這是什麼¶
manualcompact-billion 是 DSH 社區插件,歸類爲模型推理相關能力。一句話定位:讓 DSH 的原生手動 /compact 回來,同時不改動 billion-context 的自動壓縮邏輯。
維護者:k-ying。源碼與說明見 GitHub 倉庫;社區目錄頁:SkillHub 插件頁(獨立站點,與 DeepSeek / 幻方無官方從屬關係)。
它解決什麼問題¶
安裝 billion-context 後,bili-compaction-gate 會在配置 waterfall 裏把下列包設爲 disabled: true:
@deepseek-ai/dsh-compaction-basic(壓縮後端)@deepseek-ai/dsh-command-compact(/compact命令)
結果是 DSH 側兩條壓縮鏈路都被關掉。本插件在檢測到上述「被 gate 禁用」的配置時,把這兩個包改回啓用,並對壓縮後端設置 config.auto = false,從而:
/compact命令可用,僅手動觸發壓縮;- billion-context 仍負責它自己的自動壓縮,兩者不搶同一套開關。
若配置裏沒有任何被 gate 禁用的行(例如已卸載 billion),插件原樣透傳,連 auto 也不改,避免在單獨使用 DSH 時誤關自動壓縮。
工作原理(簡述)¶
DSH 插件配置經 Cordis 的 waterfall(洋蔥模型)解析:內層 listener 調用 next() 拿到下游結果,外層可以再改。billion 的 gate 在內層返回「已禁用」;本插件用 { global: true, prepend: true } 註冊在最外層,收到「已禁用」後改回「啓用 + auto:false」,最終生效的是外層返回值,gate 無感知。
插件只改三類值:兩個包的 disabled: true → false,以及後端的 config.auto = false。不修改 billion 的包、代理或 gate,也不註冊額外服務。
安裝與啓用¶
DSH 按 profile 隔離插件;裝錯 profile 等於未安裝。不確定時先看本機有哪些 profile:
ls ~/.dsh/profiles
命令行 dsh 或瀏覽器 Web UI 通常用默認 profile web;桌面 Tauri 版常見爲 tauri。查看某 profile 已裝插件:
dsh plugin --profile web list
配置文件路徑示例:~/.dsh/profiles/web/cordis.patch.yml。
從 GitHub 安裝(推薦)¶
dsh plugin --profile web add github:k-ying/manualcompact-billion
web 爲 dsh 默認 profile;github:owner/repo 由 dsh 轉成真實 Git 地址拉取,cordis.patch.yml 隨包掛載。桌面版可將 web 換成 tauri:
dsh plugin --profile tauri add github:k-ying/manualcompact-billion
鎖定版本可帶 tag(資料中示例爲 v0.1.0):
dsh plugin --profile web add github:k-ying/manualcompact-billion#v0.1.0
其他安裝方式¶
本地目錄:
dsh plugin --profile web add ~/Documents/AI/manualcompact-billion
或在 profile 的 cordis.patch.yml 手寫條目(路徑換成你的實際路徑):
- id: manualcompact-billion
name: 'file:///path/to/manualcompact-billion/index.js'
裝完後必做¶
完全退出 dsh 再啓動(不是隻關窗口)。配置在啓動時計算,熱改不會重新走 waterfall。
驗證與典型用法¶
重啓後開任意會話:
- 輸入
/compact,應能執行壓縮,或提示「沒有可壓縮的歷史」(同樣說明命令已掛載)。 - 若命令面板沒有
/compact,或報「沒有壓縮後端」,說明未恢復成功。
日誌中搜索 manualcompact-billion:,成功加載時會出現自檢行,例如:
manualcompact-billion: native compaction restored (command×1, basic×1, groups×2, auto=off)
沒有該行,表示插件未加載,或當前配置裏沒有被 gate 禁用的項。
日常用法即在長會話中按需執行 /compact,與 billion 的自動壓縮並行;注意下文「適用場景與注意」中的 resync 與兼容風險。
環境變量開關¶
| 環境變量 | 作用 |
|---|---|
MANUALCOMPACT_OFF=1 |
插件完全讓位,不修改配置 |
MANUALCOMPACT_ALLOW_AUTO=1 |
不強制 auto: false,保留原有自動壓縮設置(可能與 billion 爭用歷史,資料不建議開啓) |
卸載¶
dsh plugin --profile tauri remove manualcompact-billion
將 tauri 換成你安裝時用的 profile 名。重啓即可;無持久副作用。
適用場景與注意¶
適合誰: 已安裝 billion-context,又需要在 DSH 裏保留手動 /compact 作爲兜底或習慣操作的開發者。
權限與信任: 插件以當前 dsh 進程權限運行,會在配置解析階段改寫壓縮相關包的啓用狀態。安裝前應閱讀倉庫源碼與許可證(MIT),自行判斷是否接受。
風險與限制(來自上游 README):
- 行爲與 billion 上游「接管後禁止宿主壓縮」的假設相反,上游不保證長期兼容。
- billion 正在壓縮時,手動
/compact會改變會話歷史,billion 下次請求可能觸發全量 resync,帶來額外請求與緩存命中下降,非數據損壞。 - 不解決「billion 能否壓某個供應商」;非標準線路仍可能壓不了。
- 上游改包名或事件名時插件可能靜默失效,需更新插件內
BASIC_PACKAGE/COMMAND_PACKAGE常量。
結尾¶
manualcompact-billion 補的是「billion 與 DSH 原生壓縮二選一」留下的缺口:自動仍由 billion 管,手動 /compact 回到 DSH 側且固定爲不自動壓。需要安裝命令、原理與開關細節時,以 GitHub README 爲準;瀏覽社區條目可打開 SkillHub 目錄頁。