前言¶
DeepSeek Harness (dsh) 是一个智能体开发框架。一些 OpenAI 兼容网关(如 OpenCode Zen)把自身上游连接的瞬时失败回传给客户端(流的终止 finish_reason、错误负载回显等),而不是走 HTTP/传输层错误。在 dsh 0.1.5-rc.2(及 0.1.7 Messages 线)中,这些措辞仍被原生策略误分类为不可重试(如 PI_AI_ERROR),导致整个 turn 直接硬失败。dsh-llm-net-retry 插件为这些瞬时网络故障提供有界重试机制,修复原生策略的盲区。
核心功能¶
- 有界重试:针对瞬时网关网络故障进行重试。
- 捕获盲区错误:捕获原生策略归为不可重试的错误,如
network_error、unexpected EOF、stream_read_error等。 - 环境要求:适用于 dsh >= 0.1.7-rc.1。
- 零侵入:不占用 settings 命名空间,不修改 dsh 核心逻辑。
- 可观测性:记录重试事件到
llm/retry,与原生策略事件格式兼容。
安装¶
本插件是独立的 dsh 插件,装入任意 dsh profile 即可生效(tui / web / 自定义 launcher 均可)。
dsh plugin --profile <profile> add @aiwayds/dsh-llm-net-retry
卸载¶
卸载时会自动清理 profile bundles 中的对应条目。本插件无落盘状态,卸载后不留任何残留。
dsh plugin --profile <profile> remove @aiwayds/dsh-llm-net-retry
配置¶
本插件不占用 settings 命名空间,配置通过组合树 entry config 在 cordis.patch.yml 中设置。全部参数可选,默认值对齐 llm-retry 原生策略。
- insert:
- id: dsh-llm-net-retry
name: '@aiwayds/dsh-llm-net-retry'
config:
mode: on # 'off' 完全摘除 listener
maxRetries: 5
backoff:
initialDelayMs: 500
maxDelayMs: 10000
jitterRatio: 0.1
工作原理¶
插件挂在 agent/request-error waterfall 的末端。
- 优先级判定:先调用
next()执行原生策略(dsh-llm-retry)。任何一方决定重试,决策原样透传。 - 盲区捕获:只有当所有 listener 都弃权,且失败落在官方分类盲区时,才调度本插件的有界重试。
- 消息匹配:覆盖
network_error、unexpected EOF、stream_read_error、流提前收尾措辞等。 - Code 守卫:若原生策略已认领该错误码(如
TRANSPORT、SERVER等),本插件让位,不叠加双重重试。
- 消息匹配:覆盖
- 持久化:重试事件记录到
llm/retry,计数使用插件自身的 policy key,不污染原生 llm-retry 的计数。
兼容性¶
- 要求:dsh >= 0.1.7-rc.1。插件只跟随 dsh RC/stable 线,不再支持 alpha 线。
- 零侵入:无 monkey-patch,不替换服务,dispose 即干净移除。
许可证¶
MIT
生态信息¶
- GitHub: https://github.com/fan56/dsh-llm-net-retry
- 目录: https://www.skillhub.cn/plugins/fan56/dsh-llm-net-retry