dsh-prompt-drift:为 DSH 组装后的 system prompt 做漂移门禁

前言

DeepSeek Harness(DSH)里,多个插件或 preset 都会往最终拼出来的 system prompt 里贡献段落。升级某个插件时,模型「被告知什么」可能被悄悄改掉;恶意插件甚至可以把类似「忽略所有安全规则」的文本直接写进 prompt。已有能力里,dsh-mcp-test 侧重约束模型能调哪些工具;面向「入站内容流」的 prompt-injection 类插件也不等于在盯 assembled prompt 本身——那是每个插件都能写、却很少有人逐段 diff 的通道。

下面介绍社区插件 dsh-prompt-drift(维护者 zhengqiuyang,分类 admin-security):在 system-prompt/assemble 流水线上对每个 section 做 name → sha256(text) 指纹,建立 baseline,并在后续每次组装时对比增删改,让 silent rewrite 以告警形式暴露出来。信任路径上不调用 LLM。

这是什么

dsh-prompt-drift 是面向 DeepSeek Harness 的 system prompt 表面漂移门禁:把各插件贡献的 section 哈希后固化 baseline,之后任意一次组装若 section 被增加、删除或改写,就会 diff 并告警(同类漂移按 signature 去重,避免刷屏)。

仓库:https://github.com/zhengqiuyang/dsh-prompt-drift
目录页:https://www.skillhub.cn/plugins/zhengqiuyang/dsh-prompt-drift

当前 package 版本为 0.1.0,许可证 MIT。SkillHub 为社区独立目录,与 DeepSeek / 幻方无官方从属关系。

核心功能

挂钩点与数据流

插件挂在 system-prompt/assemble 上,流程可概括为:

system-prompt/assemble ──> sections [{name, sha256(text)}] name-sorted
                     ──> baseline absent? freeze it (commit the file)
                     ──> diff: added / removed / changed sections
                     ──> warn once per distinct drift (signature dedup)
  1. 每次组装得到按 name 排序的 section 列表,每条记录 section 名称与正文 sha256。
  2. 若 baseline 尚不存在,则冻结当前表面并写入文件(后续应纳入版本管理,作为契约)。
  3. 若 baseline 已存在,则对比新增、删除、内容变更的 section,并对尚未告警过的漂移签名各 warn 一次。

baseline 与动态 section

  • baseline 为稳定的、按 name 排序的 JSON,默认路径见配置项 baselinePath。
  • 随工作目录、时间戳等变化的 section 可通过 ignoreSections 排除,避免误报。

与邻近能力的关系

README 说明:同类里较近的 dsh-modelprint(同为 0★)指纹的是 model config,不是 prompt 表面;本插件专门 watch assembled prompt 本身。

安装与启用

官方安装命令(README 原文,使用 --profile default):

dsh plugin --profile default add github:zhengqiuyang/dsh-prompt-drift

仓库自带预构建的 lib/,通过 dsh plugin add 安装时无需构建步骤,也无需 allowBuilds 授权。

兼容性(资料原文):

  • DSH:在 0.2.x 线验证(源码快照 0.2.1-alpha.2);任意 profile 均可 dsh plugin add 安装。
  • Node:>= 20(CI 矩阵含 Node 20/22/24,Ubuntu 与 Windows)。

启用后,启动日志中会出现形如 [dsh-prompt-drift] active: … 的提示(资料中的 disposable-profile 验证描述)。

配置

在 DSH 插件配置中增加条目,字段以 README 为准:

- id: dsh-prompt-drift
  name: dsh-prompt-drift
  config:
    baselinePath: .dsh-prompt-drift/baseline.json
    rebaselineOnDrift: false
    ignoreSections: []

说明:

  • baselinePath:baseline JSON 的存放路径;首次运行无 baseline 时会在此路径冻结当前表面。
  • rebaselineOnDrift:默认为 false;是否在检测到漂移时自动重定 baseline 需按团队策略自行决定(资料未展开自动重定行为细节时,以仓库后续文档为准)。
  • ignoreSections:不参与哈希对比的 section 名称列表,用于 cwd、时间戳等动态段落。

典型工作流:首次在本机或 CI 上跑通组装 → 将生成的 .dsh-prompt-drift/baseline.json 提交到仓库 → 之后插件升级或 preset 变更若改动了 prompt 表面,会在 diff 阶段发出告警,便于人工审查后再决定是否更新 baseline。

适用场景与注意

适合谁

  • 在 DSH 上叠加多插件、多 preset,且希望 supply-chain 式地审计「模型系统指令表面是否被静默改写」的团队。
  • 需要把 assembled system prompt 的 section 集合当作可 review、可版本化的契约,而不是每次启动黑盒拼出来的开发者。

务必注意

  • 插件以当前 dsh 进程权限 运行;安装前应阅读 GitHub 源码 与 MIT 许可证,确认符合你的安全与合规要求。
  • 本插件不替代 MCP 工具侧防护(如 dsh-mcp-test),也不替代对用户输入流的 injection 扫描;它只覆盖 组装后的 system prompt section 集合。
  • 维护者给出的停更条件:若 DSH 官方后续提供 first-party prompt-surface pinning,本插件将冻结在最后可用版本并在此仓库留 postmortem 说明。

本地开发与自测(维护者文档):

npm install && npm test

结尾

dsh-prompt-drift 把 DSH 里最容易被忽视的一条通道——assembled system prompt——变成可哈希、可 baseline、可 diff 的表面;升级插件或 preset 时若悄悄改了模型被告知的内容,会 fail loud 而不是 silent drift。若你在用 DSH 做多插件组合,值得把 baseline 纳入代码 review 与 CI。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