Teg

OpenClaw+飞书+通义千问 AI助手搭建

2026/03/06 19:05 9 次阅读 王梓
★ 打赏
✸ ✸ ✸

OpenClaw + 飞书 + 通义千问:从踩坑到跑通的私有 AI 助手搭建全记录

OpenClaw 是一个开源的 AI 网关,支持对接多种聊天平台和大模型。本文记录了在资源受限的 CentOS 7 服务器上部署失败后,转向 Mac 本地部署,最终成功打通飞书机器人 + 通义千问的完整过程。涉及 WebSocket 长连接、OpenAI 兼容 API 适配、多层配置文件调试等实际工程问题,附踩坑记录和成本分析。

一、最终架构

先看最终跑通的架构,后面再讲怎么一步步走到这里的:

整体架构:飞书 → OpenClaw → 通义千问 飞书 用户 发送消息 消息 飞书云 事件推送服务 WebSocket 长连接(无需公网IP) OpenClaw Gateway 消息路由 / 会话管理 Mac 本地运行 API 调用 通义千问 DashScope API 生成回复 回复原路返回 ✅ 无需公网 IP / 域名 / HTTPS 证书 ✅ WebSocket 长连接模式,NAT 后面也能用

二、部署方案的抉择:服务器 vs 本地

最初的方案是部署到云服务器,实现 7×24 小时运行。服务器配置:CentOS 7,1.8G 内存,单核 CPU。

实际部署中遇到了三个关键问题:

服务器部署遇到的三个问题 💥 第一次:npm install OOM npm install -g openclaw 内存飙到 1.8G 上限 进程被 OOM Killer 杀掉 结果:安装失败,加了 2G swap 勉强装上了 💥 第二次:Docker build 死机 尝试 Docker 部署方案 docker build 吃光内存+swap 整台服务器死机 结果:SSH 断开,网站挂了 只能去控制台重启 💥 第三次:glibc 版本太老 CentOS 7 的 glibc 是 2.17 新版 Node 模块需要 2.28+ 升级 glibc 风险极高 结果:彻底放弃服务器方案 转向 Mac 本地部署 ✅ 最终决策:Mac 本地部署 飞书 WebSocket 长连接 = 不需要公网 IP Mac 内存充足 = 不会 OOM macOS 系统库版本新 = 兼容性好 唯一缺点:Mac 关机就断了(可以用 launchd 设置开机自启)

服务器部署的最低要求

资源最低要求推荐配置我的服务器结果
内存2G4G+1.8GOOM
系统Ubuntu 20.04+ / CentOS 8+Ubuntu 22.04CentOS 7glibc 太老
Node.js18+20 LTS需手动安装勉强可以
网络能访问飞书 API-国内服务器OK

三、完整搭建流程

下面是最终跑通的完整流程,按顺序来不会出错:

搭建流程(按此顺序操作) ① 安装 Node.js 18+asdf / nvm / 官网下载 ② npm install openclaw全局安装 ③ openclaw onboard初始化 + 选 local 模式 ④ 创建飞书应用拿到 App ID + Secret ⑤ 配置飞书权限批量导入 scopes JSON ⑥ 启用机器人能力设置机器人名称 ⑦ openclaw channels add添加飞书渠道凭证 ⑧ 配置通义千问模型修改两个 JSON 配置文件 ⑨ 启动 Gateway设置环境变量 + 启动 ⑩ 飞书添加事件订阅 im.message.receive_v1⚠️ Gateway 必须先运行! ⑪ 发布飞书应用 + 测试发消息验证机器人回复 本地环境 飞书平台 配置阶段 启动运行 ⚠️ 关键步骤

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 OOM1.8G 内存不够 → 加 2G swap 勉强装上 坑2:Docker build 导致服务器死机内存+swap 全部耗尽 → 放弃 Docker,放弃服务器 坑3:CentOS 7 glibc 2.17 太老新版 Node 模块不兼容 → 转向 Mac 本地部署 —— 转向 Mac 本地部署 —— 坑4:openclaw channels add 凭证没保存CLI 命令的持久化有 bug → 手动编辑 openclaw.json 坑5:发消息机器人没反应(日志无任何记录)没添加 im.message.receive_v1 事件订阅 → 飞书后台添加 坑6:收到消息但报 "No API key for anthropic"没设置 agents.defaults.model → 默认用了 Claude → 设置为 openai/qwen-turbo 坑7:报 "No API provider for api: undefined"models 配置缺少 api 字段 → 添加 "api": "openai-completions" 坑8:Config invalid 启动失败api 写了 "openai"(无效值)→ 改为 "openai-completions" 服务器阶段 飞书配置 模型配置

详细的问题和解决方案:

#问题现象根因解决方案
1npm install 进程被杀服务器内存 1.8G 不够加 swap 或换大内存机器,最终选择本地部署
2Docker build 服务器死机构建过程吃光内存+swap放弃 Docker 方案
3Node 模块报 glibc 错误CentOS 7 glibc 2.17 太老换系统或本地部署
4channels 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"
8Config 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 消耗分析 单次对话 Token 消耗 系统提示词 (System Prompt): ~2000-5000 tokens 历史对话上下文: 随对话轮次递增 工具/插件定义 (Tools): ~1000-3000 tokens 用户实际消息: ~10-100 tokens ⚠️ 用户消息只占总 Token 的 1-3% 月度成本估算 模型 单次对话 100次/天 qwen-turbo ~¥0.003 ~¥9/月 qwen3.5-turbo ~¥0.02 ~¥60/月 qwen3.5-max ~¥0.06 ~¥180/月 Claude 4.6 ~¥0.15 ~¥450/月 GPT-5 ~¥0.12 ~¥360/月 * 按每次对话 ~5000 input tokens 估算

为什么 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 部署方案选择

部署方案对比 Mac 本地部署 ✅ 零成本(不需要服务器) ✅ 配置简单 ✅ 内存充足不会 OOM ❌ Mac 关机就断 ❌ 依赖家庭网络 适合:个人/测试 云服务器部署 ✅ 7×24 小时运行 ✅ 稳定可靠 ❌ 需要 4G+ 内存 ❌ 月费 ¥50-200 ❌ 需要 Ubuntu 20.04+ 适合:团队/生产 Docker 部署 ✅ 环境隔离 ✅ 一键部署 ❌ 构建需要大量内存 ❌ 镜像体积大 ❌ 不适合低内存环境 适合:有资源的团队

6.2 安全建议

  • 不要用 open 策略上生产dmPolicy: "open" 配合 allowFrom: ["*"] 意味着任何人都能和你的机器人聊天,消耗你的 API 额度。生产环境用 pairingallowlist
  • 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助手搭建

出处:葫芦的运维日志 | 转载请注明出处并保留原文链接

📜 留言板

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