GenStudio 推出 Infini 编码套餐(Coding Plan)GenStudio 推出 Infini 编码套餐(Coding Plan) ,接入多家顶尖厂商的主流编程模型了解更多
Skip to content
回到全部文章

在 AICoder 上部署 OpenClaw (MoltBot)

OpenClaw(曾用名 ClawdBot、MoltBot)是一个活跃的开源项目,旨在为用户提供灵活、可扩展的自动化机器人解决方案。无论您是想搭建一个即时通讯机器人,还是需要一个自动化任务处理助手指,OpenClaw 都是一个极佳的选择。

最近,OpenClaw 社区发布了重大更新,项目名称也正式确立为 OpenClaw。

为什么选择 AICoder?

部署各类 Bot 或自动化脚本时,最大的痛点往往是服务器成本。为了运行一个简单的机器人而购买云服务器,不仅价格昂贵,配置起来也颇为繁琐。

AICoder 完美解决了这个问题。平台为每一位开发者提供了免费的 2 核 CPU、4GB 内存(2C4G)开发实例

  • 完全免费:无需复杂的申请流程,即可使用标准的 2C4G 实例进行开发与测试。
  • 轻量级友好:对于 OpenClaw 这类基于 Node.js/Python 的轻量级应用,2C4G 的配置足以保证流畅运行。
  • 开箱即用:环境预装了 git 等常用工具,并提供 Root 权限,可自由安装 Node.js/Python 等运行环境。

    提示

    AICoder 规格说明

    • 存储:实例配备 10GB 系统盘。建议定期清理 npm 缓存以节省空间。
    • 连接:支持网页端 Shell 及通过跳板机进行 SSH 远程连接。
    • 生命周期:AICoder 主要定位为开发环境。如果您的租户未购买付费资源池,长时间不操作 AICoder Shell(非活跃状态)可能会导致实例回收。建议使用 tmux 等工具保持会话或配合 Web 预览功能保持活跃。

注意

无需公网 IP:AICoder 虽无公网 IP,但 OpenClaw 利用 Long Polling/WebSocket 技术完全兼容此类内网环境,零配置即可接收消息。详见文末 网络原理

强大的心脏:GenStudio LLM API

除了免费的算力 (AICoder),智算云平台还为 OpenClaw 提供了强大的 LLM API 服务支持。

  • OpenAI 兼容:完全兼容 OpenAI 接口协议,OpenClaw 可直接调用。
  • 海量模型:支持 DeepSeek-V3/R1KimiGLM-4 等顶尖模型,按需切换。
  • 极速体验:企业级推理加速,让您的机器人回复更加迅速。

您可以直接在平台控制台获取 API Key,稍后我们在配置 OpenClaw 时会用到。

在本教程中,我们将结合 免费 AICoder 实例GenStudio LLM API,手把手部署一套功能完备的 OpenClaw 智能助手。

注意

预置大语言模型 API 服务有 API 频率限制。租户在 GenStudio 的服务等级决定了 API 调用是否计费,以及享受的 API 频率上限。详见 LLM API 计费规则

教程目标与关键挑战

本教程的全流程针对非交互式环境(如 CI/CD 流水线、AI Agent 自动部署)进行了专门优化。 我们尽可能使用带参数的 CLI 指令将复杂的交互式配置过程(Onboarding)转为“静默执行”,助您高效搭建自动化机器人。

在本教程结束时,您将获得一个完全免费、长期在线的 AI 智能助手。它具备以下能力:

  • 多渠道接入:既可以通过浏览器 Web UI 进行管理,也能直接接入飞书 (Feishu) 等即时通讯软件。
  • 无限记忆:配置了本地向量库,拥有长期记忆能力。
  • 零成本托管:运行在 2C4G 的 AICoder 免费实例上,无需购买服务器。

注意

人工干预说明 (Human Intervention) 尽管本指南致力于自动化,但在从零开始的部署流程中,以下涉及外部平台鉴权或控制台交互的环节,仍必须由人工手动完成

  1. 获取算力与密钥:在智算云控制台激活 AICoder 实例,并获取 GenStudio 的 API Key。
  2. 配置第三方平台(如飞书):在飞书开放平台注册真实应用、配置权限(Scope)、生成 App ID 和 App Secret、飞书机器人事件与回调配置。

获得上述凭证后,剩余的全部安装、配置和常驻网关(Gateway)过程均已设计为非交互执行 (Non-interactive),可直接通过 Agent 执行。

应对环境限制的特殊配置

AICoder 是一个高安全性的容器化开发环境,这虽然带来了免费的算力,但也带来了一些特殊的网络和权限限制。如果脱离此环境(例如在标准云服务器)部署,步骤会简单得多

为了在免费资源上跑通流程,本教程特别针对以下限制设计了"绕过"方案:

  1. 战胜完全内网环境 (无公网 IP)

    • 限制:AICoder 实例没有公网 IP,传统的 Webhook 机器人无法直接回调到您的服务。
    • 对策:利用 OpenClaw 对 WebSocket / Long Polling 的原生支持。机器人主动向飞书/Telegram 建立长连接接收消息,无需配置内网穿透。
  2. 解决容器进程管理 (无 Systemd)

    • 限制:AICoder 是轻量级 Docker 容器,未预装 systemd。官方文档中依赖 sudo systemctl start openclaw 的命令在这里无法执行。
    • 对策:我们引入 PM2 进程管理器。它不仅能替代 Systemd 守护 OpenClaw 进程,还能配合 npm 脚本实现日志查看和自动重启。
  3. 突破网络访问障碍 (拉取依赖)

    • 限制:容器内网在拉取 GitHub 源码或某些 npm 二进制包时可能受限。
    • 对策:当前 AICoder 环境已可直接完成大多数代码拉取与依赖安装;如果个别 npm 二进制包下载较慢,再配合国内镜像源即可显著提升成功率。

Step 0 准备 AICoder 环境

为了确保我们的开发过程顺利进行,我们需要先搭建好基础环境。

激活 AICoder 实例

AICoder 仅支持 SSH 密钥对认证。在开始之前,请确保您已将 SSH 公钥添加到智算云平台。详细步骤请参考 添加 SSH 公钥

  1. 登录智算云平台。

  2. 点击顶部导航栏的 AICoder 图标。如果是首次使用,系统会自动为您初始化实例。

  3. 等待终端初始化完成后,点击右上角的「钥匙」图标,复制 SSH 连接命令(包含 Host, HostName, ProxyJump, User 等信息)。

