把AI助手塞进一块比信用卡大不了多少的开发板里,让它7×24小时蹲在家里随时响应,这个想法我琢磨了很久。树莓派、OpenClaw、AI助手这三个词放在一起,听起来就像是极客玩具的叠buff,但实际跑下来,这件事真的能落地,而且比大部分人想象的要稳。
我这次用树莓派5作为宿主,部署了一个基于OpenClaw的常驻AI助手,接入了本地大模型和云API两套算力,跑了将近一个月没断电重启过。这篇文章把我从选型、装系统、写配置到调优稳定性踩过的坑,全部记录下来。不管你是刚摸到树莓派的新手,还是已经玩过一阵子的爱好者,照着这套流程走,都能搭出一个真正可用的24小时在线AI助手。你会碰到的卡点,我先替你们踩一遍。
1. 动手之前,先想清楚三个问题
1.1 树莓派跑AI助手,硬件到底怎么选
树莓派不是服务器,跑AI助手不能只看能不能开机,要看长期运行下的综合表现。目前主流选择是树莓派4B和5,我直接说结论:如果预算允许,优先选树莓派5,8GB版本。
树莓派5相比4B的提升非常明显,CPU从Cortex-A72升级到Cortex-A76,主频也拉到2.4GHz,跑Python服务、处理并发请求时差距能感受出来。更重要的是,树莓派5的PCIe接口可以直接接NVMe固态硬盘,这对AI助手这类需要频繁读写配置、日志、模型缓存的场景帮助很大。我用的是NVMe转接板加一条256GB的SSD,系统响应比之前用TF卡顺畅得多,TF卡也不会因为频繁读写提前报废。
如果手头已经有4B,也不是不能用。4GB版本跑OpenClaw加小模型是够的,但我强烈建议至少8GB内存版本,而且系统一定要装在固态介质上,TF卡只做启动引导。你非要拿3B来跑,我也不拦你,但那个体验真的不太行,光是Python依赖装起来就能让你怀疑人生。在树莓派社区里很多人拿它和N3050小主机对比,N3050胜在多核性能和内存扩展性,但树莓派5的优势是功耗低、GPIO生态完善、社区资料丰富,做AI助手这种轻量级常驻服务反而更合适。
1.2 OpenClaw到底是什么,它能解决什么问题
OpenClaw是一个开源AI助手编排框架,官方定位是"数字员工的运行底座"。它解决的核心问题不是"你有没有一个模型",而是"你怎么让模型真正干活"。
打个比方,模型是大脑,OpenClaw是身体。大脑负责思考,但思考完要行动,比如查天气、记笔记、调API、执行Python脚本,这些动作靠模型自己是做不到的。OpenClaw提供了一套标准化的接口,把模型能力接出来,再通过Skill机制让你给助手装上各种各样的"手和脚"。你让它"帮我整理这个文件夹里的PDF标题",它能把文件遍历、内容提取、结果汇总这一套流程跑完,而不是只给你一段"你可以这样做"的废话。
这个定位决定了它在树莓派上的价值很大。你不需要在树莓派上跑一个庞大的全功能应用,只需要跑一个轻量的编排服务,把家里的智能设备、文件服务器、定时任务都串进来。我在配置完第一个Skill之后,立刻意识到它本质上是一个"家里的自动化总中枢",AI助手只是它的最简单形态。
1.3 算力怎么来:只调云API,还是接本地模型
这是新手最容易搞混的问题。OpenClaw本身不提供算力,它只是编排框架,真正的"脑子"要么来自云API,要么来自本地部署的模型。
先说结论:树莓派本地跑大语言模型,性能天花板很低。不要被"树莓派本地部署大语言模型"这种标题骗了,在树莓派5上跑7B量化模型,生成速度大约每秒几个token,用来做实验可以,做生产级响应根本受不了。但本地模型并非一无是处,它不需要网络、数据不出门、响应隐私要求高的场景,本地模型是唯一选择。
云API路线刚好相反,速度快、模型聪明,但需要联网,而且按token计费。OpenClaw的设计很聪明,它支持不同的模型提供者,你可以同时配置多个,根据场景切换。我在实际部署中采用的是"混合策略":日常闲聊和简单任务走本地小模型,复杂推理和工具调用走云API,这样既控制了成本,又保证了响应速度。关于"OpenClaw只能用接入API的方式使用算力吗"这个疑问,答案是否定的,它对接本地模型完全没问题,只是你得好好的调参数,这一点我在第4章详细展开。
2. 搭建部署环境:系统、换源与运行时
2.1 从烧录系统到SSH登录
树莓派的系统安装,我推荐直接用Raspberry Pi Imager,它比手动dd镜像靠谱得多,尤其是内置了SSH开关和WiFi配置功能。烧录时我选择的是Raspberry Pi OS Lite(64位),不要装Desktop版,纯命令行环境比带桌面版少占几百MB内存,对服务器用途来说更干净。
烧录时有三个细节容易出问题。第一,Imager设置里有一项"Enable SSH"必须在烧录前打开,否则你插上电只能接显示器键盘操作。第二,WiFi配置要写对,国家选CN,频道等参数保持默认。第三,主机名不要用默认的raspberrypi,改成你以后好记的名字,比如aibot,这样后续访问时省很多事。
第一次开机之后,我习惯直接找到路由器的DHCP列表看树莓派拿到了什么IP,然后用SSH连上去。如果你不小心没开SSH,还有一个兜底办法:把TF卡重新插回电脑,在boot分区里新建一个名为ssh的空文件,再插回树莓派启动,SSH就会自动开启。这个方法在社区里流传很久了,非常管用。
2.2 换树莓派的系统源和软件源
树莓派默认的软件源在国外,国内网络环境下装软件经常卡到怀疑人生,所以拿到系统第一件事就是换源。换源分两层:一是apt源,也就是系统软件包的下载源;二是pip源,也就是Python包的下载源。OpenClaw依赖大量Python包,pip源不换的话,你会在装依赖那一步耗掉一晚上。
apt源我习惯用清华源。改法很简单,编辑/etc/apt/sources.list,把默认的deb.debian.org替换成mirrors.tuna.tsinghua.edu.cn。注意树莓派OS新版本基于Debian trixie,如果源里带了nobackports之类的后缀,不要删,那是官方特意加的。改完执行sudo apt update,如果看到一堆“跳过”或者404,大概率是删错了后缀,恢复原样重改一次就好。
pip源同理,编辑~/.pip/pip.conf,写入index-url = https://pypi.tuna.tsinghua.edu.cn/simple。全程用国内源之后,装依赖的速度从一个多小时缩短到十几分钟,这个对比极其悬殊。别在这上面将就,源不换,后面每个步骤都会跟着难受。
2.3 安装Git、Python与Docker
OpenClaw的运行依赖Python 3.11及以上,树莓派OS Lite自带的Python版本够用。不过我不建议直接用系统Python装项目依赖,强烈推荐用venv虚拟环境,或者直接用Docker部署。
我两次部署试过不同方案。第一次裸装,用python3 -m venv venv建虚拟环境,然后一切正常。第二次用Docker,发现配置文件的多级挂载比较啰嗦,而且日志查看不如裸装直接。对于前端新手,我建议走venv路线,逻辑更直观,出问题也好排查。
Git和基础工具先装好:
sudo apt update && sudo apt install -y git curl wget htop python3 -m venv ~/openclaw-env source ~/openclaw-env/bin/activate这里有一个坑值得单独说:树莓派的内存有限,编译某些Python扩展包时容易卡死。如果装包时出现Killed字样,多半是内存不足。解决办法是临时扩大swap,默认的100MB swap根本不够,我改成了2GB: 修改/etc/dphys-swapfile里的CONF_SWAPSIZE=2048,然后sudo systemctl restart dphys-swapfile。装完依赖后再改回512MB就够用了。这个小技巧我常跟人说,因为大多数人在树莓派上装AI项目翻车,都是栽在内存这条沟里。
3. 安装OpenClaw与首次初始化
3.1 获取项目代码与安装依赖
OpenClaw的安装方式很标准,从官方仓库把代码clone到本地,然后在虚拟环境里装依赖。我用的命令是:
git clone https://github.com/your-openclaw-repo/openclaw.git ~/openclaw cd ~/openclaw source ~/openclaw-env/bin/activate pip install -e .装依赖这里我要多说两句。pip install -e .会读取项目里的setup.py或pyproject.toml,把全部依赖拉下来。如果你用的是树莓派4或者内存较小的设备,建议先只装核心依赖,跳过文档构建和可选加速包,等跑通了再逐个补。日志里看到Successfully installed列表里出现一堆包名,这步才算完成。
有个细节是:OpenClaw依赖的uvloop、pydantic这类包在arm64架构上编译时间较长,期间CPU温度会明显升高。装依赖时看下温度,如果超过80度,给树莓派加个小散热片或者风扇再继续,不然可能编译中断。我的树莓派5自带散热风扇,但默认风扇策略比较保守,温度到60度才开始加速,我在后面配置了更激进的风扇策略,编译期间明显稳很多。
3.2 初始化配置:一个最小可用的配置文件
OpenClaw的主配置文件是config.yml,在项目根目录下。首次运行前会要求初始化,一般命令是:
openclaw init --config ./config.yml这个命令会生成一个可编辑的配置模板,内容包括模型接入参数、系统人设、Skill启停、日志级别、端口号等。我贴一个最简配置的核心片段,注意把API Key和模型名称替换成你自己的:
system: name: "my-ai-assistant" persona: "你是一个住在树莓派上的AI助手,回答简洁、务实,善用工具。" model: provider: "openai" base_url: "https://api.openai.com/v1" api_key: "sk-your-key" model_name: "gpt-4o-mini" temperature: 0.3 max_tokens: 2048 server: host: "0.0.0.0" port: 8787 auto_start: true skills: enabled: []这段配置没有启用任何Skill,只保证助手能对话。host设为0.0.0.0是为了让局域网内其他设备能访问,如果你只想本机访问,改成127.0.0.1即可。temperature我故意调低到0.3,因为AI助手做工具调用和指令执行时,温度太高容易发挥不稳定,回答飘。如果你拿它做创意写作,可以再调高,但作为常驻服务,稳定优先。
3.3 验证服务是否正常启动
配置好之后,先别急着加入复杂功能,跑一个最小的启动验证:
openclaw start --config ./config.yml看到日志输出Uvicorn running on http://0.0.0.0:8787,说明服务已经起来了。这时再开另一个终端窗口,用curl测一下对话接口:
curl -X POST http://localhost:8787/v1/chat -H "Content-Type: application/json" -d '{"message": "你好,简单介绍一下你自己"}'正常的响应会带上一段JSON结构,里面有助手的回复内容。如果curl返回空或者Connection refused,先去检查配置文件里server.host和port是否有语法错误,再看虚拟环境是否激活——这两个问题占了启动失败的大部分原因。
我第一次启动时遇到的坑是pydantic版本冲突,启动直接报ModuleNotFoundError。解决方法是看错误栈里缺哪个包,手动pip install 包名==版本号补上。都不用慌,OpenClaw的依赖问题基本都能通过重新安装依赖解决。
4. 让助手变聪明:模型接入与Skill扩展
4.1 对接Ollama本地模型
之前提到OpenClaw支持本地模型,最常见的方案就是对接Ollama。Ollama是一个极简的本地模型运行工具,在树莓派上跑小模型很方便。安装方式一行命令:
curl -fsSL https://ollama.com/install.sh | sh装完以后拉取一个适合树莓派性能的模型。我用的是qwen2.5:3b量化版,它在树莓派5上的生成速度大约每秒8到10个token,属于可以接受的范围。拉取命令:
ollama pull qwen2.5:3b ollama run qwen2.5:3b "你好"确认本地模型能正常对话之后,回到OpenClaw的配置,把模型provider改成ollama:
model: provider: "ollama" base_url: "http://localhost:11434/v1" api_key: "ollama" model_name: "qwen2.5:3b"注意Ollama默认的API地址是http://localhost:11434,路径上OpenClaw一般会自动补上/v1。如果启动后提示模型不存在,检查model_name是否和ollama list输出的名字完全一致,包括冒号和标签。
这里也解释一下"OpenClaw只能用接入API的方式使用算力吗":它对接Ollama本质上也是走HTTP接口,但算力完全在你本机,不产生一分钱API费用。区别在于模型质量差异很大,3B参数的模型和云端百B参数模型在复杂任务上的表现有断层,这也是我采用混合策略的根本原因。
4.2 云API接入与本地模型的切换策略
OpenClaw支持在配置文件里同时定义多套模型配置,按路由规则切换。我的设置是:默认走本地模型,当Skill需要调用工具或者处理长文本时,走云API。核心思路是手动指定两个prompt规则:简单问答匹配本地模型,带工具调用的请求匹配云模型。
如果你用的模型平台兼容OpenAI格式,接入就很简单,只需要改三个字段:base_url、api_key、model_name。很多国内模型服务都是compatible模式,直接把base_url改成对应服务地址即可。
切换策略有个注意点:不要在同一轮对话里频繁切换模型,OpenClaw的上下文是跟着会话走的,你切了模型但上下文还带着上一轮的格式,回复容易乱。我的经验是日常单轮对话固定用本地模型,涉及Skill执行的对话固定用云模型,避免混用。
4.3 动手写一个能落地的Skill
OpenClaw真正值钱的地方是Skill。Skill本质上是一个定义好的工具函数,告诉模型"我可以做什么",然后模型在合适的时候自动调用。官方自带一些Skill,比如查天气、RSS订阅、定时任务。我这次自己写了一个"家庭服务器状态查询"的Skill,实现了随口一问就能看到树莓派CPU温度、内存使用率和磁盘剩余空间。
一个最小的Skill包含两部分:一个描述文件和一段Python执行代码。描述文件是YAML格式,写上技能名称、描述和参数定义;执行代码就是普通的Python函数。我给个简化示例:
name: sys_status description: "查询树莓派的系统状态,包括CPU温度、内存、磁盘、负载" parameters: type: object properties: {}对应的Python代码写入同一目录下的sys_status.py:
import os, psutil def run(): temp = os.popen("vcgencmd measure_temp").read().strip() mem = psutil.virtual_memory() disk = psutil.disk_usage("/") return { "temperature": temp, "memory_percent": mem.percent, "disk_percent": disk.percent, "load_avg": os.getloadavg(), }把这两个文件放到OpenClaw的skills目录下,设置里启用它,然后重启服务。之后问助手"树莓派状态怎么样",它会先判断该调sys_status这个函数,再根据返回的数据组织语言回答。这一刻你会明显感受到:这个助手不是复读机,它在真正干活。
4.4 语音输入:把Whisper接进来
纯文字对话在手机和电脑上够用,但如果想让树莓派助手成为一个真正的家庭语音入口,语音转文字是绕不开的一环。在本地部署Whisper服务,比云语音识别更适合树莓派场景,原因很简单:语音是实时流,走云端延迟抖动明显,本地处理反而稳定。
最轻量的方案是用faster-whisper,它比原版Whisper快很多,而且有arm64架构的预编译包。安装依赖后启动一个小服务:
pip install faster-whisper python -m faster_whisper_server --model small --host 0.0.0.0 --port 9900然后在OpenClaw的Skill里加一个语音处理入口,上传一段录音,调用Whisper服务返回文字,再把文字交给主对话模型。注意small模型在树莓派5上转一段10秒语音大约需要3到5秒,属于可接受范围。想更快就换tiny模型,但识别精度会下降。这个扩展做出来后,配合一个USB麦克风,树莓派就能变成一个家庭语音问答盒子,成本不超过三百块。
5. 24小时在线的关键:远程访问与稳定性保障
5.1 局域网外访问树莓派
树莓派放家里,出门也想用,就得解决远程访问问题。我的建议是优先用开源的内网穿透方案,比如frp搭配一台有公网IP的小服务器,或者用ZeroTier/Tailscale做虚拟组网。这两条路我都试过,结论是:家里网络条件好、路由器可以端口转发的,用frp;经常在不同网络环境下切换的,用ZeroTier省心。
我想特别提醒新手:不要直接改路由器把8787端口映射到公网。除非你非常懂安全配置,否则树莓派默认的登录机制和API鉴权扛不住公网扫描。我在配置完frp之后,把OpenClaw的server.host仍然保持内网地址,只通过frp暴露,同时在应用层加上token鉴权。这个双重保险保了我后面很多事。
frp的配置也简单,我贴一个我实际用的客户端部分:
[common] server_addr = your-server-ip server_port = 7000 [openclaw] type = tcp local_ip = 127.0.0.1 local_port = 8787 remote_port = 8787启动frpc之后,在外网输入你的服务器IP:8787就能访问到家里的树莓派。注意远程访问的延迟一定比局域网高,这是物理限制,别指望外网调用任务能像本地一样丝滑。
5.2 systemd守护与开机自启
一个7×24小时的助手,最怕的就是服务进程意外退出后没人拉它起来。我建议把OpenClaw做成systemd服务,而不是手动nohup后台跑。systemd的好处是开机自动启动,崩溃自动拉起,还能记录标准日志。
我在/etc/systemd/system/openclaw.service里写的配置:
[Unit] Description=OpenClaw AI Assistant After=network.target ollama.service [Service] Type=simple User=pi WorkingDirectory=/home/pi/openclaw ExecStart=/home/pi/openclaw-env/bin/openclaw start --config /home/pi/openclaw/config.yml Restart=always RestartSec=10 Environment=PYTHONUNBUFFERED=1 [Install] WantedBy=multi-user.target写完后执行sudo systemctl daemon-reload && sudo systemctl enable openclaw --now。以后不管树莓派断电恢复还是进程崩溃,系统都会自动拉起服务。这个配置里RestartSec=10我有意留了10秒缓冲,避免服务崩溃后立刻重启导致连续失败,陷入重启风暴。
5.3 断电恢复与内存优化
树莓派毕竟不是服务器硬件,断电重启是常态。为了让重启后一切自动回到可用状态,除了systemd之外,还需要处理两个隐患:一是文件系统损坏,二是内存不足。
文件系统方面,我在/etc/fstab给关键分区加了noatime选项,减少写盘次数。扩展分区和SSD硬盘之间,建议手动挂载而不是依赖自动挂载,同时确保挂载点在OpenClaw启动前就已就绪。你可能觉得这些操作麻烦,但经历过一次重启后服务起不来、查了半天发现是硬盘没挂载的教训,你就不会再省这一步了。
内存方面,树莓派5的8GB版本相对宽裕,但运行Ollama加OpenClaw依然紧张。我在Ollama的启动参数里限制了模型最多使用4GB内存,给OpenClaw留足余量。另外给系统增加2GB swap,作为突发流量下的缓冲。这些细节叠加起来,我在实际运行的一个月里,中途OOM没有发生过一次。
5.4 散热和功耗:树莓派风扇转速调校
长期运行最容易被忽略的就是散热。树莓派5原装风扇是温控的,但默认策略偏保守,CPU到60度才开启全速。高频访问时温度偶尔冲到80度以上,风扇嗡嗡响但降温效果一般。后来我改了/boot/firmware/config.txt里的风扇控制参数,把触发温度下限调到50度:
dtparam=fan_temp=50000,fan_temp_hyst=10000改完之后风扇会更频密地低速运转,温度稳定在55度左右,噪音反而比忽快忽慢的全速风噪更低。树莓派的GPIO引脚图可以在官方文档里查到,如果你想自己外接风扇做PID控制,也可以直接用PWM引脚编程实现。我实测下来,官方原装风扇加合理温控策略,对于OpenClaw这种负载已经绰绰有余。
功耗方面,树莓派5满载大约10W出头,待机不到4W,比一台N3050小主机省电多了。这也是我坚持用它而不是x86迷你主机的核心理由——24小时开一个月,电费几乎可以忽略不计。
6. 高频问题排查实录
6.1 换源后软件装不上怎么办
换源之后最常见的问题是apt update出现404,多半是源地址里混入了Debian新版本的仓库路径,而树莓派OS有几个软件包只放在自己的源里。解决方法是先恢复原厂配置,确认能update,再换源时用nano编辑把bookworm替换为trixie时不要多删字符。我踩过最深的坑是手滑删掉了nobackports后缀,结果apt源里查不到包。恢复方法:把这一行改回deb https://deb.debian.org/debian trixie main contrib non-free non-free-firmware,再换源。
6.2 内存不足OOM
症状是服务运行一段时间后突然掉线,日志里出现Killed process。排查先看htop,确认哪些进程占内存最多。大概率是Ollama的模型占满内存,然后系统把OpenClaw杀了。解决办法是给Ollama模型设置内存上限,或者减少max_tokens。注意max_tokens不仅影响单次回复长度,还影响推理时显存/内存的占用峰值,云端API没这个问题,本地模型必须调。
6.3 模型加载超时或连接拒绝
这种情况大多不是模型的问题,而是服务启动顺序不对。Ollama还没完全加载模型时,OpenClaw就去请求,自然连接拒绝。我的解决办法是在systemd配置里用After=ollama.service声明顺序,并给OpenClaw的RestartSec留够缓冲。如果你发现curl localhost:11434有响应,但OpenClaw内部报超时,检查一下base_url是否以/v1结尾,这是最容易漏的。
6.4 远程页面打不开
从外部访问时打不开,优先排查三件事:frpc进程是否活着、服务器安全组是否放行端口、本地防火墙是否拦截。在我实际排查中发现,很多人卡在最后一步:树莓派内部的ufw默认拒绝所有外部连接,而frp的流量是从本地端口出去的,ufw会拦住。执行sudo ufw allow 8787就好。如果还是不行,在frpc那台机器上执行curl http://127.0.0.1:8787/,先确认本地服务没挂,再往链路外面找。
6.5 风扇噪音大或完全不转
树莓派5的风扇问题分成两种。一种是一直全速转,吵得不行;另一种是温度已经70度了还不转。都和config.txt里的风扇策略有关。直接改dtparam=fan_temp=50000,fan_temp_hyst=10000可以解决大部分噪音问题。如果想更精细,可以装rpi-fan-control这类脚本,根据CPU负载动态调整PWM占空比。我个人的经验是官方风扇胶垫用久了会老化松动,震动变大,换一套新的散热套装能明显降噪。
写了这么多,最后说点实际体会。树莓派跑OpenClaw这件事,真正有意思的不是让它能聊天,而是把它变成一个长期在线、还能干活的"家庭成员"。我后来扩展了几个实用Skill:每天早上自动检查家里的NAS磁盘空间、监控局域网内设备在线状态、甚至对接了一个简单的定时任务提醒系统。这台小机器的价值,会在你习惯它存在之后慢慢体现出来。
踩过几次坑之后,我最深的感受是:树莓派算力小不是问题,问题是你愿不愿意在硬件约束下做取舍。本地模型加云API的混合策略、合理的内存上限、可靠的开机自启,这三件套做好之后,这台没用几百块的开发板完全可以扛起一个家庭AI助手的担子。如果你正好手头有闲置的树莓派,这周末就可以试起来。