前言¶
在 DeepSeek Harness(DSH)中,隨着會話輪次增加,每輪請求都需要重新發送完整的可見歷史。這不僅增加了 Token 消耗,還會因爲注意力機制必須處理整個 KV 緩存,導致解碼速度下降。本插件旨在解決這一問題。
插件定位¶
dsh-history-fold 是一個 DSH 插件,用於將會話中最舊的部分可見歷史摺疊爲單條消息,該消息由一個無損本地歸檔支持。它不生成模型的摘要,而是提供可恢復的提取式索引。
核心功能¶
- 默認惰性運行:安裝後默認不讀取、不寫入、不記錄日誌,需配置後生效。
- 無損歸檔:在執行摺疊操作前,會將所有被摺疊的消息逐字寫入本地歸檔文件。
- 無需修改 node_modules:使用與 DSH 內置壓縮器相同的公共接口替換機制,升級 DSH 不會破壞此插件。
- 提取式索引:摺疊後的消息包含索引而非摘要,指向具體的歸檔路徑。
- 層級路徑索引:當索引過長時,會自動生成多層索引文件(tier files),每層指向更早的層級,直至原始文本。
- 可恢復性:歸檔文件是可見歷史的超集,包含所有模型推理過程,內容完全可還原。
安裝與啓用¶
使用官方命令安裝,安裝後必須重啓 DSH。
dsh plugin add --profile web github:mili1360/dsh-history-fold
若希望從本地克隆安裝:
git clone https://github.com/mili1360/dsh-history-fold.git
dsh plugin add --profile web ./dsh-history-fold
重啓 DSH 後插件纔會生效。
工作機制¶
當可見歷史超過閾值(由 triggerRatio × contextWindow 或絕對 triggerSurfaceTokens 決定)時,插件會執行以下步驟:
- 選擇節點:選取最舊的節點範圍進行摺疊,保留最近的節點,並將表面歷史縮減至目標大小(默認約爲
0.18 × contextWindow)。 - 歸檔寫入:將摺疊範圍內的所有消息 verbatim(逐字)寫入
$DSH_HOME/history-fold/archive/<session>.jsonl。如果寫入失敗,摺疊操作將被放棄。 - 替換消息:使用
session.append('user/message', ...)替換原範圍,surfaceOp設爲replace,並保留時間線順序。
摺疊後的消息內容通常如下:
[dsh-history-fold] 614 earlier messages (surface seqs 223995..387899) were folded out of the
visible history so this session stays fast.
NOTHING WAS DELETED. Their full text is archived at:
/…/.dsh/history-fold/archive/session-….jsonl
To read any of it verbatim, search that file with the pwsh or grep tools...
(sampled: every 3th of 614 folded messages)
[0] user/message (plugin) seq=223995: ...
注意事項¶
- 版本要求:僅支持 DSH 0.2.0。
- 重啓必要性:安裝或更新後必須重啓 DSH 進程。
- 數據安全:所有摺疊內容均先寫入本地磁盤,再從上下文中移除,確保數據不丟失。
- 許可證:MIT 許可證。
總結¶
該插件通過將最舊的歷史摺疊並歸檔,顯著減小了每次請求的上下文體積,從而提升解碼速度並降低 Token 成本。由於其無損歸檔和提取式索引的特性,歷史內容在需要時依然可以被完整還原。