dsh-better-retry: 重试所有模型请求失败

前言

DeepSeek Harness (DSH) 的默认重试插件(dsh-llm-retry)通常只重试白名单内的错误码(如空响应、限流、服务器错误等)。遇到不在白名单内的错误(如鉴权失败、配额不足、无效请求等),默认行为是直接结束本轮运行。

dsh-better-retry 是一个 DSH Cordis 插件,旨在解决上述痛点。它不依赖白名单,而是尝试重试任何模型请求的失败。通过指数退避策略和可配置的重试预算,它在 UI 上显示重试状态,并允许通过滑块实时调整参数。

核心功能

  • 全量重试:重试任何错误码(鉴权、配额、无效请求等),不局限于白名单。
  • 指数退避:重试延迟从 500ms 开始,呈指数增长,最高延迟 10 秒。
  • UI 滑块配置:在 设置 → 常规 中提供滑块,调整“失败重试次数”(0-64)和“429 等待时长”(5-120s)。
  • 状态显示:UI 会显示“正在重试模型请求…”,确保会话重放安全。
  • 智能排除:自动排除 ABORTED(用户取消)和 CONTEXT_WINDOW_EXCEEDED(由压缩插件处理)错误。
  • 共存性:与默认的 dsh-llm-retry 插件共存,下游的决策优先级更高。

安装

推荐使用全局静态安装方式,这样配置变更会持久化,且插件能在 DSH 重启后存活。

cd "$DSH_HOME/profiles/web"
pnpm add https://github.com/Yaing-Yan/dsh-better-retry/archive/refs/tags/v1.0.0.tar.gz

安装后,需在 $DSH_HOME/profiles/web/package.json 的 dsh.profile.bundles 数组中添加 "dsh-better-retry",然后重启 DSH。

也可以使用动态方式(cordis_define)在单个会话中注入代码,但动态模式下重试次数固定为 8,且不持久化。

配置与使用

安装后,插件会自动注册到 设置 → 常规 页面。

  1. 调整重试次数:拖动“失败重试次数”滑块。默认为 8,范围 0-64。设置为 0 可完全禁用此插件。
  2. 调整 429 等待:拖动“429 等待”滑块。默认为 15 秒,范围 5-120 秒。这决定了遇到限流错误时的等待时长。
  3. 查看状态:当请求失败时,UI 会显示“正在重试模型请求…”。
  4. 持久化:所有设置变更会立即保存到 ~/.dsh/settings.yaml,并在下次启动时生效。

插件会优先使用 Provider 返回的 Retry-After 头作为等待时间,但该时间会被限制在用户设定的 429 等待范围内。

注意事项

  • 鉴权与配额:重试 AUTH 或 QUOTA 错误仅对瞬态故障有效。如果 API Key 永久失效或余额为空,重试多次后仍会报错。
  • 上下文窗口:上下文窗口溢出(CONTEXT_WINDOW_EXCEEDED)由 dsh-compaction-basic 插件处理,本插件不会尝试重复重试该错误。
  • 会话安全:插件发出的 llm/retry 事件符合 DSH 标准规范,确保会话可重放。

总结

dsh-better-retry 通过移除重试白名单限制,让 DSH 在遇到非标准错误时也能尝试恢复。对于需要处理复杂 API 响应或偶尔不稳定模型的场景,该插件能提高请求成功率。

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

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

小夜