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