前言¶
DeepSeek Harness (DSH) 生態遵循“一切皆插件”的理念。在開發或使用過程中,一個常見問題是:插件開發知識庫在純聊天場景下無意義,而生圖工具在代碼編寫場景下顯得多餘。所有插件默認向模型注入所有能力,導致上下文窗口被大量無關信息佔用。dsh-plugin-context-trim 插件旨在解決這一問題,它提供會話級的注入門控,允許用戶按會話裁剪注入模型的 skill、tool 以及系統提示詞段落。
核心功能¶
本插件通過“影子條目”機制實現會話級裁剪,不污染全局註冊表。主要功能包括:
- 按會話裁剪 skill:對同名影子技能設置
modelInvocable:false,使模型在調用時無法看到該技能。 - 按會話裁剪 tool / MCP 工具:通過
tools.restrict({ deny })隱藏特定工具,未知名工具自動跳過。 - 按會話裁剪提示詞段落:創建同名空文本 section 或 context,渲染層自動丟棄,無法歸屬插件的段落默認鎖定。
- 樹表彈窗:提供按插件聚合的視圖,支持組行批量設置、三態勾選,且可拖動/縮放。
- 關鍵能力保護:文件讀寫、控制台、技能總閘等關鍵能力帶警告標識,取消需二次確認。
- 會話鎖定與強制更改:會話一旦開始(落盤 ≥1 步)即鎖定,防止運行中修改;支持“強制更改”熱生效。
- 新會話默認模板:支持將當前裁剪方案保存爲工作區默認模板,新會話自動套用。
- 狀態點:通過顏色標識會話狀態(綠=全量、橙=有裁剪、灰鎖=已鎖定)。
安裝¶
安裝過程無需任何配置。使用官方提供的命令即可完成掛載:
dsh plugin --profile web add dsh-plugin-context-trim
安裝完成後,需重啓 dsh launcher 並刷新瀏覽器。插件會自動應用 cordis.patch.yml 掛載行,無需手動修改配置。
使用¶
啓用裁剪功能的操作步驟如下:
- 新建一個會話,點擊輸入欄左下角的漏斗按鈕(標記爲“注入”)。
- 彈出的樹表視圖列出了所有能影響模型上下文的插件。展開不想注入的插件組,點擊組行的勾選框進行批量取消。
- 底部會實時顯示已裁剪項數及預計減少的字符數。
- 點擊「應用」,本會話立即生效,模型上下文中不再出現被裁剪的內容。
- 點擊「存爲默認」,可將當前勾選狀態保存爲該工作區新會話的默認模板。
實現機制¶
插件在 agent 作用域層疊加同名“影子條目”來壓制全局原條目。註冊表裏的原條目保持不變,僅在當前 agent 的生命週期內生效。
- Skill:註冊同名影子技能,設置
modelInvocable:false,使<available_skills>目錄消失,且按名加載該 skill 被拒絕。 - Tool / MCP:調用
agent.ctx.tools.restrict({ deny:[name] })逐工具隱藏。 - 提示詞段落:調用
agent.ctx.systemPrompt.section(同名, text:'')創建空文本段落,渲染層會自動丟棄。
這種機制保證了零殘留、零跨會話影響。重複應用時,會先 dispose 上一代再重建,確保冪等性。
兼容性與限制¶
- 目標版本:DeepSeek Harness
0.1.2-rc.1。 - 運行環境:Node.js ≥ 18,純插件實現,不改核心包。
- 數據存儲:零配置,數據自動持久化在
$DSH_HOME/dsh-plugin-context-trim。 - 安全限制:HTTP 路由僅接受本機迴環來源(
remoteAddress爲空一律拒絕),校驗Host頭僅允許 127.0.0.1/localhost 且端口匹配,請求體上限 2MB。
注意事項¶
- 歷史消息:會話中途裁剪後,歷史消息中的舊目錄內容仍會保留,模型以最新目錄爲準。
- MCP 競態:MCP server 重連後新增的工具可能暫時不受門控,需手動處理。
- 動態插件:動態 cordis 插件(cordis_run)的 scoped 工具不受 restrict 約束。
結語¶
dsh-plugin-context-trim 是 DeepSeek Harness 生態中第一個按會話裁剪上下文注入的插件。通過簡單的 UI 操作,開發者可以在不修改核心包的情況下,精確控制每個會話接收到的信息,有效優化上下文窗口利用率。