配置 VS Code 远程连接

推荐使用 VSCode Remote - SSH 插件连接 AICoder,方便后续人工操作。

  1. 打开 VS Code,确保已安装 Remote - SSH 插件。

  2. 检查本地 SSH 配置文件(通常位于 ~/.ssh/config),参考下列配置进行添加:

    shell
    #这是示例配置,请务必替换为您从平台复制的实际 Host 和 HostName
    Host aic-da3sf44m5p44xkga
        HostName aic-da3sf44m5p44xkga
        ProxyJump ssh-jumper.cloud.infini-ai.com
        User root
        ExitOnForwardFailure yes
        ServerAliveInterval 30
        ServerAliveCountMax 3
  3. 保存配置后,在 VS Code 左侧「远程资源管理器」中选择该主机进行连接。

  4. 连接成功后,可先简单验证实例是否具备出网能力:

    shell
    # 验证网络连通性
    curl -I https://baidu.com

    如果在终端看到 HTTP/1.1 200 OK301 Moved Permanently 等响应,说明网络已打通,可以直接继续后续安装步骤。

    提示

    VS Code 自动端口转发

    当您在 VS Code 的集成终端中运行类似 pm2 start ... 或其他启动服务的命令时,VS Code 往往会自动检测到新打开的端口(如 18789)并自动为您建立转发。

    如果您发现端口已自动出现在 "PORTS / 端口" 面板中,则无需手动修改 SSH 配置文件。这得益于 VS Code 强大的远程开发体验。

    提示

    更多关于 VS Code 远程开发的细节,可参考教程:VS Code 远程开发

Step 1 安装 OpenClaw

在 VS Code 终端中连接到 AICoder 后,我们就可以开始安装 OpenClaw 了。得益于 AICoder 提供的标准 Ubuntu 环境,我们可以便捷地配置 Node.js 运行环境。

验证 Node.js 环境

AICoder 实例默认未预装 Node.js,或版本可能不满足 OpenClaw 的要求(推荐 Node.js >= 22)。我们建议提前安装 LTS 版本。

shell
# 下载并运行 Node.js 22 安装脚本 (LTS 版本更稳定)
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -

# 安装 Node.js
apt install -y nodejs

# 验证安装
node -v  # 应显示 v22.x.x

使用官方脚本一键安装

警告

关键优化:由于 AICoder 的网络环境连接 GitHub Releases(用于下载 sharp 等依赖的预编译文件)可能较慢,极易导致安装过程卡在 "Installing OpenClaw..."

OpenClaw 安装流程通常会偏向使用 SHARP_IGNORE_GLOBAL_LIBVIPS=1,从而触发 sharp 预编译二进制下载。为避免安装过程中镜像配置失效,请不要使用临时 export 命令,而是提前把镜像写入 /root/.npmrc

在终端中执行以下命令(建议仅首次安装前执行一次):

shell
# 1. 仅首次执行:写入 npm 镜像和 sharp 二进制下载镜像
cat >/root/.npmrc <<'EOF'
registry=https://registry.npmmirror.com
sharp_binary_host=https://npmmirror.com/mirrors/sharp
sharp_libvips_binary_host=https://npmmirror.com/mirrors/sharp-libvips
EOF

# 2. 检查配置是否生效
cat /root/.npmrc

# 3. 通过官方脚本安装,并关闭自动 onboarding(NPM_LOGLEVEL=verbose 让 npm 显示详细下载进度)
NPM_LOGLEVEL=verbose curl -fsSL --proto '=https' --tlsv1.2 https://openclaw.ai/install.sh | bash -s -- --no-onboard --verbose

# 4. 预先安装 PM2 进程管理器 (用于后续保活)
npm install -g pm2

如果 cat /root/.npmrc 输出了上述 3 行配置,说明镜像已写入成功。后续重复安装 OpenClaw 时,通常无需再次执行这一步,除非您主动修改或删除了 /root/.npmrc

使用非交互模式初始化 OpenClaw

本教程统一使用非交互模式完成初始化。这样做有三个好处:

  • 适合容器环境:无需依赖 systemd
  • 适合自动化:命令可直接复用到脚本、CI 或后续重建流程。
  • 适合 AICoder:一次执行即可写入模型、网关和工作区配置。

1. 设置环境变量

先准备 GenStudio API Key。下面示例使用 Kimi K2.5 作为默认模型,服务商通过 OpenAI 兼容接口接入。

shell
export GENSTUDIO_API_KEY="sk-your-key-here"

注意

本教程使用 Root 用户安装 OpenClaw,且容器根文件系统会持久化。因此可直接使用默认工作区 ~/.openclaw/workspace,无需额外传入 --workspace

2. 运行非交互 onboarding

执行以下命令:

shell
openclaw onboard --non-interactive \
  --accept-risk \
  --mode local \
  --auth-choice custom-api-key \
  --custom-base-url "https://cloud.infini-ai.com/maas/coding/v1" \
  --custom-model-id "kimi-k2.5" \
  --custom-api-key "$GENSTUDIO_API_KEY" \
  --custom-provider-id "infini-ai" \
  --custom-compatibility openai \
  --secret-input-mode plaintext \
  --gateway-port 18789 \
  --gateway-bind loopback \
  --gateway-auth token \
  --no-install-daemon \
  --skip-skills \
  --skip-health \
  --json

该命令会完成以下配置:

  • 将网关模式设置为 local
  • 将 Gateway 绑定到 127.0.0.1:18789,仅允许容器内部访问。
  • 将 GenStudio 注册为自定义 OpenAI 兼容服务商 infini-ai
  • 将默认模型设置为 infini-ai/kimi-k2.5
  • 自动生成 Gateway Token,并写入 OpenClaw 配置。
  • 跳过 Daemon 安装,避免在无 systemd 的容器中触发无效的服务管理逻辑。

重要

这里显式使用 --no-install-daemon,是为了让命令语义更清晰: AICoder 容器内不使用 OpenClaw 的 systemd/launchd 守护方式,而是改用 PM2 管理 openclaw gateway 前台进程。

提示

如果您希望 API Key 不落盘,而是引用环境变量,请将 --secret-input-mode plaintext 改为 ref,并确保 GENSTUDIO_API_KEY 在执行 onboarding 的进程环境中已设置。对于本教程的单用户持久化容器场景,plaintext 更直接。

3. 配置最大上下文长度和输出长度

为确保系统能正确认知模型支持的最大上下文长度和输出长度,请随即执行以下两条 config set 命令,手动为其补充由于非交互模式省略的窗口大小与截断限制:

shell
# 补充 kimi-k2.5 模型的 contextWindow 和 maxTokens 参数
openclaw config set models.providers.infini-ai.models[0].contextWindow 256000
openclaw config set models.providers.infini-ai.models[0].maxTokens 256000

注意

  • 如果希望深入了解 openclaw config set 如何工作,或如何修改更多配置,请参考文末 常见问题
  • 其他模型最大上下文长度和输出长度可参考模型广场。

4. 配置多模态 (Vision) 支持

我们选用的 Kimi K2.5 实际上是一个强大的多模态大模型,它不仅能处理文本,还可以直接接收并理解图片。 但在 onboarding 阶段,因为它是作为“第三方自定义模型”被注入系统的,出于系统防崩的安全策略,OpenClaw 会将未知模型的输入能力默认锁定为纯文本 (["text"])。这意味着如果不做额外配置,您在后续聊天中一旦发送图片,就会被系统前置拦截。

为了解锁 Kimi 的看图能力,我们只需通过两行命令声明它的 image 权限,并把它指定为专用的看图模型即可:

shell
# 1. 声明 kimi-k2.5 模型支持图文双输入
openclaw config set models.providers.infini-ai.models[0].input '["text", "image"]' --json

# 2. 将 kimi-k2.5 设置为全局的默认图片处理模型 (Image Model)
openclaw models set-image infini-ai/kimi-k2.5

执行完毕后,您的机器人即获得了「视力」,当您在 Web UI 或飞书中发送图片时,Bot 就能流利地解析图片内容了。OpenClaw 底层会统一将收集到的图片统一转换为 Base64 编码格式发送至模型 API。

使用 PM2 保持 Gateway 常驻

在标准云服务器上,OpenClaw 官方文档推荐使用 openclaw gateway install 将 Gateway 注册为 systemd 服务,之后可通过 openclaw gateway start/stop/restart 进行管理。但 AICoder 是一个轻量级 Docker 容器,容器内未预装 systemd,执行上述命令会报错 systemctl --user unavailable

因此本教程改用 PM2 作为进程管理器。PM2 不依赖 systemd,可以直接守护前台进程,并提供日志收集、自动重启和 SSH 断开后继续运行等能力,在容器环境中是最直接的替代方案。

启动 Gateway

完成 onboarding 后,执行以下命令通过 PM2 启动并守护 OpenClaw Gateway:

shell
# 通过 /usr/bin/env 注入环境变量,让 PM2 直接托管真实的 Gateway 进程
pm2 start /usr/bin/env --interpreter none --name openclaw-bot -- \
    OPENCLAW_NO_RESPAWN=1 /usr/bin/openclaw gateway run --verbose

# 保存当前进程列表
pm2 save

这里的 pm2 start /usr/bin/env --interpreter none --name openclaw-bot -- OPENCLAW_NO_RESPAWN=1 /usr/bin/openclaw gateway run --verbose 有两层含义。第一,OPENCLAW_NO_RESPAWN=1 会关闭 OpenClaw CLI 的自我重启包装,避免 PM2 只托管一个外层包装进程,却把真正监听 18789 端口的 Gateway 子进程游离在 PM2 之外。第二,/usr/bin/env ... /usr/bin/openclaw gateway run --verbose 会让 PM2 直接启动并跟踪真正的 Gateway 进程,而不是额外再套一层 shell。这样做后,pm2 restartpm2 stoppm2 logs 的行为都会更符合预期。

这里值得特别说明:OpenClaw 自身确实带有一部分“有意触发的重启”能力,例如在特定重启流程中重新拉起 Gateway,或者在某些场景下自我重启一层 CLI 包装;但它不是一个完整的常驻进程管理器。对于 AICoder 这种没有 systemd 的容器环境,我们仍然需要 PM2 来负责更通用的职责,例如进程常驻、统一重启入口、日志收集,以及在 SSH 断开后继续保持服务在线。换句话说,这里不是为了把简单事情复杂化,而是为了把“OpenClaw 的应用逻辑”和“进程托管”这两件事明确分开。

紧接着执行 pm2 save,是为了把当前 PM2 进程列表写入磁盘。pm2 start 只负责立即启动 OpenClaw;pm2 save 则负责保存这份“当前运行清单”,方便 PM2 在自身状态恢复时重新加载。换句话说,pm2 save 不是为了让 Gateway 立刻启动,而是为了保留这次启动结果。

通常不需要在 tmux 中运行 pm2 start。命令执行成功后,PM2 会接管 openclaw-bot 进程,使其不再依赖当前 Shell 会话继续运行。tmux 更适合保持一个交互式终端会话,而 PM2 更适合保持 openclaw gateway 进程常驻、自动重启并统一收集日志。如果您只是启动服务,直接运行上面的 PM2 命令即可;如果您还想长时间观察日志、调试启动过程,或者担心 SSH 连接不稳定,再额外使用 tmux 会更方便。

日常管理命令参考

在 AICoder 环境中,openclaw gateway install/start/restart/stop 这类 Daemon 管理命令在 Linux 下依赖 systemd --user,容器中通常会报错:systemctl --user unavailable

请统一改用以下 PM2 命令管理进程:

  • 启动pm2 start /usr/bin/env --interpreter none --name openclaw-bot -- ENCLAW_NO_RESPAWN=1 /usr/bin/openclaw gateway run --verbose
  • 重启pm2 restart openclaw-bot
  • 停止pm2 stop openclaw-bot
  • 日志pm2 logs openclaw-bot
  • 状态pm2 status

验证安装是否成功

查看日志,确认 Gateway 内部逻辑已完全就绪:

shell
pm2 logs openclaw-bot --lines 50

看到以下两行,即表示安装成功:

text
[gateway] listening on ws://127.0.0.1:18789
Registered hook: session-memory -> command:new

如果日志已滚动,可进一步用 openclaw health --json 主动探测 Gateway 是否正常响应:

shell
openclaw health --json

status 字段为 "ok" 表示 Gateway 已健康运行。

提示

如遇启动失败,请参考文末 故障排除:常见问题

验证模型配置是否生效

Gateway 正常运行后,验证 onboarding 时填写的 API Key 和模型配置是否被正确写入:

shell
openclaw models status

正常输出示例:

text
Config        : ~/.openclaw/openclaw.json
Agent dir     : ~/.openclaw/agents/main/agent
Default       : infini-ai/kimi-k2.5
Fallbacks (0) : -
Configured models (1): infini-ai/kimi-k2.5

