#为什么openclaw只说话不干活

1 messages · Page 1 of 1 (latest)

slender mothBOT
#

To help others find answers, you can mark your question as solved via Right click solution message -> Apps -> ✅ Mark Solution

stable scarabBOT
#

OpenClaw “只说话不干活”通常不是坏掉了,而是 只有“大脑”(聊天模型),但你还没给它配/放行 “手脚”(tools / skills / node 设备能力)

最常见的 4 个原因(从高到低):

  1. 工具没启用 / 没配置
  • 例如你让它“上网搜一下”,但 web_search 没开、没填 Brave API key,它就只能用嘴回答。
  • 文档(FAQ 里有完整配置示例):https://docs.openclaw.ai/help/faq (搜 “enable web search”)
  1. 工具被 allowlist 禁掉了(安全策略)
  1. 你想让它操作“你的电脑”,但没配 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
#
  1. 你其实想要的是“自动执行”,但 OpenClaw 默认会谨慎
  • 很多“干活”动作会需要批准(尤其是跑命令/控制浏览器/发消息等),否则它会选择只给方案、不给执行。

为了快速定位,你把下面 3 个信息贴一下(越完整越快):

  1. openclaw --version
  2. openclaw gateway status 的输出(尤其是 RPC probe 是不是 ok)
  3. 你希望它“干什么活”的一个具体例子 + 你对它说的话 + 它回了什么(原文)

我看完就能判断是:工具没开、被白名单拦了、缺 node,还是别的配置问题。

empty needle
#

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 ~]#

#

你希望它“干什么活”的一个具体例子 + 你对它说的话 + 它回了什么(原文)
我希望他干活是我给他任务 他真的去做这个任务 遇到问题主动想解决办法

empty needle
stable scarabBOT
#

你这个 gateway status 看起来是健康的:RPC probe: ok,所以“网关起得来”没问题。

你描述的“只会聊天、不干活”,最常见原因其实是:工具权限被限制了 —— 新安装/本地 onboarding 默认会把:

  • tools.profile 设成 "messaging"(只允许发消息/查会话状态等)
  • 不包含 web_fetch/web_searchexecbrowsernodes 这些“干活工具”

所以它只能用嘴回答,没法上网、没法跑命令、没法控浏览器。

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),我就能直接指出是哪一块没开。

#

你这个期望其实分成两件事:

  1. 它有没有“手脚”能执行(能不能真的去做)
  2. 它的工作方式是不是“循环执行直到完成”(遇到问题会不会继续尝试、验证、修复)

OpenClaw 默认更像“会聊天的助理”,不是默认就全自动干活的机器人——为了安全,很多安装默认会把工具收得很紧(只允许发消息/查状态),所以你给任务它只能给方案,没法实际执行。


先把“干活”的定义说清楚

你说的“真的去做任务”,通常指这些能力之一:

  • 上网抓内容/搜索:web_fetch / web_search
  • 在 VPS 上跑命令、安装软件、改配置:exec
  • 控浏览器做网页操作:browser
  • 操作你本地电脑(截图/摄像头/本机命令):需要把电脑配成 nodenodes
#

你想它主要做哪一种?(先选一个最常用的就行)


要它“遇到问题主动解决”,你需要给它一个“执行循环”指令

建议你在提任务时直接这样说(很有效):

目标: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)对话。


你回我两样东西,我就能给你一套“能干活”的最短路径配置:

#
  1. 你希望它主要干哪类活:上网 / 跑命令 / 控浏览器 / 控本地电脑(node)?
  2. 你现在是通过什么跟“你自己的 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 里:

除非你真的调用了工具并看到了工具输出,否则不允许声称“我已经执行了命令/修改了文件/发送了消息”。如果无法执行,必须明确说明缺少的工具或权限,并给出替代方案。

这能显著减少“假装做了”的情况。


你先回我两样东西就够:

  1. 你在对话里让它执行 uname -a && whoami && pwd 时,它回的原文
  2. openclaw config get tools.profile / tools.allow / tools.deny 的输出(记得别贴 token/API key)
empty needle
#

你说的“真的去做任务”,通常指这些能力之一:

上网抓内容/搜索:web_fetch / web_search
在 VPS 上跑命令、安装软件、改配置:exec
控浏览器做网页操作:browser
操作你本地电脑(截图/摄像头/本机命令):需要把电脑配成 node(nodes)
你想它主要做哪一种?(先选一个最常用的就行)

