前言¶
在使用 DeepSeek Harness 進行多輪會話開發時,會話上下文中的圖片附件往往會不斷累積:工具產出的截圖、Agent 讀取的界面、早期輪次粘貼的文件等。這些圖片會在每一步請求中被重新上傳。實測數據顯示,一個會話攜帶 13 張附件(約 14.7 MB base64),在 0.07–0.10 MB/s 的上行速率下,僅此一項每步就要消耗 100–140 秒,極易觸發網關超時(約 150 秒)。
現有的路由級解決方案是設置 maxRequestImageBytes 上限。但這是一種基於字節的“字節預算”策略,通常只會保留最新的圖片。這會導致一個尷尬的結果:真正依賴的原始參考圖被隱藏,而最新生成的產物卻可見。
dsh-image-governor 插件將選擇權交還給開發者,允許你針對單個會話,明確指定保留哪些圖片,將不需要的移出模型視野。
插件定位¶
- 名稱:
dsh-image-governor - 定位:Session image payload governor(會話圖片載荷治理器)。
- 功能:審計會話當前攜帶的圖片,允許手動篩選並移除多餘圖片,僅改變模型視野,不刪除實際附件。
- 維護者:2432450223
- 許可證:MIT
核心功能¶
交互界面¶
- Picker 浮層:在右下角提供整屏浮層(
shell.overlay),列出所有攜帶圖片的會話。同一面板也會註冊在會話標題旁。 - 操作方式:面板打開時默認不勾選任何圖片。複選框是操作對象,支持預設邏輯(保留最新、模型不可見、全選、清空)。
- 撤銷機制:每次寫入變更後,面板會提供撤銷入口。
命令行工具¶
- 查看狀態:
/images status。顯示歷史圖片大小、實際發送載荷、以及被上限規則隱藏的圖片。 - 移出圖片:
/images clear [keep <seq|name|id> …] [--newest N] [--yes]。- 支持通過序號、文件名或 ID 指定保留項。
--newest N用於快速保留最近 N 張。- 不加
--yes時僅預覽,不加參數則清空。
- 恢復圖片:
/images restore [--yes]。將之前移出的圖片重新放回視野。
安裝與啓用¶
該插件爲純 JavaScript,無構建步驟。安裝命令如下:
dsh plugin --profile web add github:2432450223/dsh-image-governor
典型用法¶
- 確認當前圖片載荷:
在會話中輸入:
/images status
查看當前有多少張圖片,以及它們佔用的帶寬。
- 清理不需要的圖片:
如果不需要某幾張,勾選它們並執行:
/images clear
系統會彈出預覽,確認無誤後加上 `--yes` 強制執行:
/images clear --yes
- 恢復誤刪的圖片:
如果發現誤刪,立即執行:
/images restore --yes
技術細節與限制¶
- 實現原理:插件不修改已凍結的出站請求。它利用會話格式允許的
surface-replacing協議,追加位置替換操作({ op: 'replace', start, end }),將圖片塊替換爲文本佔位符。原始圖片事件仍保留在 append-only 日誌中,因此恢復功能成立。 - 文件操作:插件不刪除任何附件。附件服務本身不提供刪除操作,且該插件也不寫入附件服務。
- 執行時機:寫入操作僅在會話處於空閒狀態時執行。當 Agent 正在運行回合時,寫入請求會被拒絕。
- 依賴情況:零依賴,純 JavaScript。通過
ctx.get讀取服務,缺省服務僅降級而不阻塞啓動。 - 權限注意:該插件運行在 DSH 進程權限範圍內。安裝前請務必檢查源碼與許可證(MIT)。
結尾¶
dsh-image-governor 提供了一種精細化的方式來管理會話上下文中的圖片,避免因附件氾濫導致的性能損耗和上下文丟失。更多細節與源碼可參考項目主頁。