Auth overview
- infini-ai effective=models.json:sk-xxxx...xxxx | source=models.json

关键信息核对:

字段期望值说明
Defaultinfini-ai/kimi-k2.5默认模型已指向 GenStudio
Configured modelsinfini-ai/kimi-k2.5模型已注册
infini-ai effective=含部分 API Key(非全零)API Key 已写入,且被读取

还可以用 openclaw models list 快速确认模型是否带有 Auth yes 标记:

shell
openclaw models list
text
Model                    Input   Ctx   Local  Auth  Tags
infini-ai/kimi-k2.5      text    16k   no     yes   default,configured

Auth yes 表示该模型有对应的 API Key,可以正常发起推理请求。

提示

如果 Auth 显示 no,说明 API Key 未被读取。请检查 onboarding 时的 --custom-api-key 参数,或直接查看 ~/.openclaw/agents/main/agent/models.json 中是否保存了 Key。

用 openclaw status 确认整体状态

如果您不打算立即打开 Web 控制台,可以在终端直接运行 openclaw status 确认当前安装是否达到可用状态:

shell
openclaw status

以下是一份正常的示例输出(可与您的实际输出对照):

text
Overview
┌─────────────────┬─────────────────────────────────────────────────────────────────────────────┐
│ Item            │ Value                                                                       │
├─────────────────┼─────────────────────────────────────────────────────────────────────────────┤
│ Dashboard       │ http://127.0.0.1:18789/                                                     │
│ OS              │ linux 5.15.0-113-generic (x64) · node 22.22.1                               │
│ Gateway         │ local · ws://127.0.0.1:18789 (local loopback) · reachable 22ms · auth token │
│ Gateway service │ systemd not installed                                                       │
│ Node service    │ systemd not installed                                                       │
│ Agents          │ 1 · 1 bootstrap file present · sessions 0 · default main active unknown     │
│ Sessions        │ 0 active · default kimi-k2.5 (16k ctx) · ...                               │
└─────────────────┴─────────────────────────────────────────────────────────────────────────────┘

逐项核对清单:

字段期望值说明
Gatewayreachable XmsGateway 已监听并可连通,这是最关键的一项
Sessionsdefault kimi-k2.5模型配置已生效
Agents1 bootstrap file presentAgent 已就绪
Gateway servicesystemd not installed正常,AICoder 容器内无 systemd,由 PM2 管理
Channels正常,此时尚未配置即时通讯渠道

提示

如果 Gateway 行出现 reachable,且 Sessions 行显示了您配置的模型名称,说明 OpenClaw 已完整运行。您可以跳过 Step 2,直接前往 Step 3 接入飞书

Step 2 访问 Web 控制台

OpenClaw 提供了一个可视化的控制台(Dashboard),可以查看状态、管理会话,并与 Bot 直接对话。

获取控制台访问地址

执行以下命令获取带 Token 的完整访问链接:

shell
openclaw dashboard --no-open

示例输出:

text
Dashboard URL: http://127.0.0.1:18789/?token=5667486ffdbf7d463804dc6479087d3cf7b3de696398d913

onboarding 时未手动指定 --gateway-token,因此 OpenClaw 自动生成了 Token 并写入配置。Token 已内嵌在链接中,直接在浏览器打开即可完成认证。

配置端口转发

AICoder 是远程 SSH 主机,上方地址无法直接在本地浏览器打开。需要先将远程端口转发到本地,才能通过 http://127.0.0.1:18789/ 访问:

  • VS Code(推荐):在集成终端中启动 PM2 后,VS Code 通常会自动检测到 18789 端口并建立转发。检查底部「PORTS / 端口」面板是否已出现该端口;如未出现,手动添加即可。

  • SSH 隧道:在本地终端执行端口转发命令,然后在本地浏览器打开带 Token 的链接。以为为示例,请替换 aic-c77je3gtesfzyu6c 为您的 AICoder 实例 ID。

    shell
    ssh -L 18789:127.0.0.1:18789 -J ssh-jumper.cloud.infini-ai.com root@aic-c77je3gtesfzyu6c

提示

关于 Token 认证错误 如果在错误日志中看到 reason=token_missing,只要通过带 Token 的链接访问,此错误会自动消失。

开始对话

端口转发就绪后,在本地浏览器中打开上方带 Token 的链接,进入控制台。

  1. 点击左侧导航栏的 "Chat" 图标,或直接在首页找到对话框。
  2. 发送一条消息,例如:"您好,请介绍一下您自己。"

如果配置正确,您应该会立即收到来自 Infini-AI 模型(如 Kimi K2.5)的回复。

OpenClaw Web UI Chat Example

至此,您已通过 AICoder 免费实例成功部署了一个支持对话的 AI 机器人。您现在可以进一步探索 OpenClaw 的 Skills (技能) 系统,赋予它联网搜索、绘图等更多能力。

注意

关于对话记忆与 Hook 系统 OpenClaw 默认协同工作:当您发送 /new 重置对话时,内置的 session-memory Hook 会自动总结上一段对话并在 ~/workspace/memory/ 中生成记录。在后续对话中,Bot 会通过 Memory Search 能力自动检索这些记录以唤起“长期记忆”。

但请注意,在 AICoder 默认网络环境无法访问 HuggingFace,因此 OpenClaw 默认的本地向量模型将无法下载成功,导致记忆检索降级为基础的关键字(FTS)搜索。如果需要更好的语义联想能力,强烈建议参考下文的 高级:配置 Memory Search 的 Embedding 模型 (可选) 接入自定义接口。

Step 3 接入飞书 (可选)

虽然 Web UI 非常适合测试,但机器人的真正舞台在于即时通讯软件。接下来,我们将把 OpenClaw 接入飞书 (Feishu/Lark),实现团队协作场景下的自动化服务。

目前飞书接入 OpenClaw 共有三种插件方式,本教程选用的是第一种(飞书官方插件)

  1. 飞书官方插件:由飞书团队开发维护,除基础对话外,还支持调用飞书 API 以用户身份操作文档、日历、任务等深层生态功能。
  2. OpenClaw 内置飞书插件:由 OpenClaw 社区维护(@openclaw/feishu),自 OpenClaw ≥ 2026.2 起已默认内置,包含基础的长连接对话通信能力(最初来源于社区贡献)。
  3. 开源社区版@m1heng/clawdbot-feishu(仍由原作者独立且活跃地维护更新)。

提示

