前言¶
DSH 中的一次模型請求可能經過 relay、reverse proxy、API gateway 或 forwarding service。臨時斷連、5xx、限流、超時,都可能導致 agent 輪次或長任務中斷。
dsh-reconnect 是 DeepSeek Harness(DSH)的 Host 端插件。它在 Provider normal / always 策略之後接管可恢復失敗,並按插件策略重發同一請求。
這是什麼¶
dsh-reconnect 的定位是:
Safe model-request retry for DeepSeek Harness with exponential backoff, relay/proxy failure recovery, and a unified settings panel.
已覈實信息:
- 維護者:MistRain-1
- 版本:
2.0.0 - 許可證:MIT
- 運行位置:DSH Host 插件
- 依賴:DSH Host、
agent/request-error瀑布事件、Host settings service
它主要解決“同一模型請求因爲臨時失敗而失敗”的問題,避免臨時網絡或服務異常直接終止當前 agent 步驟。
核心功能¶
監聽與接管¶
dsh-reconnect 監聽 DSH 的 agent/request-error 瀑布事件。
在內置 normal Provider 重試策略放棄後,或在 Provider always 策略將恢復交給下游時,該插件按自身策略再次發送同一請求。
重試範圍¶
| 場景 | 行爲 |
|---|---|
EMPTY_RESPONSE、RATE_LIMIT、SERVER、STREAM_CLOSED、TIMEOUT、TRANSPORT 等臨時失敗 |
按插件策略重試 |
| 模型缺失或未配置 | 繼續重試,等待模型或賬戶配置恢復 |
QUOTA |
默認不重試;開啓 retryQuota: true 後重試 |
| 未知錯誤 | 默認無限重試;關閉 retryUnknown 後使用 unknownMaxRetries 限制 |
| 工具執行錯誤、參數錯誤、未知工具、認證、憑證、上下文溢出、中止等 | 永不重試,並立即結束步驟 |
指數退避¶
插件使用指數退避:
1s -> 2s -> 4s -> ...
默認本地退避上限爲 60s。
maxDelayMs 只限制本地指數退避延遲,不限制 Provider Retry-After,也不限制總重試時長。
如果 maxDelayMs 無效或缺失,會回落到默認值 60000。
Provider Retry-After¶
當存在正數 providerRetryAfterMs 或 Provider Retry-After 時,插件會尊重該最小等待。
它是 Provider 側給出的最小等待,不受本地 maxDelayMs 指數退避上限限制。
事件與清理¶
插件會發出標準 llm/retry 事件,用於 Harness 對話 UI 顯示重試計數和倒計時。
以下情況會停止重試並清理活動等待:
- 當前輪中止
- 插件停止
- 插件熱重載
安裝與啓用¶
獲取插件包¶
一種已覈實的獲取方式是 Git clone:
git clone https://github.com/MistRain-1/dsh-reconnect.git "$HOME/dsh-reconnect"
也可以通過 GitHub Web Download 或終端下載 ZIP 獲取插件包。
註冊插件¶
將插件包註冊到 DSH Cordis composition 中:
- insert:
- id: reconnect
name: dsh-reconnect
安裝持久插件包後需要重啓 DSH。
插件配置變更可以立即生效,不需要重啓。
典型用法¶
使用設置卡片¶
打開:
Settings → Plugin configuration
找到 ReConnect 插件卡片,可配置:
- Max wait per attempt:可選擇
1/2/5/10/30/60/120秒,或自定義值 - Retry on quota:默認關閉
- Retry unknown errors indefinitely:默認開啓
- Max retries for unknown errors:默認
3
模型缺失或未配置的錯誤不受未知錯誤重試次數上限限制。
使用 YAML 配置¶
可以在 Cordis row config 中配置:
- insert:
- id: reconnect
name: dsh-reconnect
config:
maxDelayMs: 15000
retryQuota: false
retryUnknown: true
示例中:
maxDelayMs: 15000表示本地指數退避上限爲15000msretryQuota: false表示QUOTA默認不重試retryUnknown: true表示未知錯誤默認無限重試
maxDelayMs: 15000 對應的本地退避序列大致爲:
1s -> 2s -> 4s -> 8s -> 15s -> 15s...
Provider 側的正數 Retry-After 仍然優先。
適用場景與注意¶
適合:
- relay 節點不穩定
- reverse proxy、API gateway、forwarding service 偶發失敗
- 連接被重置、斷開或返回不完整響應
- 臨時 provider 故障、服務端 5xx、限流、超時
- 希望長任務在短時 provider 或網絡故障後繼續運行
需要注意:
QUOTA默認不重試。餘額不足或配額耗盡時,默認不會無限等待。- 未知錯誤默認無限重試。關閉
retryUnknown後,unknownMaxRetries默認爲3,只用於同一模型步驟的連續未知失敗。 maxDelayMs不限制 ProviderRetry-After,也不限制總重試時長。- 工具執行錯誤、參數錯誤、未知工具、認證、憑證、上下文溢出、中止等錯誤不會重試,並立即結束步驟。
- 插件以當前 dsh 進程權限運行,安裝前應檢查源碼與許可證。
- 客戶端只統一提供設置卡片,不讀取憑證。
資源¶
- GitHub:https://github.com/MistRain-1/dsh-reconnect