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 提供了一種在代碼層面控制智能體行爲的手段,有效防止了因模型陷入局部最優而導致的資源浪費。

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

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

小夜