飞书官方插件提供了详细的文档说明,您可以访问 OpenClaw 飞书官方插件使用指南(公开版) 获取更多官方资讯与帮助。

官方指南中特别声明:

该插件有用户身份授权,暂不适合作为群机器人供多人使用,也不建议用公司的飞书账号接入,建议先用个人账号体验,请仔细评估后安装。

如果本教程的演示步骤与最新改版情况不同,一切在「飞书开放平台」上相关的配置变更,请以此官方指南为准。

注意

飞书开放平台支持 WebSocket 长连接模式用来分发事件。这意味着即使 AICoder 实例没有公网 IP,我们依然可以完美接收飞书消息,无需配置内网穿透。

创建飞书应用

首先,我们需要在飞书开放平台上注册一个企业自建应用,并启用其机器人能力。

  1. 登录 飞书开放平台

  2. 点击 创建企业自建应用,输入名称(如 "MyOpenClaw")和描述,上传图标。

  3. 在左侧导航栏点击 添加应用能力 -> 机器人,点击 添加

    添加机器人能力

配置机器人权限

为了让机器人能接收和发送消息,需要授予它相应的权限。

  1. 在左侧导航栏点击 权限管理

    alt text

  2. 点击 批量导入/导出权限,复制以下 JSON 配置并粘贴:

    json
    {
    "scopes": {
        "tenant": [
            "contact:contact.base:readonly",
            "docx:document:readonly",
            "im:chat:read",
            "im:chat:update",
            "im:message.group_at_msg:readonly",
            "im:message.p2p_msg:readonly",
            "im:message.pins:read",
            "im:message.pins:write_only",
            "im:message.reactions:read",
            "im:message.reactions:write_only",
            "im:message:readonly",
            "im:message:recall",
            "im:message:send_as_bot",
            "im:message:send_multi_users",
            "im:message:send_sys_msg",
            "im:message:update",
            "im:resource",
            "application:application:self_manage",
            "cardkit:card:write",
            "cardkit:card:read"
        ],
        "user": [
            "contact:user.employee_id:readonly",
            "offline_access","base:app:copy",
            "base:field:create",
            "base:field:delete",
            "base:field:read",
            "base:field:update",
            "base:record:create",
            "base:record:delete",
            "base:record:retrieve",
            "base:record:update",
            "base:table:create",
            "base:table:delete",
            "base:table:read",
            "base:table:update",
            "base:view:read",
            "base:view:write_only",
            "base:app:create",
            "base:app:update",
            "base:app:read",
            "sheets:spreadsheet.meta:read",
            "sheets:spreadsheet:read",
            "sheets:spreadsheet:create",
            "sheets:spreadsheet:write_only",
            "docs:document:export",
            "docs:document.media:upload",
            "board:whiteboard:node:create",
            "board:whiteboard:node:read",
            "calendar:calendar:read",
            "calendar:calendar.event:create",
            "calendar:calendar.event:delete",
            "calendar:calendar.event:read",
            "calendar:calendar.event:reply",
            "calendar:calendar.event:update",
            "calendar:calendar.free_busy:read",
            "contact:contact.base:readonly",
            "contact:user.base:readonly",
            "contact:user:search",
            "docs:document.comment:create",
            "docs:document.comment:read",
            "docs:document.comment:update",
            "docs:document.media:download",
            "docs:document:copy",
            "docx:document:create",
            "docx:document:readonly",
            "docx:document:write_only",
            "drive:drive.metadata:readonly",
            "drive:file:download",
            "drive:file:upload",
            "im:chat.members:read",
            "im:chat:read",
            "im:message",
            "im:message.group_msg:get_as_user",
            "im:message.p2p_msg:get_as_user",
            "im:message:readonly",
            "search:docs:read",
            "search:message",
            "space:document:delete",
            "space:document:move",
            "space:document:retrieve",
            "task:comment:read",
            "task:comment:write",
            "task:task:read",
            "task:task:write",
            "task:task:writeonly",
            "task:tasklist:read",
            "task:tasklist:write",
            "wiki:node:copy",
            "wiki:node:create",
            "wiki:node:move",
            "wiki:node:read",
            "wiki:node:retrieve",
            "wiki:space:read",
            "wiki:space:retrieve",
            "wiki:space:write_only"
        ]
    }
    }

    这些权限主要用于接收单聊/群聊消息、读取用户信息以及发送回复。

  3. 点击 版本管理与发布,点击 创建版本

    批量添加权限

  4. 输入版本号(如 0.0.1),保存并申请发布(企业自建应用通常无需审批或由管理员审批)。

  5. 发布成功后,进入 凭证与基础信息 页面,获取 App IDApp Secret

    发布应用并获取凭证

调整工具权限模型

默认情况下,OpenClaw 会将工具权限组(tools.profile)安全默认锁定为 "coding" 模式。

为了充分利用大模型和飞书机器人的所有高阶内置能力(例如完整的系统命令执行、所有文件系统的读写控制等),我们需要将其配置为不受限的 "full" 权限组。

在 AICoder 终端中执行以下命令:

shell
openclaw config set tools.profile full

执行后提示需重启网关生效。

shell
pm2 restart openclaw-bot

安装官方飞书插件

目前飞书官方团队已经接管并维护了专用的 OpenClaw 插件。为了贯彻本教程强调的自动化与非交互理念,我们将直接使用 OpenClaw 原生命令进行非交互式地静默安装与配置

注意

人工安装飞书插件时,可使用飞书官方提供的互动向导

登录到 AICoder Shell 界面,执行以下命令,它会自动引导您输入 App ID 和 Secret:

shell
npx -y https://sf3-cn.feishucdn.com/obj/open-platform-opendoc/195a94cb3d9a45d862d417313ff62c9c_gfW8JbxtTd.tgz install

注意:该向导频繁要求键盘输入,会导致 AI 编程智能体(如 Cursor、GitHub Copilot)因为无法交互而卡死,因此不适合交给 AI 自动执行。完成后同样需要 pm2 restart openclaw-bot 生效。

在 AICoder 终端中依次执行以下命令:

shell
# 1. 禁用旧版内置插件以免冲突
openclaw plugins disable feishu

# 2. 从 npm 安装官方新版插件
openclaw plugins install @larksuiteoapi/feishu-openclaw-plugin

# 3. 配置凭证与长连接模式(请替换为您真实的 App ID 和 Secret)
openclaw config set channels.feishu.appId "cli_xxxxxx"
openclaw config set channels.feishu.appSecret "your_secret_xxxxxx"
openclaw config set channels.feishu.enabled true
openclaw config set channels.feishu.connectionMode "websocket"