都需要

stable scarabBOT
#

可以“都需要”,但得先把一个现实讲清楚:这相当于把你的 VPS/浏览器/文件系统的控制权交给模型
所以正确做法是:

  1. 只在你自己可控的私聊/私有群里开(不要在公开 Discord 群里开)
  2. 开工具时要配好 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 一般不需要 key
  • web_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: truebrowser.executablePath

如果你要走这条线,我建议你先说清楚:你是 纯 VPS(无桌面) 还是 本地有桌面?不同路径差很多。


E. 控制你“本地电脑”(nodes)

这不是 “Gateway 在 VPS 上” 就能做到的——你必须把你的电脑/手机配成 node,Gateway 才能调用 screen/camera/system.run 这些本地能力。

Docs: https://docs.openclaw.ai/nodes


最关键的:你现在“在哪儿”跟你的 OpenClaw 聊天?

你一句“都需要”,我能给你配置,但我需要你回答这个,否则很容易你其实在跟社区线程聊、或者跟错 bot:

#
  1. 你是通过 Telegram?还是 你自己的 Discord bot?还是 Control UI / TUI 在下达任务?
  2. 你打算“干活”的主要场景是:VPS 跑命令 + 上网,还是还要 浏览器自动化,还是还要 控制本地电脑

你回这两条,我就给你一份“安全且全能”的配置建议(包括:哪些工具该开、哪些必须在 DM、哪些必须配 node、哪些必须开 sandbox/审批)。

empty needle
#
  1. 你是通过 Telegram?还是 你自己的 Discord bot?还是 Control UI / TUI 在下达任务?
    Telegram
  2. 你打算“干活”的主要场景是:VPS 跑命令 + 上网,还是还要 浏览器自动化,还是还要 控制本地电脑?
    都需要
stable scarabBOT
#

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>

文档: https://docs.openclaw.ai/channels/telegram

#

1.2 找到你的 Telegram user id(很重要)

最安全的方法:

  1. 你先 DM 你的 bot 任意一句
  2. 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 通常不需要 key
  • web_search 需要 Brave API key
#
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) 解决你说的“它说做了,但其实没做”

这个现象我一般用两招当场抓出来:

  1. 强制证据:每次让它执行都要求“贴命令输出 / 贴文件 diff / 贴链接”。贴不出来=没做。
  2. 开日志跟踪(最有效):
#
openclaw logs --follow

然后你在 Telegram 触发一次任务,把日志里出现的 deny / policy / tool / error 几行贴出来(打码 token),我就能直接指出是:

  • 工具被 policy 禁了
  • 工具调用失败(依赖/权限/超时)
  • 或者模型根本没发 tool call(常见于某些模型不稳定/太弱)

你现在先回我两样东西,我就能把你这套“都需要”落地到可用状态:

  1. openclaw config get channels.telegram.dmPolicyopenclaw pairing list telegram(看你配对是不是完成了)
  2. openclaw config get tools.profile(确认已从 messaging/minimal 切到 full)
empty needle
#

[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 ~]#

stable scarabBOT
#

这就破案了:你现在的工具策略其实是“只允许 web 工具”。

你这段输出里关键点是:

"profile": "full",
"allow": ["group:web"]

在 OpenClaw 里,tools.allow 不是“额外允许”,而是 “白名单(只允许这些)”
所以你虽然 profile: "full",但因为 allow 只放了 group:web,最终效果就是:

  • 允许:web_fetch / web_search
  • 禁止:execbrowsernodes、文件读写等
  • 结果:模型做不了事 → 就只能嘴上说“我做了”(典型的工具被禁导致的“假执行”)

#

解决方法(选一个)

方案 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

empty needle
#

[root@VM-4-12-opencloudos ~]# openclaw config get tools --json
{
"profile": "full",
"web": {
"search": {
"enabled": true
},
"fetch": {
"enabled": true
}
}
}
[root@VM-4-12-opencloudos ~]# 你再看看

stable scarabBOT
#

看到了——现在这份就对了:

