1. 结论先行
1.1 诊断和修复命令
首先尝试执行OpenClaw自带的诊断和修复命令:openclaw doctor --fix
一般的问题它都会自行去修复,包括校验 config 的配置是否正确等等。BTW,我把这条命令添加到了系统的 Cron 任务中,每天定时去执行一次。1.2 查看启动日志
其次,如果不幸没有成功的修复,并且这条命令也没有告诉你如何去查看日志,你就可以执行查看下面这条命令来查看 OpenClaw 启动的过程中输出的日志(注意,不是在 .openclaw/logs 里的日志 ):journalctl --user -u openclaw-gateway.service -n 200 --no-pager
这些日志如果你看不懂,没关系,把它复制下来,发送给其他的 Chatbot(如Gemini、豆包等等) ,让它来解释,帮你找出问题,以及提供修复的方法。之后你就可以遵照它提供的方法去处理,一般就能够修复了。如果你想看本次踩的坑,就继续往下看完整的踩坑过程。2. 本次踩坑经过
我看到了 OpenClaw 支持记忆搜索,可以通过 embedding 模型来存储向量化的记忆,以进行记忆搜索。我查看了一下,发现它只支持4家在线 embedding 模型供应商:OpenAI、 Gemini 、Voyage 、Mistral。但是这几家的 API 我都没有。继续深入调查以后,我发现 OpenClaw还支持 OpenAI 格式兼容的模型供应商,可以通过特定的配置来支持 embedding 模型。于是我就通过下面这条命令设置了 OpenRouter 的模型:openclaw configure --section model
配置过程中,为了安全,我选择把 OpenRouter 的 key 作为环境变量来进行配置。但是我只是把 key 作为环境变量存入了 zsh 的配置文件里面。注意,OpenClaw 启动的时候其实是读取不到 zsh 里的 key 这个环境变量的。之后又在 OpenClaw 的文档上看到了还支持 SQLite向量加速 sqlite-vec 的优化功能,可以提升记忆搜索的速度,就同时也配置开启了。openclaw gateway restart
一般这种情况,我们只需要执行 openclaw doctor --fix 这个命令,就会自动去修复。但是这一次并没有,我执行以后,它只是尝试启动了几次 Getaway,都报了失败:使用 openclaw gateway start 这个命令,也是不行:去看了一下 .openclaw/logs 里面的日志,也没有启动相关的日志:pkill -f openclaw
再一次执行 openclaw doctor --fix 命令,这个时候它输出了不一样的东西,提示了如何去查看启动的时候的日志,也就是执行这条命令:journalctl --user -u openclaw-gateway.service -n 200 --no-pager
如果你不太懂,可以把这些日志的内容复制下来,交给其他的 Chatbot,比如说 Gemini,它就会帮你解析这个问题出在哪里。Gemini 告诉我这个问题就是出在了没有配置 OpenRouter的 key。我就去检查了一下 OpenClaw 的配置文件,发现里面多加了一个 auth 的配置,以及在 model 里面也新加入了 OpenRouter 的 model 作为首选项。我之前配置的火山引擎的 model,被设置成了 fall back 选项:我把配置文件中的这些内容删掉以后尝试重启,还是不行,还是报找不到 key。我就去翻 OpenClaw 的目录,从 .openclaw/agents/main/agent/ 这个目录里面找到 2 个配置文件,一个 auth-profiles.json 记录了 OpenRouter 的授权信息,另外一个 models.json 记录了 OpenRouter 的模型信息。main/agent 这个目录和 OpenClaw 的对话有关,在新安装的时候,是没有的,所以删掉也没有关系。直接把这两个文件删掉,再一次执行 openclaw doctor --fix ,终于成功启动了。