前言¶
DeepSeek Harness (DSH) 在运行智能体时,可能会遇到模型陷入死循环的情况,即重复执行完全相同的工具调用,且无法被指令纠正。这种循环发生在模型逻辑之外,常规的提示词无法阻止。dsh-circuit-breaker 是一个针对此问题的 Loop Guard 插件。
核心定位¶
该插件属于 admin-security 类别,由开发者 pricklywiggles 维护,采用 MIT 许可证。它运行在模型逻辑之外,通过代码级守卫来阻断失控的循环行为。
核心功能¶
插件的核心作用是防止工具调用的无限重复。它通过以下机制实现:
- 重复调用检测:插件通过
ctx.tools.guard()注册守卫,在 DSH 运行环境中的每个工具执行前进行检查。如果同一工具在滑动窗口内被调用次数超过duplicateLimit,则拒绝该调用。 - 总调用量限制:插件为每个 Agent 对象设置了
maxCallsPerAgent上限。这用于捕获那些参数稍有变化从而绕过重复检测的循环模式。 - 拒绝与恢复:当调用被拒绝时,插件会返回一段解释文本,告知模型或用户发生了什么,从而帮助模型恢复正常工作。
- 单调性:在 DSH 环境中,拒绝是单调的,这意味着一旦某个调用被守卫拒绝,下游插件无法重新允许该调用。
安装与启用¶
安装该插件需要使用 DSH 的 CLI 命令。该包为纯 ESM 模块,无需构建步骤。
dsh plugin --profile web add github:pricklywiggles/dsh-circuit-breaker
安装完成后,必须重启对应的 Profile 才能生效。
如果需要锁定特定版本,可以使用 commit SHA:
dsh plugin --profile web add github:pricklywiggles/dsh-circuit-breaker#<sha>
配置方法¶
所有配置项都有默认值。要覆盖默认值,不能在 settings.yaml 中配置,必须通过 cordis.patch.yml 层级进行覆盖。
示例配置如下:
- id: circuit-breaker
config:
duplicateLimit: 6
maxCallsPerAgent: 300
适用场景与注意事项¶
- 配置位置:配置必须通过
cordis.patch.yml进行,直接在settings.yaml中配置circuit-breaker命名空间无效。 - 动态参数工具:对于像
bash这样带有自由文本参数(如description)且参数值会动态变化的工具,如果希望进行重复检测,必须在配置中设置ignoreArgs来忽略这些参数。 - 重启要求:修改配置后,务必重启 Profile。
- 不可逆性:由于拒绝的单调性,一旦调用被阻断,该会话中后续的相同调用将继续被拒绝。
总结¶
dsh-circuit-breaker 为 DeepSeek Harness 提供了一种在代码层面控制智能体行为的手段,有效防止了因模型陷入局部最优而导致的资源浪费。