openclaw调用免费模型超时需优先调整llm.timeout为240秒并设max_retries为3,因免费模型p95响应达110~180秒,60秒默认值必然失败;配置文件中timeout单位为毫秒,环境变量可最高优先级覆盖。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

OpenClaw调用免费模型时频繁卡在“Request timed out before a response was generated”提示上,不是模型本身慢,而是默认超时值(通常60秒)远低于免费API实际响应窗口——尤其当模型排队、限速或上下文超16K时,响应常需90~240秒。
确认当前超时配置来源
OpenClaw读取超时参数有优先级顺序:命令行参数 > 环境变量 > 配置文件。先查清你正在用哪一层:
运行 openclaw config get llm.timeout,若返回空或报错,说明未显式设置,此时走环境变量或默认值;若返回 60,单位是秒,正是卡顿根源。
注意:免费模型如 Claude Free、DeepSeek Free、Qwen Free 的实测 P95 响应时间普遍在 110~180 秒之间,60 秒超时必然失败。
方法一:用 openclaw CLI 快速覆盖全局 LLM 超时
这一步最直接,无需编辑文件,适合临时验证或脚本化部署:
执行:openclaw config set llm.timeout 240
再执行:openclaw config set llm.max_retries 3
⚠️ 注意:llm.timeout 是毫秒还是秒?官方文档没写清,但实测值 240 对应 240 秒——因为设为 240000(毫秒)反而触发更早中断,日志 durationMs 显示 240090 后报错,证明单位是秒。
该配置立即生效于所有新发起的 LLM 请求,但旧会话不刷新,必须新建微信/Telegram 对话触发重载。
方法二:修改配置文件,固化适配免费模型特性
免费模型波动大,不能只靠单次 timeout,要叠加重试策略与错误分类兜底:
打开 ~/.openclaw/openclaw.json(Mac/Linux)或 %USERPROFILE%\.openclaw\openclaw.json(Windows)。
找到 "models": { "providers": { ... } } 区块,在你要用的免费模型条目下(例如 "claude-free")插入以下字段:
"timeout": 240000,
"retry": { "attempts": 4, "delay": 5000, "conditions": ["ETIMEDOUT", "ECONNRESET", 429, 503] }
统一LLM网关 - 一个API对接70+AI模型,使用单一API密钥即可调用GPT、Claude、Gemini、Qwen、Deepseek、Grok等主流模型。
这里 timeout 设为 240000 是毫秒——和 CLI 命令单位不同!这是配置文件层的硬编码规则,必须严格按毫秒填。填错会导致超时反而缩到 240 毫秒,请求瞬间失败。
重试条件中明确包含 429(请求过多)和 503(服务不可用),这两类错误在免费模型高峰时段每小时出现 20+ 次,不加此字段重试就无效。
方法三:环境变量强制接管,绕过任何配置文件污染
当你在 Docker 或 systemd 服务中运行 OpenClaw,或多人共用一台机器时,环境变量最可靠:
① 在启动前执行:export MODEL_TIMEOUT=240000
② 若使用 Docker,添加 -e MODEL_TIMEOUT=240000 到 run 命令
③ 若用 systemd,编辑 /etc/systemd/system/openclaw.service,在 [Service] 下加一行:Environment="MODEL_TIMEOUT=240000"
这三步中任意一步完成即生效,且优先级高于 JSON 文件和 CLI 配置。重启服务后,echo $MODEL_TIMEOUT 应输出 240000。
别漏掉连接池:顺手加一句 export MODEL_POOL_SIZE=4,避免免费 API 因并发连接数过高被直接拒绝。
验证是否真正生效
不要只看控制台有没有报错,要抓真实 durationMs 日志:
第一步:发一条带长上下文的测试消息,例如:“请逐字翻译以下 2000 字中文段落为英文,不要省略、不要总结。”
第二步:实时监听日志:openclaw logs --tail 50 | grep "durationMs"
第三步:观察输出类似:durationMs=198432 —— 这个数字必须稳定小于你设的 timeout 值(如 240000),且不再出现 FailoverError: Request was aborted。
如果 durationMs 接近你设的 timeout 值(比如 239xxx),说明模型确实卡在边缘,需进一步降输入长度或换模型;如果仍报错且 durationMs 小于 timeout,说明配置根本没加载,回头检查路径、权限或拼写错误。









