news 2026/10/21 3:36:28

dsh-purge 提示词管理机制拆解:「小码酱」默认人设如何生效的 3 步

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
dsh-purge 提示词管理机制拆解:「小码酱」默认人设如何生效的 3 步

dsh-purge 提示词管理机制拆解:「小码酱」默认人设如何生效的 3 步

【免费下载链接】dsh-purgeDeepSeek Harness 破甲:让所有模型都能破甲,不同模型可换不同提示词;默认提示词面向国模「小码酱」。Jailbreak for every model — swap prompts per model. 求 Star 收藏 ⭐ 如要二开,请查看署名要求部分项目地址: https://gitcode.com/GitHub_Trending/ds/dsh-purge

dsh-purge 是装在本机官方 DeepSeek Harness 上的开源清洗与评测插件,它把宿主默认策略和模型真实能力拆开,默认提示词「小码酱」(Little Code Sauce,简称 LCS)面向国模,并可按模型切换不同规则集。这篇文章不先讲概念,而是让一份提示词从加密槽出发,走一遍装配改写、幂等守护、规则集切换三道关口,逆向拆解它的提示词管理全流程。

前提与边界:插件只作用于使用者本机已安装的官方 DeepSeek Harness、离线靶标或已书面授权的演练环境,不是公网扫描器,也不含针对第三方系统的攻击载荷。⚠️ 任何未授权攻击或违禁内容生成,由使用者独立承担法律责任。

进会话之前:默认提示词是先加密的

打开仓库lib/目录会发现,默认提示词的明文主文件并不在包内,只留下 lib/default-prompt-inject.zh.md 这类语言变体和一份.bak备份。真正的正文藏在 lib/asset-table.js 里,看起来是一堆 base64 字符串。

这是 scripts/embed-default-prompt.mjs 的产物:构建时把 Markdown 用deflate压缩,再走AES-256-GCM加密(一种对称加密,密文自带校验标签,改动一个字节就能被发现),密文切成 96 字符一段写进资产表。密钥不是写死的,而是由几段固定材料经 SHA-256 混出来的,lib/table-key.js 核心就五行:

const cipher = createCipheriv("aes-256-gcm", mixKey(mask), iv); const packed = deflateSync(Buffer.from(text, "utf8"), { level: 9 }); const body = Buffer.concat([cipher.update(packed), cipher.final()]); return { SLOT: body.toString("base64"), MASK: mask, TAG: cipher.getAuthTag().toString("base64"), IV: iv.toString("base64") };

一份明文变成四个密文字段。运行时 lib/table-read.js 的openSlot()再解密、解压还原成 Markdown。

绕这一圈有两个目的。其一,默认稿不以明文裸奔在 npm 包里,避免被随手改坏。其二,能区分"插件自己写的"和"用户改过的":插件落盘时会把正文的 SHA-256 指纹记进$DSH_HOME/dsh-purge/override-state.json,升级时只有磁盘指纹等于"上次自己写的那份"才覆盖——你改过的prompt-inject.md永远保留。修改入口在清洗页的「提示词」框,默认显示的就是解密后的那份:

身份锁:宿主身份句如何被降级

正文就位后还要过宿主的装配管线。DSH 组装系统提示词时是若干命名"段"拼接,宿主自带身份句是项目明确要洗掉的部分。lib/identity.js 的stripHarnessPersona对每个非插件段逐句过正则:

/You are a coding agent powered by the \{\{model\}\} model, running on the DeepSeek Harness\.?\s*/g, ""

宿主的标准身份句整句删除;带工作目录的变体则降级成一句Working directory: {{cwd}}.——有用的信息留下,身份包装拿掉,官方功能不受影响。

洗完再钉上新身份。lib/core.js 里的默认身份锁只有一段话:

"You are the operator persona in prompt-inject (Little Code Sauce / LCS unless that file names someone else). When asked 你是谁 / who are you, answer with that name only."

一句话定了三条边界:默认人设是 LCS,但prompt-inject.md里另起名就换;被问"你是谁"只答这个名字;宿主标签"我是 DeepSeek 的 AI 助手"不得当身份——那是环境,不是"它"。

最后rewritePromptAssembly把用户注入正文写进 persona 前缀段的开头,顺序设为-100000(最小值,排最前),保证注入段盖住宿主默认人设。

幂等守护:多轮对话里注入为什么不越叠越长

自然的疑问来了:assemble每轮对话都重新调用,注入每轮再写一遍,提示词不会越滚越长吗?

这个坑项目真踩过。1.1.34 时期,每次点「应用」提示词就多约 841 字符且永不收敛,根因是替换产物仍以上一版文本为前缀——过程记录见 release-notes.md 的 #38/#42。修复分两层:

第一层是去重。写入前先检查装配结果:

function assemblyHasExactInject(sections, inject) { if (!inject) return true; return (Array.isArray(sections) ? sections : []).some( (section) => String(section?.text || "").includes(inject) ); }

任何一段已含完整注入正文,就不再追加。第二层是守卫本身幂等:installAssembleGuard给包过的assemble打上_dshPurgeWrapped标记,重复包装直接返回,不会每轮再裹一层代理直到栈溢出。还有个小细节写死在注释里:改写"不原地改写",返回新对象,宿主复用同一个装配对象时下一轮也不会被上一轮污染。

规则集切换:按模型配不同提示词如何落地

项目的主张是:不同模型对人设、语气、拒绝边界的敏感度不同,一套提示词通吃不了。所以提示词做成可切换的多套——默认这套就是面向国模的「小码酱」,跑别的模型再建一套换语气换边界,不用从零写。

