前言¶
長會話是智能體開發裏繞不開的問題:多輪工具調用、大量中間結果堆在上下文裏,幾輪之後窗口就滿了。常見的做法是設一個閾值,觸發後由系統自動摘要——模型本身沒有發言權,壓掉什麼、保留什麼全由外部規則決定。
dsh-asc 走的是另一條路:讓模型自己決定何時壓縮、壓縮什麼,並且每一次壓縮都以持久會話日誌替換事件的形式提交,可回放、可搜索、可逆。DSH 的理念是「一切皆插件」,壓縮這件事同樣可以插件化。下面介紹這個插件的定位、工作方式、安裝步驟和注意事項。
這是什麼¶
dsh-asc 全名 DeepSeek Harness Agentic Surface Compaction,是 DeepSeek Harness(下稱 DSH)的上下文壓縮插件,由 lmst2 維護,MIT 許可證。
它註冊到 DSH 的 ctx.compaction 接口上,替代默認的 basic 壓縮後端。核心思路是:壓縮不是外部強加的規則,而是模型主動使用的一組工具。每次壓縮都會作爲日誌中的替換事件(surfaceOp: replace)提交,原始內容保留在會話日誌裏,隨時可以解壓或全文搜索。
核心設計:模型自主與分層壓縮¶
安裝後插件在三個層面工作:
1、向系統提示詞注入上下文管理紀律,包括判斷規則、工具用法、分層壓縮節奏,模型從第一輪對話起就主動管理上下文;
2、上下文使用率高時按需注入 nudge 提示。nudge 有節奏門控,迭代 nudge 還要求真實的 token 增長,不會每輪反覆催促;
3、溢出或手動壓縮時提供確定性降級——直接走 LLM 摘要,可選掛載上游修剪器時還會做工具結果修剪,不依賴模型配合。
分層壓縮分三級:
1、T1 全細節:把已消耗的原始工作內容收進 checkpoint;
2、T2 提煉決策:把沉澱下來的 T1 內容提煉成決策;
3、T3 事實索引:把 T2 內容進一步收攏成事實索引。
摘要被複用得越多就越薄。每個 checkpoint 文本都帶有主題和 Compaction id,當界面上已有的摘要指向需要的細節時,模型直接解壓那一塊;只有當沒有任何可見摘要說明細節位置時才用 context_search;解壓永遠一層一層進行。
五個模型工具¶
插件向模型提供五個工具:
| 工具 | 用途 |
|---|---|
context_status |
查看上下文用量、分層 checkpoint、系統/對話組成、推薦區間、最近的 surface 節點 |
context_compress |
用自己寫的 checkpoint 替換一段 surface 區間(支持批量、tool-call 對自動擴展、質量門控) |
context_decompress |
撤銷一次壓縮:原文回到 checkpoint 原來的位置(tier 感知;full: true 可到原始內容) |
context_recap |
不解壓原文,重讀 checkpoint 摘要 |
context_search |
對整份日誌做全文搜索,包括已壓縮的內容 |
壓縮如何落地:事件溯源¶
底層基於事件溯源實現。一次壓縮在日誌裏是一筆事務:
compaction/start → compaction/summary → replaced user/message → compaction/end
這帶來四個性質:
1、無副作用狀態文件——壓縮只產生日誌事件,不產生額外狀態;
2、可逆——解壓通過回放日誌中被遮蔽的事件完成,並提交一筆原位替換事件;
3、可審計——誰壓縮了什麼、摘要全文、token 成本,全部記錄在日誌中;
4、可搜索——全量日誌全文搜索覆蓋已壓縮的原始內容,壓縮不會造成信息丟失。
安裝與啓用¶
前置條件:已安裝 DeepSeek Harness(dsh CLI 可用);Node.js ^22.19 或 >=24。
從 npm 安裝(推薦):
dsh plugin --profile <name> add dsh-asc
要使用比 npm 發佈更新的提交,從 GitHub 安裝:
dsh plugin --profile <name> add github:lmst2/dsh-asc
要修改插件本身或參與貢獻,從源碼構建:
git clone https://github.com/lmst2/dsh-asc.git
cd dsh-asc
pnpm install
pnpm build
dsh plugin --profile <name> add "link:$(pwd)"
dsh plugin 會把插件加入 profile,並根據包內的 dsh.bundle 聲明自動啓用,工具和系統提示詞隨 profile 一起加載。安裝後需重啓運行中的 DSH 服務。
接下來,在同一 profile 的 cordis.patch.yml 裏禁用默認 basic 後端——ctx.compaction 同一時間只允許一個 provider:
- id: compaction-basic
disabled: true
還可以按需掛載運行時不變量檢查和全文搜索後端:
- insert:
- id: dsh-asc-invariant # 運行時不變量檢查(可選,推薦)
name: "dsh-asc/invariant"
- id: session-query-sqlite # context_search 全文後端(可選)
name: "@deepseek-ai/dsh-session-query-sqlite"
典型用法¶
經過上面的步驟,安裝並重啓後不需要額外配置。插件的運行循環是:把已消耗的原始工作收進 T1 checkpoint,把沉澱下來的 T1 內容提煉成 T2 決策,再把 T2 內容收進 T3 事實索引。
模型側的典型動作:
1、用 context_status 查看當前用量和分層 checkpoint 分佈;
2、用 context_compress 壓縮不再需要原文的區間;
3、需要細節時優先解壓對應 checkpoint;找不到線索時用 context_search 在全量日誌裏搜索;
4、用 context_recap 重讀摘要而不解壓原文。
適用場景與注意¶
適合的場景:
1、長會話、多輪工具調用的 DSH 使用者,上下文裏堆滿工具結果和中間輸出;
2、希望壓縮過程可審計、可回溯的團隊——每次壓縮的執行者和 token 成本都在日誌裏;
3、想自己控制壓縮策略的開發者——從源碼安裝即可修改。
注意事項:
1、插件以當前 dsh 進程的權限運行,安裝前請檢查源碼與許可證;
2、ctx.compaction 只允許一個 provider,必須先禁用 compaction-basic;
3、壓縮內容不會丟失:原文保留在會話日誌中,可隨時解壓或搜索;
4、許可證爲 MIT;算法思想受 opencode-acp(AGPL)啓發,僅使用其思想、未使用其源碼,詳見倉庫中的 NOTICE 文件。
結尾¶
dsh-asc 的價值在於把壓縮的判斷權交給模型,同時用事件溯源保證每一步可回放、可搜索、可逆。如果你在 DSH 上跑長會話,值得一試。
插件收錄在社區目錄:https://www.skillhub.cn/plugins/lmst2/dsh-asc
源碼倉庫:https://github.com/lmst2/dsh-asc