{
  "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
empty needle
#

但是还是不干活

[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,把输出原样贴出来。

给他发一堆 都不理我

stable scarabBOT
#

你这段 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 没进来,还是工具被沙箱/策略/模型卡住。

empty needle
#

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,把输出原样贴出来。

这句话

stable scarabBOT
#

看你这段日志,问题已经很明确了,不是“工具没开”了,而是两件事叠加:

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

下一步你照做一遍(别连发)

#
  1. Telegram 里先发:/queue interrupt
  2. 等 5 秒
  3. 发一条测试(就这一条,别跟 “?”):

    请在 VPS 上执行:uname -a && whoami && pwd,把输出原样贴出来。

  4. VPS 里跑 openclaw logs --follow,把“收到消息 → 发起模型请求 → 是否 tool call/是否 504”的那段贴出来

再加上你贴的 openclaw models status,我就能给你具体建议:是换 provider、加 fallback、还是修网络/IPv6/代理。

empty needle
#

stable scarabBOT
#

现在下一步就做两件事(按顺序),你贴输出我才能继续判断:

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 的几行)贴出来。

empty needle
#

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

这些你看下

stable scarabBOT
#

看到了——这里正好能解释你日志里的 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/autoopenai/gpt-5.1anthropic/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 里:

  1. 先发:/queue interrupt
  2. 再发测试(只发这一条):

请在 VPS 上执行:uname -a && whoami && pwd,把输出原样贴出来。


#

你先把 openclaw models status --probe 的输出发我,我帮你判断:你这台机子上到底哪个 provider 是稳定可用的,然后给你一套最合理的 fallback 顺序。

empty needle
#

┌─────────────────────────────────────────────┬────────────────────────────────┬────────────┐
│ 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 │
这个 你帮我看下怎么操作

stable scarabBOT
#

你这个 --probe 结果说明:你配置的 9 个模型/Provider 目前都能连通,但你之前遇到的 HTTP 504 更像是 custom-api-drlj-cn 这条链路在“长请求/偶发”时会超时——probe 只是一个很小的探测请求(9s 已经挺慢了),真正做任务时上下文更长、更容易触发 504。

所以最实用的操作是:

  1. 继续用 custom-api-drlj-cn/... 当 primary(如果你想)
  2. 立刻加 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 顺序。

empty needle
#

现在已经开始思考加推理了 但是TG对话上面还是有点问题 他思考的过程发出来了一下子又删掉了
我希望可以看到他思考的过程

stable scarabBOT
#

你看到“思考过程闪一下又没了”,这其实是 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 试一下。

empty needle
#

[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] 三: 你在做什么

为什么又不回我消息了

stable scarabBOT
#

从你这段 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,那个也会导致它看起来“突然不回”。

empty needle
#

你前面说的还可以截图还有什么功能 我想要火力全开的龙虾

stable scarabBOT
#

“火力全开”的龙虾可以很猛,但能力分两类:在 VPS 上能做的 vs 控制你本地设备(截图/摄像头/桌面)的。我先把“能做什么”给你列个清单(带开通条件),你按你最想要的优先级开。


1) 截图能力(两种完全不同的“截图”)

A. 网页截图(VPS 就能做)

  • 让它打开网页、点击、登录、填表、截图、导出 PDF
  • 依赖:browser 工具 + VPS 上可用的 Chromium(可 headless)

用途例子:自动化后台操作、抓取网页数据、截图报告

B. 你电脑/手机屏幕截图(需要 Node)

  • 这才是“截图桌面/录屏/摄像头拍照”
  • 依赖:把你的电脑/手机配成 node(跟同一个 Gateway 配对)
  • 能力:截图、录屏、摄像头拍照/录像、通知弹窗、在本机跑命令等

Docs: https://docs.openclaw.ai/nodes

#

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)

你先告诉我你说的“截图”是哪一种:

  1. 网页截图(比如让它登陆某个网站截图报表)
    还是
  2. 你电脑桌面截图/录屏/摄像头(需要 node)

我可以按你的目标给你一套最短开通路径 + 一个“验收用”的测试任务清单,确保它真的在干活。

empty needle
#

⚠️ 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

stable scarabBOT
#

这是 OpenClaw 网关自己发出来的报错(不是模型“回复了一段话”),意思是:

这一次 run 在“拿到模型回复之前”就失败了,因为 primary + 所有 fallback 模型都调用失败了
所以它只能把每个模型失败原因汇总出来给你看:All models failed.

