dsh-session-robustness:官方重試耗盡後的會話兜底

DSH 默認的 dsh-llm-retry 機制在遇到超時、限流或網絡波動時,通常在 5 次重試後便停止。此時如果請求失敗,會話往往直接中斷。dsh-session-robustness 旨在解決這一痛點,它接在官方重試之後,針對瞬時 API 故障繼續重試,直到成功、取消或暫停。

插件定位

這是一個 DSH 工作流插件,由 bainianlaoyao 維護。它不改變模型策略,也不自動發送“繼續”指令,而是在同一個打開的 turn/step 上,針對特定瞬時錯誤(如 TIMEOUT, RATE_LIMIT, STREAM_CLOSED 等)進行無限次重試,並將失敗分片不寫入歷史上下文。

安裝

通過命令行安裝:

dsh plugin --profile web add dsh-session-robustness

安裝後重啓 web profile,設置頁會出現“會話魯棒性”選項。

核心功能

1. 接管重試流程

插件掛載在 agent/request-error waterfall 上。其執行順序在官方 dsh-llm-retry 之後,compaction(上下文壓縮)之前:
1. adapter 流失敗
2. agent/request-error waterfall
3. compaction(只處理 CONTEXT_WINDOW_EXCEEDED)
4. dsh-llm-retry(官方 5 次重試)
5. 本插件(官方預算耗盡後,瞬時失敗繼續重試)

2. 重試策略

  • 覆蓋範圍:除了官方重試的合格碼(EMPTY_RESPONSE, RATE_LIMIT, SERVER, TIMEOUT, TRANSPORT),本插件額外無條件覆蓋 STREAM_CLOSED, MALFORMED_RESPONSE, STREAM, HTTP_408, HTTP_409, HTTP_425, HTTP_429, HTTP_499, HTTP_5xx。
  • 退避機制:採用指數 + 抖動退避,優先遵循服務端返回的 Retry-After 頭。
  • Codex 專項處理:0.1.6 版本起,針對 openai-codex provider,處理 WebSocket 續寫丟失問題,防止因流失敗導致後續請求錨定在舊的 response.id 上。
  • 控制方式:通過設置頁可暫停或關閉,無需卸載插件。

配置與使用

界面操作

  1. 打開 設置 → 會話魯棒性。
  2. 默認已啓用,次數上限爲 0(即無限重試)。
  3. 官方還在重試時,界面顯示“已重試模型請求 (n/5)”。
  4. 官方 5 次用完後,composer 上方會出現“官方 5 次已用完,正在接管第 N 次”,可當場暫停。

YAML 配置

若需硬性上限,可編輯 $DSH_HOME/settings.yaml:

session-robustness:
  enabled: true
  paused: false
  maxRetries: 0          # 0 = 無限(官方 5 次之後)
  initialDelayMs: 1000
  maxDelayMs: 30000
  jitterRatio: 0.2
  extraRetryableCodes: [] # 例如 INVALID_REQUEST;永久錯誤仍會被拒絕

注意事項

  • 永久錯誤不重試:AUTH、QUOTA、CONTEXT_WINDOW_EXCEEDED、MISSING_CREDENTIAL、INVALID_CREDENTIAL、NO_ADAPTER、ABORTED 等永久性錯誤不會進入此插件的重試流程。上下文溢出仍交給官方 compaction。
  • 進程外隔離:進程外 / ACP 子 agent 不會接管此插件,僅接管當前進程內的 in-process 子 agent。
  • 不包裝流:不包裝 ctx.llm.stream(),不自動發“繼續”。
  • 許可證:MIT。

該插件適用於對 API 穩定性要求較高的場景,通過增加容錯層減少因瞬時網絡波動導致的會話中斷。更多詳情見 GitHub。

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

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

小夜