最近我把 OpenClaw 在本地完整部署了一遍,同时把飞书机器人接了进来,整个链路从“能跑”到“好用”折腾了大概一个周末。今天这篇就把整套流程,包括 Windows 下的 WSL2 环境、模型通道配置、飞书开放平台的机器人接入、回调地址处理,以及我踩过的几个典型坑,一次性写清楚。
先说结论:OpenClaw 是一个开源的个人 AI 助手网关/调度框架,你可以把它理解成一个“大脑的接线员”——后面接任意大模型(Ollama、OpenAI 兼容接口、魔搭推理服务等),前面接任意消息渠道(飞书、微信、Telegram、终端、Web),中间还能挂工具调用、定时任务、文件处理这些能力。这篇指南适合三类人:想用本地大模型做个真正能聊天的飞书机器人的人、被openclaw could not safely verify the wsl2 environment这类报错卡住的人、以及正在纠结“本地部署到底怎么选模型、怎么配回调”的开发者。
1. OpenClaw 到底能干什么:先搞清楚再动手
动手部署之前,我强烈建议你先理解 OpenClaw 在整套系统里扮演什么角色。否则你很容易把它当成“又一个聊天机器人项目”,然后部署完发现它怎么连个界面都没有,直接懵。
1.1 一个“AI 助手调度中枢”的定位
你可以把 OpenClaw 想成公司里的总机接线员。它自己不产生回答,也不存知识,它只干三件事:接收消息、调度大脑、把结果送回消息渠道。
- 消息端:飞书、微信、Telegram、命令行,甚至是 Webhook,都是它的“电话线”。
- 大脑端:本地 Ollama、OpenAI 兼容接口、魔搭 ModelScope 推理服务,谁在线就用谁。
- 工具端:定时任务、文件读写、命令执行、外部 API 调用,这些都是它“手里的分机”。
这种设计最大的好处是解耦。你换模型不用动消息渠道,换消息渠道不用动模型配置。我一开始只接了 Ollama 跑本地模型,后来想试试云端接口,改一个配置文件里的 provider 就行,完全没有动飞书那边的任何东西。
1.2 本地部署的意义:数据、成本、可控
我知道很多人会问:飞书本身不是有 AI 机器人吗?为什么还要自己本地部署一套?核心差异在于三点。
第一是数据私密性。走飞书官方 AI 或者云端大模型接口,你的对话内容会经过第三方服务。本地部署意味着所有聊天记录和模型推理都发生在你自己的机器上,对内部沟通、代码片段、敏感信息这类场景非常重要。
第二是成本可控。本地模型跑起来之后,调用次数基本不花钱,只有电费。我用一块 16G 显存的卡跑 14B 模型,日常问答完全够用,一个月电费也就是几十块。如果走云端 API,按 token 计费,团队里几个人高频用,一天下来就是不小的数目。
第三是可控性。OpenClaw 是开源框架,你可以改它的调度逻辑、加自定义工具、调整系统提示词。官方机器人能给什么功能、不能给什么功能,那是别人说了算的;自己部署,所有边界都是自己定义。
1.3 典型使用场景
从热词里能看到,现在大家最常玩的是这几个方向:
- 在飞书群里直接问本地模型,比如“总结一下这个群今天的讨论”“帮我写一段 Python 脚本”——这是最基础、也是我自己用得最多的场景。
- 让机器人主动干活,比如每天早上定时推送天气、待办、代码仓库动态,这个后面进阶部分细讲。
- 把 Codex CLI 这类编程代理接到飞书群——群里有同事发任务,Agent 在后台执行,执行完把结果贴回群里。这就是典型的“人机协作”玩法。
2. 部署前必须想清楚的四件事
我开始部署的时候就是吃了没提前规划环境的亏,装到一半发现 Python 版本不对,换完 Python 又发现 WSL2 内核没更新。所以这篇我特意把环境准备放在最前面,你照着走可以少走很多弯路。
2.1 跑在哪个环境:Windows、macOS 还是 Linux
这三个平台我都试过,体验差异非常大。
Linux 是最省心的,Ubuntu 22.04 或者 Debian 12 都可以,依赖一装就能跑,OpenClaw 的设计思路也是以 Linux 为第一优先级的。如果你的主力机是 Linux,直接跳到 2.2 节。
macOS 也能跑,Apple Silicon 机型用 Ollama 跑 7B/8B 模型效果不错,但显存(统一内存)有限,跑 14B 以上模型会比较吃力。部署本身没什么大坑,就是注意 Python 要用 3.10 以上版本,别用系统自带的旧 Python。
Windows 是最折腾的,官方推荐通过 WSL2 来跑,因为 OpenClaw 内部很多进程管理和网络通信逻辑在原生 Windows 环境下会出现奇奇怪怪的问题。我在 Windows 11 上部署时遇到的最典型报错是:
openclaw could not safely verify the wsl2 environment.这个问题第 5 节我会专门讲怎么排查。现在你只需要知道:Windows 用户先确认 WSL2 环境是好的,再装 OpenClaw,顺序不能反。
2.2 大模型后端怎么选
OpenClaw 本身不打包模型,你需要自己提供一个“模型来源”。我的建议是,先想清楚你的硬件条件,再决定用哪种后端。
有 N 卡且显存 ≥ 8G 的,直接用 Ollama 拉本地模型,这是性价比最高的方案。显存 16G 可以跑 14B 模型,32G 以上可以尝试 32B 模型。卡不行的就别硬撑,配一个 OpenAI 兼容接口,把 base_url 指到云端服务商,一样能玩。
我自己的配置是 Ollama + qwen2.5:14b,日常问答和代码生成都够用。如果你需要更强的推理能力,可以接 DeepSeek 系列,或者用魔搭 ModelScope 的推理服务,OpenClaw 支持配置第三方兼容接口,魔搭上很多模型可以直接用 OpenAI 兼容模式调用。
这里给你一个简单的模型选型参考表:
| 硬件条件 | 推荐模型 | 适用场景 |
|---|---|---|
| 8G 显存 | 7B/8B 量化模型 | 日常问答、简单代码 |
| 16G 显存 | 14B 量化模型 | 综合能力较强,兼顾质量和速度 |
| 32G 以上显存 | 32B 量化模型 | 复杂推理、长文本处理 |
| 无独立显卡 | 云端 API 接口 | 任何场景,按需付费 |
2.3 依赖组件清单
部署前把依赖装齐,能省掉一半的排查时间。我的经验是把下面这些东西都准备好再动手:
- Python 3.10 以上版本,最好用 3.11 或者 3.12。
- Git,从源码安装时要用。
- WSL2(仅 Windows 用户需要),并且确认默认发行版是 Ubuntu 或者 Debian。
- Docker(可选),如果你不想污染本机环境,可以直接用镜像跑。
- 一个内网穿透工具,比如 cloudflared、ngrok 或者 frp。接飞书回调时必须有一个公网可访问的 HTTPS 地址,这个后面细说。
- Redis(可选),如果 OpenClaw 版本用到了任务队列或者缓存,Redis 会是依赖项之一,具体看官方文档。
2.4 API 密钥和凭证:提前备齐
部署过程中最大的卡点其实是各种凭证没提前准备好。
Ollama 本地模型不需要密钥,这部分最省事。如果你要用 OpenAI 兼容接口,需要去对应服务商的后台生成 API Key,注意很多平台的 Key 只显示一次,要立刻保存。魔搭 ModelScope 的推理服务也需要在控制台获取 API Key。
飞书那边需要准备的东西更多:企业自建应用的 App ID、App Secret、事件订阅的 Encrypt Key 和 Verification Token。这些不是部署 OpenClaw 时就能生成的,必须先到飞书开放平台创建应用、开通机器人能力、配置事件订阅,才能拿到完整凭证。第 4 节我会一步步带你配。
注意:API 密钥和 Secret 一定不要提交到 Git 仓库,也不要写在 Dockerfile 里。我见过有人把 App Secret 直接写在配置文件里推到 GitHub 公开仓库,结果被爬虫扫到,机器人直接被别人接管了。
3. 本地部署完整实操:从零到跑通
环境想清楚之后,下面就开始正式部署。我先说 Windows + WSL2 的路径,因为这条路径坑最多,讲透它,其他平台基本都能举一反三。
3.1 Windows 下 WSL2 环境准备与“could not safely verify”报错
在 Windows 上部署 OpenClaw,第一步不是装 Python,而是把 WSL2 准备好。我用的是 Windows 11,安装命令非常简单:
wsl --install装完之后把默认版本设置成 2:
wsl --set-default-version 2然后确认一下当前发行版的版本:
wsl -l -v输出里 NAME 列应该显示你的发行版名称,VERSION 列必须显示 2。如果显示的是 1,说明你的 WSL 内核版本不够,需要更新:
wsl --update更新完再执行wsl -l -v确认。这一步做完,再进入 WSL 环境安装 OpenClaw,openclaw could not safely verify the wsl2 environment这个报错基本就不会再出现了。
这个报错本质上是 OpenClaw 启动时检测不到一个“安全可信”的 WSL2 运行环境。它检测的内容大概包括:WSL 内核版本、默认版本是否设置为 2、是否有可用的默认发行版。任何一项不满足,它都会拒绝继续执行。我第一次遇到这个报错时,就是 WSL 装了但内核版本太老,wsl --update之后立刻就好了。
3.2 安装主程序与初始化配置
进入 WSL 环境后,推荐用 pip 安装:
pip install openclaw如果你想用最新开发版,也可以从源码装:
git clone https://github.com/openclaw/openclaw.git cd openclaw pip install -e .装完之后,初始化配置目录:
openclaw init这个命令会在~/.openclaw/下生成配置文件,默认是config.yaml。打开这个文件,你会看到它已经预留了平台(platforms)和模型(llm)两大块配置,接下来要做的就是往里面填内容。
3.3 模型通道配置:以 Ollama 为例
我先把 Ollama 装好并拉取模型:
curl -fsSL https://ollama.com/install.sh | sh ollama pull qwen2.5:14b然后编辑~/.openclaw/config.yaml里的模型部分:
llm: provider: ollama base_url: "http://localhost:11434/v1" model: "qwen2.5:14b" temperature: 0.7 max_tokens: 2048如果你用的是 OpenAI 兼容接口,改成这样:
llm: provider: openai base_url: "https://your-api-endpoint.com/v1" api_key: "sk-xxxx" model: "deepseek-chat"魔搭 ModelScope 同理,只要服务商提供 OpenAI 兼容端点,就改base_url和api_key即可。这个设计非常方便,切换模型后端像换插头一样。
3.4 跑起来的第一条消息:控制台自测
配置文件填好之后,先别急着接飞书,先在命令行验证整个链路是通的:
openclaw chat然后输入“你好”,看模型是否能正常返回。这一步能帮你把“模型配置问题”和“平台接入问题”切分开来。如果控制台自测都失败,先排查模型配置;如果控制台正常但飞书不回复,再排查飞书回调。
我第一次部署时就是跳过了这步,直接接飞书,结果机器人在群里怎么都不回消息。排查了半天,最后发现是 Ollama 服务没启动。如果先做控制台自测,这个问题一分钟就能定位。
4. 飞书接入:从零创建一个能聊天的机器人
飞书接入是整套系统里最有成就感、也最容易出问题的一环。难点不在于 OpenClaw 的配置,而在于飞书开放平台那些“你必须自己点出来的按钮”。
4.1 飞书开放平台建应用,开通机器人权限
打开飞书开放平台,登录后进入开发者后台,点击“创建企业自建应用”。名字随便起,比如“本地 AI 助手”。创建完成后,你会进入应用详情页。
第一步是开通机器人能力。在“应用能力”里找到“机器人”,点击开启。这个能力不开启,你的应用就没有“机器人”这个身份,群里也就搜不到它。
第二步是配置权限。在“权限管理”里搜索并开通以下权限:
im:message:读取和发送消息。im:message:send_as_bot:以机器人身份发送消息。im:chat:readonly:读取群信息(如果有群管理需求再开)。
权限开完之后,关键一步是发布版本。在“版本管理与发布”里创建一个版本,填上版本号,提交发布。如果只是自己用,审核会很快;如果是在企业组织里,需要管理员审批。不发布版本的话,权限是不会生效的,这一点很多人会漏掉。
4.2 事件订阅与回调地址:内网穿透怎么选
机器人要能“收到消息”,必须让飞书知道“有新消息时往哪里推”。这个推送地址就是事件订阅的回调地址。
在“事件与回调”里,添加事件,选择im.message.receive_v1,也就是“接收消息”事件。飞书要求这个回调地址必须是公网可访问的 HTTPS 地址。
本地开发环境没有公网地址怎么办?用内网穿透工具。我试过两种方案,体验上 cloudflared 的免费额度更舒服,ngrok 胜在配置简单。用 cloudflared 启动一个临时隧道:
cloudflared tunnel --url http://localhost:8080它会生成一个https://xxx.trycloudflare.com的地址,把这个地址填到飞书回调配置里,再在 OpenClaw 里配置对应的回调路径,就能打通。注意飞书回调地址要求路径和你本地服务路由一致,比如:
https://xxx.trycloudflare.com/openclaw/feishu/callback这里有一个容易踩的坑:飞书会验证回调地址的可用性,验证机制是向你的回调地址发送一个 POST 请求,里面带challenge字段,要求原样返回。OpenClaw 会自动处理这个验证逻辑,你不需要自己写,但前提是你的 OpenClaw 服务必须在公网隧道里能访问到。如果你启动隧道之后飞书还是报“回调地址验证失败”,先 curl 一下你的公网地址,确认服务真的通。
4.3 OpenClaw 里的飞书配置项逐一说明
打开~/.openclaw/config.yaml,在 platforms 下加飞书配置:
platforms: feishu: app_id: "cli_xxxxxxxx" app_secret: "xxxxxxxx" encrypt_key: "xxxxxxxx" verification_token: "xxxxxxxx" callback_path: "/openclaw/feishu/callback"app_id和app_secret在飞书开放平台应用的“凭证与基础信息”里可以找到。encrypt_key和verification_token在“事件与回调”页面里,如果开启了“加密策略”,飞书会给你 Encrypt Key;Verification Token 是明文校验用的,建议都填上,多一层校验多一层安全。callback_path要和你在飞书填的回调 URL 路径一致。
关于加密策略,我建议开启。飞书支持对回调事件进行 AES 加密,开启后即使回调地址被泄露,攻击者没有 Encrypt Key 也解不开事件内容。OpenClaw 会自动处理解密,你只需要把 Encrypt Key 填进配置。
4.4 联调测试:在飞书里 @ 机器人
配置全部填好后,启动 OpenClaw 服务:
openclaw serve看到日志里输出“feishu platform started”之类的信息,就说明平台接入成功了。然后打开飞书,搜索你的应用名称,找到机器人,拉到一个群里,输入“你好”,并 @ 它。
正常的链路应该是这样的:
- 飞书收到消息,POST 到你的公网回调地址。
- OpenClaw 的飞书平台模块接收到事件,解析消息内容。
- OpenClaw 把消息交给 LLM 模块,调用本地模型生成回答。
- 回答通过飞书 API 发送回群聊。
我在联调时最容易出问题的点是第 4 步——“机器人没有发消息权限”。明明前面开了im:message:send_as_bot,也发布了版本,但机器人还是发不出消息。后来发现是发布版本后没有等待生效,重新发布一次就好了。
5. 常见问题与排查技巧实录
这一节是我最想写的内容。前面那些步骤网上都能搜到,但真正部署过程中踩的坑,很多是文档里不会写的。
5.1 “OpenClaw 能发消息微信,但微信发消息没回复”怎么排查
热搜词里有“openclaw能发消息微信.但微信发消息没回复”,这确实是个高频问题。
先说结论:这个问题的根源几乎都在“消息回调链路”,而不是模型。OpenClaw 能发消息,说明它已经拿到了微信侧的发送凭证;但微信发消息没回复,说明 OpenClaw 根本没有收到“新消息”这个事件。
常规的排查顺序是这样:
- 看 OpenClaw 日志:你给机器人发消息后,日志里有没有“receive message”之类的输出。如果有,说明回调正常,问题在后续处理链路。
- 如果有日志但没回复,重点查模型状态:手动在控制台跑一次
openclaw chat,看模型能不能正常返回。 - 如果完全没日志,说明回调根本没进来。检查微信侧的“接收消息”回调配置,确认回调地址是否填写正确、是否公网可达。
这里我也要提醒一句:个人微信的自动化接入本身就存在账号风控风险,官方并不支持这种用法,长期挂机很容易被限制登录。如果是团队场景,我更推荐用飞书或者企业微信这类提供官方开放平台的渠道,稳定性完全不是一个量级。
5.2 “could not safely verify the wsl2 environment”完整处理流程
这个报错我在第 3.1 节提过,这里把完整处理流程整理成速查表:
| 处理步骤 | 命令/操作 | 验证方法 |
|---|---|---|
| 升级 WSL 内核 | wsl --update | 无报错即成功 |
| 设置默认版本为 2 | wsl --set-default-version 2 | 输出提示操作完成 |
| 检查发行版版本 | wsl -l -v | VERSION 列显示 2 |
| 重启 WSL | wsl --shutdown,重新进入 | 正常进入发行版 |
| 重启 Windows(必要时) | 重启后再进 WSL | 环境恢复正常 |
需要注意的是,这个报错还有一种隐藏可能性:杀毒软件拦截了 OpenClaw 对 WSL 环境的检测。如果你系统里装了安全软件而且以上步骤都正常但报错依旧,可以临时退出安全软件试试,能跑通了再考虑加白名单。
5.3 飞书机器人不回消息的排查顺序
飞书接入后不回消息,原因比微信那边更集中一些,基本逃不出这四个位置:
第一,回调没到服务器。看 OpenClaw 日志,如果有请求进来但校验失败,日志里会带错误信息。第二,加密策略配置不一致。飞书侧开启加密后,OpenClaw 侧必须填对 Encrypt Key,否则解密失败,消息会被静默丢弃。第三,模型响应超时。本地模型推理慢,飞书对回调响应有超时要求,如果模型超过时间没返回,飞书会认为回调失败并重试,重试堆积会导致更多超时。第四,发送权限不足。机器人没有send_as_bot权限,或者应用版本未发布,都会导致“能收到你的消息但发不出回复”。
我分享一个自己的经验:如果你发现飞书机器人偶尔回、偶尔不回,多半是模型超时,而不是配置问题。把模型换成更小的量化版本,或者调低max_tokens,症状会明显缓解。
5.4 模型回答慢或总是超时
本地部署最影响体验的就是速度。我实测下来,同一个 14B 模型,在 16G 显存下不量化大概每秒只能生成十几个 token,对话还行,但稍微长一点的回答就会感觉到明显等待。
解决办法有三个方向:
- 降模型规模:日常聊天用 7B/8B 就够,14B 留给复杂任务。
- 用量化版本:Ollama 标签里的
q4_k_m这类量化格式能显著降低显存占用,提升速度。 - 控制上下文长度:在 OpenClaw 配置里把
max_tokens调低,同时在飞书侧设置合适的回调超时时间,避免生成长文本时被判定超时。
5.5 卸载和重装
如果你配置改坏了想重新来过,卸载过程也很简单:
pip uninstall openclaw rm -rf ~/.openclawDocker 部署的话,把容器和 volume 删掉即可:
docker rm -f openclaw docker volume rm openclaw_data网上热词里有“openclaw本地一键部署”,部分版本确实提供了一键安装脚本,但我建议你至少手动走一遍init流程,因为你只有在手动配置的过程中,才会真正理解每个配置项是干什么的。我之前就是图省事用一键脚本,结果模型配置错了都不知道该改哪里。
6. 部署完之后的进阶玩法
基础链路通了之后,整个系统才算真正属于你了。这一节分享几个我部署完之后的进阶玩法,全部亲测有效。
6.1 让机器人主动干活:定时任务
OpenClaw 支持定时任务调度。你可以让机器人每天早上 9 点自动在群里推送“今日待办”,也可以让它定时抓取某个网页的更新。
配置方式是在config.yaml里增加 tasks 段落,指定 cron 表达式和要执行的 prompt:
tasks: - name: "daily_report" schedule: "0 9 * * *" prompt: "根据最近 24 小时的群消息,整理一份工作日报,包括关键进展和待办事项。" channel: "feishu" target: "oc_群ID"这个功能的价值在于,机器人从一个“被动问答工具”变成了“主动执行的工作助理”,体验完全不一样。
6.2 多模型路由:贵模型干粗活,便宜模型干杂活
本地部署最怕的就是“一个模型打天下”。我现在的配置是双模型路由:
- 日常闲聊、简单问答走 7B 量化模型,速度快、不心疼算力。
- 代码生成、复杂推理、长文档总结走 14B 模型,质量优先。
在 OpenClaw 里可以配置不同会话类型走不同模型,或者通过特定指令触发切换。这有点像一个团队里既有初级工程师又有高级工程师,任务分派下去,谁合适谁干,资源利用率能提高一个层次。
6.3 把 Codex CLI 这类编程 Agent 接入飞书群
很多人问“codex cli 接入飞书”怎么玩。其实思路很简单:Codex CLI 是一个可以在本地执行的编程代理,OpenClaw 本身没有编程能力,但它可以调用外部工具。你只需要把 Codex CLI 封装成一个可被 OpenClaw 调用的命令工具,然后在飞书群里发任务,OpenClaw 解析任务后调用 Codex CLI 执行,把执行结果贴回群里。
我这里给一个最小的封装思路:
# /usr/local/bin/codex-run codex exec --prompt "$1" --output /tmp/codex_result.md cat /tmp/codex_result.md然后在 OpenClaw 的工具配置里注册这个命令,设定好调用权限和参数说明即可。这个玩法非常实用,等于把“人机协作”的入口搬到了即时通讯工具里。
6.4 Termux 移动端部署:无 proot 的轻量玩法
热搜里有“在安卓termux原生部署openclaw:无proot轻”,这个我也试过。Termux 是一个 Android 上的终端模拟器,OpenClaw 可以直接在里面跑,不需要 proot,相对轻量。
操作步骤大致是:在 Termux 里安装 Python、Git,用 pip 安装 OpenClaw,然后通过 cloudflared 隧道把服务暴露出去。手机端部署的意义在于:你可以把一台旧 Android 手机变成常驻的 AI 助手服务器,成本极低,而且不占桌面空间。当然性能有限,跑大模型还是得靠远端接口,但作为“消息转发中枢”完全够用。
6.5 安全加固:别让你的机器人裸奔
最后提醒一点安全建议。因为你的 OpenClaw 服务是暴露在公网上的(为了接飞书回调),所以你至少要确认以下几点:
- 飞书回调路径之外的页面不要对外暴露,最好在应用层面加一层鉴权中间件。
- 配置文件里所有密钥不要用明文写死,可以通过环境变量注入,比如
app_secret: ${FEISHU_APP_SECRET}。 - 如果部署在云服务器上,防火墙只放行必要端口,飞书回调一般只走 443/8080,其他端口能关就关。
- 定期关注 OpenClaw 上游版本更新,有安全修复就及时升级。
我个人在实际操作中最深刻的体会是:部署这种自托管项目,前 20% 的时间花在“跑通”,后 80% 的时间花在“稳定”和“安全”。不要把精力全放在炫酷的功能上,先把基础链路打磨稳,再慢慢加花样。
最后再分享一个实用小技巧:接完飞书后,先在本地日志里确认回调进来的消息格式,再决定要不要开加密策略。如果刚开始调试,建议先不开加密,等消息链路完全稳定了再开启加密并配好 Encrypt Key,这样能少踩一个变量引发的坑。我的机器人到现在已经稳定跑了一个多月,每天早上自动推送日报,群里随叫随到,这个投入产出比我个人非常满意。