OpenClaw这个项目最近在AI圈子里热度很高,简单说,它就是一个开源的个人AI助理框架,前身是Clawdbot,后来由Anthropic官方接手开源。你可以把它理解为一个常驻后台的"管家",通过聊天窗口就能指挥它处理文件、调API、整理资料、写东西,甚至联动各种第三方服务。这篇文章记录的是我在Ubuntu 24.04 LTS上从零部署OpenClaw,并把它接入微信,让我直接在微信对话框里"遥控"这个AI助手的过程。整个过程走的是官方ClawBot渠道,没有碰任何逆向手段,属于相对合规的接入方式。写出来是想给那些手上有Ubuntu服务器、又不想每天开电脑盯终端的朋友,一份可以直接照着抄的实操记录。
1. 项目整体设计与思路拆解
1.1 OpenClaw到底是什么
先把这个东西讲清楚。OpenClaw的定位不是聊天机器人,而是"能动手干活的个人AI助理"。它的核心是一个用Go写的服务端,运行后可以挂载各种数据源、工具和渠道。架构上分三层:最底层是服务端(ClawServer),负责接收指令、调用模型、调度工具;中间是渠道层,负责把不同的客户端消息统一转成内部指令;最上层是你可以用各种方式去接触它,包括网页端、浏览器插件,以及第三方IM渠道(微信、Telegram、飞书这些都可以)。
这个设计最大的好处,就是模型和入口解耦。你可以在一个OpenClaw实例上配置Claude、DeepSeek甚至本地模型,入口则完全按自己的使用习惯来。有人喜欢浏览器插件,有人喜欢网页控制台,更多的人其实是整天泡在微信里的,那微信就是一个很自然的控制入口。我之所以最终选定"Ubuntu服务器 + Docker部署 + 微信接入"这个组合,不是说其他方案不行,而是这个组合在稳定性、维护成本和日常使用便利性之间做到了很好的平衡。
1.2 为什么选 Ubuntu 24.04 + Docker
先说结论:如果你手头有云服务器或者一台闲置的Linux机器,Ubuntu 24.04 LTS是目前最省心的选择之一。原因有三点。
第一,24.04是LTS版本,官方支持周期长,意味着你不会部署完几个月就遇到系统EOL要被迫迁移,长期跑服务很稳。第二,OpenClaw官方Docker镜像对Linux兼容性最好,而Ubuntu 24.04的Docker生态已经很成熟,apt源、内核模块这些都不用自己折腾。第三,社区踩坑案例多,真出问题搜索一下基本都有答案。相比在Windows上用WSL,原生Linux少了层虚拟化损耗,微信这类外部消息推送和回调的稳定性也更好。
可能有人会问,用Docker是不是多此一举?我实际体验下来并不多余。OpenClaw会创建自己的数据目录(默认叫.openclaw),里面存放会话记录、配置文件、Skill脚本等。如果用裸进程装,重装系统或者换机器的时候这些数据迁移非常痛苦。用Docker挂载volume之后,数据、配置、日志都是独立管理的,想升级镜像只需要换tag重启容器,最多几分钟的事。这种维护体验,用过一次就回不去了。
1.3 微信接入渠道的合规边界与选型
标题里写了"合规无封号",我必须先把话说清楚。这里说的合规,是指不碰微信逆向协议、不使用非官方脚本去篡改客户端,而是通过OpenClaw提供的官方渠道适配器(也就是社区常说的ClawBot渠道)接入,走的是正常的扫码登录和消息收发流程。跟你平常在电脑上登录微信是一个性质,不是在底层做手脚。
这样做有两个现实好处。一是接入成本低,不需要抓包、Hook之类的黑科技,一个Token配置就能连上;二是行为可控,消息流跟正常用户使用基本一致,没有被风控系统标记的异常特征。当然我也要负责任地说一句:任何第三方工具接入IM平台都存在潜在的账号风险,只是相对于逆向Hook方案,官方适配渠道要稳妥得多。实际使用中,我会控制消息频率,不去做群发、营销这类明显越界的行为,这也是后面整个项目的使用底线。建议所有准备照着做的朋友,也给自己立一个同样的规矩。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 部署前置准备:环境与依赖
2.1 Ubuntu 24.04 基础环境准备
装系统这一步我就不展开了,网上教程很多。重点说说装完系统之后我习惯先做的几件事,这些操作会直接影响后续部署的顺滑程度。
拿到一台干净的Ubuntu 24.04之后,第一件事当然是更新软件源并升级基础包:
bash复制sudo apt update && sudo apt upgrade -y
这一步建议在部署前做掉,别等到OpenClaw启动时报缺库才想起来。接着安装一些基础工具,比如curl、git、vim,这些后面配置和排查日志都会用到:
bash复制sudo apt install -y curl git vim ufw
这里我特意装了ufw防火墙,因为OpenClaw会开8899端口提供Control UI和API服务,这个端口如果暴露在公网,任何人都能访问你的控制台,风险很大。所以部署完一定要用ufw把外部访问限制住,只允许自己设备的IP访问,或者干脆只允许本机和内网访问。命令是这样的:
bash复制sudo ufw allow ssh
sudo ufw allow from 你的内网网段 to any port 8899
sudo ufw enable
先把基础环境做好,后面少操很多心。我记得第一次部署时偷懒没配防火墙,结果第二天就有人在扫端口,幸好当时服务刚起来还没配模型Key,不然又是一场折腾。
2.2 Docker 与容器网络准备
OpenClaw官方推荐用Docker部署,所以Docker是必须的。Ubuntu 24.04的软件源里自带Docker包,但版本偏旧,我建议装官方源的最新版,一行脚本搞定:
bash复制curl -fsSL https://get.docker.com | sh
装完别忘了把当前用户加入docker组,不然每次都要sudo,时间长了真的很烦:
bash复制sudo usermod -aG docker $USER
newgrp docker
然后验证一下是否正常:
bash复制docker --version
docker run hello-world
容器网络这块,默认的bridge网络其实就够用了,因为我们只需要映射8899端口出去。唯一要注意的是,如果服务器有多个网卡或者用了云厂商的VPC网络,记得把8899端口的防火墙规则同时加在云控制台安全组和系统ufw里,一个漏了就会导致外面访问不到Control UI。这个问题我帮朋友排查过一次,他折腾了两小时,最后发现只是云安全组没放行端口,属于典型的隐形坑。
2.3 需要提前准备的密钥与配置项
部署前先把这些信息准备好,避免部署到一半卡住。我整理了一个清单,每次部署新机器都照着这个来:
- Anthropic API Key:OpenClaw默认的模型后端是Claude,需要一个有效的API Key。如果没有,可以配置第三方兼容模型(比如DeepSeek),后面章节我会讲具体做法。
- 微信渠道Token:OpenClaw接入微信走的是wechaty协议,需要提供一个Token用于连接微信网关。这个Token相当于你的微信Bot的身份证,配置里填上就行。
- 一个能正常接收文件的目录:OpenClaw会产生日志、会话数据、下载文件,建议挂载一个独立的volume,方便备份。
我习惯把这些配置项先写到一个环境变量清单里,部署的时候直接引用。一来避免命令太长,二来换机器迁移的时候直接复用同一个配置,非常方便。你可以在家目录建一个openclaw.env文件,把Key、Token都放进去,注意文件权限设成600,别让其他用户读到。
3. OpenClaw 部署与微信渠道接入实操
3.1 拉取镜像与启动容器
先拉取OpenClaw官方镜像。这里有两个常用tag,一个是desktop(带桌面环境,适合个人电脑),一个是lite(轻量服务端,适合跑在服务器上)。我们这种微信控制的场景,显然用lite就够了,镜像体积小、内存占用低,跑在云服务器上非常合适:
bash复制docker pull anthropics/openclaw:lite
接着创建数据目录并启动容器。以我实际使用为例,完整启动命令是这样:
bash复制mkdir -p ~/openclaw_data
docker run -d \
--name openclaw \
--restart unless-stopped \
-p 8899:8899 \
-v ~/openclaw_data:/home/ubuntu/.openclaw \
-e ANTHROPIC_API_KEY=你的Key \
-e OPENCLAW_CHANNEL_WECHATY_TOKEN=你的Token \
anthropics/openclaw:lite
这里几个点说明一下。
--restart unless-stopped 保证服务器重启后容器自动拉起,微信控制这种常驻服务强烈建议加上,不然半夜服务器重启一下,第二天早上才发现ClawBot已经失联很久了。
-v ~/openclaw_data:/home/ubuntu/.openclaw 把数据目录挂载出来,以后升级镜像数据不丢,这是我最看重的一点。第一次部署时我没挂volume,后来版本升级容器重建,会话记录全丢了,从那以后这个参数再没漏过。
ANTHROPIC_API_KEY 如果没准备官方Key,可以先不填,后面在配置文件里改用其他模型。启动后观察容器日志:
bash复制docker logs -f openclaw
看到类似服务正在监听8899端口的日志,就说明服务端正常起来了。此时访问 http://服务器IP:8899 应该能看到Control UI登录页。
3.2 微信渠道配置与扫码登录
服务端起来之后,最关键的环节就是微信渠道。OpenClaw对IM渠道的对接方式是插件化的,微信渠道需要启用wechaty网关,并通过Token把OpenClaw和微信连接起来。
实际操作时,我建议先在OpenClaw的Web控制台里确认微信渠道已经启用,然后查看实时日志,会看到一条二维码信息。这一步要特别留意:如果二维码在终端以ASCII码形式打印,直接扫码即可;如果是生成了一张二维码图片,需要把图片打开再扫。二维码有效期通常只有几分钟,超时了就去日志里再找新的重新扫,别傻等同一个二维码过期。
扫码登录成功后,日志里会提示微信登录成功、联系人列表加载完成之类的信息。到这里,微信和OpenClaw的通道就算打通了。你可以先在微信上给自己发一条消息试试,正常的话ClawBot会回复你。
可能有朋友会问,如果服务器上没有浏览器,二维码怎么显示?我的做法是在本地电脑上直接访问Control UI的控制台,或者把日志里的二维码链接复制出来生成图片再扫。具体方式取决于日志输出格式,灵活处理就行。这里有个小提醒:首次扫码登录时,手机上记得确认登录设备,如果微信账号开启了登录保护,还需要在手机端手动确认,这一步没过的话,后面二维码会反复刷新,但始终连不上。
3.3 验证整条链路:从微信消息到ClawBot回复
打通之后,别急着上复杂功能,先做一轮链路验证。我在第一次部署时踩过不少坑,所以总结了一个标准验证流程,每次重新部署都按这个来。
第一,在微信上发一句简单问候,比如"你好",看ClawBot是否正常回复。这一步验证核心链路通不通。如果这一步就卡住,问题八成出在Token配置或者API Key上,先回去查配置。
第二,让它执行一个可观察的任务,比如"帮我写一段200字的项目介绍"。如果回复正常,再试"总结一下当前会话"这种需要上下文记忆的任务,验证多轮对话能力。很多模型在单轮对话时表现不错,但多轮上下文一长就开始丢信息,这一步能提前暴露问题。
第三,测试比较耗时的任务,比如让它联网搜索或调用工具,观察微信里是否会出现任务进行中的状态提示,以及最终能否正常收到结果。这一步主要验证异步消息推送是否正常,因为OpenClaw执行复杂任务是异步的,如果微信渠道的消息回推没做好,你会遇到"微信发出去消息,ClawBot半天没反应"的假故障。
做完这三步,整条链路基本就算稳了。我用下来最大的感受是:把OpenClaw接到微信之后,和AI的交互模式会发生明显变化。以前是打开网页聊天框,现在是随手拿起手机发条消息,任务提交、结果接收都在微信里完成,不用专门去盯一个后台页面。
4. 常用场景配置与Skill扩展
4.1 模型配置与切换(含DeepSeek兼容问题)
OpenClaw默认对接的是Anthropic的Claude模型,但如果你手头没有官方API Key,或者想用国内模型来降低成本,可以配置DeepSeek等兼容模型。这里有一个我实际踩过的坑:在配置模型时,模型标识符写错是最常见的启动报错,典型错误就是日志里出现unknown model: deepseek。
这个报错的意思是,OpenClaw把deepseek当作模型ID去请求API,但API端并不认识这个简写。正确的做法是,在配置里写明API端完整的模型名称,DeepSeek平台的模型ID是类似deepseek-chat这样的完整标识,不是deepseek。配置完成后需要重启容器让配置生效:
bash复制docker restart openclaw
docker logs -f openclaw
如果你用的不是DeepSeek,也建议先确认一下模型服务商给的模型ID全称,再填进配置里。这类问题八成都是模型名写错,而不是服务本身有问题。还有一个容易忽略的点:切换模型后,最好把旧的会话记录清掉或者新建一个会话,因为旧会话的上下文格式可能跟新模型不兼容,会导致后续请求一直报错。
4.2 Skill技能编写:让ClawBot调用外部API
OpenClaw最强的能力在于你可以给它写Skill,说白了就是教它调用外部工具。我举个例子,如果你想让ClawBot帮你查天气,可以写一个查询天气API的Skill,把请求参数、返回解析、容错逻辑都封装好,下次在微信里说"查一下北京的天气",ClawBot就会自动调用这个Skill。
Skill的本质是一组配置加脚本。配置里声明这个技能的触发条件、所需参数、依赖的工具,脚本则负责真正的API调用和结果整理。编写时要注意几个点。
第一,参数尽量声明清楚。比如查询天气需要城市名,就把city作为一个必填参数定义好,ClawBot会从你的自然语言里抽取这个参数再传给脚本。参数描述写得越具体,抽取准确率越高,我写过"城市名,比如北京、上海、广州",效果明显比只写"城市"好。
第二,返回结果要格式化。脚本输出的是结构化数据,ClawBot会负责把数据转成自然语言回复给微信,所以脚本里不要输出乱七八糟的调试信息。我见过有人把print调试语句也留在Skill脚本里,结果ClawBot把调试信息也当成了返回内容,回出来的消息一坨乱码。
第三,做好失败兜底。API超时、返回空数据这些情况,脚本要返回明确的错误标记,ClawBot才知道怎么向你解释。比如天气API挂了,脚本返回{"error": "weather_api_timeout"},ClawBot会回复"天气服务暂时不可用",而不是干愣着。
写好后把Skill放进OpenClaw的数据目录对应文件夹,重启容器即可生效。这个机制学明白之后,相当于给微信里的AI管家装上了无限扩展的"手",你能调多少API,它就能干多少活。
4.3 场景实战:微信里让OpenClaw写小说/整理信息
说一个实际使用场景,也是最近很热的话题:让ClawBot在微信里帮忙写小说。我在测试时让它写一篇短篇悬疑故事,流程是这样的:在微信发消息"以深夜便利店为主题写一篇1000字左右的悬疑短篇",ClawBot会先拆解任务,生成大纲,然后逐段输出,最终把完整故事发回微信。
这里有两个经验值得分享。第一个,任务描述越具体,输出质量越高。比如"写一篇小说"和"写一篇以深夜便利店为背景、主角是值夜班店员、带反转结局的悬疑短篇",后者的完成度明显高得多。模型不是搜索引擎,它不会猜你的心思,你把约束给足,它就能把活干好。
第二个,长文输出在微信里可能会被拆分成多条消息,收到后记得拼起来看。我第一次让它写长文时,只收了前两条消息就以为它停了,后来翻开完整对话记录才发现后半部分早就发过来了,只是被微信消息列表折叠了。
信息整理类的任务同样好用。比如把老板发在群里的会议纪要丢给ClawBot,让它提取待办事项并排序。我实测下来,ClawBot对这种"结构化提取"任务处理得相当稳,因为它本质上是把问题拆解成几步再执行,不是简单地重新排版。
5. 常见问题与排查技巧实录
5.1 Control UI 起不来怎么办
先说一个最高频的问题:启动容器后,访问8899端口发现页面打不开,日志里提示control UI did not start。我遇到过两次,一次是端口被占用,另一次是配置文件编码问题。
排查顺序建议这样来。
第一,看端口是否冲突:
bash复制ss -tlnp | grep 8899
如果有别的进程占用,把OpenClaw的映射端口改成8898或者其他空闲端口,改完重启容器。这个情况多发生在服务器上已经跑了其他Web服务的场景,比如Nginx占了8899。
第二,看容器日志里有没有更具体的报错,比如配置文件解析失败。OpenClaw的配置是YAML格式,YAML对缩进极其敏感,一个Tab和空格混用都会导致解析失败,进而让UI组件起不来。排查时把打开过的配置文件重新检查一遍,把Tab全部换成空格,然后重启容器再看日志。
第三,确认Docker映射是否正确。-p 8899:8899这个参数左边是宿主机端口,右边是容器端口,搞反了或者只映射了一半,都会出现外面的请求进不去的情况。用docker port openclaw可以快速查看当前的端口映射情况,非常方便。
5.2 报错 unknown model: deepseek 的排查
这个报错在第四章提过,这里展开讲一下完整排查思路。当微信里发消息,ClawBot回复agent failed before reply: unknown model: deepseek,说明请求根本没有发到模型API,而是在OpenClaw内部路由阶段就被拒绝了。
先打开OpenClaw的配置文件,检查模型相关字段。常见问题有三个:一是模型名用了简称,没写API端完整ID;二是provider的名称写错,OpenClaw匹配不到对应的服务商;三是模型服务商和模型ID不匹配,比如选了OpenAI兼容通道,结果填的是DeepSeek的模型ID。
正确的做法是去模型服务商的控制台找到完整的模型ID,复制粘贴到配置里,然后重启容器:
bash复制docker restart openclaw
docker logs -f openclaw
日志里看到模型加载成功的提示后,再去微信里发消息测试,基本就正常了。另外,我建议在改完配置后先用Control UI的测试功能发一条消息验证,不要在微信里反复试,省得微信端把错误消息攒一堆。
5.3 微信消息不响应与掉线处理
微信渠道偶尔会出问题,表现是消息发出去没有回复。我的经验是先区分是服务端挂了还是微信掉线了。
看OpenClaw容器日志,如果日志一直在滚动但没有收到你的消息记录,多半是微信网关掉线了。这种情况通常需要重新扫码登录。我的处理流程:
bash复制docker logs --tail 100 openclaw
docker restart openclaw
重启后查看日志,如果出现二维码,就重新扫码。这里有个实用小技巧:把扫码时需要打印的日志单独过滤出来,方便在另一台设备上显示二维码:
bash复制docker logs openclaw 2>&1 | grep -A 20 "QRCODE"
如果日志里根本没有微信相关记录,那问题多半出在OpenClaw本身,先看有没有模型API调用的报错,再逐步排查。另外,微信长时间不活跃偶尔也会掉线,这是正常现象。我现在的做法是把OpenClaw容器设为开机自启(前面提到的--restart unless-stopped),再加上一个定时健康检查的脚本,每天固定时间给ClawBot发一条测试消息,及时发现问题。
5.4 资源占用与日志排查小技巧
最后分享几个日常维护的小技巧。OpenClaw本身是Go写的,内存占用很低,我跑了好几天,容器常驻内存稳定在150MB左右。但如果你开了很多Skill,或者模型上下文很长,内存会有所上升。日常看资源占用:
bash复制docker stats openclaw
日志文件会随着使用越来越大,建议定期清理。我用的是直接把容器日志限制一下大小,在Docker配置里加上日志轮转。不过如果容器已经跑起来了,最简单的方式是定期清空日志文件:
bash复制sudo truncate -s 0 $(docker inspect --format='{{.LogPath}}' openclaw)
这个命令不会影响运行中的容器,只是把旧日志清掉,很实用。注意用sudo,因为Docker日志文件默认是root权限。
还有一个排查习惯:遇到任何诡异问题,先看配置再看日志,不要急着重启。OpenClaw的日志信息其实写得挺详细,大部分问题都能在日志里找到直接原因。把日志里带error和warn的行过滤出来看:
bash复制docker logs openclaw 2>&1 | grep -iE "error|warn"
这套方法帮我解决过不少疑难杂症。说白了,绝大多数部署问题都逃不出三类:配置写错、端口不通、依赖缺失。按这个顺序排查,基本都能快速定位。
我自己把这个项目跑起来之后,最大的感觉是"AI助理终于不是玩具了"。在微信里随手发条消息就能驱动一个能调API、能写东西、能整理信息的AI管家,这种体验确实很上头。但我也要再提醒一次:接入微信一定要走官方渠道,别去碰Hook和逆向,控制使用频率,别做营销骚扰类的操作,这样既安心也长久。这篇记录里所有步骤都是我在Ubuntu 24.04上实际跑通的,如果你也是Linux服务器用户,照着来应该不会太折腾。后续我打算给ClawBot加一个定时日报的Skill,让它每天早上自动把待办事项和天气情况推送到微信,有新经验了再继续分享。
