怎么让 dsh 无限重试
700 字
4 分钟
怎么让 dsh 无限重试

背景
dsh(DeepSeek Harness)是我常用的 AI 助手 CLI。默认情况下它的 llm-retry 插件采用 normal 模式,maxRetries 为 5,baseDelayMs 为 500,导致:
- 前几次重试仅间隔 0.5 s、1 s、2 s…
- 第 5 次仍然失败后直接返回错误,整个会话结束。
在模型频繁出现网络抖动或临时限流时,这种“快速五次”往往不够。
错误示例
(省略实际运行日志,示例截图或文字)
provider “openai” failed, retry 5/5, backoff 2 s → abort
正确的做法:配置 retryPolicy
1. 不要修改 node_modules
AI 之前误改了 @earendil-works/pi-ai/dist/utils/retry.js,但该文件 并未被 dsh 调用,真正的重试策略在 @deepseek-ai/dsh-llm-retry 中。直接改源码会在升级后被覆盖,且容易产生副作用。
2. 在 ~/.dsh/settings.yaml 中为每个 Provider 添加 retryPolicy
llm-pi-ai: providers: nvm: displayName: 英伟达 apiKeyEnv: NVM_API_KEY api: openai-completions baseURL: https://integrate.api.nvidia.com/v1 retryPolicy: mode: always # 无限重试 backoff: initialDelayMs: 2000 # 第一次重试 2 s maxDelayMs: 30000 # 最大 30 s jitterRatio: 0.1 # ±10% 抖动避免“同步雨点” modelscope1: displayName: 魔搭 apiKeyEnv: MODELSCOPE1_API_KEY api: openai-completions baseURL: https://api-inference.modelscope.cn/v1 retryPolicy: mode: always backoff: initialDelayMs: 2000 maxDelayMs: 30000 jitterRatio: 0.1mode 说明
normal:受maxRetries限制,默认 5 次。always:不受次数限制,只受backoff最大延迟控制,直至手动中止。
backoff 计算
delay = min(initialDelayMs * 2^(retry‑1) * jitter, maxDelayMs)其中jitter为[1‑ratio, 1+ratio]的随机因子,防止多个实例同步重试。
3. 保存后直接生效
dsh 会在下次请求时读取 settings.yaml,无需重新安装或重启。如果你已经运行了 dsh,只需要重新发起会话即可看到日志:
$ dsh conversation -m openai/gpt-4...[retry] attempt 1/∞, wait 2.1s[retry] attempt 2/∞, wait 4.3s...验证
- 故意让请求超时(如关闭网络或使用错误的
baseURL)。 - 观察终端输出,确认重试次数持续递增,且延迟随
2x增长直至 30 s。 - 按
Ctrl+C中断会话,dsh会立刻停止后续重试。
注意事项
- 无限重试会消耗配额。对 Quota/ Billing 错误(如
QUOTA、INVALID_CREDENTIAL)always模式仍会重试,可能导致无限请求并触发封禁。请根据实际需要决定是否使用always,或在normal模式下自行调高maxRetries。 - 如果只想延长间隔而不想无限循环,可以保留
mode: normal,只调大maxRetries或maxDelayMs。 - 配置错误会在启动时抛出 Schema validation 错误,记得检查
pnpm dev或pnpm build输出的报错信息。
小结
- 别改源码:dsh 的重试逻辑在
dsh-llm-retry,通过settings.yaml完全可配置。 - 用
retryPolicy.mode: always实现无限重试,配合backoff参数得到指数退避。 - 手动中止:
Ctrl+C(或发送中断信号)随时停止重试,避免不必要的费用。
这样就完成了让 dsh 无限重试的配置,你可以把它当作日常的容错手段,特别是在不稳定网络或临时限流的场景下。祝玩得开心!
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
相关文章智能推荐
1
怎么让 dsh 搜索用上 Exa 插件
运维dsh 基础包把 web 行的 searchProvider 钉死为 deepseek-official,导致搜索插件的"零配置自动接管"不会生效;本文记录排查过程与 profile 补丁层的修复方法。2026-10-05 勘误:profile 补丁层是整值替换而非合并,web 行必须把 fetchProvider 一并写上。
2
dsh-fs-link2symlink-fix:一个插件修好 dsh 在 PRoot 下 write 丢文件
开源dsh 的 write 工具在 Termux/PRoot 里新建文件只留一个悬空的 .l2s 符号链接,内容直接蒸发。排查到 PRoot 的 --link2symlink 把 link(2) 仿真坏了,于是写了个零依赖插件在发布原语上把它兜住。
3
dsh-toolcall-id:一个插件修好 dsh 的历史加载失败
开源dsh Web GUI 重开多步会话时报 "received more than one start Match",排源发现是工具调用 id 每步重号撞车。写了个开源插件挂在官方钩子上修掉它,升级 dsh 不会被覆盖
4
AI短剧越来越low,为什么?
随笔从AI短剧的观感变化聊起,谈谈剧情和人物到底决定了什么。用《简·爱》当例子,说说情感主题和反套路怎么落地。
5
NVIDIA Build:免费 AI API
AI白嫖 NVIDIA 的免费 AI API,额度够用,模型够多
随机文章随机推荐



