前言¶
在 DSH 里跑 agent 时,模型有时会反复调用同一工具、同一参数,或陷入「grep → curl → read → bash」这类固定序列循环,上下文里还会重复注入大段相同文本。这类行为不一定立刻报错,但会拖长会话、浪费配额,也不利于排查真正的问题。单靠 prompt 提醒往往不够稳定;在 harness 层做观测并在下一轮请求前注入提示,是更可控的做法。dsh-brake 就是面向这一痛点的 DSH 插件:默认只提醒,也可选配在执行前拒绝已确认重复的调用。
这是什么¶
dsh-brake(GitHub:Mlte0907/dsh-brake)由维护者 Mlte0907 发布,社区目录分类为 admin-security。插件监听已执行的工具调用与新注入的上下文,在检测到「同类工作无进展地重复」时,向下一次模型请求附加插件来源的说明;可选 deny 模式会在重复次数达到阈值后,对完全相同的调用身份做单调守卫并拒绝执行。
当前 package 版本为 0.2.0,入口为 lib/index.js,通过 Cordis patch(cordis.patch.yml)挂到 DSH 的 waterfall 与 guard 契约上。
核心功能¶
下面介绍 README 中已说明的三类检测与可选拒绝,均可在配置中调阈值。
重复单调用¶
同一工具名、经规范化后的相同参数,跨多次执行累计计数。首次提醒出现在 callWarnCount(默认 6)次重复之后;同一条重复链上不会每次调用都提醒,而是每再重复 callReWarnEvery(默认 5)次才再次提醒。
序列循环¶
检测长度为 sequenceLength(默认 4,最小 2)的不同调用窗口是否在循环出现,例如 grep → curl → read → bash 周而复始。序列身份包含参数,改查询即视为不同序列。在重复 sequenceCount(默认 3)次后发出提醒。
重复上下文文本¶
对注入文本做换行规范化后指纹(FNV-1a),长度至少 minimumDuplicateChars(默认 80)字符。在 duplicateTextWindowMs(默认 120000 ms)内、跨不同 message id 或同一 message 内重复注入时计数;按 message id 去重,重放历史不会累加;同一指纹受 duplicateTextCooldownMs(默认 30000 ms)节流。提醒会说明观察到的来源。
可选拒绝(deny 模式)¶
mode: 'deny' 时,除上述提醒外,ctx.tools.guard 会在某调用身份的执行后计数达到 callDenyCount(须大于 callWarnCount,默认 10)时,拒绝该确切重复调用在运行前执行。序列循环与重复文本仅提醒,不会被 deny。用户发送的人类消息会重置该 agent 的全部计数。
提醒以 user 角色、插件来源(kind: 'plugin', plugin: 'dsh-brake', form: 'notice')进入下一轮请求历史;检测只读执行与 inbox,不改写工具结果、不删日志内容。
安装与启用¶
安装命令来自仓库 README,需本地已有插件包路径(非 dsh plugin add github:... 形式)。
1、进入你的 DSH profile 目录(示例为 web profile):
cd ~/.dsh/profiles/web # or your profile directory
2、用 pnpm 把本地 dsh-brake 包装进 profile:
pnpm add /path/to/dsh-brake
3、在该 profile 的 package.json 里,把 "dsh-brake" 加入 dsh.profile.bundles 数组。
4、在 profile 的 Cordis 配置中增加插件条目并填写 config(无效值在插件加载时抛错,不会静默回退)。示例:
- id: dsh-brake
config:
mode: remind # remind | deny
callWarnCount: 6 # repeats before the first call warning
callDenyCount: 10 # deny-mode threshold; must be > callWarnCount
callReWarnEvery: 5 # repeats between re-warnings on one chain
sequenceLength: 4 # calls per sequence (min 2)
sequenceCount: 3 # sequence repetitions before a warning
duplicateTextThreshold: 3 # injections within the window before a warning
duplicateTextWindowMs: 120000
duplicateTextCooldownMs: 30000
minimumDuplicateChars: 80
典型用法与验证¶
日常开发可先保持 mode: remind,观察 agent 是否在重复调用或序列循环时收到短说明型 notice,再视需要把 mode 改为 deny 并调高 callDenyCount,避免误拦仍在探索中的调用。
仓库自带无依赖 Node 测试,在插件目录下执行(需能从该目录解析 @deepseek-ai/dsh-llm,DSH profile 检出环境中通常满足):
node test/test-brake.js
测试覆盖阈值、节流、参数身份、deny 范围、重复文本计数与 id 去重、人类消息重置、下游决策保留及配置 fail-loud 等行为。
同仓库内的 repeat-tool-reminder 侧重连续相同 tool+参数链的 escalating 提醒;dsh-brake 额外覆盖序列循环、重复上下文与可选拒绝,两者可同时启用。
适用场景与注意¶
适合在本地或团队 profile 中长时间跑 coding agent、担心工具层死循环或上下文灌水的情况。插件以当前 DSH 进程权限运行,安装前应自行审阅源码与许可证(README 未单独列出 license 字段时以仓库为准)。
已知限制(README 原文):近重复文本(仅改少量措辞)不检测,只认规范化后的精确指纹;deny 仅针对确切调用身份;不监控流式输出,assistant 文本仅在提交后可观测;实现假设 DSH 的 tools/post-execute、agent/pre-step 与 ctx.tools.guard 契约,未在其他 Cordis 宿主上验证。与 agent-loop + Loader 的完整组合测试仍属 deferred work。
社区插件目录站点(SkillHub)与 DeepSeek / 幻方无官方从属关系,属于「一切皆插件」生态下的独立索引。
链接¶
- 目录页:https://www.skillhub.cn/plugins/Mlte0907/dsh-brake
- 源码与说明:https://github.com/Mlte0907/dsh-brake
经过上面的步骤,你可以在 harness 层对 agent 死循环做可配置的提醒或硬刹车,而不必完全依赖模型自觉停手。