前言¶
在 DeepSeek Harness (DSH) 的生態中,官方提供的 @deepseek-ai/dsh-llm-retry 通常能覆蓋大部分請求錯誤的重試邏輯。但在實際部署中,中轉方有時會將瞬時的限流錯誤誤標爲 QUOTA(餘額耗盡),或者模型請求正常結束卻未返回可見文本,導致官方策略直接放棄重試。dsh-auto-retry 作爲一個有界後備恢復插件,填補了這一空白。它不替代官方策略,而是在官方提供方策略不再重試後接手處理。
這是什麼¶
這是一個針對 DSH 的有界後備恢復插件。它旨在解決三類特定問題:
1. 中轉方把可恢復的瞬時 429 標成 QUOTA。
2. 模型請求“正常結束”但沒有可見輸出。
3. 輸出被 max-tokens 截斷。
插件通過識別錯誤特徵和自動續行機制,在有明確證據時介入,並將重試次數、總等待時間和自動續行次數全部限制在配置預算內。
核心功能¶
- 額外重試範圍:在官方策略放棄後,對
RATE_LIMIT、HTTP 429、EMPTY_RESPONSE和STREAM_CLOSED進行額外重試。 - 誤報識別:僅在中轉方錯誤詳情包含
rate_limit_exceeded、rate limit、allocated quota exceeded等特徵時重試,避免對真正的餘額耗盡進行無效重試。 - 自動續行:處理空響應和
max-tokens截斷導致的輸出中斷,每個 turn 最多自動續行 2 次。 - 預算控制:將重試次數和總等待時間限制在配置預算內,防止無限重試。
- 事件複用:複用 DSH 的持久事件(
llm/retry、llm/retry-started),確保會話重放和現有重試狀態 UI 能正確理解後續操作。
安裝與啓用¶
從 GitHub 安裝到 Web profile:
dsh plugin --profile web add "github:Windsland52/dsh-auto-retry#main"
安裝器會自動將包含 dsh.bundle.patch 的依賴加入 profile bundle。安裝完成後需要重啓 DSH。
典型用法¶
配置文件位於 profile 的 cordis.patch.yml 中。以下是一個基礎配置示例:
- id: dsh-auto-retry
name: '@dsh-external/dsh-auto-retry'
config:
# 空數組表示所有 provider;也可以只寫 [scnet]
providers: []
# 額外重試的錯誤碼
retryCodes:
- RATE_LIMIT
- EMPTY_RESPONSE
- STREAM_CLOSED
# 啓用預算控制
retryQuota: true
maxRetries: 8
maxElapsedMs: 900000
# 初始延遲與抖動配置
initialDelayMs: 1500
maxDelayMs: 60000
jitterRatio: 0.2
# 自動續行限制
maxAutoContinuations: 2
continueOnMaxTokens: true
適用場景與注意¶
- 兼容性:已針對 DSH
0.1.0-rc.7的 Web profile 驗證。 - 行爲邊界:插件不切換模型或 provider,不修改請求內容。內部自動續行使用
plugin來源的 user message,不會僞裝成人類輸入。 - 插件互斥:不建議與
dsh-llm-bounded-retry同時使用,因爲兩者都涉及全局重試預算,可能產生衝突。
結語¶
dsh-auto-retry 定位爲 Host 側、provider-aware 的後備恢復工具。它保留了官方重試的優先級,專門補齊了中轉方瞬時限流誤報、空可見輸出和輸出截斷這三個缺口,爲開發者提供了一個可控的重試兜底方案。更多細節可參考其 GitHub 倉庫。