dsh-auto-retry:DSH 有界后备恢复插件

前言

在 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 仓库。

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

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

小夜