#为什么openclaw只说话不干活
1 messages · Page 1 of 1 (latest)
OpenClaw “只说话不干活”通常不是坏掉了,而是 只有“大脑”(聊天模型),但你还没给它配/放行 “手脚”(tools / skills / node 设备能力)。
最常见的 4 个原因(从高到低):
- 工具没启用 / 没配置
- 例如你让它“上网搜一下”,但
web_search没开、没填 Brave API key,它就只能用嘴回答。 - 文档(FAQ 里有完整配置示例):https://docs.openclaw.ai/help/faq (搜 “enable web search”)
- 工具被 allowlist 禁掉了(安全策略)
- 你可能启用了工具白名单,但没把
web_search/web_fetch或group:web之类加进去,于是模型想用工具也用不了,只能聊天。 - FAQ 也明确提到:如果用了 allowlists,需要加
web_search/web_fetch或group:web。
https://docs.openclaw.ai/help/faq#how-do-i-enable-web-search-and-web-fetch
- 你想让它操作“你的电脑”,但没配 node
- OpenClaw 的 Gateway 跑在 VPS/服务器上时,它不能凭空操作你本地电脑;需要把你的 Mac/Windows/Linux 配成 node,它才有
screen/camera/system.run这些“手脚”。 - Docs:Nodes 介绍 https://docs.openclaw.ai/nodes
- CLI 也可以看:
openclaw nodes status/openclaw nodes pending
- 你其实想要的是“自动执行”,但 OpenClaw 默认会谨慎
- 很多“干活”动作会需要批准(尤其是跑命令/控制浏览器/发消息等),否则它会选择只给方案、不给执行。
为了快速定位,你把下面 3 个信息贴一下(越完整越快):
openclaw --versionopenclaw gateway status的输出(尤其是 RPC probe 是不是 ok)- 你希望它“干什么活”的一个具体例子 + 你对它说的话 + 它回了什么(原文)
我看完就能判断是:工具没开、被白名单拦了、缺 node,还是别的配置问题。
root@VM-4-12-opencloudos ~]# openclaw --version
2026.3.2
[root@VM-4-12-opencloudos ~]# openclaw gateway status
🦞 OpenClaw 2026.3.2 (85377a2) — I'm like tmux: confusing at first, then suddenly you can't live without me.
│
◇
Service: systemd (enabled)
File logs: /tmp/openclaw/openclaw-2026-03-04.log
Command: /root/.nvm/versions/node/v22.22.0/bin/node /root/.nvm/versions/node/v22.22.0/lib/node_modules/openclaw/dist/index.js gateway --port 18789
Service file: ~/.config/systemd/user/openclaw-gateway.service
Service env: OPENCLAW_GATEWAY_PORT=18789
Service config looks out of date or non-standard.
Service config issue: Gateway service uses Node from a version manager; it can break after upgrades. (/root/.nvm/versions/node/v22.22.0/bin/node)
Recommendation: run "openclaw doctor" (or "openclaw doctor --repair").
Config (cli): ~/.openclaw/openclaw.json
Config (service): ~/.openclaw/openclaw.json
Gateway: bind=loopback (127.0.0.1), port=18789 (service args)
Probe target: ws://127.0.0.1:18789
Dashboard: http://127.0.0.1:18789/
Probe note: Loopback-only gateway; only local clients can connect.
Runtime: running (pid 2249043, state active, sub running, last exit 0, reason 0)
RPC probe: ok
Listening: 127.0.0.1:18789
Troubles: run openclaw status
Troubleshooting: https://docs.openclaw.ai/troubleshooting
[root@VM-4-12-opencloudos ~]#
你希望它“干什么活”的一个具体例子 + 你对它说的话 + 它回了什么(原文)
我希望他干活是我给他任务 他真的去做这个任务 遇到问题主动想解决办法
而现在的情况是我说一句话他回一句话 然后根本不做任务 只说自己做了 但其实根本没做
你这个 gateway status 看起来是健康的:RPC probe: ok,所以“网关起得来”没问题。
你描述的“只会聊天、不干活”,最常见原因其实是:工具权限被限制了 —— 新安装/本地 onboarding 默认会把:
tools.profile设成 "messaging"(只允许发消息/查会话状态等)- 不包含
web_fetch/web_search、exec、browser、nodes这些“干活工具”
所以它只能用嘴回答,没法上网、没法跑命令、没法控浏览器。
1) 先确认你现在的工具策略(不会泄露密钥)
在 VPS 上跑:
openclaw config get tools.profile
openclaw config get tools.allow
openclaw config get tools.deny
如果你看到 tools.profile 是 "messaging" 或 "minimal",那就对上症状了。
2) 解决:把工具放开(按你想要的能力选一种)
A. 想“一步到位都能用”(最省事)
openclaw config set tools.profile "full"
openclaw gateway restart
B. 只想先让它“能上网抓网页内容”(更安全)
web_fetch 不需要 API key:
openclaw config set tools.profile "messaging"
openclaw config set tools.allow '["group:web"]' --strict-json
openclaw gateway restart
之后你在聊天里让它“打开某个链接并总结”,它就能用
web_fetch真去抓页面了。
C. 想“能 web_search 真搜索”(需要 Brave key)
按 FAQ 的方式配置(推荐用向导):
openclaw configure --section web
openclaw gateway restart
文档: https://docs.openclaw.ai/help/faq#how-do-i-enable-web-search-and-web-fetch
3) 如果你说的“干活”= 在这台 VPS 上跑命令
那还需要放行 exec(属于高风险能力,尤其别在公共 Discord 群对所有人开放):
- 最起码要允许
group:runtime
- 更安全的是配 sandbox / elevated allowFrom(只允许你自己)
你先告诉我:你是想它 上网/抓网页,还是想它 在 VPS 跑命令,还是想 控制你本地电脑(那需要 node)?
另外再贴一下 openclaw status(不是 gateway status),我就能直接指出是哪一块没开。
你这个期望其实分成两件事:
- 它有没有“手脚”能执行(能不能真的去做)
- 它的工作方式是不是“循环执行直到完成”(遇到问题会不会继续尝试、验证、修复)
OpenClaw 默认更像“会聊天的助理”,不是默认就全自动干活的机器人——为了安全,很多安装默认会把工具收得很紧(只允许发消息/查状态),所以你给任务它只能给方案,没法实际执行。
先把“干活”的定义说清楚
你说的“真的去做任务”,通常指这些能力之一:
- 上网抓内容/搜索:
web_fetch/web_search - 在 VPS 上跑命令、安装软件、改配置:
exec - 控浏览器做网页操作:
browser - 操作你本地电脑(截图/摄像头/本机命令):需要把电脑配成 node(
nodes)
你想它主要做哪一种?(先选一个最常用的就行)
要它“遇到问题主动解决”,你需要给它一个“执行循环”指令
建议你在提任务时直接这样说(很有效):
目标:XXX
约束:不要破坏现有服务;需要先检查现状;每一步都要验证结果
工作方式:按 计划 → 执行 → 验证 → 修复/重试 循环,直到完成或遇到必须我决定的分叉点;遇到权限/工具不足就明确告诉我缺什么并给出替代方案。
如果它有工具权限,它就会真的去跑命令/抓网页/验证,而不是只“建议”。
关键:你得先让它有工具可用(否则永远只能用嘴)
你之前的现象,99% 是 tools.profile / allowlist 限制导致“只能说”。
你可以先做一个最小测试:让它在 VPS 上执行并验证一个很小的任务,比如:
- “在这台 VPS 上运行
uname -a,把输出贴出来,然后解释这是什么内核版本” - 或 “用
web_fetch打开 https://example.com 总结内容”
如果它仍然只给口头答案、不执行,那就是工具没放开。
还有个很重要的澄清
你现在是在 OpenClaw 社区服务器的线程里跟我聊;我(社区里的 Krill)当然没法替你去操作你的 VPS。
你要“真的干活”,必须是 你自己那台 VPS 上运行的 OpenClaw,并且你在跟“你自己的 bot/频道”(Telegram/你自己的 Discord bot/Control UI/TUI)对话。
你回我两样东西,我就能给你一套“能干活”的最短路径配置:
- 你希望它主要干哪类活:上网 / 跑命令 / 控浏览器 / 控本地电脑(node)?
- 你现在是通过什么跟“你自己的 OpenClaw”对话的:Telegram?你自己的 Discord bot?还是 Control UI/TUI?(不是在这个社区线程里)
这就很典型了:你现在看到的是 “语言模型在口头汇报”,但它其实 没有工具权限/没有成功调用工具/甚至你聊的不是你那台 VPS 的 bot,于是它会“自认为完成了”然后编一个完成报告。
要把它从“嘴上干活”变成“真干活”,用下面这套排查就能一把抓住问题在哪。
0) 先确认:你现在是在跟“你自己的 OpenClaw”说话吗?
在这个社区线程里跟我聊,它当然不会动你的 VPS。
你需要确认你发任务的地方是:
- 你的 Telegram bot / 你自己建的 Discord bot / Control UI / TUI
而不是这个社区的 #help 线程。
1) 用一个“可验证”的最小任务测试(看它到底有没有执行)
你在你的 OpenClaw 对话窗口里发这一句(一次发完):
请在运行 Gateway 的这台 VPS 上执行命令:
uname -a && whoami && pwd。
要求:把命令输出原样贴出来。如果你没有执行权限或工具不可用,直接说“我做不到”并说明缺哪个工具/权限。
如果它回你一堆解释,但没有真实命令输出,那就是 没执行(不是你感觉,是铁证)。
2) 90% 的根因:工具被限制(导致它只能“说”)
在 VPS 上跑下面三条,把输出贴出来(这几条不含密钥):
openclaw config get tools.profile
openclaw config get tools.allow
openclaw config get tools.deny
如果 tools.profile 是 "messaging" / "minimal",那它默认就不能 exec/web/browser/nodes,只能聊天,所以会出现你说的现象。
3) 直接抓现场证据:看日志里工具是不是被拒绝/报错
在 VPS 上开日志跟踪:
openclaw logs --follow
然后你再在聊天里触发一次“可验证最小任务”。
把日志里相关的几行贴出来(尤其是包含 tool / deny / policy / error 的行),我就能直接告诉你是:
- 工具被 allowlist/denylist 拦了
- 模型根本没发出 tool call
- tool 调用失败(缺依赖/超时/权限)
- 你聊的不是同一个 Gateway/agent
4) 给你一个“永远不许装作执行”的提示词护栏(立刻改善)
你可以把这句加到你的 agent 系统提示/AGENTS.md 里:
除非你真的调用了工具并看到了工具输出,否则不允许声称“我已经执行了命令/修改了文件/发送了消息”。如果无法执行,必须明确说明缺少的工具或权限,并给出替代方案。
这能显著减少“假装做了”的情况。
你先回我两样东西就够:
- 你在对话里让它执行
uname -a && whoami && pwd时,它回的原文 openclaw config get tools.profile / tools.allow / tools.deny的输出(记得别贴 token/API key)
你说的“真的去做任务”,通常指这些能力之一:
上网抓内容/搜索:web_fetch / web_search
在 VPS 上跑命令、安装软件、改配置:exec
控浏览器做网页操作:browser
操作你本地电脑(截图/摄像头/本机命令):需要把电脑配成 node(nodes)
你想它主要做哪一种?(先选一个最常用的就行)
都需要
可以“都需要”,但得先把一个现实讲清楚:这相当于把你的 VPS/浏览器/文件系统的控制权交给模型。
所以正确做法是:
- 只在你自己可控的私聊/私有群里开(不要在公开 Discord 群里开)
- 开工具时要配好 allowlist / allowFrom / sandbox,否则就是“把 shell 暴露给全网”
下面给你一条“从只会说 → 真的能干活”的最短路径(按顺序做)。
A. 先把“工具全开”(让它真能做事)
在 VPS 上执行:
openclaw config set tools.profile "full"
openclaw gateway restart
tools.profile="full"= 不再限制工具(等于允许它用 exec/web/browser/nodes 等所有内置工具)。
然后立刻做一个可验证测试:让它运行 uname -a && whoami && pwd 并贴输出。
如果还不贴输出,就不是工具策略的问题了,要看日志(见后面 D)。
B. 上网能力(web_fetch / web_search)
web_fetch一般不需要 keyweb_search需要 Brave key
推荐用向导(最省心):
openclaw configure --section web
openclaw gateway restart
文档: https://docs.openclaw.ai/help/faq#how-do-i-enable-web-search-and-web-fetch
C. 在 VPS 上跑命令(exec)
tools.profile="full" 后,模型“理论上”能用 exec,但你还需要注意两点:
- 你在哪里跟它聊天?
强烈建议先只在 DM 里测试,或者你自己的私有 Discord 服务器里 allowlist 只放你一个人。 - 不要把 exec 开在公开群:否则任何人都可能诱导它执行危险命令。
(如果你确实要在 Discord 群里用:请至少把 channels.discord.groupPolicy="allowlist",并只 allow 你的 user id;参考文档里 Discord 的 allowlist 示例: https://docs.openclaw.ai/channels/discord#access-control-and-routing )
D. 浏览器自动化(browser)
这通常还需要:
- VPS 上有可用的 Chromium/Chrome(以及依赖)
- 可能需要配置
browser.headless: true或browser.executablePath
如果你要走这条线,我建议你先说清楚:你是 纯 VPS(无桌面) 还是 本地有桌面?不同路径差很多。
E. 控制你“本地电脑”(nodes)
这不是 “Gateway 在 VPS 上” 就能做到的——你必须把你的电脑/手机配成 node,Gateway 才能调用 screen/camera/system.run 这些本地能力。
Docs: https://docs.openclaw.ai/nodes
最关键的:你现在“在哪儿”跟你的 OpenClaw 聊天?
你一句“都需要”,我能给你配置,但我需要你回答这个,否则很容易你其实在跟社区线程聊、或者跟错 bot:
- 你是通过 Telegram?还是 你自己的 Discord bot?还是 Control UI / TUI 在下达任务?
- 你打算“干活”的主要场景是:VPS 跑命令 + 上网,还是还要 浏览器自动化,还是还要 控制本地电脑?
你回这两条,我就给你一份“安全且全能”的配置建议(包括:哪些工具该开、哪些必须在 DM、哪些必须配 node、哪些必须开 sandbox/审批)。
- 你是通过 Telegram?还是 你自己的 Discord bot?还是 Control UI / TUI 在下达任务?
Telegram - 你打算“干活”的主要场景是:VPS 跑命令 + 上网,还是还要 浏览器自动化,还是还要 控制本地电脑?
都需要
Telegram + “都需要”的话,可以做到,但你得把它当成“远程自动化系统”来配:先把权限收口(只允许你本人触发)→ 再开全工具 → 再逐项把 web/browser/node 配起来。否则就是你现在这种:它嘴上说完成了,但其实没权限/没成功执行。
下面是一套我建议的“可用且相对安全”的配置路径(按顺序来)。
1) Telegram 先只允许“你本人”触发(不然开全工具很危险)
1.1 配 Telegram bot + DM 配对
配置示例(注意:别把 token 发在群里):
{
channels: {
telegram: {
enabled: true,
botToken: "123:abc",
dmPolicy: "pairing",
// 如果你之后要用群:先别开 open,保持 requireMention=true
groups: { "*": { requireMention: true } },
},
},
}
启动后去批准配对(Docs 也是这样写的):
openclaw pairing list telegram
openclaw pairing approve telegram <CODE>
1.2 找到你的 Telegram user id(很重要)
最安全的方法:
- 你先 DM 你的 bot 任意一句
- VPS 上跑:
openclaw logs --follow
日志里会出现 from.id,那就是你的 Telegram 数字 ID。
2) 开“全工具”(让它真能干活)
在 VPS 上:
openclaw config set tools.profile "full"
openclaw gateway restart
然后立刻做一个可验证测试(防止它继续“嘴上干活”):
在 Telegram 里对你的 bot 说:
“请在 VPS 上执行:uname -a && whoami && pwd,把输出原样贴出来。”
它只要贴不出真实输出,就说明 exec 没跑起来/被拦/失败——这时候就看日志定位(第 6 步)。
3) Web:抓网页 + 搜索
web_fetch通常不需要 keyweb_search需要 Brave API key
推荐向导:
openclaw configure --section web
openclaw gateway restart
文档: https://docs.openclaw.ai/help/faq#how-do-i-enable-web-search-and-web-fetch
4) Browser:VPS 上做网页自动化
VPS 一般建议先用 headless:
openclaw config set browser.headless true
openclaw gateway restart
如果跑不起来(缺 Chromium 依赖),就用 openclaw doctor + 看日志(通常会明确缺什么包)。
文档: https://docs.openclaw.ai/tools/browser
5) 控制“你本地电脑”(截图/摄像头/本机命令)= 必须配 node
这件事不是“VPS 开了全工具”就能做的:你必须把你的电脑/手机装成 node 并配对到同一个 Gateway。
开始排查用这几个命令:
openclaw nodes status
openclaw nodes pending
openclaw nodes approve <requestId>
文档: https://docs.openclaw.ai/nodes
6) 解决你说的“它说做了,但其实没做”
这个现象我一般用两招当场抓出来:
- 强制证据:每次让它执行都要求“贴命令输出 / 贴文件 diff / 贴链接”。贴不出来=没做。
- 开日志跟踪(最有效):
openclaw logs --follow
然后你在 Telegram 触发一次任务,把日志里出现的 deny / policy / tool / error 几行贴出来(打码 token),我就能直接指出是:
- 工具被 policy 禁了
- 工具调用失败(依赖/权限/超时)
- 或者模型根本没发 tool call(常见于某些模型不稳定/太弱)
你现在先回我两样东西,我就能把你这套“都需要”落地到可用状态:
openclaw config get channels.telegram.dmPolicy和openclaw pairing list telegram(看你配对是不是完成了)openclaw config get tools.profile(确认已从 messaging/minimal 切到 full)
[root@VM-4-12-opencloudos ~]# openclaw config get tools --json
{
"profile": "full",
"allow": [
"group:web"
],
"web": {
"search": {
"enabled": true
},
"fetch": {
"enabled": true
}
}
}
[root@VM-4-12-opencloudos ~]#
这就破案了:你现在的工具策略其实是“只允许 web 工具”。
你这段输出里关键点是:
"profile": "full",
"allow": ["group:web"]
在 OpenClaw 里,tools.allow 不是“额外允许”,而是 “白名单(只允许这些)”。
所以你虽然 profile: "full",但因为 allow 只放了 group:web,最终效果就是:
- 允许:
web_fetch/web_search - 禁止:
exec、browser、nodes、文件读写等 - 结果:模型做不了事 → 就只能嘴上说“我做了”(典型的工具被禁导致的“假执行”)
解决方法(选一个)
方案 A:你想“都需要”,最简单就是删掉 allowlist
openclaw config unset tools.allow
openclaw gateway restart
tools.profile: "full"+ 没有tools.allow= 不限制内置工具(全开)。
方案 B:你想保留白名单,就把需要的组都加上
比如(基本全家桶):
openclaw config set tools.allow '[
"group:web",
"group:runtime",
"group:fs",
"group:ui",
"group:nodes",
"group:memory",
"group:sessions",
"group:messaging"
]' --strict-json
openclaw gateway restart
或者更直接(全内置工具):
openclaw config set tools.allow '["group:openclaw"]' --strict-json
openclaw gateway restart
另外:你现在 web_search 可能还缺 Brave API key
你只开了 "search.enabled": true,但没看到 apiKey。没有 key 的话 web_search 还是会失败。
推荐:
openclaw configure --section web
openclaw gateway restart
立刻验证(防止继续“嘴上干活”)
改完以后,在 Telegram 里对你的 bot 说:
“请在 VPS 上执行:
uname -a && whoami && pwd,把输出原样贴出来。”
它能贴出真实输出,就说明 exec 已经恢复了;接下来再测 browser / nodes。
[root@VM-4-12-opencloudos ~]# openclaw config get tools --json
{
"profile": "full",
"web": {
"search": {
"enabled": true
},
"fetch": {
"enabled": true
}
}
}
[root@VM-4-12-opencloudos ~]# 你再看看
看到了——现在这份就对了:
{
"profile": "full",
"web": { ... }
}
tools.allow 已经没了 ⇒ 不再被“只允许 group:web”限制,理论上 exec / browser / nodes / fs 等工具都可以用了(至少在“工具策略”层面不挡了)。
接下来做 3 个确认 + 1 个验证,就能知道是不是已经真的“会干活”:
1) 重启一下 gateway(确保配置已生效)
openclaw gateway restart
2) 确认 Telegram 通道是 OK 的
openclaw channels status --probe
openclaw pairing list telegram
3) 立刻做“可验证执行”测试(最关键)
在 Telegram 里对你的 bot 发:
请在 VPS 上执行:
uname -a && whoami && pwd,把输出原样贴出来。
它只要贴出真实输出,就证明 exec 已经能跑了。
4) 如果还是“嘴上说做了但没输出”
直接这样抓现场:
openclaw logs --follow
然后你再在 Telegram 发一次上面的测试,把日志里出现的 tool / deny / error 几行贴出来(打码 token)。我就能精确告诉你卡在:没触发工具 / 工具报错 / 依赖缺失 / 浏览器缺组件 / node 没配对 等哪一种。
另外提醒一句:你现在 web_search.enabled: true 但没看到 apiKey,不配 Brave key 的话 web_search 会失败;web_fetch 不受影响。你后面需要搜索的话跑一次:
openclaw configure --section web
但是还是不干活
[2026/3/4 20:38] 三: openclaw logs --follow
[2026/3/4 20:42] 三: 你好
[2026/3/4 20:45] 三: ?
[2026/3/4 20:45] 三: ?
[2026/3/4 20:46] agaobot: 你在等我执行 openclaw logs --follow。我又在拖延了。
直接执行:
[2026/3/4 20:46] 三: ?
[2026/3/4 20:49] 三: 请在 VPS 上执行:uname -a && whoami && pwd,把输出原样贴出来。
给他发一堆 都不理我
你这段 Telegram 对话里有个关键误会:我让你跑的
openclaw logs --follow
是 在 VPS 终端里跑(用来“旁观”网关日志的),不是发给 bot 让它执行的。
你把它发给 bot 之后,模型就开始“嘴上解释/拖延”,然后整个会话很可能卡住了(或者后续消息根本没被 gateway 收到/没成功发回)。
下面这样排查最有效,10 分钟内一定能定位到是哪一层坏了。
1) 先在 VPS 终端开着日志(真的在 VPS 跑)
开两个 SSH 窗口/两个终端:
终端 A:
openclaw logs --follow
保持开着别关。
2) 在 Telegram 里先重开会话再测(避免卡死上下文)
在 Telegram 里对 bot 发送一条单独的消息:
/new
然后再发测试:
请在 VPS 上执行:
uname -a && whoami && pwd,把输出原样贴出来。
3) 看终端 A 里有没有出现这条消息
情况会分两类:
A. 终端日志里 根本没有你刚发的消息
=> Telegram → Gateway 的消息流有问题(token/连接/轮询/webhook/权限等)。
这时请把下面输出贴出来:
openclaw status --deep
openclaw channels status --probe
B. 终端日志里 有收到消息,但随后报错/没有 tool 执行
=> 就是模型/工具调用环节的问题。
请把日志里从“收到消息”开始往后 20~50 行贴出来(打码任何 token)。
4) 额外确认:你现在的 tools 配置 OK,但还可能被“沙箱工具策略”限制
如果你愿意,再跑这两条(很短):
openclaw config get tools.sandbox.tools --json
openclaw config get agents.defaults.sandbox --json
有些人之前为了安全把 sandbox 里的工具也白名单成了 web-only,即使全局 tools.profile="full" 也会表现成“不干活”。
你先按上面做一轮,把 终端 A 的日志片段贴出来(收到 /new 和测试命令那段),我就能直接告诉你是 Telegram 没进来,还是工具被沙箱/策略/模型卡住。
12:45:59 warn agent/embedded {"subsystem":"agent/embedded"} Removed orphaned user message to prevent consecutive user turns. runId=9537c1a5-0e35-4b1f-af0b-b5f292a90cbd sessionId=555d66a1-ab04-4ddc-83fd-8274e57d923f
12:46:08 info gateway/channels/telegram {"subsystem":"gateway/channels/telegram"} telegram sendMessage ok chat=5016535022 message=1382
12:46:36 info telegram/network {"subsystem":"telegram/network"} autoSelectFamily=false (config)
12:46:36 warn telegram/network {"subsystem":"telegram/network"} fetch fallback: forcing autoSelectFamily=false + dnsResultOrder=ipv4first
12:48:36 info typing TTL reached (2m); stopping typing indicator
12:49:41 warn agent/embedded {"subsystem":"agent/embedded"} embedded run agent end: runId=af08f021-6504-4f9b-90f1-d0d712660255 isError=true error=The AI service is temporarily unavailable (HTTP 504). Please try again in a moment.
12:51:16 info gateway/channels/telegram {"subsystem":"gateway/channels/telegram"} telegram sendMessage ok chat=5016535022 message=1385
12:51:45 info gateway/channels/telegram {"subsystem":"gateway/channels/telegram"} telegram sendMessage ok chat=5016535022 message=1387
Log tail truncated (increase --max-bytes).
12:57:08 info gateway/channels/telegram {"subsystem":"gateway/channels/telegram"} telegram sendMessage ok chat=5016535022 message=1389
12:59:05 info gateway/channels/telegram {"subsystem":"gateway/channels/telegram"} telegram sendMessage ok chat=5016535022 message=1391
你看下 我没有在log里面找到
请在 VPS 上执行:uname -a && whoami && pwd,把输出原样贴出来。
这句话
看你这段日志,问题已经很明确了,不是“工具没开”了,而是两件事叠加:
1) LLM 请求失败了(HTTP 504)
这行是关键:
12:49:41 ... isError=true error=The AI service is temporarily unavailable (HTTP 504)
也就是说:模型服务当时超时/不可用,run 直接失败了,所以它根本不可能去调用 exec 执行命令,更不可能把输出贴给你。
这种情况常见原因:
- 你用的模型/供应商那边临时挂了或拥堵
- VPS 到模型 API 的网络不稳定(尤其跨境/IPv6/代理问题)
- 你没配 fallback,失败就直接中断
你先跑一下,把结果贴出来(别贴密钥):
openclaw models status
我需要看它实际在用哪个 provider、有没有 fallback、失败统计是什么样。
2) 你“连发消息”导致 OpenClaw 丢了一条(orphaned user message)
你日志里还有这一行:
Removed orphaned user message to prevent consecutive user turns.
这通常发生在你像截图里那样连发 “?”、“你好”、“……” 的时候:
OpenClaw 为了避免出现“连续 user turn”,会把其中一条当作 orphan 丢掉/折叠掉,所以你会感觉“我发了它不理”。
解决办法(Telegram 里发 单独一条):
- 想让新消息直接打断并立刻开始新跑:
/queue interrupt - 或者让它一条一条排队处理:
/queue followup
另外,如果它卡住了,用下面任意一个单独发送就能中止当前 run:
stop
abort
interrupt
FAQ 也写了(含 queue 模式解释):https://docs.openclaw.ai/help/faq#why-does-it-feel-like-the-bot-ignores-rapidfire-messages
你说“日志里找不到 uname 那句话”
有两种可能:
- 那条消息被当 orphan 丢掉了(符合你连发的行为 + 上面那条 warn)
openclaw logs输出截断了(你看到 “Log tail truncated …”)
你可以在 VPS 上直接搜文件日志(最靠谱):
rg -n "uname -a" /tmp/openclaw/openclaw-2026-03-04.log
下一步你照做一遍(别连发)
- Telegram 里先发:
/queue interrupt - 等 5 秒
- 发一条测试(就这一条,别跟 “?”):
请在 VPS 上执行:
uname -a && whoami && pwd,把输出原样贴出来。 - VPS 里跑
openclaw logs --follow,把“收到消息 → 发起模型请求 → 是否 tool call/是否 504”的那段贴出来
再加上你贴的 openclaw models status,我就能给你具体建议:是换 provider、加 fallback、还是修网络/IPv6/代理。
?
现在下一步就做两件事(按顺序),你贴输出我才能继续判断:
1) 在 VPS 终端运行(别在 Telegram 里发)
openclaw models status
把输出贴出来(不用担心,会打码;但如果有完整 key/token 请手动遮一下)。
2) Telegram 里把“连发消息导致丢消息”先解决掉
在 Telegram 给 bot 发一条单独消息:
/queue interrupt
然后再发测试(也只发这一条,别跟 “?”):
请在 VPS 上执行:
uname -a && whoami && pwd,把输出原样贴出来。
如果还是不回,就把 VPS 上 openclaw logs --follow 里对应那段(出现 504/deny 的几行)贴出来。
Config : ~/.openclaw/openclaw.json
Agent dir : ~/.openclaw/agents/main/agent
Default : custom-api-drlj-cn/claude-opus-4-5-20251101
Fallbacks (0) : -
Image model : custom-api-drlj-cn/claude-opus-4-5-20251101
Image fallbacks (0): -
Aliases (7) : minimax-m2.1 -> minimax-portal/MiniMax-M2.1, minimax-m2.1-lightning -> minimax-portal/MiniMax-M2.1-lightning, Minimax -> minimax/MiniMax-M2.1, GLM -> zai/glm-4.7, opus -> anthropic/claude-opus-4-5, OpenRouter -> openrouter/auto, Opus -> opencode/claude-opus-4-5
Configured models (14): openai-codex/gpt-5.1, openai/gpt-5.1, minimax-portal/MiniMax-M2.1, minimax-portal/MiniMax-M2.1-lightning, openai/codex-mini-latest, minimax/MiniMax-M2.1-lightning, minimax/MiniMax-M2.1, zai/glm-4.7, zai/glm-4.7-flash, anthropic/claude-opus-4-5, openrouter/auto, openrouter/anthropic/claude-sonnet-4.5, opencode/claude-opus-4-5, custom-api-drlj-cn/claude-opus-4-5-20251101
这些你看下
看到了——这里正好能解释你日志里的 HTTP 504 为什么会让 bot “不干活/不回”。
你现在的 默认模型是:
Default : custom-api-drlj-cn/claude-opus-4-5-20251101- Fallbacks (0):没有任何 fallback
所以一旦这个 custom-api-drlj-cn 的接口抽风(504/超时),这一轮 run 就直接失败,后面自然也不会进入 exec 去跑命令。
你现在要做的关键修复:加 fallback(强烈建议)
先别纠结“为什么 504”,加 fallback 能让它 至少不中断、能继续干活。
1) 先探测一下哪些 provider 在你这台 VPS 上是可用的
(会发真实请求,可能耗一点 token)
openclaw models status --probe
把输出贴出来(打码密钥即可)。
2) 立刻加 1~2 个 fallback(从“不同服务商”选)
你已经配置过这些候选:openrouter/auto、openai/gpt-5.1、anthropic/claude-opus-4-5 等(具体哪个能用取决于你有没有配对应的 key)。
比如你先加一个最简单的(举例用 openrouter/auto):
openclaw config set agents.defaults.model.fallbacks '["openrouter/auto"]' --strict-json
openclaw gateway restart
如果你有 OpenAI key,也可以加第二个:
openclaw config set agents.defaults.model.fallbacks '["openrouter/auto","openai/gpt-5.1"]' --strict-json
openclaw gateway restart
重点:fallback 最好来自不同 provider,这样某一家挂了还能切到另一家。
加完以后怎么验证(别连发消息)
Telegram 里:
- 先发:
/queue interrupt - 再发测试(只发这一条):
请在 VPS 上执行:
uname -a && whoami && pwd,把输出原样贴出来。
你先把 openclaw models status --probe 的输出发我,我帮你判断:你这台机子上到底哪个 provider 是稳定可用的,然后给你一套最合理的 fallback 顺序。
┌─────────────────────────────────────────────┬────────────────────────────────┬────────────┐
│ Model │ Profile │ Status │
├─────────────────────────────────────────────┼────────────────────────────────┼────────────┤
│ anthropic/claude-opus-4-5 │ anthropic:default (api_key) │ ok · 5.9s │
│ custom-api-drlj-cn/claude-opus-4-5-20251101 │ models.json (api_key) │ ok · 9s │
│ minimax/MiniMax-M2.1-lightning │ minimax:default (api_key) │ ok · 1.7s │
│ minimax-portal/MiniMax-M2.1 │ minimax-portal:default (oauth) │ ok · 8.2s │
│ misscuai/claude-opus-4-6 │ models.json (api_key) │ ok · 530ms │
│ openai/gpt-5.1 │ env (api_key) │ ok · 224ms │
│ opencode/claude-opus-4-5 │ opencode:default (api_key) │ ok · 847ms │
│ openrouter/openrouter/auto │ openrouter:default (api_key) │ ok · 198ms │
│ zai/glm-4.7 │ zai:default (api_key) │ ok · 1.9s │
└─────────────────────────────────────────────┴────────────────────────────────┴────────────┘
Probed 9 targets in 15.9s
[root@VM-4-12-opencloudos ~]#
我现在用的是
│ custom-api-drlj-cn/claude-opus-4-5-20251101 │ models.json (api_key) │ ok · 9s │
这个 你帮我看下怎么操作
你这个 --probe 结果说明:你配置的 9 个模型/Provider 目前都能连通,但你之前遇到的 HTTP 504 更像是 custom-api-drlj-cn 这条链路在“长请求/偶发”时会超时——probe 只是一个很小的探测请求(9s 已经挺慢了),真正做任务时上下文更长、更容易触发 504。
所以最实用的操作是:
- 继续用
custom-api-drlj-cn/...当 primary(如果你想) - 立刻加 2~3 个 fallbacks(一旦 504 自动切换,不会“装作做了但没做”)
1) 直接加 fallback(复制粘贴即可)
先确认 primary(你现在已经是它了,这步可跳过):
openclaw config set agents.defaults.model.primary "custom-api-drlj-cn/claude-opus-4-5-20251101"
然后加 fallback(建议按“稳定/快”的优先级排):
openclaw config set agents.defaults.model.fallbacks '[
"openai/gpt-5.1",
"anthropic/claude-opus-4-5",
"minimax/MiniMax-M2.1-lightning"
]' --strict-json
最后重启:
openclaw gateway restart
这样以后 custom-api 再 504,它会自动切到 openai/anthropic/minimax 继续跑,而不是卡住或嘴硬。
2) Telegram 里验证(避免消息被丢/排队)
在 Telegram 对 bot 发(单独一条):
/new
/queue interrupt
然后发测试:
请在 VPS 上执行:
uname -a && whoami && pwd,把输出原样贴出来。
3) 如果你想“彻底避免 custom-api 偶发超时”
那就直接把 primary 切到你 probe 里最快的那类(比如 openai/gpt-5.1 224ms / openrouter/auto 198ms),custom-api 放到 fallback 里即可。
你希望 primary 还继续用 custom-api(省钱/国内快),还是希望 primary 换成更稳的?我可以按你的偏好给你推荐一个最合适的 fallback 顺序。
现在已经开始思考加推理了 但是TG对话上面还是有点问题 他思考的过程发出来了一下子又删掉了
我希望可以看到他思考的过程
你看到“思考过程闪一下又没了”,这其实是 Telegram 的 /reasoning stream 模式在工作——它会把 reasoning 流式写进输入草稿气泡里(看起来像“发出来了”),等最终答案生成后就 不再保留(不是被撤回,而是本来就不作为消息发送)。
如果你希望 思考过程真正作为消息可见并保留,在 TG 里对 bot 发送一条单独的指令:
/reasoning on
然后再发任务,它会额外发一条以 Reasoning: 开头的消息(会保留在聊天记录里)。
你还可以配套开工具细节(看它到底有没有执行命令/抓网页):
- 只看工具开始/报错摘要:
/verbose on - 连工具输出也发出来(会更刷屏):
/verbose full
另外注意两点:
/think high只是让它“想得更用力”(推理预算更大),不等于把思考过程显示出来;显示要靠/reasoning on。- 建议只在 私聊开 reasoning/verbose,别在群里开,容易泄露敏感信息/被 prompt injection 利用。
你现在 TG 里先发:/reasoning(不带参数)看它当前模式是不是 stream,再切到 on 试一下。
[2026/3/4 21:19] agaobot: Gateway restart restart ok (gateway.restart)
重启 gateway 以修复浏览器服务连接问题
Run: openclaw doctor --non-interactive
[2026/3/4 21:19] 三: 你现在在做什么?
[2026/3/4 21:24] 三: /reasoning on
[2026/3/4 21:25] 三: /reasoning on
[2026/3/4 21:25] 三: /reasoning
[2026/3/4 21:26] 三: /reasoning
[2026/3/4 21:26] 三: 你在做什么
为什么又不回我消息了
从你这段 TG 记录看,bot 不是“死了”,更像是 正在跑一个 in‑flight 的任务(比如它刚刚提到的 openclaw doctor --non-interactive / 或者某个重启后的自检),所以你后面发的“你在做什么”“/reasoning …”被 队列模式收集/等待 了,暂时不会立刻回。
先用下面这套“强制打断 + 改队列模式”的组合拳,让它恢复即时响应:
1) 在 Telegram 里先发(必须单独一条)
interrupt
(这是 abort trigger,会直接中止当前 run)
如果没反应,再发一次:
stop
2) 把队列模式改成“你发一句它就立刻重新开始处理”
/queue interrupt
你也可以先查看当前队列模式:
/queue
3) 然后再设置 reasoning(此时才会生效)
/reasoning on
再配合:
/verbose on
这样它每次开始用工具/执行命令都会单独发一条提示,你就能看到它“正在做什么”。
如果你按上面做完它还是不回:请在 VPS 上跑 openclaw logs --follow,然后你在 TG 发一句“ping”,把日志里那段(尤其是有没有 HTTP 504)贴出来——之前你就碰到过 504,那个也会导致它看起来“突然不回”。
你前面说的还可以截图还有什么功能 我想要火力全开的龙虾
“火力全开”的龙虾可以很猛,但能力分两类:在 VPS 上能做的 vs 控制你本地设备(截图/摄像头/桌面)的。我先把“能做什么”给你列个清单(带开通条件),你按你最想要的优先级开。
1) 截图能力(两种完全不同的“截图”)
A. 网页截图(VPS 就能做)
- 让它打开网页、点击、登录、填表、截图、导出 PDF
- 依赖:
browser工具 + VPS 上可用的 Chromium(可 headless)
用途例子:自动化后台操作、抓取网页数据、截图报告
B. 你电脑/手机屏幕截图(需要 Node)
- 这才是“截图桌面/录屏/摄像头拍照”
- 依赖:把你的电脑/手机配成 node(跟同一个 Gateway 配对)
- 能力:截图、录屏、摄像头拍照/录像、通知弹窗、在本机跑命令等
2) 上网能力
web_fetch:抓网页内容(一般不需要 key)web_search:搜索(需要 Brave API key)
适合:信息收集、比对资料、自动整理输出
3) VPS 执行(真正“干活”)
- 跑命令、安装软件、改配置、拉日志、写脚本、部署服务
- 关键:工具要放开(你已经在做)+ 模型要稳定(你已经加 fallback 思路了)
- 建议搭配
/verbose on/full:你能看到它到底有没有在执行命令
4) 自动化(不需要你盯着)
- 定时任务(cron):每天抓数据、生成日报、备份、健康检查
- Heartbeat:定时“我在吗/有没有异常”巡检
Docs: https://docs.openclaw.ai/automation
5) 多代理/并行(“遇到问题主动想办法”会更像)
- 子代理(sub-agents):把一个大任务拆成多个并行小任务
- 会话管理:更可控,不容易卡死一条线程
6) 你要“火力全开”的正确姿势(强烈建议)
因为你用 Telegram 控制 VPS,一旦工具全开,安全边界一定要收紧:
- Telegram 只允许你本人触发(DM allowlist / pairing)
/queue interrupt(避免卡住不回)/verbose on+/reasoning on(看它在做什么)
- 给它任务时要求“必须贴证据”(命令输出/截图/文件 diff)
你先告诉我你说的“截图”是哪一种:
- 网页截图(比如让它登陆某个网站截图报表)
还是 - 你电脑桌面截图/录屏/摄像头(需要 node)
我可以按你的目标给你一套最短开通路径 + 一个“验收用”的测试任务清单,确保它真的在干活。
⚠️ Agent failed before reply: All models failed (4): custom-api-drlj-cn/claude-opus-4-5-20251101: 500 No available Claude accounts support the requested model: claude-opus-4-5-20251101 (timeout) | openai/gpt-5.1: 403 Your request was blocked. (auth) | anthropic/claude-opus-4-5: HTTP 401 authentication_error: invalid x-api-key (request_id: req_011CYjcLEafVzN6MzML3RN3V) (auth) | minimax/MiniMax-M2.1-lightning: HTTP 401 authentication_error: invalid api key (request_id: 05f8704619b4c408dd3a40040d581fa1) (auth).
Logs: openclaw logs --follow
为什么她回复我这个
@stable scarab
这是 OpenClaw 网关自己发出来的报错(不是模型“回复了一段话”),意思是:
这一次 run 在“拿到模型回复之前”就失败了,因为 primary + 所有 fallback 模型都调用失败了
所以它只能把每个模型失败原因汇总出来给你看:All models failed.
你这条里 4 个失败点分别是:
-
custom-api-drlj-cn/...:500
- 你的自建/自定义接口返回:没有可用账号支持这个 model id(
claude-opus-4-5-20251101),还伴随 timeout - 结论:这条 custom-api 现在 不能稳定提供这个模型(要么 model id 写错,要么后端池子没号/没权限)
- 你的自建/自定义接口返回:没有可用账号支持这个 model id(
-
openai/gpt-5.1:403 blocked (auth)
- 通常是:Gateway 实际用到的 OpenAI key/网络出口被拦、或 key 所属账号/地区/风控导致阻断
- 也可能是 CLI 里 probe OK,但 systemd 服务环境用的是另一套 key/代理(最常见)
-
anthropic/claude-opus-4-5:401 invalid x-api-key
- Anthropic key 无效(填错/过期/有空格/服务没拿到正确的那个 key)
- minimax/...:401 invalid api key
- MiniMax key 无效(同上)
你接下来怎么修(按最短路径)
A) 先确认:Gateway 服务到底拿到哪些 key(不要只信你 shell)
把 key 放到 ~/.openclaw/.env(systemd 服务不一定继承你登录 shell 的环境变量):
OPENAI_API_KEY=...ANTHROPIC_API_KEY=...MINIMAX_API_KEY=...- (如果用 OpenRouter)
OPENROUTER_API_KEY=...
然后:
openclaw gateway restart
openclaw models status --probe
不要把
.env内容贴到群里;你只需要贴models status --probe的结果。
B) 先让它“能跑起来”:把 fallback 换成你确定可用的
现在错误里显示 anthropic/minimax 都是 invalid key,那就暂时不要把它们当 fallback,先用你 probe 确认 OK 的那几个(比如 OpenRouter/OpenAI/Opencode 里你能稳定用的)。
(你把你当前的 agents.defaults.model 配置贴出来——打码 key——我帮你写一份最稳的 primary+fallback 顺序。)
C) custom-api 那条要么换 model id,要么别当 primary
claude-opus-4-5-20251101 这种带日期的 model id 很可能是你自定义后端的内部名;后端报 “No available Claude accounts support…” 基本就是它那边供给/权限有问题。
最省事的做法:先把 primary 换成你 probe 延迟很低且稳定的 provider,把 custom-api 放 fallback(或者先移除)。
你先回我两样东西(都不含密钥)我就能直接给你落地方案:
openclaw models status --probe(重启 gateway 之后跑一次)openclaw config get agents.defaults.model --json
不用 @ 那个机器人账号(而且我这边也不会因为你 @ 就自动看到你 VPS 的状态)。
现在要继续排查你昨天那条 All models failed,你只需要把这两条命令的输出贴出来就行(记得打码任何 key/token):
openclaw gateway restart
openclaw models status --probe
openclaw config get agents.defaults.model --json
有了这两段,我就能直接告诉你:
- 哪个 provider 的 key/环境变量在 systemd 服务里没生效
- 你的 primary/fallback 顺序怎么改才能不再 500/401/403 就全崩
也就是说这些模型只要有一个能正常回复就不会报错对吧?
对,“All models failed” 这个报错只会在:primary + 你配置的所有 fallback 都失败时才出现。
工作逻辑大概是:
- 先用 primary 模型请求
- 如果 primary 失败(超时/500/401/403 等),就按顺序尝试 fallbacks
- 只要其中任意一个模型成功返回,这一轮就会继续往下跑(然后才可能去调用工具、发消息)
所以:
- 只要有一个能正常回复 → 不会出现 “All models failed”
- 但如果模型能回、后面工具执行失败(比如 exec/browser 报错),那会是别的错误,不是 “All models failed”。
你现在遇到的情况就是:那次请求里每个候选模型都分别被 500/401/403 挡住了,所以才会报这个汇总错误。
Gateway restart config-patch ok (config.patch)
已添加浏览器配置,指定 Chrome 路径并启用无沙箱模式
Run: openclaw doctor --non-interactive
什么意思
这句是 工具执行摘要,不是“聊天内容”。意思是:
config-patch ok (config.patch):它刚刚通过工具把你的~/.openclaw/openclaw.json打了一个配置补丁(改配置成功)。- “已添加浏览器配置,指定 Chrome 路径并启用无沙箱模式”:补丁内容大概率是:
- 设置了
browser.executablePath指向你的 Chrome/Chromium 二进制路径 - 设置了
browser.noSandbox: true(等价于给 Chrome 加--no-sandbox,在 Linux 上以 root 跑 Chrome时经常必须这样,否则 Chrome 会直接拒绝启动)
- 设置了
Gateway restart ...:改完配置后它把 gateway 重启让新配置生效。Run: openclaw doctor --non-interactive:建议你在 VPS 上跑一次 doctor 做自检(缺依赖/路径不对会在这里报出来)。
你可以在 VPS 上验证它到底改了什么(不含密钥,放心贴):
openclaw config get browser --json
然后测试浏览器是否真的能用:在 TG 里让它“打开 https://example.com 并截图”。
安全提醒:noSandbox 会降低浏览器隔离强度。更推荐的长期方案是 不要用 root 跑 gateway/browser,或者用 Docker sandbox 跑浏览器(但先把它跑通再优化也行)。相关排障文档:
https://docs.openclaw.ai/tools/browser-linux-troubleshooting
白话跟我说一下
就是这几件事,用白话说:
- 你的 OpenClaw 觉得“浏览器用不了/连不上”,所以它自动帮你改了一下配置(把 Chrome 的程序路径写进配置里)。
- 因为你这台机器上跑 Chrome 可能会报“必须开 no-sandbox”(尤其是你用 root 跑的时候),所以它顺便把 no-sandbox 也打开了,让浏览器能启动。
- 配置改完以后,必须重启才生效,所以它就把 gateway 重启了。
- 最后那句
Run: openclaw doctor --non-interactive的意思是:让你在服务器上跑一次“体检/自检”,看看还有没有缺东西或配置不对。
一句话总结:它帮你把“浏览器能跑起来”需要的设置补上了,并重启让设置生效,然后建议你跑 doctor 做检查。
为什么openclaw 我在TG跟他对话 她有时候明明已经发出来了一段话 为什么还会删除掉?
因为 Telegram 这边 OpenClaw 默认开了 “实时预览/流式输出”,它为了让你“立刻看到它在打字”,会用两种机制:
-
DM 里用 Telegram 原生草稿流(sendMessageDraft)
- 这东西本来就不会进聊天记录
- 所以你会感觉“它显示了一段话,然后又没了”(其实是草稿预览被最终答案替换了)
-
群/复杂回复时用临时消息 + edit/delete 清理
- 先发一个“预览气泡”,不断
editMessageText更新 - 最终答案准备好后,有时会删除预览消息(避免重复/避免预览残留)
- 你就会看到“发出来了又被删掉”
- 先发一个“预览气泡”,不断
另外你之前想看思考过程,如果用了 /reasoning stream,也会出现“闪一下就没了”(因为 reasoning 只进预览,不进最终消息)。
你想“不再闪现/不再像撤回” → 关掉预览流式
在 VPS 上执行:
openclaw config set channels.telegram.streaming "off"
openclaw gateway restart
这样它只会在最后一次性发最终答案,不会再出现“发了又删/闪一下”的感觉(代价是:没实时打字预览)。
你想“思考过程要保留在聊天记录里”
在 TG 里发(单独一条):
/reasoning on
不要用 stream。