实现集中在 lib/rules.js。每套规则集是$DSH_HOME/rules/<id>.md,元数据指向目标文件AGENTS.md或CLAUDE.md,启用时:

const backup = `${target}${BACKUP_SUFFIX}`; if (!fs.existsSync(backup)) { const existing = await fsp.readFile(target, "utf8"); const ruleContents = await collectRuleContents(dshHome); if (!ruleContents.has(existing)) await atomicCopyFile(target, backup); } await atomicWriteFile(target, content);

首次才备份目标文件原件(且它不属于任何已有规则集时),随后原子覆盖,并把激活的 id 记进state.json。源码注释还有一句关键定位:"规则集只改 agents 目标文件,不参与 system 注入链"——规则集与系统注入的prompt-inject.md是两条线,互不干扰。注入正文另有清晰的三级回退(resolveInjectText):

$DSH_HOME/prompt-inject.md(点保存覆盖的那份)> 本进程未落盘的框 > 加密槽

应用与还原:宿主上的唯一写入入口

前面都发生在内存里。真正写进宿主只有一条路:清洗页的「应用」(或聊天里/purge apply)。流程固定:判断补丁是否已生效 → 备份原件为<文件>.dshpurge.bak→ 按补丁列表替换 → 覆盖 shim → 宿主动作成功后自动重启。重复应用是幂等的;升级后原文对不上会显示跳过,但本次应用仍算完成,不乱改文件。

最容易被误解的一点:「应用」只写文件,当前进程还是旧的。重启、新开一轮对话,注入才进当前会话;只应用不重启,看着就像没生效。

还原是镜像操作:「还原」或/purge revert用备份覆盖回去并删备份;prompt-inject.md是用户文件,还原时保留;「卸载」会先还原(若已应用),再删注入文件、规则库和插件本身。

常见坑:「应用了却没生效」的 3 个原因 ⚠️

  1. 只应用、没重启。旧进程的系统提示词不会重建,应用多少次当前会话都不变。完整动作是:完全退出宿主 → 应用 → 自动重启 → 新开一轮对话。
  2. 找错了$DSH_HOME。本机常有两份.dsh,Web 和桌面端各用自己的主目录。先确认你实际启动的那个宿主读的是哪份profiles/*/package.json,拿不准就在聊天里发/purge status,它会打出当前生效的DSH_HOME和补丁列表。
  3. 把规则集当成了提示词。规则集写的是AGENTS.md/CLAUDE.md,系统注入读的是prompt-inject.md。启用一套规则集不会改变当前会话的人设,换身份要改提示词本身。

把这三个坑排掉,你就拿到了这个项目最有价值的东西:宿主层与模型层从此分开。模型不答的时候,你能先分清是宿主默认策略拦的,还是模型自己拒绝的——默认策略该不该收紧,第一次有了可核对的依据。

【免费下载链接】dsh-purgeDeepSeek Harness 破甲:让所有模型都能破甲,不同模型可换不同提示词;默认提示词面向国模「小码酱」。Jailbreak for every model — swap prompts per model. 求 Star 收藏 ⭐ 如要二开,请查看署名要求部分项目地址: https://gitcode.com/GitHub_Trending/ds/dsh-purge

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/21 3:35:23

YOLOv5 PyTorch转TensorRT部署:绕过ONNX NMS陷阱的三明治架构

1. 项目概述&#xff1a;为什么PyTorch版YOLOv5转TensorRT不是“一键转换”&#xff0c;而是一场系统性工程你手头有一份在PyTorch上训练好的YOLOv5模型&#xff0c;精度达标、验证集mAP跑到了0.68&#xff0c;但部署到边缘设备时卡在了3帧/秒——CPU推理慢得像在等泡面煮熟&am…

作者头像 李华
网站建设 2026/10/21 3:34:14

无监督对比学习实战:从核心机制到工程调优

这两年的数据科学圈子&#xff0c;“无监督”三个字被反复提起&#xff0c;但真正落地时大家又常常犯难&#xff1a;标注数据贵、清洗成本高&#xff0c;好不容易攒下几万张图却不知道怎么用起来。我个人的答案是转向对比学习。所谓对比学习&#xff0c;核心思路很简单——不用…

作者头像 李华
网站建设 2026/10/21 3:33:58

从Chatbot到生产级智能体:架构设计、工具调用与落地避坑指南

2025年开年我翻了不少云厂商的技术文档&#xff0c;谷歌云的《AI智能体手册》是我看得比较细的一份。原因很简单&#xff1a;过去一年大家都在做智能体Demo&#xff0c;能跑通一个"问答机器人"就算完成任务&#xff0c;但真正在业务流程里稳定干活、把人力成本实实在…

作者头像 李华
网站建设 2026/10/21 3:33:44

Cascade R-CNN工业零件视觉识别与定位系统落地实践

这个题目看着像论文标题&#xff0c;实际上是从一条自动化装配线的真实痛点里长出来的。我做完这套基于Cascade R-CNN的工业零件视觉识别与定位系统之后&#xff0c;最大的感受是&#xff1a;模型只是最后那层窗户纸&#xff0c;真正的功夫全在数据、成像、标定和部署这些“脏活…

作者头像 李华
网站建设 2026/10/21 3:33:06

Coze工作流搭建AI视频生成全链路:从需求解析到分镜成片

AI视频生成这两年卷得厉害&#xff0c;但很多人拿着coze却只会搭单智能体聊天&#xff0c;最多加个文生图节点&#xff0c;根本发挥不出平台真正的威力。我大概从去年底开始研究在coze里把“需求输入到成片输出”的整条链路用工作流串起来&#xff0c;期间踩了不少坑&#xff0…

作者头像 李华