前言¶
DeepSeek Harness(DSH)採用「一切皆插件」的理念,官方插件生態提供了基礎能力,但有時需要更細粒度的控制,比如在宿主層重寫提示詞、調整審批閘門或沙箱策略,而不僅僅是依賴模型自身的拒絕行爲。dsh-purge 便是爲此設計的一款插件,它把「模型層」和「宿主層」分開,讓你在本地已安裝的 DSH 上做受控的紅隊評測。
該插件由維護者 ZXEB 開發,當前版本爲 v1.1.71。原倉庫 YuJunZhiXue/dsh-purge 與 npm 包均已刪除,本倉庫爲鏡像重建版,保留署名要求不變。
這是什麼¶
dsh-purge 是給本機已安裝的官方 DeepSeek Harness 用的紅隊 / 魯棒性評測插件。它不改模型,改的是宿主層:Harness 在運行時重寫提示詞、審批閘門、沙箱策略、會話遷移,所以「模型不答」很多時候不是模型拒絕,而是宿主層攔住了。這個插件把這兩層分開,讓你在自己的安裝上做受控評測。
插件在會話標題旁提供 dsh-purge 按鈕,右側欄包含「清洗」與「演練臺」兩頁。支持官方 Web(dsh web)和官方桌面 EXE,兩個宿主分別安裝、分別應用,不要交叉。
核心能力¶
補丁(清洗)¶
按組列出每個補丁的 applied / pending / missing_file 狀態;重複應用冪等。補丁寫入宿主的覆蓋文件,不寫死盤符,優先級爲 $DSH_HOME > dsh 啓動器旁的 .dsh > ~/.dsh。
提示詞注入¶
默認注入插件內加密內置的那份(提示詞框默認顯示的內容),不讀宿主磁盤;也可自己編輯 $DSH_HOME/prompt-inject.md 覆蓋。
規則集¶
多套 AGENTS.md / CLAUDE.md,啓用即寫入 $DSH_HOME,刪除只從列表移除。
Skill 導入¶
導入壓縮包或文件夾到當前宿主的 $DSH_HOME/skills/<id>/SKILL.md,由 DSH 自己加載;卸載插件不刪你的 Skill。
自己的服務器¶
每行登記一臺 IP 或完整主機名,寫入 $DSH_HOME/net-scope-allow.txt;密鑰、密碼、網段、通配符保存時會被丟掉。
回退¶
輸入框旁「回退一次 / 回退上一輪」,已發送內容回到輸入框,可從當前這一輪重來;聊天裏 /rewind 等價。
演練臺¶
首次進入需讀聲明、等倒計時、滾到文末、勾選三項,之後纔可用;清洗不需要這一步。
自動重試 / 續跑¶
autoRetry 失敗重試、autoContinue 自動續跑,次數可配。
環境要求¶
| 項 | 要求 |
|---|---|
| dsh | 0.2.x,本包 dshTarget 爲 0.2.0-rc.2(0.1.x 不要用) |
| 宿主 | 官方桌面 EXE(profile desktop)或官方 dsh web(profile web) |
| Node.js | ≥ 18;Windows 下要「無閃窗」需要 ≥ 22 |
| 包管理器 | 用 dsh 自帶的 pnpm(dsh plugin 會調用它) |
| 網絡 | 首次安裝需要能訪問 GitHub;離線時可用本地目錄或手動方式 |
安裝與啓用¶
4.0 先確認你要裝到哪個宿主¶
| 你在跑 | profile | 說明 |
|---|---|---|
| 官方桌面 EXE(DeepSeek Harness 0.2.0-rc.2) | desktop |
profile 必須先啓動過一次客戶端才生成,安裝前要完全退出(托盤右鍵退出) |
官方 dsh web |
web |
停掉正在跑的 dsh web 再裝 |
確認 $DSH_HOME 是不是你實際在用的那一份:
# Windows PowerShell
$cands = @()
if ($env:DSH_HOME) { $cands += $env:DSH_HOME }
$cands += "$env:USERPROFILE\.dsh"
$cands += @("$env:APPDATA\DeepSeek Harness\dsh-home", "$env:LOCALAPPDATA\DeepSeek Harness\dsh-home")
$cands | Select-Object -Unique | Where-Object { $_ -and (Test-Path (Join-Path $_ "profiles")) }
# macOS / Linux
ls -d "${DSH_HOME:-$HOME/.dsh}"/profiles 2>/dev/null
進到 profiles/<web|desktop>/package.json,"name" 應該是 dsh-profile-web 或 dsh-profile-desktop。
4.1 方式 A:從本倉庫 tarball 一鍵安裝(推薦)¶
聯網、dsh 可用時最省事:
# Web 宿主
dsh plugin --profile web add https://github.com/ZXEB/dsh-purge/archive/refs/heads/master.tar.gz
# 桌面宿主(先完全退出桌面客戶端)
dsh plugin --profile desktop add https://github.com/ZXEB/dsh-purge/archive/refs/heads/master.tar.gz
macOS / Linux 同一條命令。
裝完 profile 的 package.json 裏會多出一條依賴:
"dsh-purge": "https://github.com/ZXEB/dsh-purge/archive/refs/heads/master.tar.gz"
同時在 dsh.profile.bundles 末尾自動登記 dsh-purge。兩條都在 = 裝對了。
4.2 方式 B:本地目錄安裝(離線可用)¶
已經 clone / 解壓到本地時,直接把目錄當包源:
# 目錄裏必須能直接看到 package.json(即 dsh-purge 倉庫根)
dsh plugin --profile desktop add D:\path\to\dsh-purge
dsh plugin --profile web add /path/to/dsh-purge
當前 shell 就在倉庫根時也可以:
dsh plugin --profile web add .
離線拷貝要拷整個目錄(lib/ client.js docs/ presets/ skills/ bin/),不要只拷幾個 .js —— client.js 是側欄前端產物,缺了就只有命令行、沒有面板。
4.3 方式 C:手動安裝(CLI 裝不上時兜底)¶
只改正在用的那個宿主對應的 profile,不要動另一個,也不要刪原有 bundle。
第 1 步:把插件放進 $DSH_HOME/plugins/dsh-purge
目錄名必須是 dsh-purge,裏面 package.json 的 "name" 也必須是 dsh-purge。
git clone https://github.com/ZXEB/dsh-purge.git "$DSH_HOME/plugins/dsh-purge"
沒有 git 就下載 master.tar.gz,解壓後把 dsh-purge-master 改名成 dsh-purge,整夾放進 plugins/。
第 2 步:備份並修改 profile 的 package.json
Web → $DSH_HOME/profiles/web/package.json;桌面 → $DSH_HOME/profiles/desktop/package.json。只追加兩處:
dependencies增加"dsh-purge": "file:../../plugins/dsh-purge"dsh.profile.bundles末尾追加"dsh-purge"(已有就別重複加)
{
"name": "dsh-profile-web",
"private": true,
"dependencies": {
"dsh-purge": "file:../../plugins/dsh-purge"
},
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"dsh-purge"
]
}
}
}
JSON 必須合法(新增項前有逗號、最後一項後沒有多餘逗號)。file: 保持相對路徑;patchReload、其它插件、版本號都別動。
第 3 步:只在剛改的那個 profile 目錄裏裝依賴
cd "$DSH_HOME/profiles/web" # 或 profiles/desktop
pnpm install
成功標誌:出現 profiles/<web|desktop>/node_modules/dsh-purge/package.json。報 Could not resolve 就查 file: 路徑;JSON 解析失敗就修逗號或還原備份。
4.4 方式 D:Release 壓縮包¶
倉庫推 master 會由 GitHub Actions 自動出 Release(附件 = dsh-purge-<version>.zip)。下載解壓後:
4.5 dsh 不在 PATH 怎麼辦¶
桌面版自帶一份 CLI,Windows 通常在安裝目錄下:
<安裝目錄>\resources\runtime\cli\bin\dsh.cmd
例如 D:\dsh\resources\runtime\cli\bin\dsh.cmd。直接用它,參數完全一致:
& "D:\dsh\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add D:\path\to\dsh-purge
先 Get-Command dsh 看一眼有沒有;沒有就用上面的絕對路徑。
4.6 安裝後的三步(不做等於沒裝)¶
- 完全退出並重開你裝的那個宿主:桌面端托盤退出再開;
dsh web停進程再啓動。 - 在那個宿主上點會話標題旁的 dsh-purge → 清洗 → 應用(不在設置頁裏)。
- 應用成功會自重啓一次(補丁要重啓後才加載);沒跑完就不會重啓。
Web 的開關隻影響 Web,桌面的開關隻影響桌面。不要在一個宿主裏給另一個宿主點應用。
4.7 安裝驗證清單¶
- [ ]
profiles/<web|desktop>/package.json裏同時有dependencies.dsh-purge和dsh.profile.bundles裏的dsh-purge - [ ]
profiles/<web|desktop>/node_modules/dsh-purge/package.json存在 - [ ] 宿主界面會話標題旁出現 dsh-purge 按鈕,右側欄能打開
- [ ] 聊天裏
/purge status打印DSH_HOME與補丁列表,且路徑是你實際在跑的那份 - [ ] 模型側有
purge_status/purge_apply/purge_revert三個工具(說明 bundle 已加載) - [ ]
node <插件>/bin/dsh-purge.js --status能列出補丁狀態
典型用法¶
在會話標題旁點擊 dsh-purge,進入「清洗」頁:
- 查看補丁狀態(
applied / pending / missing_file)。 - 選擇一組規則,點擊「應用」。
- 插件會自動重啓宿主,應用成功後重啓。
- 回到聊天界面,嘗試原問題,觀察模型行爲是否變化。
如需自定義提示詞,編輯 $DSH_HOME/prompt-inject.md,保存後再次點擊「應用」即可覆蓋默認內容。
適用場景與注意¶
該插件適合需要在宿主層做精細控制的紅隊評測、提示詞注入測試,以及需要多套規則集切換的評測場景。安裝前應檢查源碼與許可證(MIT),確保符合使用場景。
插件以當前 DSH 進程權限運行,修改的是宿主覆蓋文件,不會改動官方 Harness 源碼樹。卸載插件不會刪除已導入的 Skill 或已編輯的規則集。
結語¶
dsh-purge 通過在宿主層注入補丁,將模型能力與宿主策略解耦,爲本地化紅隊評測提供了可控的途徑。版本爲 v1.1.71,依賴 DSH 0.2.x。
- 目錄頁:https://www.skillhub.cn/plugins/ZXEB/dsh-purge
- GitHub:https://github.com/ZXEB/dsh-purge