DeepSeek Harness 插件:dsh-circuit-breaker

前言

DeepSeek Harness (DSH) 在运行智能体时,可能会遇到模型陷入死循环的情况,即重复执行完全相同的工具调用,且无法被指令纠正。这种循环发生在模型逻辑之外,常规的提示词无法阻止。dsh-circuit-breaker 是一个针对此问题的 Loop Guard 插件。

核心定位

该插件属于 admin-security 类别,由开发者 pricklywiggles 维护,采用 MIT 许可证。它运行在模型逻辑之外,通过代码级守卫来阻断失控的循环行为。

核心功能

插件的核心作用是防止工具调用的无限重复。它通过以下机制实现:

  1. 重复调用检测:插件通过 ctx.tools.guard() 注册守卫,在 DSH 运行环境中的每个工具执行前进行检查。如果同一工具在滑动窗口内被调用次数超过 duplicateLimit,则拒绝该调用。
  2. 总调用量限制:插件为每个 Agent 对象设置了 maxCallsPerAgent 上限。这用于捕获那些参数稍有变化从而绕过重复检测的循环模式。
  3. 拒绝与恢复:当调用被拒绝时,插件会返回一段解释文本,告知模型或用户发生了什么,从而帮助模型恢复正常工作。
  4. 单调性:在 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

适用场景与注意事项

  1. 配置位置:配置必须通过 cordis.patch.yml 进行,直接在 settings.yaml 中配置 circuit-breaker 命名空间无效。
  2. 动态参数工具:对于像 bash 这样带有自由文本参数(如 description)且参数值会动态变化的工具,如果希望进行重复检测,必须在配置中设置 ignoreArgs 来忽略这些参数。
  3. 重启要求:修改配置后,务必重启 Profile。
  4. 不可逆性:由于拒绝的单调性,一旦调用被阻断,该会话中后续的相同调用将继续被拒绝。

总结

dsh-circuit-breaker 为 DeepSeek Harness 提供了一种在代码层面控制智能体行为的手段,有效防止了因模型陷入局部最优而导致的资源浪费。

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

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

小夜