前言¶
長會話跑上一段時間,上下文很容易漲到二十幾萬 token。DSH 自帶的自動壓縮只會把最後那條消息留下,前面的內容全丟。你想自己決定「切到哪一輪、留多少原文」,卻又找不到入口。dsh-ctx-trim 就是補這個入口的:它會在會話標題右邊加一個「上下文」按鈕,點一下彈兩檔壓縮,摘要在本地完成,不調模型。
這是什麼¶
dsh-ctx-trim 是一個 DSH 客戶端插件,維護者是 AlexSh1ne。它解決的問題很單一:在不打斷流程的前提下,讓開發者手動選定一種壓縮力度,把會話頭部的上下文換成本地摘要。它針對的是「自動壓縮太粗暴且沒有控制權」的場景,不是通用的會話管理工具。
核心功能:兩檔壓縮¶
按鈕點開後面板裏顯示兩行數字,對應兩個檔位:
| 檔位 | 保留 | 下限 | 多餘的動作 |
|---|---|---|---|
| 正常壓縮 | 最近 30% token 的原文 | 至少 6k | — |
| 深度壓縮 | 最近 10% token 的原文 | 至少 2.5k | 切下的原文打包進 ~/.dsh/im/ctxpacks/ |
切點兩端都落在結構邊界上:不切在工具調用中間,也不切在壓縮標記中間。所以壓完的會話仍然是一條合法的對話。
摘要從哪來:本地摘要不調模型¶
摘要按下面的順序取:
1、優先用同 profile 裏 dsh-live-compact/plan.js 的本地摘要器,裝了這個插件就用它,沒裝就跳過;
2、都沒有時用內置摘錄:每條只留開頭,並保留硬性條款行。
全程不調用模型,因此不產生費用,也不需要等生成。還有一個保護:如果摘要算出來比切掉的原文還大,這次直接放棄不落盤,寧可不動,也不寫一條更長的上下文。
它怎麼保證「空閒才能壓」¶
插件走的是 DSH 公開的壓縮事務:
compaction/start → compaction/summary → user/message(replace) → compaction/end → flush
外層套了 agent.runMaintenance,跟正在跑的回合互斥。所以當你點擊按鈕時如果這一輪還沒結束,它會明確提示會話正在跑、等這一輪結束再壓,不會把日誌寫壞。
安裝與啓用¶
用官方安裝命令,不要 npm i dsh-ctx-trim 裝進普通項目:
dsh plugin --profile <你的profile> add dsh-ctx-trim
裝完刷新頁面,會話標題右邊就會出現「上下文」按鈕。
直接用 npm 從普通項目安裝會踩坑,它會去解析 @deepseek-ai/* 的 peer 依賴,撞出一串 ERESOLVE。所有 DSH 插件的入口都是 dsh plugin add,插件市場也走這條。
典型用法¶
點按鈕 → 面板裏看兩行數字 → 點其中一檔 → 等它跑完。沒有額外配置項,保留比例是寫死的兩檔。
插件還掛了兩個路由,客戶端在用,你也可以自己 curl:
# 看一眼這個會話現在多少條、兩檔各會切多少
curl "http://<host>:<port>/dsh-ctx-trim/status?sessionId=session-xxx"
先試跑、不落盤,看會切多少、摘要多大:
curl -X POST http://<host>:<port>/dsh-ctx-trim/run \
-H 'content-type: application/json' \
-d '{"sessionId":"session-xxx","mode":"normal","dry":true}'
確認沒問題再真壓:
curl -X POST http://<host>:<port>/dsh-ctx-trim/run \
-H 'content-type: application/json' \
-d '{"sessionId":"session-xxx","mode":"deep"}'
接口只收 application/json,瀏覽器從別的站發來的跨站請求(帶 sec-fetch-site: cross-site)直接 403。
適用場景與限制¶
適合需要在長會話裏自己控制保留範圍的 DSH 開發者,尤其是不想依賴自動壓縮、希望保留最近一段原文的人。
它有幾個明確限制,用之前要知道:
- 只在會話空閒時能壓,回合進行中會被拒絕,這是故意的;
- 沒有撤銷按鈕,被摺疊的原文還在 session log 裏,但界面上看不見了;
- 只有 Web 端有按鈕;
- 保留比例是寫死的兩檔,暫不支持自定義;
- 沒有用
ctx.compaction.compactRegion,它寫死owner:'current-turn',空閒會話上必拋no open turn。
安全方面要注意:路由不做身份校驗(它拿不到 GUI 的登錄態),只擋跨站。也就是說,誰能連上宿主端口、又知道某個會話的 id,誰就能壓那個會話。別把 DSH 端口暴露到不受信任的網絡,需要外網訪問就在前面用 --trusted-host 那一套加一層。另外,插件以當前 dsh 進程權限運行,安裝前應先檢查源碼與許可證。
兼容與已知實測¶
- DSH
>=0.2.0-rc.2 <0.3.0-0 - Node
>=22.13.0 - 許可:MIT
- 已在 DSH 0.2.1-rc.5 + Web profile 上實測:353 條 / 263k token 壓到 194 條 / 127.8k token。
結尾¶
dsh-ctx-trim 的價值不在於壓縮算法多新,而在於給了你一個入口:手動選一檔,摘要在本地生成,切點落在結構邊界上。如果你在長會話裏受夠了自動壓縮把歷史清空,值得裝一個試試。目錄頁見 https://www.skillhub.cn/plugins/AlexSh1ne/dsh-ctx-trim,源碼見 https://github.com/AlexSh1ne/dsh-ctx-trim。