前言¶
DSH 的 Agent 循環能在幾十秒內連續發出多個請求。這很容易超過供應商的 TPM(每分鐘令牌數)或 RPM(每分鐘請求數)上限,導致對話被 429 錯誤打斷。@zhourenke/dsh-agent-rate-limit 插件在 LLM 流式管線前插入一層自適應延遲。它使用滑動窗口算法管理請求隊列,在觸發供應商限速之前,先按餘量把請求排好隊。
插件簡介¶
- 名稱:
@zhourenke/dsh-agent-rate-limit - 維護者:zhourenke
- 許可證:MIT
核心能力:
* 讀取 API usage 數據塊,含緩存命中,賬單口徑準確。
* 只延遲不拒絕,避免 429 導致對話中斷。
* 默認值匹配常見配額,無需改動 DSH 源碼。
* 支持配置熱重載。
安裝與啓用¶
通過命令行安裝:
dsh plugin --profile web add "github:zhourenke/dsh-agent-rate-limit"
安裝後必須重啓 DSH 纔會生效(新增的 bundle 在進程啓動時才載入)。確認插件加載成功:在聊天輸入框輸入 /agent-rate-limit,若顯示 Status: loaded 即爲工作正常。
配置¶
默認配置即可工作,但可以通過編輯配置文件調整參數:
~/.dsh/profiles/web/cordis.patch.yml
主要配置項包括:
tpmLimit:每分鐘令牌上限,默認 1200000。rpmLimit:每分鐘請求數上限,默認 15000。safetyFactor:安全係數,默認 0.8,實際生效上限爲tpmLimit * safetyFactor。verbose:是否輸出詳細日誌。countFailedAttempts:失敗嘗試是否計入窗口,默認 true。
編輯配置後保存,無需重啓,熱重載即可生效(僅安裝/卸載插件本身需要重啓)。
工作原理與限制¶
插件通過滑動窗口算法控制請求頻率。當窗口內有足夠餘量時直接放行;接近上限時等待舊記錄滑出窗口。
注意事項:
* 窗口狀態存在於 DSH 進程內,多實例不共享。
* 配置對 provider 是全局的。
* 失敗嘗試默認計入窗口。
* 不保證不撞限速,僅降低概率。
結語¶
該插件爲 DSH 提供了基礎的保護機制,通過在觸發供應商限速前進行排隊,降低了對話中斷的風險。更多細節可參考 GitHub 倉庫。