前言¶
在 DeepSeek Harness (DSH) 的 Web 配置文件开发中,若仅依靠 Persona 或 System 层面的规则来约束模型,在长会话中往往不可靠:模型会逐渐遗忘这些规则,即使规则写得再明确(例如“每次编码前刷新代码图谱”、“遇到事实问题先查 Wiki”),在后续轮次中也可能静默失效。
dsh-prompt-injector 解决了这个问题。它复用了 dsh-mem0-plugins 中的记忆召回机制,将其通用化:你可以在设置页面维护一个提示词列表,插件会在每次对话轮次中,将这些提示词以“Context injection”通知行的形式注入到模型上下文的前置位置。这确保了关键规则或提醒在每一轮都能被模型“看到”,从而提高执行的一致性。
插件定位¶
- 名称:
runfali/dsh-prompt-injector - 维护者:
runfali - 许可:MIT
- 核心能力:为 DSH Web 配置提供通用的每轮上下文注入机制,支持通过 UI 管理注入内容,且不侵入 DSH 源码。
核心功能¶
该插件主要提供以下能力:
- 每轮注入:在
agent/pre-step阶段,当检测到新输入时,将所有已启用的提示词追加到本轮上下文中,作为一条折叠的“Context injection”通知行。 - 触发模式:
everyTurn(默认):每次对话轮次都注入。postCompaction:在上下文压缩/摘要生成后注入一次。
- 全局开关:通过
enabled配置项控制全局注入开关。 - 简略轮次过滤:默认开启
skipTrivial,会自动跳过“好的/嗯/收到/继续/ok/thanks”等简略确认语,避免干扰实质性对话。 - 提示词管理 UI:支持在 DSH 设置页面直接添加、删除、编辑提示词,并单独控制每行的启用状态。
- 仅提醒,不执行:插件本身不调用任何工具,不执行任何检查,仅负责将文本注入上下文,决策权完全在模型。
- 零侵入:不修改 DSH 源码,仅依赖两个较小的运行时包。
安装与配置¶
插件以标准 DSH Bundle 插件形式发布。
安装命令:
dsh plugin add
配置方式:
安装后,在 DSH 的设置页面即可找到该插件的配置卡片。你可以在此管理提示词列表:
* 标题:用于 UI 展示的行标题。
* 内容:实际注入的提示词文本。
* 开关:每行可独立启用或禁用。
* 触发模式:选择 everyTurn 或 postCompaction。
* 过滤:确认 skipTrivial 是否开启。
工作原理¶
插件在 agent/pre-step 挂载点运行,向 decision.messages 追加消息。注入的消息格式如下:
- Role:
user - Source:
kind:plugin:dsh-prompt-injector(使用插件自己的命名空间,符合 V4 消息规范)form:noticesummary: 插件的行标题
DSH UI 会将这类消息渲染为折叠的“Context injection”通知行,模型在规划回复时即可看到这些前置信息。
安全与依赖¶
- 运行时依赖:插件仅声明了三个
peerDependencies,均由 DSH 宿主提供:@deepseek-ai/dsh-settings@deepseek-ai/schemasteryreact
- 权限边界:
- 无网络访问权限。
- 无子进程创建权限。
- 无文件系统写入权限。
- 任何注入错误都被隔离,不会导致整个对话轮次崩溃。
- 要求:
- DSH 版本:
>=0.1.2-alpha.3 - Node.js 版本:
^22.19.0 || >=24.0.0
- DSH 版本:
适用场景¶
此插件适合需要在每一轮对话中反复强调特定约束或规则的开发者。例如:
* 在编码任务中反复提醒模型“先查图谱再写代码”。
* 在复杂问答中反复提醒模型“遵循安全红线清单”。
* 在长对话中强制刷新特定的上下文摘要。
插件的设计哲学是“提醒而非执行”,它将规则下沉到上下文中,让模型在生成最终回复时自行判断何时执行。
结语¶
dsh-prompt-injector 通过将通用化的上下文注入机制集成到 DSH 的工作流中,解决了长会话中规则遗忘的问题。其零侵入的设计和基于 UI 的管理方式,使其易于维护和调试。
- GitHub 仓库:https://github.com/runfali/dsh-prompt-injector
- 插件目录:https://www.skillhub.cn/plugins/runfali/dsh-prompt-injector