# 4. 重启拉起服务加载插件
pm2 restart openclaw-bot

其中:

  • openclaw plugins disable feishu 用于禁用可能引起冲突的 OpenClaw 内置旧版飞书插件。
  • channels.feishu.enabled 用于启用飞书通道本身。
  • channels.feishu.connectionMode = "websocket" 对应飞书开放平台中的“长连接”模式,也是 AICoder 无公网 IP 场景下最合适的选项。

可以用下面的命令快速确认插件是否已启用:

shell
openclaw plugins list

运行 openclaw plugins list,ID 为 feishu-openclaw-plugin 的 Status 为 loaded,ID 为 feishu 的 Status 为 disabled 则表明已成功启用飞书官方插件:

text
│ Feishu       │ feishu-openclaw-plugin │ loaded   │ global:feishu-openclaw-plugin/index.js
│ @openclaw/   │ feishu                 │ disabled │ stock:feishu/index.ts

等待几秒钟后,检查状态:

shell
openclaw status

确保 Channels 列表中出现了 feishu 且状态为 okconfigured

shell
Channels
┌──────────┬─────────┬────────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
 Channel Enabled State Detail
├──────────┼─────────┼────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
 Feishu ON OK configured
└──────────┴─────────┴────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

订阅机器人长连接接收事件和卡片回调

这一步是打通消息接收的关键。这也是 AICoder 环境在无公网 IP 情况下依然能接收消息的核心机制(原理详见文末的 网络原理)。

  1. 回到飞书开放平台,点击左侧 事件与回调

  2. 点击事件配置标签页,选择 使用长连接接收事件并保存。

    注意

    注意:如果保存时提示「没有长连接」,说明上一步的 OpenClaw 服务未成功启动或未连接到飞书服务器。请检查日志 pm2 logs openclaw-bot

    配置长连接

  3. 事件配置标签页中,点击 添加事件,搜索并添加以下事件:

    • 接收消息
    • 消息被 reaction
    • 消息被取消 reaction
  4. 点击回调配置标签页,配置订阅方式为长连接。

  5. 回调配置标签页中,点击添加回调,添加卡片回传交互

  6. 点击安全设置,如看到 user access token 开关,请务必打开。如无此项,忽略即可。

  7. 再次前往 版本管理与发布,创建新版本并发布。

    重要

    为何必须重新发布? 飞书开放平台的变更不会立即生效。每次修改权限或添加事件订阅后,都必须创建一个新版本(如 0.0.2)并点击发布,新的配置才会应用到线上。这是新手最容易遗漏的步骤!

完成机器人的配对并开始使用

打开飞书 App 或 PC 端:

  1. 在飞书中向机器人发送任意消息,系统会生成一个配对码(Paring Code);配对码有效期为 5 分钟,超时需重新触发

    注意

  2. 在 AICoder Shell 中执行以下命令完成绑定:
    shell
    openclaw pairing approve feishu FEISHU_PAIRING_CODE --notify
  3. 在 AICoder Shell 输入配对码后,飞书会收到授权卡片消息。点击前往授权,完成授权。
  4. 为确认是否安装成功,可在与飞书机器人的对话中发送:/feishu start;如果返回了版本号信息,则代表安装成功。
  5. 为了让龙虾能学会这些新技能并正确使用,请和龙虾说:学习一下我安装的新飞书插件,列出有哪些能力

推荐开启流失输出配置:

shell
openclaw config set channels.feishu.streaming true

修改配置后,需要重启生效:

shell
pm2 restart openclaw-bot

高级:配置 Memory Search 的 Embedding 模型 (可选)

OpenClaw 默认启用了 Memory Search (内置记忆检索) 功能,允许 Bot 在回复前自动检索 ~/.openclaw/workspace/memory/ 目录下的历史日志和对话上下文,实现“长期记忆”。

默认情况下,OpenClaw 尝试从 HuggingFace 自动下载 node-llama-cpp 驱动的本地向量模型(如 embeddinggemma)。但在 AICoder 环境中,受限于由于网络限制无法直接访问 HuggingFace,本地模型下载通常会失败。当本地模型失效时,如果未配置后备远程大模型 API,记忆检索工具将优雅降级为纯文本/关键字搜索 (FTS-only),这会明显降低 RAG (检索增强生成) 的语义匹配精度。

因此,为了获取更聪明的记忆能力,我们强烈建议您手动配置一个兼容 OpenAI 格式的外部 Embedding 接口(如智算云 GenStudio 提供的 Embedding 服务,或其他兼容接口)。

配置自定义 Embedding API

您可以使用 OpenClaw 提供的 config set 命令行深入修改内置配置:

shell
# 1. 将 Memory Search 服务商指定为 openai (以使用兼容协议)
openclaw config set agents.defaults.memorySearch.provider "openai"

# 2. 指定您要使用的 Embedding 模型名称 (替换为您实际调用的模型,如 text-embedding-3-small)
openclaw config set agents.defaults.memorySearch.model "text-embedding-3-small"

# 3. 填入自定义的 Base URL
openclaw config set agents.defaults.memorySearch.remote.baseUrl "https://api.example.com/v1/"

# 4. 填入自定义的 API Key
openclaw config set agents.defaults.memorySearch.remote.apiKey "sk-your-embedding-api-key"

如果您使用的 API 平台要求传递特定的 Headers,也可以用 JSON 格式写入:

shell
openclaw config set agents.defaults.memorySearch.remote.headers '{"X-Organization": "org-id"}' --json

验证 Memory Search 状态

为了确认记忆检索系统就绪,并且配置已生效,请使用无交互模式的依赖体检工具:

shell
openclaw doctor --non-interactive

在输出末尾的 "Memory search" 部分,如果您看到错误消失,或者明确提示配置了合法的 remote 端点,说明 Embedding 代理已接入成功。配置完成后,无需手动重启整个 Gateway 进程,新配置会在下次触发查询时自动更新索引。

常见问题

如何添加新的模型?

OpenClaw 默认会将用户配置与内置模型列表进行自动合并(merge 模式)。如果新的模型属于系统已知或您已经配置好的 Provider(例如您之前已经配置了 infini-ai,现在想在该服务商下额外添加一个 minimax-m2.5 模型),您需要在 models.providers 对应的模型数组中指定新的索引位置写入记录。

警告

配置底层的数组访问必须显式提供确切的索引数字(例如 models[1]),不支持类似于 models[] 的自动追加语法

