使用 OpenClaw 和 DeepSeek 遇到的定时任务问题

OpenClaw 的定时任务很好用。但是几个月以来,总会时不时地遇到定时任务的 AI 接口请求超时的情况,出现类似的报错信息:

⚠️ Cron job "会员日折扣提醒" failed: The model did not produce a response before the model idle timeout. Please try again, or increase models.providers.<id>.timeoutSeconds for slow local or self-hosted providers. If agents.defaults.timeoutSeconds or a run-specific timeout is lower, raise that ceiling too; provider timeouts cannot extend the whole agent run.

或者:

⚠️ Cron job "会员日折扣提醒" failed: FailoverError: The provider returned an HTML error page instead of an API response. This usually means a CDN or gateway (e.g. Cloudflare) blocked the request. Retry in a moment or check provider status.

以前是偶尔出现,最近几乎每天都会报错,然后聊天框堆满了这样的错误信息。但是普通聊天的响应又是正常的,只有定时任务才会有问题。这里面一定有什么蹊跷,需要研究一下。

排查问题

借助之前搭的抓包服务,我抓到了普通聊天和 cron 触发的任务请求,发现除了用户提示词不一样之外,系统提示词和工具列表等等参数都是完全一致的。定时任务的用户提示词片段大概是这样:

1
2
3
4
{
"role": "user",
"content": "[cron:585e6293-23fb-4b48-af9c-40f29107d497 工作日打卡工时提醒] 你的唯一任务是检查今天是否为中国的工作日,如果是则发送提醒用户记得打卡和填工时。..."
}

提示词内只要包含这小部分内容,发送出去的请求就没有响应。继续把这个请求内容缩短进行测试,发现只要提示词开头包含 [cron: 的请求就会响应非常慢

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"model": "deepseek-v4-flash",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "[cron:"
}
]
}
],
"stream": true,
"thinking": {
"type": "disabled"
},
"max_tokens": 100
}

可以看到,连接建立得很快,但是 SSE 返回的只有用于保持连接的空内容,直到很长时间之后才开始返回推理内容。最长会等待 10 分钟,超过这个时间连接就直接关闭了

将近 1 分钟才收到响应

为了继续验证猜想,我创建了一个 Uptime Kuma 监控项,发送给 DeepSeek API,内容就是上面那段请求。每隔 1 分钟发送一次,超时时间是 48 秒,监控了大约 1 天的时间。

Uptime Kuma 监控页面

Uptime Kuma 的预览图表比较小,我把它的数据提取出来,用 Python 重新画了一遍,另外还有一个把方括号替换成直角引号的对照组。

24 小时 DS 异常请求监控

8 月 12 日晚 DeepSeek V4 Pro 发布了,所以 13 日的异常可能不太好说。不过总体的情况也可以说是惨不忍睹,每到整点和整半点几乎都不能访问。这里测试的模型是 V4-Flash-0731,前两个月我用的是 V4-Pro 预览版,也是报错很多。总之,我们大概可以得出结论:

  1. OpenClaw 的用户还是很多的,而且大家都喜欢把定时任务设置在整点
  2. DeepSeek 采用了某种缓存算法,对大量相同前缀的请求有特殊的处理方式,结果反而是适得其反了

这是优质模型的回应?

解决办法

避开整点时间

这是最简单的办法,比如以前是 10 点整的提醒,就提前个几秒几分钟,例如 9 点 59 分。毕竟用 AI 做定时任务的,对执行时间的要求都不会很严格。事实也确实如此,把定时任务都提前几分钟后,基本上就没有报错出现了。

使用别的模型

换用别家提供商的模型。或者,OpenClaw 也支持单独给任务配置模型,只需要在创建任务的时候和 AI 说清楚就可以了。

替换请求内容

如果不想改定时任务时间,又还想继续用 DeepSeek 系列模型的话,可以通过自己安装的中转代理修改请求内容,把出现的 [cron: 字符串替换掉。我使用的 New API 有字符串替换功能,正好可以做这个事情。

New API 的参数覆盖功能

在「渠道管理」的「参数覆盖」选项里面,可以直接粘贴这段代码来应用配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"operations": [
{
"mode": "replace",
"description": "OpenClaw 定时任务关键字无响应修复",
"path": "messages.1.content",
"from": "[cron:",
"to": "「cron:",
"conditions": [
{
"path": "messages.1.content",
"mode": "contains",
"value": "[cron:"
}
],
"logic": "OR"
}
]
}

使用 OpenClaw 和 DeepSeek 遇到的定时任务问题

https://blog.beanbang.cn/2026/08/16/openclaw-deepseek-cron-issue/

作者

Lazyb0x

发布于

2026-08-16

更新于

2026-08-16

许可协议