@zhourenke/dsh-agent-rate-limit:为 DSH 自动添加 TPM/RPM 速率限制

前言

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 仓库。

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

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

小夜