前言¶
DeepSeek Harness (DSH) 的设计理念是“一切皆插件”。在实际使用中,经常会遇到需要模型记住长期约束的情况,例如“本次会话必须用中文写注释”或“禁止修改现有的测试用例”。这些要求往往需要跨轮次持久化。
dsh-baize-rules(Baize)是一个 DSH 插件,旨在解决这一问题。它将用户设定的持久化“必须做/禁止做”要求,以纯文本规则的形式,在对话开始时注入到模型请求中。
核心功能¶
该插件提供了一套完整的规则管理机制:
-
三重作用域,全部注入
规则分为global(全局,所有会话生效)、session(当前会话)和project(当前工作目录)三个作用域。无论规则存储在哪里,只要处于激活状态,都会被注入到模型中。 -
持久化存储
所有规则数据均写入$DSH_HOME(默认为~/.dsh),支持跨会话和重启后保留。 -
特定性优先
渲染顺序为project > session > global。当上下文预算有限时,更具体的规则优先被保留。 -
容错机制
规则文件读取具备容错性。如果某个作用域的文件损坏或被手动编辑破坏,该作用域会被置为空,并给出警告,而不会导致整个对话流程中断。 -
去重与长线程保持
通过 SHA-1 哈希抑制重复注入。在会话生命周期变化(如启动、恢复、清除、压缩)或规则文本更新后,会自动重新发布规则快照,确保长对话中规则不被遗忘。 -
安全防护
规则内容中的特殊字符(如</system-reminder>)会被转义,防止用户文本意外关闭插件注入的框架。 -
统一数据源
命令行接口(CLI)与 Web UI 共享同一套存储核心,确保状态一致。 -
标签与模板
规则支持标签(如#frontend),用于 UI 筛选。标签默认不消耗模型上下文预算,除非开启injectTags选项。支持将常用规则保存为模板,应用模板会生成内容副本,后续模板修改不影响已应用的规则。 -
冲突安全写入
写入时携带文件版本号,如果检测到文件在他处被修改,写入操作会被拒绝并提示重试,避免数据丢失。
安装与启用¶
通过 npm 安装插件到指定的 profile(默认 web profile):
dsh plugin --profile web add dsh-baize-rules@0.2.4
如果 DSH 由 pm2 管理,安装后需要重启进程以加载新插件:
pm2 restart dsh
典型用法¶
插件提供了完整的 CLI 命令集进行管理:
- 查看当前规则:
/baize-rules
这等同于列出所有作用域的规则。
- 添加规则(默认添加到 session 作用域):
/baize-rules add Write comments in Chinese.
- 添加全局规则:
/baize-rules global add Don't delete or rewrite existing tests.
- 列出特定作用域:
/baize-rules list project
- 编辑、禁用、启用规则:
/baize-rules edit <id>
/baize-rules disable <id>
/baize-rules enable <id>
- 切换默认作用域:
/baize-rules scope global
- 清除规则:
/baize-rules clear session
适用场景与注意¶
适用场景:
- 个人习惯的强制约束(如语言、格式)。
- 跨项目的通用规则。
- 单个会话内的临时约束。
与 AGENTS.md 的区别:
DSH 自带 @deepseek-ai/dsh-agent-instructions 插件,读取工作区的 AGENTS.md。dsh-baize-rules 与其互补:前者适合项目级、版本控制、团队共享的约定;后者适合个人、跨项目或特定会话的需求。两者都通过 user/message 注入,并共享相同的优先级机制。
重要注意:
- 规则是纯文本,不强制使用 must/mustNot 标记,由内容语言本身表达含义。
- 若当前没有激活的规则,则不会注入任何内容。
- 插件以当前 DSH 进程的权限运行,安装前建议检查源码与许可证。
结语¶
dsh-baize-rules 为 DSH 用户提供了在对话层面管理模型行为的工具。通过将规则作为持久化的 user/message 注入,它解决了长期约束记忆的问题,使模型行为更加可控。
- 目录页:https://www.skillhub.cn/plugins/bvcvb/dsh-baize-rules
- GitHub:https://github.com/bvcvb/dsh-baize-rules