1. OpenClaw 部署踩坑现场:npm 装不上、飞书插件报 spawn EINVAL
如果你正在 Windows 上折腾 OpenClaw 本地部署,并且打算把它接到飞书机器人上,那你大概率会撞上两个非常典型的坑:一个是npm i -g openclaw直接因为 Git SSH 权限失败,另一个是飞书插件安装时抛出Error: spawn EINVAL。这两个问题单独看都不算复杂,但叠在一起就很容易让人卡住半天。
OpenClaw 是一个可以在本地跑起来的 AI Agent 网关,它能对接多种模型通道,也能通过插件把飞书、Slack 这类聊天工具变成你的指令入口。适合谁?适合想在自己电脑上跑一个可控 Agent、又希望用飞书机器人当交互前端的人。它的核心价值在于:你不需要把请求直接写死在某个模型厂商的 SDK 里,而是通过统一的 settings 配置,把模型通道指向一个兼容 OpenAI 协议的服务端点。
这篇内容我会按真实操作顺序走一遍:先解决 npm 安装时的 Git 报错,再完成 OpenClaw 的 onboard 初始化,然后把openclaw.json里的模型通道改到 TaoToken 的统一 Key/API 通道,最后装飞书插件、配回调、发消息验证。每一步都有可复制的命令和配置片段,你跟着做就行。
先说你最可能遇到的那个报错。执行npm i -g openclaw时,终端里出现的是这样一串:
npm error code 128 npm error An unknown git error occurred npm error command git --no-replace-objects ls-remote ssh://git@github.com/whiskeysockets/libsignal-node.git npm error git@github.com: Permission denied (publickey). npm error fatal: Could not read from remote repository.这个报错的根因不是网络问题,也不是 npm 坏了,而是 OpenClaw 的某个依赖在package.json里把仓库地址写成了 SSH 格式。npm 在拉取这个依赖时会调用 Git 的 SSH 协议,而你的机器上没有配置 GitHub 的 SSH 公钥,所以直接被拒。注意,即使这个仓库是公开的,SSH 协议本身仍然要求身份验证,HTTPS 才不需要。
解决办法很简单,一行命令把 SSH 地址全局重写成 HTTPS:
git config --global url."https://github.com/".insteadOf "ssh://git@github.com/"执行完之后再跑一次npm i -g openclaw,基本就能顺利装完。这个配置是永久生效的,不会影响你已有的 SSH 配置,也不会影响其他仓库的正常拉取。如果你长期用 Git 开发,也可以选择配置 SSH 密钥,但对大多数人来说,转 HTTPS 是最省事的路径。
装完之后,用openclaw --version确认一下版本,能看到类似OpenClaw 2026.2.2-3的输出就说明安装成功了。接下来进入初始化环节。
2. TaoToken 前置准备:拿到统一 Key 和 API 通道地址
在改 settings 之前,你需要先把 TaoToken 这边的接入信息准备好。TaoToken 提供的是兼容 OpenAI 协议的统一 API 通道,也就是说,任何支持自定义 Base URL 和 API Key 的客户端,都可以把请求打到它上面。OpenClaw 的模型配置正好支持这种自定义端点,所以整条链路是通的。
你需要准备三样东西:Base URL、API Key、以及你要调用的 Model ID。Base URL 是https://taotoken.net/api,注意这里不带任何查询参数,直接作为 OpenAI 兼容端点的根地址使用。API Key 需要你登录后在控制台里创建,创建入口在 API Keys 页面。Model ID 则取决于你想用哪个模型,填你实际要调用的那个名称即可。
如果你还没有 Key,可以先去官网注册并进入控制台。整个流程不复杂:登录后找到 API Keys 菜单,点创建,复制生成的 Key 并保存好。这个 Key 只会完整显示一次,丢了就只能重新建。
拿到这三样之后,先别急着改 OpenClaw 的配置,建议用一条 curl 命令验证一下通道本身是否可用:
curl https://taotoken.net/api/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer 你的API_KEY" \ -d '{ "model": "你的Model_ID", "messages": [{"role": "user", "content": "ping"}], "max_tokens": 16 }'如果返回里能看到choices字段和一段模型回复,说明 Key 和通道都没问题。这一步很关键,因为后面 OpenClaw 报错时,你需要能区分是通道问题还是配置问题。如果这条 curl 就失败了,那先解决 Key 或 Model ID 的问题,别往下走。
另外提醒一点:TaoToken 的 API 地址和官网地址是两个不同的入口。官网是https://taotoken.net/?utm_source=taotoken_aicg_blog_end,用于注册、登录、管理 Key;API 是https://taotoken.net/api,用于程序调用。配置里填的是 API 地址,不要填官网地址。
准备好这三样之后,就可以进入 OpenClaw 的初始化了。执行:
openclaw onboard过程中会问你 Onboarding mode,选 QuickStart;Model/auth provider 这一步先随便选一个能过的(比如 Qwen OAuth),因为后面我们会直接改配置文件覆盖它。等 web UI 启动、浏览器打开http://127.0.0.1:18789之后,先别急着在界面上点,我们直接去改 settings 文件,这样更可控。
3. 可复制配置:把 openclaw.json 的模型通道改到 TaoToken
OpenClaw 的核心配置文件在用户目录下的.openclaw/openclaw.json。Windows 上的路径通常是C:\Users\你的用户名\.openclaw\openclaw.json。这个文件里同时包含 gateway 的 token、模型 provider 配置、以及 channel 配置。我们要改的是模型通道部分。
先备份一份原文件,然后打开编辑。找到models或providers相关的段落,把它替换成下面这段结构。注意把你的API_KEY和你的Model_ID换成你实际的值:
{ "models": { "providers": { "taotoken": { "type": "openai", "baseUrl": "https://taotoken.net/api", "apiKey": "你的API_KEY", "models": [ { "id": "你的Model_ID", "name": "TaoToken Unified" } ] } }, "default": "taotoken/你的Model_ID" } }这段配置的关键点有三个。第一,type必须是openai,因为 TaoToken 走的是 OpenAI 兼容协议。第二,baseUrl填https://taotoken.net/api,不要在后面加/v1,OpenClaw 会自己拼接路径。第三,default字段的格式是provider名/modelID,这里就是taotoken/你的Model_ID。
如果你更习惯用 TOML 风格的配置,或者你的 OpenClaw 版本支持settings.toml,等价写法是这样的:
[models.providers.taotoken] type = "openai" baseUrl = "https://taotoken.net/api" apiKey = "你的API_KEY" [[models.providers.taotoken.models]] id = "你的Model_ID" name = "TaoToken Unified" [models] default = "taotoken/你的Model_ID"改完之后保存文件,然后重启 gateway:
openclaw gateway restart重启后回到浏览器里的http://127.0.0.1:18789,在 Overview 页面找到 Gateway Token 那一项。这个 token 在openclaw.json的gateway段里,复制过来填进去,点 Connect。如果 Snapshot 显示Connected,说明 gateway 和前端已经通了。
接下来在界面上找一个对话入口,发一句测试消息。如果模型回复正常,说明模型通道已经成功切到 TaoToken。如果报错,先看错误类型:如果是 401,说明 Key 不对;如果是reading choices之类的解析错误,说明返回结构不符合预期,检查 baseUrl 是否多写了/v1;如果是连接超时,检查网络是否能访问taotoken.net。
这里有个细节值得注意:OpenClaw 的配置里,baseUrl和apiKey是绑定在 provider 上的,而default只是指定默认用哪个。如果你后面想加多个模型,可以在models数组里继续追加,然后通过切换default来换模型,不需要改 baseUrl 和 Key。
配置改好、对话验证通过之后,就可以进入飞书机器人的接入环节了。
4. 飞书机器人接入:插件安装、回调配置与消息验证
飞书插件的安装是 Windows 上最容易出问题的一步。官方推荐的openclaw channels add命令在 Windows 上执行时,经常会抛出Error: spawn EINVAL。这个错误的本质是 Node.js 在 Windows 上 spawn 子进程时,参数传递方式不兼容导致的。绕过它的办法是手动下载插件包再安装。
先下载插件压缩包:
curl -O https://registry.npmjs.org/@m1heng-clawd/feishu/-/feishu-0.1.3.tgz下载完成后,用本地路径安装:
openclaw plugins install ./feishu-0.1.3.tgz如果这一步仍然报spawn EINVAL,不要慌,插件其实已经被解压到了C:\Users\你的用户名\.openclaw\extensions\feishu目录下。进入这个目录,手动安装依赖:
cd C:\Users\你的用户名\.openclaw\extensions\feishu npm install依赖装完后,重启 gateway:
openclaw gateway restart接下来去飞书开放平台创建应用。打开https://open.feishu.cn/app,登录后创建一个企业自建应用。创建完成后,在应用详情页能看到App ID和App Secret,把这两个值记下来。
回到 OpenClaw,执行openclaw channels add,选择 Yes 和飞书,然后填入刚才的 App ID 和 App Secret。如果这个命令在 Windows 上仍然报错,可以直接编辑openclaw.json,在channels段里手动加入:
{ "channels": { "feishu": { "enabled": true, "appId": "你的App_ID", "appSecret": "你的App_Secret" } } }保存后重启 gateway。然后在飞书开放平台里,为应用添加机器人能力,开通群聊权限,并把事件回调方式配置为长连接。长连接模式下不需要你提供公网回调地址,OpenClaw 会主动和飞书建立连接。
配置完成后,在飞书里找到你创建的这个应用,给它发送一条指令,比如「你好」。如果 OpenClaw 的 Agent 正常响应,你会看到 AI 的回复出现在飞书对话里。如果 Agent 判断需要调用依赖,它会自动处理。到这里,整条链路就打通了:飞书消息 → OpenClaw gateway → TaoToken 模型通道 → 回复返回飞书。
5. 常见报错排查:401、spawn EINVAL、reading choices、OAuth
这一节把你在整条链路上最可能遇到的几个报错集中列一下,方便对照排查。
401 Unauthorized:这个几乎都是 API Key 的问题。检查openclaw.json里apiKey字段是否填了完整的 Key,有没有多余空格,有没有把官网地址误填成 API 地址。如果 Key 确认没问题,用第 2 节的 curl 命令单独测一次通道,排除 Key 本身失效的可能。
spawn EINVAL:这是 Windows 上 OpenClaw 调用子进程时的兼容性问题,出现在channels add和plugins install两个环节。绕过方式是手动下载 tgz 包、手动npm install依赖,然后重启 gateway。不要反复重试原命令,它不会自己好。
reading choices 报错:这个通常出现在模型返回结构不符合 OpenAI 格式时。最常见的原因是baseUrl多写了/v1,导致请求路径变成/api/v1/v1/chat/completions。把baseUrl改成https://taotoken.net/api即可。另一个可能是 Model ID 填错了,导致服务端返回了错误结构。
OAuth 相关报错:如果你在 onboard 阶段选了 Qwen OAuth,但后面又把模型通道改成了 TaoToken,OAuth 的残留配置可能会干扰。解决办法是确认default字段已经指向taotoken/你的Model_ID,并且没有其他 provider 被设为默认。如果仍然报 OAuth 错误,检查openclaw.json里是否还有旧的 provider 段,可以删掉或注释掉。
飞书消息无响应:先确认 gateway 是否在运行,再确认飞书应用的事件回调是否配置为长连接,最后确认channels.feishu.enabled是否为 true。如果都正常,看 gateway 的日志输出,通常能看到消息是否到达、以及模型调用是否成功。
Gateway Token 连不上:Overview 页面填的 token 必须和openclaw.json里gateway.token完全一致。如果改了配置文件,记得重启 gateway 后再重新连接。
排查的顺序建议是:先 curl 测通道,再测 OpenClaw 内部对话,最后测飞书。这样能快速定位问题出在哪一层。
6. 接入后的实用建议与后续操作入口
整条链路跑通之后,有几个实际使用中的点值得注意。第一,openclaw.json里的 Key 是明文存储的,如果你要把配置分享给别人,记得先把 Key 替换掉。第二,飞书机器人的响应速度取决于模型通道的延迟,如果觉得慢,可以换一个更轻量的 Model ID 试试。第三,OpenClaw 的 gateway 默认监听本地,如果你想让局域网内其他设备也能访问,需要额外配置,但这就涉及到网络暴露的问题,建议只在可信网络里做。
如果你在配置过程中需要重新生成 Key 或查看接入文档,可以直接进控制台操作。模型通道的验证可以用对话页面快速测一句话,确认返回正常再继续。对于长期跑编码任务或 Agent 场景的,可以考虑用 Coding Plan 来管理调用额度,避免 Key 被意外耗尽。
配置这件事,最怕的就是改了一半不知道哪步错了。我的建议是每改一个文件就重启一次 gateway,每重启一次就发一条测试消息,确认当前状态是通的再往下走。这样即使出问题,你也能立刻知道是刚才那一步引入的。
飞书这边的长连接模式有个好处:你不需要公网 IP,也不需要配 ngrok 之类的隧道工具,OpenClaw 主动连出去就行。这对本地部署来说省了很多事。唯一要注意的是,如果 gateway 重启,长连接会断开重连,飞书那边可能会有几秒钟的消息延迟,属于正常现象。
最后一步验证做完之后,你可以在飞书里试着发一条稍微复杂一点的指令,比如让它帮你整理一段文本或者回答一个技术问题,看看 Agent 是否能正确调用模型并返回结果。如果能,那这套 OpenClaw + 飞书 + TaoToken 的组合就算真正跑起来了。