dsh-retry-panel:DSH 設置裏的「斷線重試」與多層自動恢復

前言

在 DeepSeek Harness(DSH)裏跑長任務時,失敗往往不在「模型完全不可用」,而在限流窗口、流中斷、截斷或壓縮吞輪這類可恢復斷檔。DSH 自帶的 dsh-llm-retry 默認大約 5 次、總共約 16 秒退避;遇到 tpm_exceeded 這類需要分鐘級窗口的錯誤,重試耗盡後整輪失敗,界面只留下「本輪運行失敗」,還要自己發「繼續」。Amer-CN 維護的 dsh-retry-panel(npm 包名 dsh-auto-retry)在設置頁提供一張 「斷線重試」 卡片,把請求級重試、同輪續寫、回合級自動繼續、壓縮吞輪恢復、可選看門狗和備用模型切換串成一條恢復鏈,儘量在同一回合或保留上下文的後續回合裏接上,而不是每次斷線都從零手動干預。

這是什麼

dsh-retry-panel 是 DSH 生態裏的模型推理類插件,倉庫 Amer-CN/dsh-retry-panel,當前版本 0.6.2(MIT)。它在 Host 設置裏增加可保存即生效的配置面板,並配合 Host 側邏輯寫入各 provider 的 retryPolicy,同時監聽會話事件做自動繼續與冷啓動掃描。分類上屬於「模型推理」;社區目錄頁見 skillhub.cn 條目。

它解決什麼問題

典型觸發是服務返回 429 或流失敗,例如:

429: {"code":"capacity_exceeded","message":"model capacity exceeded: tpm_exceeded"}

除限流外,README 還列舉了若干更隱蔽的情況:輸出被 max-tokens 截斷需手動「繼續」、流掛起無報錯、上下文壓縮吞掉整輪卻顯示 completed、網關把瞬時 429 寫成 insufficient_quota 被 DSH 歸爲 QUOTA 導致內置重試直接放棄。本插件針對這些路徑設計了分層恢復,並在永久性錯誤(如 AUTH、CONTEXT_WINDOW_EXCEEDED)上停止空轉。

核心功能

下面按 README 中的恢復順序說明各層在做什麼。

1. 請求級重試(四檔「耐心」)

保存設置時,插件把「耐心」寫入 llm-pi-ai 各 provider 與 llm-deepseek 頂層的 retryPolicy,並顯式補上易漏錯誤碼(含 QUOTA)。退避從 1s 起、60s 封頂、±20% 抖動。

選項 行爲 適合
普通 最多重試 10 次,約 5 分鐘 日常斷流
長任務 最多重試 40 次,約 35 分鐘 出門前掛任務
死磕 mode: always,一直重試到成功 整晚掛機
關閉 maxRetries: 0 自行控制

首次安裝時,若所有 provider 尚無 retryPolicy,Host 會自動應用當前檔位;只要任一 provider 已有自定義 retryPolicy,插件不會覆蓋。

2. 同輪截斷續寫

開啓「輸出被截斷時也繼續」後,在 max-tokens 截斷時於 agent/turn-stopping 階段通過 agent.steer() 注入續寫指令,儘量在同一回合接着輸出;單輪最多續寫 3 次,超限後放行 turn/end,由回合級繼續兜底。

3. 回合級自動繼續

一輪因臨時性錯誤徹底失敗後:等待可配置秒數(默認 5,連續失敗按 2 倍遞增,封頂 10 分鐘),再以用戶身份發送「繼續」開新回合並保留上下文;默認最多連續 5 次,成功一輪清零。手動發消息或點停止會立刻讓位;僅主智能體生效。跨重啓會從持久會話歷史倒推連續失敗次數,與內存計數取較大值。若失敗前最後一次工具調用尚無結果,自動繼續文案會附加冪等提示,避免重複有副作用的操作。

4. 模型故障轉移(可選)

開啓「主模型失敗時切換備用模型」後,在可繼續的失敗上可通過 sessionController.agents.selectForNextRequest() 把下一輪請求切到備用列表中的下一個模型;備用來自 DSH 真實模型目錄下拉選擇(v0.6),失敗過的備用默認冷卻 5 分鐘(healthCooldownSec 可調)。隻影響本會話下一輪請求,不改全局默認模型。

