OpenClaw + 飞书 + 通义千问:从踩坑到跑通的私有 AI 助手搭建全记录
OpenClaw 是一个开源的 AI 网关,支持对接多种聊天平台和大模型。本文记录了在资源受限的 CentOS 7 服务器上部署失败后,转向 Mac 本地部署,最终成功打通飞书机器人 + 通义千问的完整过程。涉及 WebSocket 长连接、OpenAI 兼容 API 适配、多层配置文件调试等实际工程问题,附踩坑记录和成本分析。
一、最终架构
先看最终跑通的架构,后面再讲怎么一步步走到这里的:
二、部署方案的抉择:服务器 vs 本地
最初的方案是部署到云服务器,实现 7×24 小时运行。服务器配置:CentOS 7,1.8G 内存,单核 CPU。
实际部署中遇到了三个关键问题:
服务器部署的最低要求:
| 资源 | 最低要求 | 推荐配置 | 我的服务器 | 结果 |
| 内存 | 2G | 4G+ | 1.8G | OOM |
| 系统 | Ubuntu 20.04+ / CentOS 8+ | Ubuntu 22.04 | CentOS 7 | glibc 太老 |
| Node.js | 18+ | 20 LTS | 需手动安装 | 勉强可以 |
| 网络 | 能访问飞书 API | - | 国内服务器 | OK |
三、完整搭建流程
下面是最终跑通的完整流程,按顺序来不会出错:
3.1 安装 OpenClaw
# 确认 Node.js 版本(需要 18+)
node -v
# 全局安装 OpenClaw
npm install -g openclaw@latest
# 验证
openclaw --version
# 初始化(选择 local 模式)
openclaw onboard
# 启用飞书插件
openclaw plugins enable feishu
3.2 飞书应用配置
登录飞书开放平台,创建企业自建应用,然后:
① 配置权限 — 进入「权限管理」→「批量开通」,粘贴:
{
"scopes": {
"tenant": [
"im:chat.access_event.bot_p2p_chat:read",
"im:chat.members:bot_access",
"im:message",
"im:message.group_at_msg:readonly",
"im:message.p2p_msg:readonly",
"im:message:readonly",
"im:message:send_as_bot",
"im:resource",
"contact:user.employee_id:readonly",
"event:ip_list"
],
"user": [
"im:chat.access_event.bot_p2p_chat:read"
]
}
}
② 启用机器人 — 「应用能力」→「机器人」→ 启用
③ 事件订阅(⚠️ 这步要在 Gateway 启动之后做):
- 「事件与回调」→ 订阅方式选「使用长连接接收事件」
- 添加事件:
im.message.receive_v1
④ 发布应用 — 创建版本 → 提交审核 → 等待通过
3.3 OpenClaw 配置(最容易出错的部分)
需要修改两个配置文件,缺一不可:
文件一:~/.openclaw/openclaw.json(全局配置,关键字段)
{
"agents": {
"defaults": {
"model": "openai/qwen-turbo"
}
},
"channels": {
"feishu": {
"enabled": true,
"domain": "feishu",
"connectionMode": "websocket",
"dmPolicy": "open",
"allowFrom": ["*"],
"accounts": {
"default": {
"appId": "cli_xxxxxxxxxx",
"appSecret": "your-app-secret",
"botName": "AI Assistant"
}
}
}
},
"models": {
"providers": {
"openai": {
"api": "openai-completions",
"baseUrl": "https://dashscope.aliyuncs.com/compatible-mode/v1",
"apiKey": "sk-your-dashscope-key",
"models": [{
"id": "qwen-turbo",
"name": "Qwen Turbo",
"reasoning": false,
"input": ["text"],
"cost": { "input": 0, "output": 0 },
"contextWindow": 131072,
"maxTokens": 8192
}]
}
}
}
}
文件二:~/.openclaw/agents/main/agent/models.json(Agent 模型配置)
{
"providers": {
"openai": {
"api": "openai-completions",
"baseUrl": "https://dashscope.aliyuncs.com/compatible-mode/v1",
"apiKey": "sk-your-dashscope-key",
"models": [{
"id": "qwen-turbo",
"name": "Qwen Turbo",
"reasoning": false,
"input": ["text"],
"cost": { "input": 0, "output": 0 },
"contextWindow": 131072,
"maxTokens": 8192
}]
}
}
}
3.4 启动
export OPENAI_API_KEY="sk-your-dashscope-key"
export OPENAI_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"
openclaw gateway
看到以下输出就说明成功了:
[gateway] agent model: openai/qwen-turbo ← 模型正确
[feishu] feishu[default]: WebSocket client started
[info]: [ '[ws]', 'ws client ready' ] ← 飞书连接成功
四、踩坑全记录
按时间顺序,把这次搭建过程中遇到的所有坑都列出来:
详细的问题和解决方案:
| # | 问题现象 | 根因 | 解决方案 |
|---|---|---|---|
| 1 | npm install 进程被杀 | 服务器内存 1.8G 不够 | 加 swap 或换大内存机器,最终选择本地部署 |
| 2 | Docker build 服务器死机 | 构建过程吃光内存+swap | 放弃 Docker 方案 |
| 3 | Node 模块报 glibc 错误 | CentOS 7 glibc 2.17 太老 | 换系统或本地部署 |
| 4 | channels add 后凭证丢失 | CLI 持久化 bug | 手动编辑 ~/.openclaw/openclaw.json |
| 5 | 发消息无反应,日志无记录 | 没添加 im.message.receive_v1 | 飞书后台「事件与回调」添加该事件 |
| 6 | 报 Anthropic API key 错误 | 没设置默认模型,fallback 到 Claude | 设置 agents.defaults.model: "openai/qwen-turbo" |
| 7 | 报 api: undefined 错误 | models 配置缺少 api 字段 | 添加 "api": "openai-completions" |
| 8 | Config invalid 启动失败 | api 值写了 "openai" | 改为 "openai-completions"(有效值列表见下方) |
api 字段的有效值:
openai-completions ← 通义千问/DashScope 用这个
openai-responses
anthropic-messages
google-generative-ai
ollama ← 本地 Ollama 用这个
bedrock-converse-stream
github-copilot
五、Token 成本分析:别被"免费"骗了
这是很多人忽略的问题。OpenClaw 作为 AI 网关,每次对话都会消耗大量 Token,远超你的想象。
为什么 Token 消耗这么大?
OpenClaw 不是简单的消息转发。每次用户发消息,它会把系统提示词、工具定义、历史对话上下文全部打包发给大模型。一条"你好"可能就消耗 5000+ tokens。随着对话轮次增加,上下文越来越长,Token 消耗指数级增长。
⚠️ 成本警告
如果你用的是 Claude 4.6 或 GPT-5 这类贵的模型,一个活跃用户一天聊 100 轮,月成本可能超过 ¥500。通义千问 qwen-turbo 是目前性价比最高的选择,几乎可以忽略成本。
建议:先用 qwen-turbo 测试,确认需求后再考虑升级模型。
控制成本的几个建议
| 策略 | 做法 | 效果 |
|---|---|---|
| 选便宜的模型 | qwen-turbo 而不是 qwen3.5-max | 成本降低 20 倍 |
| 限制上下文长度 | OpenClaw 的 compaction 模式设为 safeguard | 自动压缩过长的对话历史 |
| 关闭不需要的插件 | 禁用 feishu_doc、feishu_wiki 等工具插件 | 减少工具定义的 Token 开销 |
| 设置用户限流 | 用 dmPolicy: "pairing" 控制访问 | 防止滥用 |
| 监控用量 | 定期查看 DashScope 控制台的用量统计 | 及时发现异常消耗 |
六、专业建议
6.1 部署方案选择
6.2 安全建议
- 不要用 open 策略上生产:
dmPolicy: "open"配合allowFrom: ["*"]意味着任何人都能和你的机器人聊天,消耗你的 API 额度。生产环境用pairing或allowlist - API Key 不要硬编码:用环境变量传入,不要写在配置文件里提交到 Git
- 定期轮换 App Secret:飞书 App Secret 泄露后要立即在开放平台重置
- 监控 API 用量:在 DashScope 控制台设置用量告警,防止被刷
6.3 稳定性建议
- Mac 本地用 launchd 设置开机自启:防止重启后忘记启动 Gateway
- 写启动脚本:把环境变量和启动命令封装成脚本,一键启动/停止/查日志
- 日志监控:定期检查
/tmp/openclaw/下的日志,关注错误信息 - Gateway 健康检查:WebSocket 连接可能断开,需要定期确认
ws client ready状态
6.4 模型选择建议
| 场景 | 推荐模型 | 理由 |
|---|---|---|
| 日常闲聊 / 简单问答 | qwen-turbo | 便宜、快、够用 |
| 代码辅助 / 复杂推理 | qwen3.5-turbo | 能力更强,性价比高 |
| 专业写作 / 高质量输出 | qwen3.5-max | 最强能力,但贵 |
| 隐私敏感场景 | 本地 Ollama (Qwen3/DeepSeek-R1) | 数据不出本机 |
| 不差钱 | Claude 4.6 / GPT-5 | 全球顶级模型 |
七、总结
回顾整个过程,最大的感受是:OpenClaw 的设计理念很好,但对国内用户不够友好。默认配置全部面向 Anthropic Claude,用国产模型需要手动改好几个配置文件,而且文档里没有明确说明哪些字段是必填的。
但一旦跑通了,体验确实不错:
- 飞书 WebSocket 长连接,不需要公网 IP,NAT 后面也能用
- 通义千问 qwen-turbo 几乎免费,日常使用月成本不到 ¥10
- 支持流式输出,回复速度很快
- 支持多 Agent、群聊、工具调用等高级功能
如果你也想给团队搞一个飞书 AI 助手,希望这篇踩坑记录能帮你省下半天时间。
提醒:部署前务必确认服务器资源是否满足最低要求(内存 ≥ 2G,系统 ≥ CentOS 8 / Ubuntu 20.04),避免在资源不足的环境上反复折腾。
📜 版权声明
本文作者:王梓 | 原文链接:https://www.bthlt.com/note/369366600-TegOpenClaw+飞书+通义千问 AI助手搭建
出处:葫芦的运维日志 | 转载请注明出处并保留原文链接


📜 留言板
留言提交后需管理员审核通过才会显示