@zhourenke/dsh-tool-call-limit:DSH 工具調用配額限制插件

DSH 的 Agent 在一個 step 裏可能並行發出多個工具調用,也可能在同一個工具上反覆重試。本插件在工具真正執行之前按註冊名檢查配額:還有名額就放行,超了就拒絕——只限流,不改工具本身的行爲。

插件簡介

  • 插件名稱:@zhourenke/dsh-tool-call-limit
  • 維護者:zhourenke
  • 核心功能:給 DSH 的每個 step 加上工具調用配額;限制每個 step 內的工具調用次數;同步預佔配額以防止並行超額;父 Agent 和子 Agent 各自擁有獨立的配額。

安裝與啓用

安裝命令如下:

dsh plugin --profile web add "github:zhourenke/dsh-tool-call-limit"

注意:安裝後必須重啓 DSH。bundle 集合是進程啓動時的快照,重啓前新插件不會被加載,刷新頁面無效。

卸載命令:

dsh plugin --profile web remove @zhourenke/dsh-tool-call-limit

配置方法

本插件默認不限制任何工具(limits: {})。要啓用限制,在 profile 補丁中覆蓋插件那一行。

# ~/.dsh/profiles/web/cordis.patch.yml
- id: tool-call-limit
  name: '@zhourenke/dsh-tool-call-limit'
  config:
    limits:
      web_search: 1

關鍵約束:
* 必須使用 - id: 覆蓋:不要用 - insert:。插件自帶的 bundle patch 已經用 insert 把這一行插進去了;在 profile 裏再 insert 一次不會報錯,而是多出一個同 id 的實例——插件跑兩遍、配額算兩遍。
* 配置是整體替換:不是逐字段合併。寫全 limits 與 onExceeded 即可。

確認配置已被加載:

dsh --profile web --dump-config

在輸出裏能看到 tool-call-limit 與預期的 limits 即已生效。

配額規則與維度

配額按四個維度分別計算,任一維度不同就是一份獨立的配額:

  1. Agent:父 Agent 與 subagent 創建的子 Agent 是不同的 live Agent 對象,各自獨立計數。
  2. turn:一個 turn 內的多個 step 各自計數。
  3. step:配額的重置單位——進入新 step 時計數清零。
  4. 工具名:每個工具單獨計數,互不佔用。

其他規則:
* 配額通過即消耗,不退還。即使工具失敗、被取消或超時,名額也不會退還。
* 不支持 * 通配符,必須逐個工具名配置。
* 配額用盡後,不要在當前 step 內對同一個工具重試,直到進入下一個 step。

拒絕模式

配置項 onExceeded 控制配額用盡時的行爲,默認值爲 "deny"。

  • deny:直接拒絕調用。拒絕時會返回三條穩定的英文原因文本,第一條爲配額用盡。
  • ask:每一次超額調用都要重新申請授權。它走的是 DSH 0.2.0 的審批通道。此時會看到 the user rejected tool "<name>",先去查會話的審批策略(read-only / workspace-write 爲 ask,danger-full-access 爲 never),而不是去找那個“拒絕的人”。配置爲 ask 後,需要執行一次 /permission <preset> 重新應用策略。

限制邊界

本插件限制的是進入 DSH ToolRuntime 的調用次數,而不是工具實現內部發生的操作次數。

它不會限制:
* 一次 web_search 調用內部發出的多個 query。
* Web provider 內部的 HTTP 請求。
* 一次 bash 調用內部執行的多條 shell 命令。
* MCP 或其他自定義工具內部自行發起的 API 請求。

要限制這些內部操作,需要單獨配置對應工具的參數(如 Web 工具的 searchMaxQueries)。

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

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

小夜