前言¶
DeepSeek Harness(DSH)採用插件化架構,這爲擴展功能提供了便利。但在實際使用中,隨着對話輪次的增加,歷史記錄中冗長的工具輸出、大型代碼塊或 XML 結構會迅速佔用上下文窗口,導致 Token 消耗過高。
dsh-shake 是一個第三方 Host 插件,用於手動減少上下文使用。它通過將舊工具輸出和大型代碼/XML 塊替換爲短佔位符來釋放空間,並支持通過 shake_read 工具在需要時恢復原始文本。
核心功能¶
該插件主要提供以下能力:
* 佔位符替換:自動識別並替換符合條件的歷史文本爲短佔位符。
* 上下文保護:默認保護最近 4000 tokens 的歷史記錄,防止過早清理關鍵上下文。
* 內容恢復:通過 shake_read 工具讀取被替換的原始文本片段。
* 靈活配置:可自定義清理閾值(如代碼塊最小長度)。
安裝與啓用¶
在安裝前,請確保環境已初始化 DSH Web Profile。
- 確認 DSH 版本:
dsh --version
- 安裝插件:
dsh plugin --profile web add dsh-shake@latest --ignore-scripts
- 檢查配置輸出,確認包含
dsh-shake。 - 重啓 Web 服務使配置生效:
dsh web
使用方法¶
插件的使用分爲“調度清理”和“恢復文本”兩個步驟。
調度清理¶
- 等待當前會話處於空閒狀態。
- 在 Web 界面的消息輸入框發送:
/shake
- 系統確認後,清理請求已保存。此時不會立即調用模型,也不會立即減少上下文。
- 發送下一條正常消息。DSH 會在發送給模型請求之前,執行清理操作並替換 eligible 文本。
取消清理¶
如果需要取消當前待處理的清理請求:
/shake cancel
注意:取消只能針對未執行的請求,已執行的替換無法撤銷。
清理範圍¶
插件默認從最新的歷史記錄向前回溯,保護最近 4000 tokens。超過此邊界的消息會被完整保留。
在此邊界內,只有滿足以下條件的內容纔會被替換:
- 工具結果:單個結果的總文本量需達到 1000 tokens 以上。
- 助手回覆:單個 fenced 代碼塊或 XML 塊需達到 400 tokens 以上。
以下內容不會被清理:
* 用戶、系統及開發者消息。
* 錯誤工具結果。
* 包含圖片、思考(thinking)或非文本塊的消息。
* 普通長段落文本。
配置參數¶
默認配置已能滿足大部分需求。如需調整,在對應 Profile 的 cordis.patch.yml 中添加配置覆蓋(不要添加第二個插件實例):
- id: dsh-shake
config:
protectedTokens: 4000 # 保護的最近歷史 token 數
toolTextMinTokens: 1000 # 工具結果清理的最小 token 數
assistantBlockMinTokens: 400 # 代碼塊清理的最小 token 數
readDefaultLimit: 2048 # shake_read 默認讀取頁大小(Unicode code points)
readMaxLimit: 4096 # shake_read 最大讀取頁大小
重啓 DSH 後配置生效。
讀取原始文本¶
被替換的文本會保留一個包含 ref 的佔位符。模型可以通過調用 shake_read 工具來獲取原始內容。
工具參數:
* ref: 從佔位符中複製的完整引用字符串。
* offset: 當前頁的起始偏移量,從 0 開始。
* limit: 每頁讀取的字符數,最大不超過配置的 readMaxLimit。
響應字段:
* text: 當前頁的文本內容。
* offset: 當前偏移量。
* totalLength: 片段總長度。
* nextOffset: 下一頁的起始偏移量。
* done: 布爾值,表示是否讀取完成。
注意:
* shake_read 只能讀取實際被移除的片段。
* 偏移量和長度以 Unicode code points 計數,而非字節或 UTF-16 長度。
* 文件路徑等非 ref 格式參數不被接受。
注意事項¶
- 第三方插件:dsh-shake 由社區維護,非 DeepSeek 官方產品。
- 無摘要生成:插件不生成摘要,也不刪除原始日誌,僅做佔位符替換。
- 執行時機:
/shake僅調度清理,實際替換髮生在下一個模型請求前。 - 權限限制:插件以當前 DSH 進程權限運行,建議安裝前檢查源碼與許可證。
總結¶
dsh-shake 提供了一種靈活、可控的方式來管理長對話的上下文大小。對於需要保留特定長代碼片段或工具日誌,但又希望壓縮歷史記錄的開發者來說,這是一個實用的工具。更多細節可參考 GitHub 倉庫。