前言¶
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,且不持久化。
配置与使用¶
安装后,插件会自动注册到 设置 → 常规 页面。
- 调整重试次数:拖动“失败重试次数”滑块。默认为 8,范围 0-64。设置为 0 可完全禁用此插件。
- 调整 429 等待:拖动“429 等待”滑块。默认为 15 秒,范围 5-120 秒。这决定了遇到限流错误时的等待时长。
- 查看状态:当请求失败时,UI 会显示“正在重试模型请求…”。
- 持久化:所有设置变更会立即保存到
~/.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 响应或偶尔不稳定模型的场景,该插件能提高请求成功率。