在 DeepSeek Harness(DSH)的開發過程中,模型故障(如服務器過載、網絡波動或 PI_AI_ERROR)常導致請求中斷或任務失敗。deepseek-harness-retry 插件旨在解決這一問題,提供可配置的自動重試機制和中斷會話恢復能力。
插件定位與架構¶
該插件由社區開發者 syncended 維護,屬於 Host 插件。它位於 agent/request-error 水流中,在應用自身的回退預算之前,會優先委託給 DSH 內置的恢復策略。
核心價值:
* 處理通用瞬態模型故障(如 PI_AI_ERROR、UNKNOWN)。
* 在 DSH 崩潰或重啓後,僅繼續被證明未完成的工作。
* 提供精確的提供商路由控制。
安裝與啓用¶
安裝插件時,DSH 會自動將其註冊爲 model-error-retry 插件條目,無需手動添加插件入口。
dsh plugin --profile web add @syncended/dsh-retry
安裝或升級後,需要重啓選定的 DSH Profile 以使配置生效。
核心功能¶
-
智能重試策略
- 處理
PI_AI_ERROR、UNKNOWN等配置的瞬態錯誤。 - 默認在原始請求後重試 2 次。
- 針對 Codex 服務器明確的過載錯誤,重試 5 次並使用更長的延遲。
- 處理
-
延遲控制
- 支持指數退避(Exponential Backoff)策略。
- 包含隨機抖動(Jitter)以避免驚羣效應。
- 支持 Provider 返回的
Retry-After頭。
-
恢復與中斷處理
- 中止感知等待:在等待重試期間,如果檢測到用戶取消或插件銷燬,會立即停止等待。
- 會話恢復:在 DSH 崩潰或重啓後,通過持久化會話歷史,安全地繼續未完成的任務(默認保留 24 小時內的未完成任務)。
- 收件箱保護:插件永遠不會移除、重新排序或替換現有的持久化收件箱項目。
-
事件與路由
- 發出標準的非表面會話事件(
llm/retry、llm/retry-started)。 - 支持通過
providers(允許列表)和excludeProviders(拒絕列表)精確控制重試的 Provider 路由。
- 發出標準的非表面會話事件(
配置方法¶
插件安裝後默認配置即可生效。如需自定義,需編輯對應的 Profile 配置文件。
編輯路徑:
$DSH_HOME/profiles/<profile>/cordis.patch.yml
配置示例:
找到 id: model-error-retry 的條目,修改 config 部分。
- id: model-error-retry
config:
maxRetries: 3
overloadMaxRetries: 5
retryableCodes:
- PI_AI_ERROR
- UNKNOWN
- STREAM_CLOSED
- EMPTY_RESPONSE
- RATE_LIMIT
- SERVER
- TIMEOUT
- TRANSPORT
initialDelayMs: 750
overloadInitialDelayMs: 2000
maxDelayMs: 15000
jitterRatio: 0.15
respectRetryAfter: true
resumeInterrupted: true
resumeMaxAgeMs: 86400000
providers:
- openai
- openrouter
主要配置項說明:
* maxRetries: 普通錯誤的重試次數,默認爲 2。設爲 0 可禁用請求錯誤重試。
* overloadMaxRetries: 針對過載錯誤的重試次數,默認爲 5。
* resumeMaxAgeMs: 未完成任務的最大等待時間(毫秒),默認爲 86400000(24 小時)。
* providers: 允許重試的提供商列表,留空則允許所有。
系統要求與注意事項¶
-
環境依賴:
- 需要 Node.js 20 或更高版本。
- 需要 DeepSeek Harness 0.1.0-rc.7+ 或 0.1.1-rc.2+。
- 需要內置插件
@deepseek-ai/dsh-llm-retry(插件依賴該插件而非替換它)。
-
行爲限制:
- 成本:每次重試都是一次新的 Provider 請求,會產生額外的費用。
- 歷史記錄:重試的錯誤和延遲不會添加到模型可見的歷史記錄中。
- 權限:作爲 Host 插件,它沒有瀏覽器連接步驟,也不需要插件特定的環境變量。
總結¶
deepseek-harness-retry 插件通過自動化的重試和會話恢復機制,增強了 DSH 在處理不穩定網絡或模型狀態時的魯棒性。開發者可以通過配置文件靈活調整重試策略,以平衡請求成功率和資源消耗。