前言¶
在 DSH(DeepSeek Harness)里跑智能体时,模型每一轮都会「忘掉」你为这次对话定下的规矩。常见补救方式各有代价:把规矩写进系统提示词,内容一变就容易让前缀缓存整体失效;每轮用 user 消息追加规则虽然安全,但几十轮后会吃掉大量 token;依赖压缩插件自带的规则能力时,在部分版本与模式下规则可能只存不注。
下面介绍社区插件 dsh-dialog-fence(维护者 ILoveHAKU):把通用规则与会话专属规则写进一个 JSON 文件,注入到运行时上下文快照里,在不动系统提示词、规则未变化时不重复占 token 的前提下,让约束在下一轮即可生效。适用 dsh CLI(web / headless / acp 等 profile)与 DSH Desktop。
这是什么¶
dsh-dialog-fence 是一套「对话围栏」:随时增删的行为约束规则,全部落在一个 JSON 文件(默认 <DSH_HOME>/dialog-fence/fence.json),可用编辑器直接改,或在 DSH 设置页、会话浮层里逐条维护。
规则分两层叠加注入:
- 通用规则(
fence.json的rules数组)——对每个对话都生效,包括新开的对话。 - 会话规则(
fence.json的sessions.<会话 id>.rules)——只作用于某一个对话,可选;通常在会话右上角「围栏」浮层里维护。
插件通过 systemPrompt.context({ name: 'dialog-fence:rules', order: 118 }) 把两层规则拼成文本写入运行时上下文;与 billion-context 压缩可共存(快照头 Current runtime context 会被归为 durable/runtime-context)。总开关关闭,或通用与会话层都为空时,渲染为空串,不产生额外 token。
社区目录页:dsh-dialog-fence @ SkillHub。源码与说明:GitHub - ILoveHAKU/dsh-dialog-fence。当前包版本 0.10.0(以仓库 package.json 为准);声明与 DSH 0.2.0-rc.2 兼容。
核心功能¶
缓存与上下文行为¶
- 不碰系统提示词:历史里只有规则文本变化时的纯 append,不重写前缀。
- 文本不变则不注入:与上次相同的运行时上下文快照不会每轮再发一条 user 消息。
- 与其它对话隔离:通用规则为空且当前会话未启用专属规则时,零注入、零副作用。
配置与界面¶
五处入口读写同一份 fence.json,改完落盘,下一轮装配时生效,无需重启(安装/卸载插件本身仍需完全退出并重启 DSH):
| 入口 | 说明 |
|---|---|
| 设置左栏 →「对话围栏」 | 总开关、通用规则可视化编辑、按对话名选择并编辑专属规则、「打开文件夹」「更改位置」 |
| 插件 → 已安装 → dsh-dialog-fence 详情页 | 同上配置区(组合包 plugins.bundle.config 槽位) |
| 会话右上角「围栏」按钮 | 徽标为真实注入条数(通用 + 本会话);打开浮层编辑本会话与通用规则 |
| 规则浮层 | 多行编辑、启停、增删;点击面板外关闭 |
| 设置 → 内置插件 →「对话围栏」标签页 | 老入口,行为一致 |
Web / Desktop 才有上述面板;CLI / TUI / headless 无 connection 服务时会跳过 UI 路由,斜杠命令仍可用。
斜杠命令(全形态)¶
| 命令 | 作用 |
|---|---|
/fence |
状态:启用与否、条数、注入文本、token 估算、文件路径 |
/fence on / /fence off |
本会话专属规则启停(不影响通用规则) |
/fence add <文本> |
追加本会话专属规则 |
/fence rm <序号> / /fence clear / /fence reset |
删条、清空会话规则、删除本会话记录 |
/fence dir / /fence open / /fence file <路径> |
路径、打开文件夹、搬迁围栏文件 |
/fence switch on / switch off |
通用总开关 |
/fence all 及 all add / all rm / all clear |
查看与管理通用规则 |
/fence help |
帮助 |
也可用环境变量 DIALOG_FENCE_FILE 或 DIALOG_FENCE_HOME 指定文件或基目录;设置页「更改位置」会在原目录留下 location.json 指针。
安装与启用¶
推荐走官方插件安装器(卡片出现在「已安装」分组,可一键卸载)。0.5.0 起插件以组合包形式安装(dependencies + dsh.profile.bundles + dsh.bundle.patch)。改完安装方式后必须完全退出并重启 DSH(宿主侧不走 dsh-hmr 热重载)。
方式 A:官方安装器(推荐)¶
图形界面:左侧「插件」→ 右上角「添加插件」→ 在输入框填写本包在本机的绝对路径(示例为 Windows Desktop 默认 harness 目录下的副本路径,请按你机器实际路径填写):
C:\Users\<你>\AppData\Roaming\dsh-desktop\harness\dialog-fence
命令行(profile 为 web 时示例):
dsh plugin --profile web add "C:\Users\<你>\AppData\Roaming\dsh-desktop\harness\dialog-fence"
说明:Desktop 安装后端会把源码目录复制到 generation 快照再 pnpm add;改 harness 里原始目录的源码不会自动反映到已安装副本,需卸载后重装或重跑上述命令。规则数据在 <DSH_HOME>/dialog-fence/,与 generation 无关,升级不丢规则。
方式 B:file:/// 挂载(开发)¶
在插件仓库根目录执行:
node scripts/install.mjs install
脚本向 <DSH_HOME>/profiles/<profile>/cordis.patch.yml 追加带标记的 file:/// 插入行;改 client.js 刷新即可,改 index.js 需重启。此方式不会出现在「已安装」清单;与方式 A 不要同时使用。切回方式 A 前请先 node scripts/install.mjs uninstall。
验证¶
重启并开启围栏后,在会话中执行:
/fence status
若下一轮运行时上下文中出现以 Dialog fence (user-set rules binding this conversation; ...) 开头的段落,即表示注入成功。无宿主自检可跑:
node test/smoke.mjs && node test/route.mjs && node test/client.mjs && node test/render.mjs && node test/opensource.mjs
典型用法¶
直接编辑 fence.json¶
默认文件 <DSH_HOME>/dialog-fence/fence.json 结构要点:
{
"version": 3,
"enabled": true,
"rules": [
"结论必须给出可复现证据(命令 / 文件:行号 / 实测输出三者至少其一);给不出就明说「未验证」。"
],
"sessions": {
"<会话 id>": {
"enabled": true,
"rules": ["本会话额外一条约束"]
}
}
}
enabled: false 时所有对话零注入,文件内容保留。
面板与命令组合示例¶
- 在设置 →「对话围栏」里为所有对话加通用规则(例如「改文件前先读该文件」)。
- 在当前会话点「围栏」,只为本对话追加一条(或用
/fence add 不要执行 destructive git 命令)。 - 用
/fence查看条数与估算 token;临时关掉本会话专属层用/fence off,不关通用层。
所有 UI 改动下一轮生效;总开关关掉后立刻零注入。
适用场景与注意¶
适合:需要长期、可版本管理的对话级规矩;希望与前缀缓存、billion-context 压缩并存;希望在 Desktop / Web 里可视化维护,同时在 headless 用 /fence 脚本化。
注意:
- 插件在当前 dsh 进程权限下运行,安装前请阅读 GitHub 仓库 源码与许可证(仓库含
LICENSE)。 - 社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系;DSH 生态是「一切皆插件」,安装来源需自行甄别。
- 需要 Node >= 20.16.0(开发脚本与测试);Desktop 无独立
node时 README 给出用 Electron 跑install.mjs的示例。 - 本地路径安装是复制而非符号链接;开发迭代优先方式 B,日常使用优先方式 A。
结尾¶
dsh-dialog-fence 把「每轮都要重新强调的规矩」收敛到一个 JSON、一层运行时上下文注入:系统提示词不动、规则不变就不多占 token、压缩后仍能通过 durable runtime-context 保住最新快照。若你已经在用 DSH 做长对话智能体,值得用 /fence status 和设置里的「对话围栏」试一轮。
- 目录页:https://www.skillhub.cn/plugins/ILoveHAKU/dsh-dialog-fence
- GitHub:https://github.com/ILoveHAKU/dsh-dialog-fence