您可以直接通过 CLI 的 --json 选项将完整的模型对象注入到新位置(注:因为 minimax-m2.5 等模型支持深度思考,我们在此额外配置了 "reasoning": true):

shell
# 假设之前 models[0] 已经被占用,现在需要显式指定在 models[1] 的位置新增 minimax-m2.5 模型
openclaw config set models.providers.infini-ai.models[1] '{
  "id": "minimax-m2.5",
  "name": "MiniMax M2.5",
  "contextWindow": 200000,
  "maxTokens": 200000,
  "input": ["text"],
  "reasoning": true
}' --json

如何修改模型配置?比如修改或新增字段

openclaw config set 命令底层使用了基于路径的精准增量更新逻辑(支持点号/数组方括号语法)。这意味着如果您指定了确切的末端路径,CLI 会深入配置树内部,仅修改或新增该单个叶子节点的值,而不会覆盖或重置路径上方的整个 Provider 或模型对象。

例如,在此前配置的默认模型 kimi-k2.5(占用 models[0] 槽位)也支持深度思考功能。如果您不仅想修改它的上下文窗口,还想补充开启它的 reasoning 能力声明,可以这样单独修改字段:

shell
# 修改它的 contextWindow 为 200000
openclaw config set models.providers.infini-ai.models[0].contextWindow 200000
# 开启它的 reasoning 深度思考能力声明
openclaw config set models.providers.infini-ai.models[0].reasoning true --json

如何添加全新的 API Provider?

如果您想接入一个全新的第三方 API 服务(特别是各种兼容 OpenAI 格式的聚合代理服务),不需要交互式向导,您也可以直接通过一条命令向 models.providers.<您的提供商ID> 整体注入一套完整的 JSON 对象配置。

配置中需要包含提供商层面的 baseUrlapiKey、以及调用的适配层 api(例如 openai-completions),并顺带定义该接口下的模型列表。示例如下:

shell
openclaw config set models.providers.infini-coding-plan '{
  "baseUrl": "https://cloud.infini-ai.com.com/maas/coding/v1",
  "apiKey": "sk-cp-your-api-key",
  "api": "openai-completions",
  "models": [
    {
      "id": "glm-5",
      "name": "GLM 5",
      "input": ["text"],
      "contextWindow": 198000
    }
  ]
}' --json

# 添加完毕并重启网关后,可直接将其设为您的全局对话主模型
openclaw models set infini-coding-plan/glm-5

OpenClaw 的自定义 API 提供商模型配置里包含哪些字段?

在 OpenClaw 中,一个完整的模型定义支持高度定制化。除了常用的 idname 等基础信息外,底层还支持成本核算、非标请求兼容等多种高级控制字段。主要可用字段清单如下:

  • 基础标识与能力限制

    • id (字符串):云端 API 提供商期望的确切模型 ID,例如 "minimax-m2.5"
    • name (字符串):CLI 和界面中展示给用户的人类可读名称。
    • input (数组):模型原生支持的输入载荷类型,例如 ["text", "image"]
    • reasoning (布尔值):指示该模型是否原生支持思维链/深度思考阶段。
    • contextWindow (数字):输入上下文窗口的最大 Token 长度。
    • maxTokens (数字):最大生成的输出 Token 长度。
  • 请求及协议定制

    • api (字符串):覆盖指定当前的 API 协议标准(例如 "openai-completions", "anthropic-messages", "openai-responses")。如果不填,默认继承父级提供商(Provider)的 API 设定。
    • headers (键值对象):发起请求时,仅为当前特定模型携带的自定义 HTTP 鉴权或控制 Header。
  • 账单计算与非标兼容(高级)

    • cost (对象):用于 OpenClaw 控制台花费估算,允许配置 input, output, cacheRead, cacheWrite 四种维度的开销单价。
    • compat (对象):用于应对各大模型厂商在接入“类 OpenAI”格式时的规范偏差行为。全量可用字段如下:
      • supportsStore (布尔值):是否支持记忆/存储(Store)API 特性。
      • supportsDeveloperRole (布尔值):是否支持 developer 角色(替代传统的 system 角色)。
      • supportsReasoningEffort (布尔值):是否支持显式参数来控制思考深度(Reasoning Effort)。
      • supportsUsageInStreaming (布尔值):是否支持并在流式输出末尾强制读取 Token 计费统计。
      • supportsStrictMode (布尔值):开启工具调用(Tool Use)时是否要求使用严格模式(Structured Outputs / Strict Mode)。
      • maxTokensField (字符串):指定最大输出 Token 数的请求载荷字段名(可选 "max_completion_tokens", "max_tokens")。
      • thinkingFormat (字符串):深度思考过程的流式包体解析解析格式(可选 "openai", "zai", "qwen")。
      • requiresToolResultName (布尔值):是否强制要求在提交工具返回结果(Tool Result)时额外带上工具本身的名称。
      • requiresAssistantAfterToolResult (布尔值):是否强制要求在发出 Tool Result 后,必须由系统补发一次空的 Assistant 消息以符合消息交替规则。
      • requiresThinkingAsText (布尔值):当 API 无法承载结构化深度思考流时,是否将其强行转录为纯文本(如 <thought>...</thought>)进行内容传递。
      • requiresMistralToolIds (布尔值):解决部分 Mistral 兼容后端对 Tool ID 的特异性验证问题。

如何更改主模型/默认模型?

最快捷的方法是使用 OpenClaw 的快捷命令直接设置全局默认模型:

shell
openclaw models set infini-ai/minimax-m2.5

如果您希望通过修改底层配置文件来实现,或者需要指定带有备用机制(Fallbacks)的更复杂的逻辑,可以通过修改 agents.defaults.model 字段实现:

shell
openclaw config set agents.defaults.model "infini-ai/minimax-m2.5"

完成更改后,新的对话会自动启用该模型,已经存在的历史会话可能需要发送 /new 或在控制台新开对话才能生效。

如何设置图像理解模型?

当您在聊天中上传图片并期望 Bot 能够对其进行视觉分析时,OpenClaw 会将请求路由到专门的图像模型通道(因为部分主模型并不具备视觉能力)。只要通过自定义提供商接入的模型支持多模态,就能完全通过 OpenClaw 命令行指定该模型为看图(Image)模型。

  1. 声明支持:在接入自定义提供商和模型时,由于 OpenClaw 为了保护系统崩溃,默认将未知自定义模型锁定在纯文本输入,所以必须通过命令行重写那条自建提供商配置里的 Capabilities 数组:
