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