前言¶
在 DeepSeek Harness(DSH)裏跑智能體時,模型常會連續調用 shell、workflow、subagent 等重工具。整機物理內存或提交內存一旦被喫緊,Windows 容易進入換頁風暴,連再拉一個 pwsh 都困難——這不是「慢一點」,而是宿主和對話一起卡死。社區裏有不少只監控、不動作的插件,也有隻在 Code Mode 容器裏做 cgroup 硬限的方案,但 README 作者逐項覈對後認爲:沒有現成的包能對 harness 本體做「採樣 → 分級 → 降優先級 / 攔重活」這一整條鏈路。dsh-rampart(維護者 tataCrayon,分類 admin-security)就是補這一層:在機器被壓垮之前先踩剎車,並讓用戶在 Composer 輸入框下方看到 DSH 進程樹佔用了整機多少內存。
這是什麼¶
dsh-rampart 是給 DSH 加的內存壓力護欄。它週期性讀取可用物理內存與可用提交內存,分成 normal / warn / critical 三檔;CPU 佔比只展示,不參與 gradeOf() 分級。壓力升高時可把宿主降到 below-normal 優先級、可選釘核,並在 critical 時拒絕配置名單裏的重工具調用;同時提供 resource_guard 工具供模型讀實時讀數。另有一條可選的啓動殼(scripts/launch.mjs),用 Windows Job Object 給整棵 Electron 進程樹套內存硬頂——與插件層的「軟護欄」分工不同,README 明確:插件本身不能給已運行的宿主加無法解除的 Job 硬頂。
與 npm 上另一作者的 dsh-resource-guard 不是同一個東西;本插件爲避讓而改名 rampart。
核心功能¶
兩層分工¶
| 層 | 作用 | 位置 |
|---|---|---|
| 插件(軟) | 採樣 → 分級 → 降優先級、釘核、攔重活、給模型結構化反饋 | lib/ |
| 啓動殼(硬) | Job Object 內存硬頂,撞上由系統拒絕 | scripts/launch.mjs |
分級與攔截¶
gradeOf() 只看四個內存閾值(見配置表),整機 CPU 與 DSH 進程樹 CPU 只進入 Composer 讀數條與面板。默認 heavyTools 包含 pwsh、bash、shell、workflow、subagent、subagent_fork、send_message、web_fetch、web_search 等;heavyPatterns 默認含 job_*。被攔時返回 RESOURCE_GUARD_DENIED,帶實測讀數與改用輕量工具的建議,而不是一句籠統的禁止。
輕工具(如 read、grep、write、todo_write)在壓力大時也不攔,便於收尾與保存狀態。
Composer 讀數與面板¶
在 DSH 自帶統計(如 tok/s、上下文佔用環)右側顯示類似:
154 tok/s · 緩存命中 49% · 38% · CPU 12% · DSH 1.2 GB
normal 爲灰色,warn / critical 爲警示色(critical 前還有實心點)。點開面板用一根分段條表示整機物理內存中 DSH、其他已用與空閒的佔比;數據經瀏覽器 GET /rampart/api/stats 打宿主路由,不經過模型、不耗 token。面板提供「釋放內存」,僅對本進程 V8 堆做強制 GC,README 說明任務管理器裏的 RSS 不一定明顯變化。
安裝與啓用¶
當前版本 0.2.0,尚未發佈到 npm(registry.npmjs.org/dsh-rampart 爲 404)。README 要求用 release tarball 安裝,不要用 add dsh-rampart,也不要用 add github:tataCrayon/dsh-rampart(易走 SSH 導致未配密鑰時報錯)。
在目標 profile 下執行(示例爲 web profile,請按本機 profile 名替換):
dsh plugin --profile web add https://github.com/tataCrayon/dsh-rampart/releases/download/v0.2.0/dsh-rampart.tgz
開發調試時也可在 $profile\cordis.patch.yml 裏 insert 插件 id rampart、name dsh-rampart,或通過 file:/// 絕對路徑指向 lib/index.js;桌面 profile 保存 patch 後約 2 秒 HMR 重組。需要 Job 硬頂時,在倉庫目錄運行 node scripts\launch.mjs(可先 --dry-run),或雙擊 dsh-guarded.cmd。
運行環境要求(來自 package.json):Node >=20,DSH >=0.2.1-rc.1,peer @deepseek-ai/cordis ^4.0.5。
配置要點¶
配置寫在 patch 的 config 裏,字段與默認值見 lib/config.js。最常改的是四個內存閾值:
| 字段 | 默認 | 含義 |
|---|---|---|
warnFreeMemoryMb |
2048 | 可用物理內存低於此進入 warn |
criticalFreeMemoryMb |
1024 | 低於此進入 critical 並攔重活 |
warnCommitMb |
3072 | 可用提交內存低於此進入 warn;0 關閉 |
criticalCommitMb |
1536 | 低於此進入 critical;0 關閉 |
priority |
on-pressure |
warn 時降優先級,解除恢復;可選 below-normal / unchanged |
limitCores |
0 | 釘核數,0 不動親和性 |
showStatusPill |
true |
是否顯示讀數條與 /rampart/api/* |
statusPillIntervalMs |
2000 | 輪詢間隔,低於 500 會被夾到 500 |
調參口訣(README):閾值應壓在「常態低谷」之下,留約 1 GB 餘量;若長期誤報,往往是提交內存常態就低於默認 warnCommitMb,需按本機實測重定。
典型用法¶
- 安裝 tarball 並啓用插件後,正常對話;壓力到
critical時模型調用pwsh等重工具會收到結構化拒絕,可改調resource_guard查看grade、availPhysMb、deniedCalls等字段再向用戶說明。 - 需要可視化時看輸入框下方讀數,點開面板確認 DSH 與整機內存分段;必要時點「釋放內存」僅回收本進程 JS 堆。
- 若要在啓動階段就限制整進程樹內存,使用啓動殼,例如:
node scripts\launch.mjs --dry-run
node scripts\launch.mjs --cap 12000 --low-priority
適用場景與注意¶
適合:在 Windows 上長期跑 DSH 桌面或 web profile、容易因 agent 重工具把內存頂滿、希望「早攔重活 + 可觀測 DSH 佔用」的開發者。
務必知曉:
- 護欄防的是「DSH 把自己和機器卡死」,不是惡意進程隔離,也不是安全邊界。
- 插件以當前 DSH 進程權限運行;安裝前應閱讀 GitHub 倉庫 源碼與 MIT 許可證,自行評估是否納入 profile。
- 社區插件目錄 skillhub.cn 爲獨立生態站點,與 DeepSeek / 幻方無官方從屬關係;星標數隨倉庫變化,寫作時 GitHub 顯示爲 0。
結尾¶
dsh-rampart 用內存分級、重工具拒絕、可選優先級與 Job 啓動殼,把 DSH 智能體開發裏「內存見底整機假死」的問題前移到可恢復的操作:慢可以,別拖到 shell 都起不來。進一步瞭解與 issue 見 GitHub:tataCrayon/dsh-rampart,目錄頁見 skillhub.cn/plugins/tataCrayon/dsh-rampart。