怎么让 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-toolcall-id:一个插件修好 dsh 的历史加载失败
开源dsh Web GUI 重开多步会话时报 "received more than one start Match",排源发现是工具调用 id 每步重号撞车。写了个开源插件挂在官方钩子上修掉它,升级 dsh 不会被覆盖
2
NVIDIA Build:免费 AI API
AI白嫖 NVIDIA 的免费 AI API,额度够用,模型够多
3
headless Chrome 截图 WebGL 黑块问题排查
运维友链截图工具在 headless Chrome 下遇到 Spline/Live2D 站点渲染失败、出现带报错信息的黑块,通过启用 swiftshader 软件渲染解决。
4
记一次博客收录优化:从 1 个页面到全部可收录
blog分享为博客排查 Google/Bing 收录问题的全过程:canonical 缺失、重复页面判定、meta description 雷同,以及 IndexNow 接入时踩过的各种坑。
5
开源推荐:把 QQ 机器人搬到 Hugging Face 免费跑(AstrBot + NapCat)
AI开源推荐:把 QQ 机器人搬到 Hugging Face 免费跑(AstrBot + NapCat)
随机文章随机推荐



