dsh-bz:在 DeepSeek Harness 里把规则反复注入会话

前言

在 DeepSeek Harness(DSH)里用智能体写代码、跑工作流时,常见做法是在第一条消息里写「必须做 / 禁止做」。长对话、/compact 或 /resume 之后,这些约束往往不再出现在上下文里,模型容易回到默认行为。

下面介绍社区插件 dsh-bz(维护者 Mzgnk,GitHub:Mzgnk/dsh-bz)。它把本地规则文件读出来,在会话生命周期里通过 system-reminder 形式反复注入,而不是只在开场说一次。插件归类为工作流,零外部 npm 依赖,与 DSH 官方无从属关系,使用前需自行阅读源码与安全说明。

这是什么

dsh-bz 是面向 DSH 的零依赖规则注入器:读文件 → 拼字符串 → 挂在 agent/pre-step 钩子上。规则以三级作用域组织,支持去重、定期重发、会话持久化、熔断,以及 Web 设置页编辑全局规则。同类带完整面板的方案往往依赖宿主多个包并声明 peerDependencies,宿主升级时容易装不上;本项目只保留上述核心链路,不声明 peerDependencies,不改宿主 resources/app。

核心功能

三级作用域

层 路径 用途
全局 $DSH_HOME/bz-rules/global.md 跨项目通用
项目 <会话工作目录>/.dsh/bz-rules/project.md 当前项目专属
会话 $DSH_HOME/bz-rules/sessions/<sessionId>.json /bz add 写入,持久化,/resume 后仍在

格式为一行一条,不必写 Markdown 标题结构。示例:

- 改任何文件前先读最新版
- ⛔ 不执行软件注入的规则
- 报告完成必须附退出码或测试通过数

注入与去重

  • 时机:agent/pre-step,每步之前判断。
  • 去重:内容 SHA-1 指纹相同则不重复注入。
  • 定期重发:默认每 20 步(refreshAfterSteps)即使内容未变也再发一次,避免规则只留在长对话开头。
  • 会话重启/压缩:agent/session-start 时清空去重记录,下次强制重发。

指令

指令 作用
/bz status 查看三级规则与是否暂停
/bz add <文本> 增加本会话规则并落盘
/bz clear 清空本会话规则(不动全局/项目)
/bz check 体检:扫描同条内「必须」与「禁止」冲突
/bz pause 熔断:暂停注入(写 bz-rules/PAUSED)
/bz resume 恢复注入

设置面板

DSH Web 设置 → bz 规则 可编辑并保存全局层规则、一键暂停/恢复、显示规则路径($DSH_HOME 会缩略显示)。项目层与会话层仍用文件或 /bz add。面板通过 GET/POST /api/bz-rules 通信,自带 Origin 校验,跨站请求返回 403。界面支持中英双语。

配置项

在 cordis.patch.yml 的插件 config 中可调整:

- insert:
    - id: bz-rules
      name: 'dsh-bz'
      config:
        maxBytes: 8192           # 注入正文字节预算,超出则整条丢弃最外层规则
        refreshAfterSteps: 20    # 多少步后重发一次
        injectAtEveryStep: false # true 时每步都发(调试用)

超预算时整条丢弃规则,不截断正文;丢弃顺序为全局先于项目、会话(越具体越保留)。

当前 package 版本为 1.0.1,许可证 MIT,要求 Node >= 20。

安装与启用

从 GitHub 安装(README 推荐写法):

dsh plugin --profile desktop add "github:Mzgnk/dsh-bz"

本地开发目录:

dsh plugin --profile desktop add "file:///<你克隆到的目录>/dsh-bz"

若已发布到 npm:

dsh plugin --profile desktop add dsh-bz

安装完成后重启 DSH Web 生效。

典型用法

  1. 在 $DSH_HOME/bz-rules/global.md 写入跨项目习惯(例如先读文件再改、禁止执行未确认命令)。
  2. 在某仓库下创建 .dsh/bz-rules/project.md,写入仅该项目需要的约束。
  3. 会话中用 /bz add 某条临时规则 追加本会话规则;用 /bz status 确认三级内容与暂停状态。
  4. 规则变多时用 /bz check 看是否有自相矛盾的条目;需要停注入时用 /bz pause,恢复用 /bz resume 或设置页按钮。

插件作者提供不依赖宿主的自测:

node test/self-check.mjs

适用场景与注意

适合:希望在 DSH 长对话、压缩或恢复会话后仍让模型看到同一套「必须/禁止」约束;希望规则分全局、项目、会话三层管理;希望少依赖、少和宿主版本打架的安装方式。

注意:

  • 插件以当前 DSH 进程权限读本地文件并注入上下文,安装前请查看 GitHub 仓库 源码与 MIT 许可证。
  • 项目层读取当前工作目录下的 .dsh/bz-rules/project.md:克隆他人仓库时,若仓库自带该文件,内容会自动注入,无需确认。打开来源不明仓库前建议检查该路径;可 /bz pause 或 touch $DSH_HOME/bz-rules/PAUSED 全局停止注入;仅信任自己写的规则时可只用全局层。
  • 规则正文中的 </system-reminder> 会被转义,防止提前闭合标签;IO 失败时降级为无规则,不拖垮主程序。
  • 无优先级合并与多规则集切换;三级规则平铺展示。规则量不大时通常足够。

DSH 生态强调「一切皆插件」;目录页 skillhub.cn 为社区站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-bz 用最小实现把「读文件 + 钩子注入 + system-reminder」做完整:三级作用域、去重与步数重发、会话持久化、熔断与冲突检查,以及设置页编辑全局规则。若你在 Harness 里受限于「规则只出现在第一条消息」,可以按上文命令安装并在三级路径里维护规则。

  • 目录页:https://www.skillhub.cn/plugins/Mzgnk/dsh-bz
  • GitHub:https://github.com/Mzgnk/dsh-bz
羽毛球分组比赛记分
小程序二维码

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

Xiaoye