前言¶
在 DSH(DeepSeek Harness)裏跑長會話時,上下文窗口會被大段日誌、抓取頁面、工具輸出佔滿。社區插件 billion-context-dsh(ACP)可以把一段上下文壓成 Agent 自己寫的摘要,這是常用的「減負」方式。但有些內容並不適合壓成摘要:可能以後還要原文對照的長日誌,可以直接移出窗口;已經沒價值的死衚衕檢索或過期快照,則希望乾脆刪掉,既不寫摘要也不落盤。
billion-context-relief 由維護者 markelayan 發佈,分類屬於「記憶」類 DSH 插件,是 ACP 的配套插件。它提供「導出到文件並留指針」和「無文件刪除」兩種顯式操作,並附帶發現大塊上下文與管理導出文件的工具。README 明確說明:沒有任何自動壓縮、導出或刪除;唯一會自動出現的是僅作提示的 advisor 通知。
這是什麼¶
- npm 包名:
billion-context-relief(當前資料中版本爲0.1.2,MIT 許可證) - 定位: Agent 按需請求的 context relief,Companion to billion-context-dsh (ACP)
- 運行環境: Node.js
>= 20;聲明兼容 DSH0.2.0-rc.2,不支持 DSH0.1.x - 依賴關係: 不自帶壓縮引擎;peer 依賴
billion-context-dsh,且 ACP 必須是 profile 裏當前激活的 compaction engine(在dsh.profile.bundles中替換compaction-basic)
沒有安裝 ACP、或使用了其他壓縮引擎時,本插件各工具會說明需要 ACP,且不會改動上下文;advisor 也會保持靜默。
與 ACP 的分工¶
ACP 通過 compress 路徑做替換;本插件的每一次替換也走同一路徑,因此與已有 ACP 塊的行爲一致。README 概括兩類場景:
| 場景 | 工具 | 效果 |
|---|---|---|
| 體積大但可能還要原文 | context_export |
把區間寫到臨時文件(模型不讀文件內容),窗口內換成一行指針 |
| 已無繼續保留價值 | context_delete |
丟棄區間,無摘要、無文件;資料描述爲帶 DELETED REFERENCES 標記 |
此外:context_large_blocks 只讀列出保護區外 oversized 項;context_exports 按名稱管理已導出文件。
區間邊界使用 surface seq(整數)或 ACP 的 mNNNNN ref,與 context_large_blocks、acp_status 輸出一致;區間爲閉區間。
核心工具(已覈實能力)¶
context_large_blocks¶
只讀掃描,幫助決定「動哪一段」。可選參數包括 largeMessageTokens、largeTurnTokens、largeBlockTokens(單次覆蓋閾值)、limit(1–50,默認 20)。輸出給出閾值、seq 範圍、估算 token、距今輪數等;不展示正文內容。說明中提到:turn 條目與其中的 message 會重疊,應對其中一種操作,不要重複處理。
context_export¶
將已完成上下文的一個區間寫入臨時文件,並用一行指針替換該區間。
| 參數 | 說明 |
|---|---|
startSeq / endSeq |
必填;seq 或 mNNNNN |
name |
可選,文件名提示,例如 pytest-run-3 |
note |
可選,保留在指針中的一行說明(資料截斷處標明最大 120 字符) |
context_delete / context_exports¶
- context_delete: 刪除指定區間,不生成摘要文件(package 描述:帶 DELETED REFERENCES 標記)。
- context_exports: 管理按名稱保存的導出文件;卸載插件後,已產生的 export 文件仍留在磁盤,需自行清理(見 README Exports 一節)。
拒絕與安全邊界¶
README 設有 「What it refuses」:例如已在 ACP 塊內的區間會拒絕(涉及 AlreadyCompressedRangeError)。具體規則以倉庫文檔爲準。插件以當前 DSH 進程權限運行;安裝前建議閱讀源碼與 LICENSE,並理解導出文件落在臨時目錄(日誌示例:exports in <tmpdir>/billion-context-relief)。
安裝與啓用¶
DSH 生態是「一切皆插件」;插件目錄站 SkillHub 上的條目 與 GitHub 倉庫由社區維護,並非 DeepSeek / 幻方官方應用商店。
1、先裝 ACP(profile 尚未有時)
資料給出的測試組合爲 GitHub 固定 ref:
dsh plugin --profile web add "billion-context-dsh@github:Tyan66666/billion-context-dsh#2026-09-30_dsh-0.2-seam-port"
npm 上 billion-context-dsh@0.2.26 文檔標註爲預期可用但未在 relief 側實測。
2、安裝 billion-context-relief(推薦 npm)
dsh plugin --profile web add billion-context-relief
固定版本示例:
dsh plugin --profile web add billion-context-relief@0.1.2
或從 GitHub release 標籤安裝:
dsh plugin --profile web add "billion-context-relief@github:markelayan/billion-context-relief#v0.1.2"
升級:
dsh plugin --profile web update billion-context-relief
dsh plugin add 會寫入 profile 的 package.json 和 dsh.profile.bundles,運行中的 DSH 無需重啓即可加載;新工具只出現在安裝之後新開的 session 裏,舊 session 需重新打開。
3、確認加載
dsh web 時可查看 ~/.dsh/dsh-web.log,應出現類似:
[billion-context-relief] ready — tools: context_large_blocks, context_export, context_delete, context_exports · advisor=true · exports in <tmpdir>/billion-context-relief
卸載:
dsh plugin --profile web remove billion-context-relief
已寫入 session 的 ACP 塊會保留;導出文件需按文檔自行刪除。
典型用法思路¶
下面是一條可復現的操作順序(具體 seq 以你當前 session 爲準):
- 用 ACP 相關能力或
context_large_blocks查看窗口占用與大塊列表(示例輸出中會看到Thresholds: message ≥4.0K · turn ≥12.0K · ACP block ≥3.0K tokens及若干 seq / tool 行)。 - 若某段是「可能要原文」的長日誌或抓取結果,調用
context_export,傳入startSeq、endSeq,必要時加name、note。 - 若某段確定無保留價值,調用
context_delete處理同一區間(不要對 turn 與其 message 重複操作)。 - 需要清理磁盤上的導出時,使用
context_exports。
每次變更都是 Agent 顯式調用工具;advisor 僅提示,不代爲執行。
適用場景與注意¶
適合誰: 已在 DSH 0.2.0-rc.2 上使用 billion-context-dsh (ACP)、且希望 Agent 在「摘要」之外還能「外置原文」或「直接丟棄」上下文的開發者。
務必注意:
- 必須先裝並讓 ACP 成爲 active compaction engine;否則本插件不會生效。
- 包體約 19 kB(packed),無 runtime 依賴,但依賴 profile 內正確解析的
billion-context-dsh。 - 配置項細節、advisor 觸發條件、導出目錄完整行爲見 GitHub README;本文僅依據公開 README 與
package.json中已出現的事實。 - 插件與 DSH 以本機用戶權限讀寫文件與 session;生產或敏感環境安裝前請審閱源碼。
結尾¶
billion-context-relief 把 context 管理從「只能壓摘要」擴展爲「導出留指針」和「無文件刪除」,且全部通過 Agent 顯式調用完成,與 ACP 的 compress 路徑一致,便於在長會話裏精細減負。