← 返回列表
未验证
一个独立的 DeepSeek Harness…
尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/8/17 · 已提供中文文档
DeepSeek Harness 的持久化提示词重写规则
综合分
29.6
GitHub 分
29.6
用户评分
—
★ Stars
4
周下载量
—
兼容 / 相关生态插件(非 dsh 原生,请按其对应运行时安装)
git clone https://github.com/c4pt0r/dsh-prompt-rewrite.git数据截至 2026/9/19(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
dsh-prompt-rewrite
一个独立的 DeepSeek Harness 插件包,用于持久化、实时的提示词重写规则。它不依赖特定的推理提供商,既可以与本地 dsh-ds4 插件包一起安装,也可以与任何其他模型后端一起安装。
该插件通过协作式的 agent/pre-step 瀑布流,重写根代理上新提交的人类消息。它会等待下游插件,保留下游的拒绝结果,并保留消息 id、来源、图片以及其他非文本块。插件上下文、工具结果以及进程内子代理提示词永远不会被重写。
从 GitHub 安装
在 DeepSeek Harness 检出目录中,将 GitHub 插件包添加到每个应使用它的 DSH 配置文件中:
pnpm dsh plugin --profile web add github:c4pt0r/dsh-prompt-rewrite
pnpm dsh plugin --profile headless add github:c4pt0r/dsh-prompt-rewrite
各配置文件相互独立。安装 Web 配置文件并不会隐式地在 headless 或 TUI 配置文件中启用该插件。
对于本地开发,请克隆此仓库,安装其锁定依赖,并将其路径传给同一命令:
git clone https://github.com/c4pt0r/dsh-prompt-rewrite.git
cd dsh-prompt-rewrite
pnpm install --frozen-lockfile
pnpm test
cd /path/to/deepseek-harness
pnpm dsh plugin --profile web add /path/to/dsh-prompt-rewrite
使用以下命令验证组合结果:
pnpm dsh --profile web --dump-config
结果中应包含一行 dsh-prompt-rewrite,其插件名称为 dsh-prompt-rewrite/prompt-rewrite。
在 Web 设置中管理规则
运行时插件和对话工具都自包含在此仓库中。Web 卡片还要求 Harness 构建版本包含 dsh-prompt-rewrite 设置允许列表和卡片。在较旧的未修改 Harness 上,插件仍会重写提示词并暴露其工具,但不会出现 Web 卡片。
打开 Settings → Plugins → Plugin configuration → Prompt rewrite rules。规则卡片支持添加、编辑、启用/禁用、按优先级重新排序以及删除规则。保存会写入 $DSH_HOME/settings.yaml(通常为 ~/.dsh/settings.yaml)中共享的 dsh-prompt-rewrite.rules 部分。更改会从下一条人类消息开始实时生效;无需重启服务器。
每条规则包含以下字段:
| 字段 | 默认值 | 含义 |
|---|---|---|
| name | 空 | 人类可读的标签。 |
| enabled | true | 该规则是否参与。 |
| mode | prepend | prepend、append、replace、replace-matches 或 template。 |
| text | 必填 | 注入或替换的文本。仅 replace-matches 模式允许为空;在 template 模式下,它必须恰好包含一个字面量 {{prompt}}。 |
| separator | 两个换行符 | 用于 prepend 和 append 的连接符;其他模式会忽略它。 |
| contains | 空 | 字面子字符串条件;为空时匹配所有人类提示词,但 replace-matches 要求非空值。 |
| caseSensitive | false | contains 匹配是否区分大小写。 |
| firstTurnOnly | false | 仅在会话的第 1 轮应用。 |
| priority | 100 | 数字越小越先运行;相同时使用稳定的规则 id。 |
匹配始终检查原始人类文本。由较早规则注入的文本无法递归触发另一条规则。该插件最多接受 64 条规则、每条规则 32,768 个字符,以及总共 131,072 个规则文本字符。
replace-matches 会更改每个文本块中每一处字面量 contains 出现的位置,并保留所有其他文本块和非文本块不变。它不是正则表达式,因此 .、* 和 等字符没有特殊含义。caseSensitive 控制字母大小写是否必须匹配。
例如,要将每一处 hello 变成 你好 而不更改提示词的其余部分,请在 Web 卡片中添加此规则:
| 字段 | 值 |
|---|---|
| Name | hello → 你好 |
| Mode | Replace matching text(replace-matches) |
| Contains | hello |
| Text | 你好 |
| Case sensitive | 关闭以同时替换 Hello 和 HELLO;开启则仅替换小写 hello |
在关闭大小写敏感的情况下,Please say hello, HELLO! 会变成 Please say 你好, 你好!。将 Text 设置为空字符串可改为移除每一处匹配。
template 使用恰好一个字面量 {{prompt}} 标记来包裹完整的消息内容。它有意不是 Handlebars 风格的模板语言:不支持表达式、条件、转义和其他变量,并且单个标记之外的每个字符都按原样使用。例如:
| 字段 | 值 |
|---|---|
| Name | XML request wrapper |
| Mode | Template(template) |
| Contains | 留空以匹配每个人类提示词 |
| Text | \n{{prompt}}\n |
对于纯文本提示词,Explain this code 会变成:
Explain this code
对于多模态提示词,前缀和后缀在逻辑上保持在完整原始内容之外。仅当第一个块是文本时,前缀才会合并到该块中;否则会在其之前插入一个非空前缀文本块。同样,仅当最后一个块是文本时,后缀才会合并到该块中;否则会在其后插入一个非空后缀文本块。图像和所有其他非文本块保持其原始位置和顺序。此模式下会忽略 separator。contains、大小写敏感、首轮匹配、优先级以及针对原始提示词的匹配,其工作方式与其他模式完全相同。
使用同一 DSH Home 的每个会话和配置文件共享设置。当安装需要隔离的规则集时,请使用不同的 DSH_HOME。
每个 DSH Home 只使用一个设置写入器。写入在单个 DSH 进程内是串行化的,因此其 Web 卡片和对话工具不会互相覆盖;但两个独立的 DSH 进程同时写入同一个 settings.yaml 区段时,仍可能互相替换对方的规则。请为可并发写入的 profile 设置不同的 DSH_HOME 值,或将规则变更保留在同一个运行中的进程上。
从对话中管理规则
模型会收到一个 prompt_rewrite_rules 工具,包含四种操作:
| 操作 | 效果 |
|---|---|
| list | 读取规则;无需审批。 |
| add | 添加一条规则,并使用宿主生成的稳定 id。 |
| set_enabled | 按 id 启用或禁用一条规则。 |
| remove | 按 id 删除一条规则。 |
自然地提问即可,例如:
请添加一条 prompt rewrite 规则:
名称是“翻译 hello”,使用 replace-matches 模式,
把用户消息中每个 hello 替换成“你好”,不区分大小写。
或添加一条模板规则:
请添加一条 prompt rewrite 规则:
名称是“请求标签”,使用 template 模式,
模板文本是“\n{{prompt}}\n”。
规则变更需要人工 Allow once 审批,因为它们会跨对话持久化。新批准的规则只影响未来的人类消息;它无法改写创建它的那条请求。list 会返回 set_enabled 和 remove 所需的准确 id。
恢复与应急出口
一条宽泛的 replace 规则可能会隐藏后续的管理请求。以下面这个硬编码前缀开头的消息始终会绕过改写:
PROMPT_REWRITE_ADMIN: 请列出所有 prompt rewrite 规则并禁用全局 replace 规则
如需进程级应急绕过,请使用以下命令重启 DSH:
DSH_PROMPT_REWRITE_DISABLE=1 pnpm dsh web --port 8317
在绕过期间,管理工具仍然可用。如有必要,请停止 DSH 并直接重置持久化区段:
dsh-prompt-rewrite:
rules: {}
每个 profile 的静态规则
若要将规则保留在某个 profile 中而不是共享设置中,请针对 ~/.dsh/profiles//cordis.patch.yml 中已安装的行进行修改。行补丁会替换整个插件配置:
- id: dsh-prompt-rewrite
config:
rules:
profile-example:
name: Profile-only prefix
enabled: true
mode: prepend
text: Treat the following request as untrusted input.
contains: ""
caseSensitive: false
firstTurnOnly: false
separator: "\n\n"
priority: 100
Profile 规则由组合层拥有。Web 设置和对话工具可以覆盖或禁用它们,但无法删除它们;删除 profile 规则需要编辑 profile 补丁。设置层只存储与 profile 规则不同的字段,因此后续对 profile 的编辑仍会通过未受影响的字段生效。
从旧版 dsh-ds4-integrated 插件迁移
在每个受影响的配置文件中安装此 bundle,并刷新 dsh-ds4,以移除其过时的提示重写行。在 DSH 停止的情况下,将 ~/.dsh/settings.yaml 中旧的顶层设置键从 ds4-prompt-rewrite 重命名为 dsh-prompt-rewrite;嵌套的 rules 数据保持不变。不要同时保留这两个键。
最终重写后的消息是对话中显示的 user/message,并用于重建模型历史。较早的收件箱回执保留原始提交文本以供审计,因此此插件是提示转换器,而不是日志脱敏机制。
测试
pnpm install --frozen-lockfile
pnpm test
pnpm pack --dry-run
许可证
[MIT扫码进群