前言¶
在 DeepSeek Harness(DSH)裏跑智能體時,模型請求偶爾會因網關抖動、限流或超時失敗。中轉站、聚合網關以及被限流的官方接口裏,這類失敗往往是一次性的:同一請求隔幾秒再發就能成功。默認情況下,失敗會直接冒到界面、整輪對話結束,需要手動再點一次。下面介紹社區插件 dsh-auto-retry(維護者 643048695),它在 DSH 的 agent/request-error 鏈路上攔截失敗,按固定退避階梯重跑當前 step,而不是從頭再跑整輪對話。
這是什麼¶
dsh-auto-retry 是 DSH 生態裏的「模型推理」類插件:給 Harness 加一層模型請求自動重試。某個 step 因 503、429、upstream_error 等原因失敗時,插件先攔住這次失敗,等待一段時間後再把同一個 step 重跑一遍。
流程可以概括爲:
provider 返回 503 / 429 / "upstream_error" …
↓ agent/request-error waterfall
dsh-auto-retry(prepend,最先拿到這次失敗)
↓ 等待 2s → 重試;再失敗等 5s → 重試 …
重跑同一個 step
裝上之後,常見抖動會在日誌裏體現爲「第 1/4 次自動重試,等待 2 秒」之類信息,對話隨後自行繼續,而不必立刻人工重試。
核心功能¶
退避階梯¶
默認最多重試 4 次,最壞情況下累計靜默等待約 37 秒:
| 第幾次 | 等待 | 累計 |
|---|---|---|
| 1 | 2 秒 | 2 秒 |
| 2 | 5 秒 | 7 秒 |
| 3 | 10 秒 | 17 秒 |
| 4 | 20 秒 | 37 秒 |
重試次數按 provider + turn + step 計數,因此重試的是「同一個 step」,不會把整輪對話從頭再跑一遍。若 maxRetries 大於階梯表長度,超出部分固定使用最後一檔(20 秒)延遲。
錯誤處理策略¶
插件攔截全部請求錯誤,不做按狀態碼的分類。README 說明這是有意爲之:中轉站常把「額度用完」「模型不存在」包裝成 upstream_error 或缺少明確狀態碼,按碼分類容易漏攔。代價是不可恢復的錯誤也會被重試(例如密鑰失效、請求體不合法),可能多等幾十秒後才報同樣的錯。若需要避免,可將 maxRetries 調小或關閉插件。
其他邊界:
- 用戶按停止(
signal.aborted)時立即放棄,不會在後臺偷偷重試。 - 只重放當前 step,不改寫請求內容、不換模型、不換 provider;換模型由路由類插件負責。
- 達到上限時,日誌會寫「已達到最大重試次數,停止重試」,不會靜默吞掉失敗。
配置¶
設置頁中的字段均爲 volatile(改完立即生效,無需重啓 DSH):
| 字段 | 默認 | 說明 |
|---|---|---|
enabled |
true |
總開關 |
maxRetries |
4 |
最大重試次數 |
log |
true |
每次攔截與等待是否寫日誌 |
兼容性與實現依賴¶
插件依賴宿主暴露的 agent/request-error waterfall,以及處理函數返回 { kind: "retry" } 的契約。README 寫明已與 DSH 0.2.1-rc.3(當前桌面版內置核心)逐項覈對,0.1.7 線同樣具備這兩處接縫。若宿主改動契約,最壞情況是插件不生效(監聽不到或返回值不被識別),不會讓原本正常的請求變失敗。
倉庫內 npm test 運行 8 個用例,覆蓋階梯遞增、次數上限後的回落、計數鍵隔離、開關關閉,以及「已中斷 / 等待中中斷」兩條中斷路徑;CI 另校驗市場要求的 dsh.bundle 清單與入口。許可證爲 MIT(package.json 版本 1.0.0)。
安裝與啓用¶
先用官方命令把插件裝進當前 DSH 環境:
dsh plugin add github:643048695/dsh-auto-retry
也可以在 profile 的 package.json 裏聲明依賴,把 dsh-auto-retry 加入 dsh.profile.bundles,再將目錄鏈接進 node_modules。
DSH 的理念是「一切皆插件」;社區目錄 SkillHub 插件頁 是獨立站點,與 DeepSeek / 幻方無官方從屬關係。插件與宿主進程同權限運行,安裝前建議自行查看 GitHub 源碼與 LICENSE。
典型用法¶
無需單獨 API:啓用插件並保持默認配置後,當某 step 的模型請求失敗,waterfall 會自動進入重試邏輯。若需觀察行爲,保持 log: true,在日誌中查看第幾次重試與等待秒數;若希望快速失敗,將 enabled 設爲 false 或減小 maxRetries。
適用場景與注意¶
適合:經常走中轉/聚合網關、偶發 503/429/超時、希望對話在短暫抖動後自動續跑的場景。
注意:不可恢復錯誤也會被重試並佔用等待時間;停止操作會立刻終止重試鏈;插件不負責換模型或改請求體。
結尾¶
dsh-auto-retry 用固定退避階梯和 per-step 計數,把「一次性」的模型請求失敗就地消化,同時尊重用戶中斷信號。進一步瞭解可訪問 SkillHub 目錄頁 與 GitHub 倉庫。