前言¶
在 DeepSeek Harness(DSH)裏跑長對話或長任務時,上下文窗口遲早會被填滿。常見做法是按固定上限硬截斷,早期消息被悄悄丟掉,路徑、決策和錯誤信息隨之丟失。DSH 自帶 compaction-basic 會用自動生成的摘要替換一段範圍,但摘要由另一次 LLM 調用寫出,時機和範圍不由當前模型掌控。
billion-context-dsh 走另一條路:把 Active Context Pruning(ACP)接到 DSH 的 CompactionEngine 上,給模型 compress、decompress、search_context、acp_status 四個工具,由模型決定何時壓縮、壓縮什麼。壓縮內核來自 acp-kernel,整體從 billion-context-pi 移植,適配層針對 DSH 的 durable-surface 模型重寫。維護者爲 Tyan66666,當前版本 v0.2.13,MIT 許可證;README 明確標註測試版,請勿用於生產環境。
這是什麼¶
billion-context-dsh 是 DSH 的上下文壓縮插件,分類上屬於模型推理相關能力。它註冊爲 compaction-acp 後端,在 host 平面掛載四個模型工具、/acp 命令、nudge 提示和 ACP 系統提示段。自動策略只提醒(nudge),不強制摘要;compactIfNeeded 返回 null,不做自動統一壓縮。
與硬截斷相比,壓縮後的摘要成爲 checkpoint 節點,原文保留在 append-only 會話日誌裏,可用 decompress 恢復,或用 search_context 在塊內檢索。
核心功能¶
模型驅動的壓縮¶
模型通過 compress 工具,用自寫的高保真摘要替換指定 seq 範圍。邊界會自動對齊到 tool-call/result 配對點。對某塊摘要節點再次壓縮即分層蒸餾(tier 2/3),tier 與塊 id 寫入日誌,重啓後從日誌再水合。
四個模型工具¶
| 工具 | 作用 |
|---|---|
compress |
用緊湊摘要替換 seq 範圍;對塊摘要再次壓縮 = 分層蒸餾 |
decompress |
只讀恢復已壓縮塊的原文;接受 acp_status 中的 bN 或 compaction id |
search_context |
從日誌重建塊摘要與被遮蔽原文,交 acp-kernel searchBlocks 做 hybrid 檢索(詞幹化、CJK bigram、字符 n-gram 模糊),命中回鏈所屬塊 |
acp_status |
報告上下文分解(tool/text/summaries 佔比)、壓縮塊賬本、nudge 決策行、Checkpoint seqs;支持 scope/view/tool/sort/limit 鑽取 |
nudge 與持久化¶
上下文壓力高時,內核在 agent/pre-step 注入 nudge:效率提示、上下文分解、壓縮規則與可壓縮範圍表。這是建議,不是命令。壓縮對應 surfaceOp: { op: 'replace' },原文仍在日誌中;塊狀態由內存內核加日誌賬本維護,無旁車文件。
與 DSH 內置壓縮的差異¶
- 摘要由當前模型書寫,無第二次 LLM 摘要調用
- 只 nudge、不強令;是否壓縮由模型決定
- 壓縮範圍可恢復、可檢索;長任務中關鍵結論可疊加保留
- 每次請求上下文保持精簡,避免大段統一壓縮導致細節衰減
bundle 安裝會禁用 host 的 compaction-basic,避免同一 realm 內兩個 ctx.compaction 後端衝突。shipped 預設(standard / code / cordis)內部的 realm 級 compaction-basic 仍保留,ACP 工具與 nudge 與之並存;minimal 等不帶 compaction realm 的預設直接使用本引擎。
安裝與啓用¶
插件以當前 dsh 進程權限運行,安裝前建議閱讀源碼與 LICENSE。要求 Node.js >= 20;peer 依賴 @deepseek-ai/dsh-compaction 爲 ^0.1.0-rc.6 || ^0.1.1-rc.1。
方式一:DSH 插件商店或 bundle 安裝(推薦)¶
在 DSH 插件商店安裝,或執行:
dsh plugin --profile web add billion-context-dsh
命令會安裝 npm 包並把 cordis.patch.yml 掛進該 profile 的層棧:禁用 host compaction-basic,把 ACP 引擎掛到 host 平面。窗口自動探測,工具、命令、nudge 默認全開,無需手工配置。
裝完後重啓 dsh(bundle 層在啓動時組合),新開會話即可用。讓模型調用 acp_status 或執行 /acp status 自證是否生效。
也可直接裝 npm 包:
npm install billion-context-dsh
配合上述 dsh plugin 命令時,包會一併安裝;單獨 npm install 不會觸碰 profile,需手寫組合行。
方式二:純 npm 安裝後手寫組合¶
npm install billion-context-dsh
在 profile 補丁(如 ~/.dsh/profiles/web/cordis.patch.yml)中追加:
# 必須禁用 host compaction-basic,避免 ctx.compaction 衝突
- id: compaction-basic
disabled: true
- insert:
- id: compaction-acp
name: 'billion-context-dsh'
config:
modelContextLimit: 128000 # 可選;省略時自動探測模型窗口,回退 128000
bundle 用戶若只想改配置,用同 id 行覆蓋即可:
- id: compaction-acp
name: 'billion-context-dsh'
config:
modelContextLimit: 128000
可選通過 config.prompts 自定義 nudge 文案與工具描述;佔位符拼寫錯誤會在引擎啓動時 fail-fast。詳見倉庫 docs/configurable-prompts-design.md。
完整安裝與驗證步驟見 docs/INSTALL.md。若希望 DSH agent 代爲安裝,可將該文檔交給會話中的 agent,在 ~/.dsh 下編輯配置並調用 acp_status 自證(需批准文件權限)。
典型用法¶
驗證插件已掛載¶
新會話中讓模型執行:
/acp status
或調用工具 acp_status,應返回 CONTEXT BREAKDOWN、壓縮塊賬本與 nudge 相關信息。
壓縮一段對話¶
當 nudge 提示上下文使用率偏高時,模型可調用 compress,指定 seq 範圍並附上摘要。例如壓縮 seq 10–50 區間的探索過程,摘要中保留文件路徑、關鍵決策與錯誤信息。壓縮後可見上下文縮短,原文仍在日誌中。
恢復與檢索¶
需要覈對早期細節時,用 decompress 傳入 acp_status 顯示的 bN 塊 id。跨多個壓縮塊查找關鍵詞時,調用 search_context,由內核 hybrid 檢索並回鏈命中塊。
分層蒸餾¶
對已有壓縮塊的摘要節點再次 compress,即對該塊做 tier 2 蒸餾;對 tier 2 塊再壓縮得 tier 3。適合超長任務中逐步濃縮舊段,同時保留可恢復的 checkpoint 結構。
適用場景與注意¶
適合誰
- 在 DSH 上跑代碼 agent、長文檔分析、多步調試等超長會話的開發者
- 希望上下文由模型按需壓縮、而非硬截斷或統一自動摘要的場景
- 已使用或計劃使用 DSH web profile 的用戶(bundle 一鍵掛載)
注意事項
- v0.2.13 與 DSH 本身均爲測試版,README 聲明請勿用於工程化或生產環境,預期有破壞性變更
- 同一 realm 內只能有一個
ctx.compaction後端;勿與compaction-basic並存 shadowedTokenCount使用宿主 token-meter 計價,不與插件內部 CJK 估算混用- SkillHub 目錄頁爲社區站點,與 DeepSeek / 幻方無官方從屬關係;安裝命令以 README 與
dsh plugin爲準
結尾¶
billion-context-dsh 把 ACP 的「模型決定何時、壓縮什麼」接到 DSH 的 durable-surface 上:四個工具、可恢復日誌、nudge 提醒與分層蒸餾,面向長任務上下文管理。GitHub 上約 43 stars、5 forks。
- 目錄頁:https://www.skillhub.cn/plugins/Tyan66666/billion-context-dsh
- GitHub:https://github.com/Tyan66666/billion-context-dsh
- npm:
billion-context-dsh