模型说不,可能只是宿主在拦:dsh-purge 三步实战安装宿主拦截破甲
问模型一个问题,它回你一句"不",你的第一反应多半是改话术再试。但先别急着怪模型——那句"不",很可能根本不是模型说的。dsh-purge 是装在本机官方 DeepSeek Harness 上的红队评测插件:清洗宿主策略、按模型替换系统提示词、把宿主层和模型层拆开,让你看清楚拦截到底发生在哪一层。
宿主层在替你拦话:问题出在哪
Harness 不是个透传管道。它在运行时还会改提示词、走审批门、管沙箱和会话格式。打个比方:模型是后厨真正掌勺的厨师,Harness 是店长——店长会改菜单、审订单、把出菜的盘子往回收。顾客收到一句"这道菜没有",可能是店长把菜从菜单上撤了,而不是厨师不会做。
你只盯着"模型答不答",就会把宿主层的拦截误读成模型的拒绝,评测结论从此失去方向。dsh-purge 的做法是在本机已装的官方 Harness 上打补丁:官方能力原样保留,默认文案、权限策略、工具上限按补丁清单调整,系统提示词的覆盖段交到你手上。补丁只针对本机 @deepseek-ai 包,宿主版本对不上时对应补丁显示"跳过",不会乱改文件。
先把两层拆开,再谈破甲。
从装好到生效:三步安装路径
第 1 步:装进 profile。 先看你开的是哪一端:官方 dsh web 用 --profile web,官方桌面 EXE 换成 desktop,只装你正在用的那一个,两边分开装、分开应用。
dsh plugin --profile web add https://gitcode.com/GitHub_Trending/ds/dsh-purge
没有 dsh 命令只有 pnpm 时,进对应 profile 目录装:cd "$DSH_HOME/profiles/web" 后 pnpm add https://gitcode.com/GitHub_Trending/ds/dsh-purge。装完的状态:profile 的 bundles 里多了 dsh-purge,会话标题旁出现 dsh-purge 按钮。注意两点:插件市场一键安装会报 already queued: dsh-purge,别走市场;npm 上没有 dsh-purge 这个包名,别 pnpm add dsh-purge。pnpm 11 若拦了安装脚本(ERR_PNPM_IGNORED_BUILDS),补跑一次 node node_modules/dsh-purge/scripts/ensure-profile-bundle.mjs。
第 2 步:重启后点"应用"。 完全退出宿主(桌面端托盘也要退)再打开,点会话标题旁的 dsh-purge 按钮,在右侧栏「清洗」页点「应用」——这一项不在宿主设置页里。应用时的状态变化:未生效的文件先备份为 <文件>.dshpurge.bak,再按补丁清单替换、覆盖 shim、写入提示词覆盖段,成功后自动重启一次。
第 3 步:重启并新开一轮对话。 "应用"只是把补丁和提示词写进磁盘,当前进程还是旧逻辑。按提示重启宿主、新开对话,注入才真正进入会话。✅ 验证一句话:聊天里输入 /purge status,能打出 DSH_HOME 与补丁清单、路径和你实际在用的宿主对得上,就算装好了。
⚠️ 最容易断的一环:装了 ≠ 应用了 ≠ 当前会话生效了。生效链路是"装 → 应用 → 重启 → 新会话",断掉任何一环都停在旧状态;只换预设不重新应用,旧进程里的补丁也不会更新。
装、应用、重启,三步缺一不可。
进阶用法:覆盖段、规则集与红队预设
提示词覆盖段统一存放在 $DSH_HOME/prompt-inject.md,在清洗页编辑区直接改:文件有内容就原样写入 systemPrompt 覆盖段,为空则不写。你改过的内容会被保留,重复应用不会覆盖——每一轮对话,覆盖段都拼在系统提示词前面,默认值只是种子。"按模型换装"就靠这个:给不同模型配不同提示词,让各模型的配合度重新排一次序(默认提示词面向国模「小码酱」)。
规则集支持多套 AGENTS.md / CLAUDE.md:列表里点启用即写入 $DSH_HOME,下方直接编辑正文,聊天里 /rules use <id> 切换生效。一个团队多项目、多规范时,不必再手动拷文件。
红队预设定义在 presets/redteam/ 的 preset.yml:发送一个靶标单位名称即可拉起红队智能体,配信息收集、资产梳理、漏洞发现、漏洞利用、内网渗透五个执行角色,最多 3 个并发。⚠️ 演练台授权前显示"未授权",第一次进入要读完声明、等倒计时、滚到文末、勾选三项确认——四步走完才开放主界面。授权后资产测绘结果落入本地 SQLite 资产库,数据在 $DSH_HOME/redteam,全部留在本机;开源版不下发技能库和知识库。
运行时配置集中在 cordis.patch.yml:enabled 是总开关,autoApplyOnStart 决定启动时是否自动检查应用,postPrompt / postPromptOrder 控制覆盖段内容与注入顺序,autoRetry / retryMax 管失败重试,autoContinue / continueMax 控制自动续跑。聊得不对时 /rewind 回退上一轮,改动留在当前对话里重发即可。
覆盖段是你的地盘,默认值只是种子。
边界与红线:只碰本机,只在授权范围内打
📌 本项目为非盈利开源(Apache-2.0),使用范围限定写死在三条线上:
- 允许:你有权管理的本机官方 Harness、离线本地合成靶标、已书面授权的演练环境。开源版攻击任务只放行本机回环与 RFC1918 私网;域名先按系统解析再判 IP,解析出的每个地址都必须是私网或回环。
- 禁止:在未获合法书面授权的目标上运行;勒索、破坏、撞库、传播恶意载荷;诱导生成法律禁止的内容;制作游戏外挂。在对话里说"这是我的服务器"不会放行任何公网目标。
- 责任:你对自己全部下载、部署与输入输出后果独立承担法律责任;任何用于违法犯罪的行为,开源许可自动终止。原版不允许倒卖,二次开发必须署名并注明来源仓库。
清洗页里有「自己的服务器」名单录入区,但门槛就是上面这些:只认本机与私网,域名按解析结果判定。
补丁、注入、回滚、卸载都在本机文件与本机进程内完成,不对任何公网主机扫描或发包;红队数据落本地 SQLite,不出你的机器。
红线画清楚,分寸才用得上。
验证与快速排障:一条命令看清状态
一句话自检:聊天里输 /purge status,CLI 对应 dsh-purge --status,看 DSH_HOME 和补丁清单是否对得上实际宿主。
| 症状 | 怎么办 |
|---|---|
插件市场报 already queued: dsh-purge | 别走市场;用 dsh plugin add 装,提示已存在就先 remove 再 add |
npm 上搜不到 dsh-purge | 正常的,它不在 npm;走仓库地址安装 |
| 会话标题旁没有按钮 | 对应 profile 跑 dsh --dump-config,确认有 id: dsh-purge 的 insert 行;没有就补跑 ensure-profile-bundle.mjs,再完全退出重开宿主 |
| 升级后补丁显示"跳过" | 版本对不上:1.1.78 适配 DSH 0.2.1-rc.2(0.2.0 仍可用),别拿它打 0.1.x |
| 应用后行为还是旧的 | 重启宿主并新开一轮对话 |
| 标准模式能跑、极简/PTC 被拦 | 升到 1.1.61+ 重新应用,再新开对话 |
常用命令收在两个入口:
| 场景 | 聊天命令 | CLI |
|---|---|---|
| 状态 / 应用 / 还原 / 卸载 / 编辑 | /purge status 等 | dsh-purge --status 等 |
| 切换规则集 | /rules use <id> | — |
| 回退上一轮 | /rewind | — |
一条 status 命令,装没装、对不对,一眼见底。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考