shell
openclaw config set models.providers.infini-ai.models[0].input '["text", "image"]' --json
  1. 指定为默认图片处理模型:在通过命令行指定默认对话的同时,你可以另外通过 set-image 专门指定某一个自定义模型为图片模型引擎:
shell
openclaw models set-image infini-ai/glm-4v

提示

models set-image 是 OpenClaw 提供的一条短命令,它在底层等同于通过 openclaw config set agents.defaults.imageModel 修改配置节点,两者的效果完全一致。

如此一来,无论您的主力交谈大模型是什么,在系统接到包含图片的请求时,就会直接从对应的自定义提供商那里拉起这个看图走专属通道来识别图片。

AICoder 不提供公网 IP,能够部署 OpenClaw 吗?

在智算云平台的安全策略下,AICoder 实例允许自由访问外部互联网,但限制外部直接通过 HTTP 访问实例(仅开放 SSH 端口)。您可能会担心:即使部署了 Bot,外部的 IM 平台(如 Telegram, Discord)如何将消息推送给内网的 Bot 呢?

OpenClaw 的架构设计完美规避了这一限制,因为它抛弃了传统的 Webhook(被动接收)模式,转而采用了更适合内网环境的技术:

  1. Long Polling(长轮询):Bot 主动向服务器发起请求询问是否有新消息。这就像您去邮局查看信件,而不是等待邮递员上门,因此不需要您家有对外开放的投递口。Telegram Bot 默认即使用此模式。
  2. WebSocket:Bot 主动与服务器建立一条持久化的双向通道。就像您主动拨通电话并保持连线,对方通过这条电话线随时说话。Discord 和 Slack 均采用此机制。

这两种模式的核心都在于 「连接由 Bot 内部主动发起」。因此,您可以在 AICoder 这种无公网 IP 的安全容器环境中,零配置地运行高响应速度的即时通讯机器人,既安全又省心。

我担心 AICoder 实例会被关闭回收?

不需要担心。如果您是付费用户(已购买包年包月资源池、弹性开发机),在该可用区的 AICoder 实例将长期存活

如果您是免费用户,AICoder 仅适用于交互式使用,非活跃会话会在 30 分钟后自动结束(但数据会保留)。

详细策略请参考 AICoder 回收策略

"重置 AICoder" 按钮是做什么的?

慎用! 点击该按钮会重置整个 AICoder 环境。这意味着您的根文件系统(rootfs)会被清空,包括您安装的 OpenClaw 环境和配置都将丢失

仅当环境彻底损坏无法修复时才建议使用。详见 AICoder Shell - 重置 AICoder

为何使用 PM2 管理进程?为什么 openclaw gateway start 不能用?

细心的开发者可能注意到,我们在教程中始终强调使用 PM2,而非 OpenClaw 官方文档中常见的 Daemon 管理命令。这是为了适应 AICoder 的容器化架构,也是一种针对开发环境的最佳实践。

  1. Systemd 的缺失:AICoder 实例本质上是一个轻量级的 Docker 容器。为了保持环境的敏捷与纯净,它并未像完整虚拟机那样预装 Systemd 初始化系统。OpenClaw CLI 的原生服务命令(如 openclaw gateway start)底层强依赖 Systemd 来注册服务,因此在容器内运行会报错。
  2. OpenClaw 的“自重启”并不等于守护进程:OpenClaw 本身具备一部分“有意重启”能力,例如在某些重启流程里优雅关闭后再拉起 Gateway,或在 CLI 启动早期做一次自我重启包装。但这种能力更接近应用内部的重启逻辑,而不是完整的进程守护。它不能替代 PM2、systemd 或容器运行时的重启策略,尤其不能天然覆盖“SSH 会话结束后继续存活”“统一查看日志”“明确由谁负责拉起服务”这些运维需求。
  3. PM2 的接管:PM2 在这里充当了「应用级进程管理器」。在 AICoder 这类容器里,更稳妥的写法是 pm2 start /usr/bin/env --interpreter none --name openclaw-bot -- OPENCLAW_NO_RESPAWN=1 /usr/bin/openclaw gateway run --verbose。这样既能关闭 OpenClaw CLI 的额外自我重启包装,又能确保 PM2 直接管理真实的 Gateway 进程,而不是只管理一个外层启动器。
  4. 操作等价性:当您运行 pm2 restart openclaw-bot 时,其最终效果等同于重启底层的 Gateway 进程;只是这里的重启动作由 PM2 完成,而不是由 systemd 完成。

故障排除:常见问题

如果您在执行非交互 onboarding 或启动 Gateway 时遇到问题,请优先检查以下几项:

  1. systemctl --user unavailable

    • 原因:命令中误用了 --install-daemon,或后续执行了 openclaw gateway install/start/restart
    • 解决:确认 onboarding 使用的是 --no-install-daemon,并改用 PM2 管理进程。
  2. 模型 API Key 未生效

    • 原因--custom-api-key 传入错误,或 baseUrl / modelId 与实际服务不匹配。
    • 解决:重新检查 GENSTUDIO_API_KEY--custom-base-url--custom-model-id,然后运行 openclaw models 验证。
  3. pm2 logs openclaw-bot 没有输出,openclaw healthgateway closed (1006 abnormal closure)

    • 原因:这通常说明 PM2 托管的不是"真正监听端口的 Gateway 进程",而只是一个外层包装进程;或者旧的游离 Gateway 进程仍然占着 18789 端口。这样会出现 pm2 status 显示 online,但 ss -ltnp | grep 18789 看不到对应 PM2 PID 的现象。
    • 解决:先运行 pm2 describe openclaw-botss -ltnp | grep 18789ps -ef | grep openclaw | grep -v grep 交叉确认"谁在监听端口"。如果您之前使用的是 pm2 start "$(command -v openclaw)" --name openclaw-bot -- gateway run 这种旧写法,请先删除旧 PM2 条目,再停止残留的 Gateway 进程,最后改用 pm2 start /usr/bin/env --interpreter none --name openclaw-bot -- OPENCLAW_NO_RESPAWN=1 /usr/bin/openclaw gateway run --verbose 重新创建。这样 PM2 才能真正接管 Gateway 主进程,并把启动日志写入 pm2 logs openclaw-bot
  4. Missing Control UI assets

    • 原因:安装包可能缺失预编译前端资源。
    • 解决:通常不影响 Bot 核心能力。如 Dashboard 无法加载,可尝试执行 npm install -g openclaw@latest 重新安装。
找不到想要的答案?
让 AI 助手为您解答