5. 冷會話恢復

宿主重啓後,插件啓動約 2 秒會掃描最近 10 分鐘內活躍的持久會話(單次最多 5 個),對可恢復的失敗或孤兒回合嘗試喚醒並補發繼續;默認開關爲開。

6. 壓縮吞輪恢復

識別「僅有壓縮檢查點、無 assistant 輸出與工具調用卻 completed」的回合,補發「按最近的檢查點繼續動手」類消息。

7. 卡住看門狗(默認關)

開啓後,若一輪超過設定秒數(默認 180)無流輸出或事件,會取消當前請求並交給回合級自動繼續;超長工具調用可能被誤判,需自行權衡。

安裝與啓用

按 DSH bundle 方式安裝,不要手寫裸 - id: 覆蓋條目。

1、進入 profile 目錄並添加依賴:

cd ~/.dsh/profiles/desktop        # 或 web
pnpm add github:Amer-CN/dsh-retry-panel

2、在同一 package.json 的 dsh.profile.bundles 中加入包名:

{
  "dsh": {
    "profile": {
      "bundles": [
        "@deepseek-ai/dsh-base",
        "@deepseek-ai/dsh-web-app",
        "dsh-auto-retry"
      ]
    }
  }
}

若 DSH 版本支持從 GitHub 安裝插件,也可使用:

dsh plugin --profile desktop add github:Amer-CN/dsh-retry-panel

裝完後重啓或重載 DSH;Web 端刷新頁面,桌面端重新打開應用。

兼容方面:dsh.engines.dsh 要求 >=0.2.1-rc.1;README 註明在 0.2.1-rc.5(2026-10-30)實測。需要帶 settings / configEditor 的 desktop / web profile,headless 下靜默跳過。

典型用法與設置項

日常用法是打開 DSH 設置,找到 「斷線重試」 卡片,按任務長度選擇「重試耐心」,並按需打開自動繼續、截斷續寫、冷會話恢復或備用模型。保存後立即生效,無需重啓 Host。

常用默認值(均可於面板調整):

設置 默認 說明
重試耐心 普通 普通 / 長任務 / 死磕 / 關閉
回合失敗後自動發送「繼續」 開 回合級總開關
等待秒數 5 0~600;連續失敗遞增,封頂 10 分鐘
最多連續 5 1~50,成功一輪清零
繼續時發送 繼續 支持 {code} {kind} {attempt} {tool}
主模型失敗時切換備用模型 關 需配置備用列表
重啓後恢復被中斷的任務 開 掃描最近 10 分鐘內失敗/孤兒會話
輸出被截斷時也繼續 開 同輪續寫 + 跨輪兜底
卡住不動時自動重來 關 看門狗
卡住判定秒數 180 30~600

實現上,重試策略保存後會 POST /api/auto-retry/apply,由 Host 在獨立任務裏 settings.mutate 寫入 retryPolicy;瀏覽器端僅訪問同源路由,不直接請求模型供應商。運行時除 @deepseek-ai/schemastery@3.18.5 外無其它外部依賴;插件不讀寫文件、不持久化 API Key,配置由 DSH settings 管理。

適用場景與注意

適合經常在 DSH 裏掛長任務、又常遇到 429、斷流、截斷或壓縮吞輪的開發者。「死磕」檔會不限次數重試直到成功或你手動停止,Permanent 類錯誤仍不會無限續命。自動繼續是重開一輪而非續寫半段回答;故障轉移需顯式配置備用模型,健康冷卻表在內存中、重啓清空。冷會話掃描只看最近 10 分鐘、最多 5 個會話。

DSH 插件與 Host 同進程權限運行,安裝前建議閱讀倉庫源碼與 LICENSE;安全報告方式見倉庫 SECURITY.md。SkillHub 等社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。

結尾

dsh-retry-panel 把限流與斷流上的「等一會兒再試」和任務斷檔上的「自動繼續」收到一張設置卡里,並用四檔耐心、同輪續寫與可選故障轉移減少手動點「繼續」的次數。目錄頁:https://www.skillhub.cn/plugins/Amer-CN/dsh-retry-panel;源碼與完整說明:https://github.com/Amer-CN/dsh-retry-panel。

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

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

小夜