前言¶
DeepSeek Harness (DSH) 在處理長任務時,通常只提供兩種上下文狀態:保留全部內容,或者由 dsh-compaction-basic 壓縮成一個不可見的摘要。在大規模任務中,這會導致垃圾數據(如 4k token 的 grep 堆棧、已解決的子任務)長期佔用窗口,直到觸發閾值進行無法檢查或撤銷的壓縮。
catsenior507/dsh-context-assembler 將上下文從單純的“長度”轉變爲“一組決策”。它基於會話日誌構建可檢查的上下文樹,允許你通過瀏覽器面板控制模型實際接收的內容,同時保持未修改節點的 KV 緩存兼容性。
核心功能¶
該插件在 DSH 會話表面(Session Surface)之上建立了一個上下文樹。其核心操作是將 N 個連續的事件節點替換爲 1 個節點,從而改變模型接收到的內容。
節點模式
每個節點支持三種模式,通過三態開關切換:
* full:原樣保留內容,不做替換。
* key:保留關鍵信息,內容會被替換爲摘要。
* off:丟棄內容,僅保留極短的標記(可配置爲 0 tokens)。
主要能力
* 上下文樹:基於會話日誌生成,支持按層級查看(turn -> step -> system/user/assistant/tool)。
* 瀏覽器面板:提供可視化編輯、實時預覽/應用、統計信息(可見/摺疊/原始 token 數)。
* 代理工具:註冊了 context_assembler 工具,支持 tree、set、preset、messages 四個操作。
* KV 緩存兼容:因爲只替換被摺疊的節點,未修改的節點位置保持不變,可被 Provider 複用 KV 緩存。
安裝與啓用¶
使用官方安裝命令添加插件:
dsh plugin --profile web add https://github.com/catsenior507/dsh-context-assembler
安裝後需重啓 dsh web 進程以加載插件。dsh-web-watchdog 面板通常提供快速重啓按鈕。
使用方式¶
瀏覽器面板操作¶
- 打開面板:在瀏覽器中按下快捷鍵
Ctrl+Shift+K,或者點擊界面右下角的 Assembled Context 按鈕。 - 會話選擇:默認顯示最近活躍的會話。子代理會話會單獨列出,因爲它們擁有獨立的表面。
- 編輯樹:
- 在樹視圖中,每一行代表一個節點(turn、step、system、message 等)。
- 點擊行首的三態開關切換
full/key/off。 - 頂部工具欄提供快捷操作,例如“工具結果設爲 key”、“關閉所有內容”或“展開所有”。
- 應用更改:調整完成後,點擊底部的 Apply 按鈕。只有點擊 Apply 後,更改纔會寫入會話日誌,否則僅保存在瀏覽器內存中。
代理工具¶
該插件向模型註冊了 context_assembler 工具,支持以下動作:
tree:讀取當前上下文樹的結構,包括 surfaceSeq、節點類型、當前模式和估算 token 數。set:通過 surfaceSeq 修改節點的模式。digest 由模型自行編寫,dryRun 可用於預覽效果。preset:編寫規則預設,供用戶一鍵應用。messages:查看模型當前實際接收到的消息及其 token 總數。
這讓代理可以在子任務完成後,主動將自己操作的歷史摺疊爲單行結論,而不是被動等待壓縮。
注意事項¶
- 實時派生:面板每次打開時都會從會話日誌重新派生樹,不依賴插件的持久狀態。這意味着恢復會話、切換進程或代理自行摺疊後,面板顯示與日誌是一致的。
- 原子性要求:工具調用(tool-call)與其結果必須保持原子性(完整組)。插件會自動擴展摺疊範圍以覆蓋整個工具組。
- 摺疊恢復限制:目前的表面替換僅支持 N→1。多節點摺疊(N>1)無法完美恢復。插件明確說明:單節點摺疊可原樣恢復,多節點摺疊會恢復爲帶有分隔符的完整重放消息。
- 配置細節:配置文件中包含 loopback API 端口設置(如 port: 4799),用於在無 webServer 環境下的通信。
總結¶
Assembled Context 將 DSH 的上下文控制權交還給了用戶和代理。通過瀏覽器面板和代理工具,你可以精細管理 Token 預算,避免無關歷史污染窗口,同時利用 KV 緩存優化性能。