前言¶
在 DeepSeek Harness (DSH) 的生态中,官方提供的 @deepseek-ai/dsh-llm-retry 通常能覆盖大部分请求错误的重试逻辑。但在实际部署中,中转方有时会将瞬时的限流错误误标为 QUOTA(余额耗尽),或者模型请求正常结束却未返回可见文本,导致官方策略直接放弃重试。dsh-auto-retry 作为一个有界后备恢复插件,填补了这一空白。它不替代官方策略,而是在官方提供方策略不再重试后接手处理。
这是什么¶
这是一个针对 DSH 的有界后备恢复插件。它旨在解决三类特定问题:
1. 中转方把可恢复的瞬时 429 标成 QUOTA。
2. 模型请求“正常结束”但没有可见输出。
3. 输出被 max-tokens 截断。
插件通过识别错误特征和自动续行机制,在有明确证据时介入,并将重试次数、总等待时间和自动续行次数全部限制在配置预算内。
核心功能¶
- 额外重试范围:在官方策略放弃后,对
RATE_LIMIT、HTTP 429、EMPTY_RESPONSE和STREAM_CLOSED进行额外重试。 - 误报识别:仅在中转方错误详情包含
rate_limit_exceeded、rate limit、allocated quota exceeded等特征时重试,避免对真正的余额耗尽进行无效重试。 - 自动续行:处理空响应和
max-tokens截断导致的输出中断,每个 turn 最多自动续行 2 次。 - 预算控制:将重试次数和总等待时间限制在配置预算内,防止无限重试。
- 事件复用:复用 DSH 的持久事件(
llm/retry、llm/retry-started),确保会话重放和现有重试状态 UI 能正确理解后续操作。
安装与启用¶
从 GitHub 安装到 Web profile:
dsh plugin --profile web add "github:Windsland52/dsh-auto-retry#main"
安装器会自动将包含 dsh.bundle.patch 的依赖加入 profile bundle。安装完成后需要重启 DSH。
典型用法¶
配置文件位于 profile 的 cordis.patch.yml 中。以下是一个基础配置示例:
- id: dsh-auto-retry
name: '@dsh-external/dsh-auto-retry'
config:
# 空数组表示所有 provider;也可以只写 [scnet]
providers: []
# 额外重试的错误码
retryCodes:
- RATE_LIMIT
- EMPTY_RESPONSE
- STREAM_CLOSED
# 启用预算控制
retryQuota: true
maxRetries: 8
maxElapsedMs: 900000
# 初始延迟与抖动配置
initialDelayMs: 1500
maxDelayMs: 60000
jitterRatio: 0.2
# 自动续行限制
maxAutoContinuations: 2
continueOnMaxTokens: true
适用场景与注意¶
- 兼容性:已针对 DSH
0.1.0-rc.7的 Web profile 验证。 - 行为边界:插件不切换模型或 provider,不修改请求内容。内部自动续行使用
plugin来源的 user message,不会伪装成人类输入。 - 插件互斥:不建议与
dsh-llm-bounded-retry同时使用,因为两者都涉及全局重试预算,可能产生冲突。
结语¶
dsh-auto-retry 定位为 Host 侧、provider-aware 的后备恢复工具。它保留了官方重试的优先级,专门补齐了中转方瞬时限流误报、空可见输出和输出截断这三个缺口,为开发者提供了一个可控的重试兜底方案。更多细节可参考其 GitHub 仓库。