🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

模型提示词装甲 caixuf/dsh-prompt-armor

DeepSeek 客户端
caixuf7 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

为每个模型单独配置并注入系统提示词

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/25 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/caixuf/dsh-prompt-armor.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 7 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 13 处,展示前 11 条)
  • 发起网络请求
    client.js:45
    const response = await fetch(`${API}/${method}`, init)
  • 读取本地文件
    lib/rules.js:148
    stamp = statSync(this.indexPath).mtimeMs
  • 读取本地文件
    lib/rules.js:166
    raw = JSON.parse(readFileSync(this.indexPath, 'utf8'))
  • 读取本地文件
    lib/rules.js:181
    body = readFileSync(profilePath(this.dir, profile.id), 'utf8')
  • 读取本地文件
    lib/rules.js:190
    this.stamp = statSync(this.indexPath).mtimeMs
  • 读取本地文件
    lib/rules.js:208
    raw = JSON.parse(await readFile(this.indexPath, 'utf8'))
  • 读取本地文件
    lib/rules.js:221
    this.texts.set(profile.id, await readFile(profilePath(this.dir, profile.id), 'utf8'))
  • 写入本地文件
    lib/rules.js:264
    await mkdir(this.profilesDir, { recursive: true })
  • 写入本地文件
    lib/rules.js:275
    await writeFile(this.indexPath, `${JSON.stringify(index, null, 2)}\n`, 'utf8')
  • 写入本地文件
    lib/rules.js:277
    await writeFile(profilePath(this.dir, profile.id), this.texts.get(profile.id) ?? '', 'utf8')
  • 删除本地文件
    lib/rules.js:326
    await rm(profilePath(this.dir, id), { force: true })
