dsh-reconnect:DeepSeek Harness 的模型请求安全重试插件

前言

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_RESPONSERATE_LIMITSERVERSTREAM_CLOSEDTIMEOUTTRANSPORT 等临时失败 按插件策略重试
模型缺失或未配置 继续重试,等待模型或账户配置恢复
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 表示本地指数退避上限为 15000ms
  • retryQuota: 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 不限制 Provider Retry-After,也不限制总重试时长。
  • 工具执行错误、参数错误、未知工具、认证、凭证、上下文溢出、中止等错误不会重试,并立即结束步骤。
  • 插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。
  • 客户端只统一提供设置卡片,不读取凭证。

资源

  • GitHub:https://github.com/MistRain-1/dsh-reconnect
羽毛球分组比赛记分
小程序二维码

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

Xiaoye