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 響應或偶爾不穩定模型的場景,該插件能提高請求成功率。

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

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

小夜