扫描于 2026/10/31(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/cordis
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

按模型给 DeepSeek Harness 注入提示词:通过官方 system-prompt 接缝,让每个模型都有自己的系统提示词。

README

由 DeepSeek 最新模型翻译生成
dsh-prompt-armor 在 DeepSeek Harness 里,给每个模型配自己的系统提示词。 配置档由名字、提示词和适用的模型模式组成。智能体组装系统提示词时,匹配当前模型的配置档会被注入。于是同一个 Harness 下,不同模型拿到不同指令,不用重启,也不用改核心文件。 为什么需要它 社区插件 dsh-purge 做的是同一件事——给每个模型注入提示词——但它的做法是用一张 355 KB 的字符串替换表,重写 @deepseek-ai/ 里的文件。这种做法有三个后果: - 对版本很脆弱。 替换表匹配的是源码里的字面字符串,Harness 发版时挪一个空格,插件就悄悄失效。每发一版,表里就得加一个分支。 - 会被包管理器抹掉。 补丁打在 node_modules 里,重装一次就没了,插件下次启动还得重新打。 - 只能靠猜。 官方工作区的基线是一条用户消息,不是提示词段落,所以插件那个「丢掉基线」的过滤器按名字和文本匹配,通常根本不会触发。 这个插件走的是官方接口。Harness 专门为这个用途暴露了 ctx.systemPrompt.section(),Harness 自己也用它给每个工具写引导文本。段落注册在插件自己的上下文上,卸载插件就一并移除,系统提示词回到默认形态。 它还实现了 dsh-purge 只在宣传里提过的东西:按模型分发。
展开完整文档(README 剩余 1 节)
dsh-prompt-armor

在 DeepSeek Harness 里,给每个模型配自己的系统提示词。

配置档由名字、提示词和适用的模型模式组成。智能体组装系统提示词时,匹配当前模型的配置档会被注入。于是同一个 Harness 下,不同模型拿到不同指令,不用重启,也不用改核心文件。

为什么需要它

社区插件 dsh-purge 做的是同一件事——给每个模型注入提示词——但它的做法是用一张 355 KB 的字符串替换表,重写 @deepseek-ai/ 里的文件。这种做法有三个后果:

- 对版本很脆弱。 替换表匹配的是源码里的字面字符串,Harness 发版时挪一个空格,插件就悄悄失效。每发一版,表里就得加一个分支。
- 会被包管理器抹掉。 补丁打在 node_modules 里,重装一次就没了,插件下次启动还得重新打。
- 只能靠猜。 官方工作区的基线是一条用户消息,不是提示词段落,所以插件那个「丢掉基线」的过滤器按名字和文本匹配,通常根本不会触发。

这个插件走的是官方接口。Harness 专门为这个用途暴露了 ctx.systemPrompt.section(),Harness 自己也用它给每个工具写引导文本。段落注册在插件自己的上下文上,卸载插件就一并移除,系统提示词回到默认形态。

它还实现了 dsh-purge 只在宣传里提过的东西:按模型分发。上游 README 说「按模型换提示词」,但它的代码里找不到任何模型、服务商或路由的键——注入的提示词对所有模型都一样。这里模型 id 从组装上下文里读,分发是真的。

安装

dsh plugin --profile desktop add <path-to-this-directory>

或者在桌面客户端里打开 Settings → Plugins,在安装框里填目录。

使用

打开 Settings → Model Prompts。面板左侧列出配置档,右侧编辑选中的那个。

| 字段 | 含义 |
| Name | 面板里显示的名字,也可以选择显示在注入文本上方。 |
| Applies to | 模型模式,一行一个。 是通配符。 |
| Enabled | 这个配置档是否参与。 |
| Prompt | 注入系统提示词的文本。 |

提示词正文里会替换两个变量:{{model}} 和 {{provider}}。其他 {{…}} 原样保留。

匹配

最具体的模式胜出:

- 精确的模型 id 胜过通配符;
- 长的通配符胜过短的;
- 禁用的配置档永不生效;
- 没有匹配时,什么都不注入,系统提示词保持不变。

所以列出 deepseek-v4.1-flash 的配置档只作用于那个模型,列出 deepseek- 的作用于所有 DeepSeek 模型,列出 的则是兜底。

文件

Host 把规则保存在磁盘上,位于 $DSH_HOME/prompt-armor/ 下:

index.json the profile list and their model patterns
profiles/<id>.md one profile's prompt text

面板通过 Host 写入,但这些文件就是普通文本:用任意编辑器修改,运行中的智能体下一步就会读到改动。

配置

插件在 cordis.patch.yml 中的那一行接受这些键:

| 键 | 默认值 | 含义 |
| enabled | true | 插件是否提供这一段内容。 |
| dataDir | $DSH_HOME/prompt-armor | 配置档存放的位置。 |
| order | -100000 | 注入文本在提示词中的位置。 |
| showProfileName | true | 注入文本开头是否显示配置档名称。 |

order 是普通数字,不依赖某个具名槽位,将来版本重新编号也不受影响。默认值把注入文本放在最前面,排在 harness 自己的身份行之前,这样人设读起来是整体框架,而不是附带说明。取值大于 10200 时,文本改放到部署人设后缀之后,读起来像一条收尾指令。

工作原理

Host 这一半注册一个提示词段:

ctx.systemPrompt.section({
name: 'dsh-prompt-armor:profile',
order: config.order,
interpolate: false,
text: (context) => {
const model = context.agent?.options?.model
const profile = selectProfile(store.profiles, model)
return profile === null ? '' : store.text(profile.id)
},
})

text 是函数,每次组装提示词都会求值,因此能读到本次组装对应的模型。注册这一段时用了 interpolate: false,因为用户提示词里可能合法地包含 {{…}},而 harness 遇到未知变量引用会抛错。

浏览器这一半是纯 JavaScript,没有构建步骤:它注册一个 settings.section 条目,通过 harness 自带 web 服务器上的一条小型 JSON 路由与 Host 通信。写操作的请求带自定义请求头,跨源页面无法驱动它们。

测试

node test/rules.test.mjs # the matcher and the store
DSH_ASAR=<resources>/app.asar node test/integration.test.mjs

集成测试从桌面版 app.asar 中解出已安装的 @deepseek-ai/dsh-system-prompt,把 Host 这一半挂到真实注册表上,再断言组装出的提示词——所以「注入文本能到达模型」是针对实际安装的 harness 验证的。

许可

MIT。
预览分享卡片长什么样 ↓caixuf/dsh-prompt-armor
分享 · DeepSeek Harness Hub
caixuf/dsh-prompt-armor

为每个模型单独配置并注入系统提示词

回到顶部