前言¶
做 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
规则文件导出数组。每条规则必须有 match 和 prompt,可选 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