前言¶
DeepSeek Harness (dsh) 是一個智能體開發框架。一些 OpenAI 兼容網關(如 OpenCode Zen)把自身上游連接的瞬時失敗回傳給客戶端(流的終止 finish_reason、錯誤負載回顯等),而不是走 HTTP/傳輸層錯誤。在 dsh 0.1.5-rc.2(及 0.1.7 Messages 線)中,這些措辭仍被原生策略誤分類爲不可重試(如 PI_AI_ERROR),導致整個 turn 直接硬失敗。dsh-llm-net-retry 插件爲這些瞬時網絡故障提供有界重試機制,修復原生策略的盲區。
核心功能¶
- 有界重試:針對瞬時網關網絡故障進行重試。
- 捕獲盲區錯誤:捕獲原生策略歸爲不可重試的錯誤,如
network_error、unexpected EOF、stream_read_error等。 - 環境要求:適用於 dsh >= 0.1.7-rc.1。
- 零侵入:不佔用 settings 命名空間,不修改 dsh 核心邏輯。
- 可觀測性:記錄重試事件到
llm/retry,與原生策略事件格式兼容。
安裝¶
本插件是獨立的 dsh 插件,裝入任意 dsh profile 即可生效(tui / web / 自定義 launcher 均可)。
dsh plugin --profile <profile> add @aiwayds/dsh-llm-net-retry
卸載¶
卸載時會自動清理 profile bundles 中的對應條目。本插件無落盤狀態,卸載後不留任何殘留。
dsh plugin --profile <profile> remove @aiwayds/dsh-llm-net-retry
配置¶
本插件不佔用 settings 命名空間,配置通過組合樹 entry config 在 cordis.patch.yml 中設置。全部參數可選,默認值對齊 llm-retry 原生策略。
- insert:
- id: dsh-llm-net-retry
name: '@aiwayds/dsh-llm-net-retry'
config:
mode: on # 'off' 完全摘除 listener
maxRetries: 5
backoff:
initialDelayMs: 500
maxDelayMs: 10000
jitterRatio: 0.1
工作原理¶
插件掛在 agent/request-error waterfall 的末端。
- 優先級判定:先調用
next()執行原生策略(dsh-llm-retry)。任何一方決定重試,決策原樣透傳。 - 盲區捕獲:只有當所有 listener 都棄權,且失敗落在官方分類盲區時,才調度本插件的有界重試。
- 消息匹配:覆蓋
network_error、unexpected EOF、stream_read_error、流提前收尾措辭等。 - Code 守衛:若原生策略已認領該錯誤碼(如
TRANSPORT、SERVER等),本插件讓位,不疊加雙重重試。
- 消息匹配:覆蓋
- 持久化:重試事件記錄到
llm/retry,計數使用插件自身的 policy key,不污染原生 llm-retry 的計數。
兼容性¶
- 要求:dsh >= 0.1.7-rc.1。插件只跟隨 dsh RC/stable 線,不再支持 alpha 線。
- 零侵入:無 monkey-patch,不替換服務,dispose 即乾淨移除。
許可證¶
MIT
生態信息¶
- GitHub: https://github.com/fan56/dsh-llm-net-retry
- 目錄: https://www.skillhub.cn/plugins/fan56/dsh-llm-net-retry