dsh-stream-rules:按需注入规则,减少上下文常驻

前言

做 DSH 智能体时,常见需求是纠正某些工具调用:例如不要直接用 pip install,优先用 gh CLI,或读 PDF 时改用 markitdown 技能。若把这类规则始终放进上下文,会增加不必要的上下文占用。dsh-stream-rules 的做法是在工具调用匹配规则后注入一条转向提示,让智能体从同一点重试。

这是什么

@jiesou/dsh-stream-rules 是 jiesou 维护的 DSH 插件,MIT 许可,包版本 0.1.7。它把 jiesou/opencode-stream-rules 的思路移植到 DSH,用于按需注入规则,而不是把规则常驻到上下文。

工作方式

插件在工具调用触发时判断规则。每个工具调用的工具名与参数会被序列化为字符串,规则的 match 返回 true 时生效。

  • 默认:通过 agent.inject() 注入一条 SYSTEM NOTICE 转向消息,智能体从同一点重试。
  • reject: true:拒绝第一次工具调用,后续尝试允许。
  • 每个规则在每会话(per agent)最多触发一次。

实现上使用 DSH 的 tools/pre-execute waterfall(deny)和 agent.inject(),没有核心改动,没有 monkey-patching。

安装

从 npm 添加:

dsh plugin --profile <name> add @jiesou/dsh-stream-rules

从 GitHub 添加;GitHub 安装会运行 prepare 构建:

dsh plugin --profile <name> add github:jiesou/dsh-stream-rules

也可以在 profile 的 cordis.patch.yml 中添加:

- id: stream-rules
  name: '@jiesou/dsh-stream-rules'

启用规则

安装后不会立即生效,需要自己写规则。

1、定位插件路径:

$DSH_HOME/profiles/<name>/node_modules/@jiesou/dsh-stream-rules

2、复制示例规则文件:

mv rules/rules.js.example rules/rules.local.js

规则文件导出数组。每条规则必须有 matchprompt,可选 reject。以 _ 开头的文件会被跳过。

规则示例

以下示例来自插件说明:

// rules/rules.local.js
export default [
  {
    match: (v) =>
      v.includes('pip') &&
      v.includes('install') &&
      !v.includes('uv pip') &&
      !v.includes('uvx'),
    reject: true,
    prompt: 'Use `uvx` or `uv venv` + `uv pip` instead of `pip install` directly',
  },
  {
    match: (v) => v.includes('curl') && v.includes('api.github.com'),
    prompt: 'Prefer using `gh` cli over `curl https://api.github.com/...`. gh offers more requests limits.',
  },
  {
    match: (v) => v.includes('pdf'),
    prompt: 'Use the `markitdown` skill to read PDF files.',
  },
  // add your rules here
]

字段说明:

match: (v: string) => boolean,用于判断工具调用是否匹配
prompt: 用于转向的提示内容
reject: 如果为 true,先阻止该工具调用,而不是只注入提示

如需指向不同规则目录,可使用 config.rules

- id: stream-rules
  name: '@jiesou/dsh-stream-rules'
  config:
    rules: /path/to/your/rules

适用场景与注意

适合希望在 DSH 智能体里加入轻量行为边界的场景:限制某些工具调用、纠正命令选择、优先使用特定技能。

使用前注意:

  • 插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。
  • 包声明的 peerDependencies 为:
@deepseek-ai/cordis >=4.0.1 <5
@deepseek-ai/dsh-llm >=0.1.0-rc.6 <0.2.0
@deepseek-ai/schemastery ^3.18.1
  • 规则默认不生效,需要先编写或复制规则文件。
  • reject: true 只拒绝第一次工具调用,后续尝试允许。
  • 每个规则每会话最多触发一次。

链接

GitHub: https://github.com/jiesou/dsh-stream-rules

羽毛球分组比赛记分
小程序二维码

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

小夜