你这条里 4 个失败点分别是:

  1. custom-api-drlj-cn/...:500

    • 你的自建/自定义接口返回:没有可用账号支持这个 model idclaude-opus-4-5-20251101),还伴随 timeout
    • 结论:这条 custom-api 现在 不能稳定提供这个模型(要么 model id 写错,要么后端池子没号/没权限)
  2. openai/gpt-5.1:403 blocked (auth)

    • 通常是:Gateway 实际用到的 OpenAI key/网络出口被拦、或 key 所属账号/地区/风控导致阻断
    • 也可能是 CLI 里 probe OK,但 systemd 服务环境用的是另一套 key/代理(最常见)
  3. anthropic/claude-opus-4-5:401 invalid x-api-key

    • Anthropic key 无效(填错/过期/有空格/服务没拿到正确的那个 key)
#
  1. 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(或者先移除)。


#

你先回我两样东西(都不含密钥)我就能直接给你落地方案:

  1. openclaw models status --probe(重启 gateway 之后跑一次)
  2. 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 就全崩
empty needle
#

也就是说这些模型只要有一个能正常回复就不会报错对吧?

stable scarabBOT
#

对,“All models failed” 这个报错只会在:primary + 你配置的所有 fallback 都失败时才出现。

工作逻辑大概是:

  1. 先用 primary 模型请求
  2. 如果 primary 失败(超时/500/401/403 等),就按顺序尝试 fallbacks
  3. 只要其中任意一个模型成功返回,这一轮就会继续往下跑(然后才可能去调用工具、发消息)

所以:

  • 只要有一个能正常回复 → 不会出现 “All models failed”
  • 但如果模型能回、后面工具执行失败(比如 exec/browser 报错),那会是别的错误,不是 “All models failed”。

你现在遇到的情况就是:那次请求里每个候选模型都分别被 500/401/403 挡住了,所以才会报这个汇总错误。

empty needle
#

Gateway restart config-patch ok (config.patch)
已添加浏览器配置,指定 Chrome 路径并启用无沙箱模式
Run: openclaw doctor --non-interactive
什么意思

stable scarabBOT
#

这句是 工具执行摘要,不是“聊天内容”。意思是:

  • 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 并截图”。

empty needle
#

白话跟我说一下

stable scarabBOT
#

就是这几件事,用白话说:

  1. 你的 OpenClaw 觉得“浏览器用不了/连不上”,所以它自动帮你改了一下配置(把 Chrome 的程序路径写进配置里)。
  2. 因为你这台机器上跑 Chrome 可能会报“必须开 no-sandbox”(尤其是你用 root 跑的时候),所以它顺便把 no-sandbox 也打开了,让浏览器能启动。
  3. 配置改完以后,必须重启才生效,所以它就把 gateway 重启了
  4. 最后那句 Run: openclaw doctor --non-interactive 的意思是:让你在服务器上跑一次“体检/自检”,看看还有没有缺东西或配置不对。

一句话总结:它帮你把“浏览器能跑起来”需要的设置补上了,并重启让设置生效,然后建议你跑 doctor 做检查。

empty needle
#

为什么openclaw 我在TG跟他对话 她有时候明明已经发出来了一段话 为什么还会删除掉?

stable scarabBOT
#

因为 Telegram 这边 OpenClaw 默认开了 “实时预览/流式输出”,它为了让你“立刻看到它在打字”,会用两种机制:

  1. DM 里用 Telegram 原生草稿流(sendMessageDraft)

    • 这东西本来就不会进聊天记录
    • 所以你会感觉“它显示了一段话,然后又没了”(其实是草稿预览被最终答案替换了)
  2. 群/复杂回复时用临时消息 + edit/delete 清理

    • 先发一个“预览气泡”,不断 editMessageText 更新
    • 最终答案准备好后,有时会删除预览消息(避免重复/避免预览残留)
    • 你就会看到“发出来了又被删掉”

另外你之前想看思考过程,如果用了 /reasoning stream,也会出现“闪一下就没了”(因为 reasoning 只进预览,不进最终消息)。


你想“不再闪现/不再像撤回” → 关掉预览流式

在 VPS 上执行:

#
openclaw config set channels.telegram.streaming "off"
openclaw gateway restart

这样它只会在最后一次性发最终答案,不会再出现“发了又删/闪一下”的感觉(代价是:没实时打字预览)。


你想“思考过程要保留在聊天记录里”

在 TG 里发(单独一条):

/reasoning on

不要用 stream