乐于分享
好东西不私藏

手把手搭建 + 深度架构解析:OpenClaw 私人 AI 助手完全指南

手把手搭建 + 深度架构解析:OpenClaw 私人 AI 助手完全指南

从零部署你的专属 AI 助理,再到读懂它背后的优雅设计——这一篇就够了

最近 AI 助手圈刮起了一股“私人部署”风,厌倦了各大平台的限流和隐私担忧,我也折腾了一把,搭了个完全自己掌控的 AI 助手——OpenClaw。今天这篇文章,我会先把安装配置技能扩展的完整流程讲清楚,然后带你深入它的架构设计与扩展哲学。不管你是想快速拥有一个属于自己的 AI 助理,还是想学习它背后的优雅设计,这篇都能满足你。


第一部分:从零搭建你的 OpenClaw

为什么选择 OpenClaw?

  • 完全本地掌控
    :所有数据都在你自己的服务器上,无隐私泄露,无内容审核(合法使用前提下)。
  • 多通道支持
    :WhatsApp、Telegram、Slack、Discord、飞书……你常用的聊天软件都能接入。
  • 技能生态
    :通过 ClawHub 一键安装天气、搜索、博客生成、浏览器自动化等技能。
  • 开源免费
    :MIT 协议,代码透明,可二次开发。
  • 多模型支持
    :OpenAI、Anthropic、火山引擎等主流大模型随意切换。

简单说,OpenClaw 就是一个自托管的 AI 助理控制中心,把大模型能力接入你的日常聊天工具,还能无限扩展技能。

环境准备

  • 操作系统
    :Ubuntu 22.04+(macOS 也可,Windows 推荐 WSL2)
  • Node.js
    :Node 24 或 Node 22.16+(必须新版本)
  • 内存
    :≥1GB(推荐 2GB+)
  • 网络
    :能正常访问 AI 模型 API 即可

一键安装

OpenClaw 提供了非常友好的安装脚本,整个过程只需两条命令:

npm install -g openclaw@latest
openclaw onboard --install-daemon

为什么不用 Docker?官方也提供 Docker 镜像,但 npm 安装更简单,升级也方便。--install-daemon 会自动配置 systemd 用户服务,实现开机自启。

安装向导会交互式地问你几个问题:

  1. 模型配置
    :选择 AI 模型,填写 API Key(推荐火山引擎,国内快且便宜)。
  2. 工作空间位置
    :默认 ~/.openclaw/workspace,直接回车。
  3. 通道配置
    :选择聊天平台(如飞书)。
  4. 后台服务
    :确认安装开机启动服务。

跟着提示走就行,对新手非常友好。

部署后验证

openclaw gateway status   # 查看状态
openclaw gateway start    # 手动启动(若未启动)
openclaw doctor           # 全面检查配置问题

doctor 命令会帮你检查 API Key、端口占用、权限安全等,一定要跑一遍

远程访问配置(可选)

如果你把 OpenClaw 部署在 VPS 上,想用手机 APP 访问,推荐使用 Tailscale(官方方案):

// ~/.openclaw/openclaw.json
{
  "gateway": {
    "tailscale": { "mode": "serve" },
    "bind": "loopback"
  }
}

这样 Tailscale 会自动生成 HTTPS 地址,手机连上 Tailscale 网络就能访问,无需域名和 SSL 证书。如果需要公网访问,可将 mode 改为 funnel 并设置密码:

{
  "gateway": {
    "tailscale": { "mode": "funnel" },
    "bind": "loopback",
    "auth": { "mode": "password", "password": "你的密码" }
  }
}

安装技能扩展

OpenClaw 最强大的就是技能系统,通过 ClawHub 一键安装:

npm i -g clawhub               # 安装 CLI
clawhub search weather         # 搜索技能
clawhub install weather        # 安装天气技能
clawhub list                   # 列出已安装技能
clawhub update --all           # 更新所有技能

推荐几个实用技能:

  • weather
    :每日自动推送天气预报。
  • tavily-search
    :让 AI 实时联网搜索。
  • playwright
    :浏览器自动化(截图、点击、提取数据)。
  • healthcheck
    :定期检查服务器 CPU/内存/磁盘。

安装后重启网关生效:

openclaw gateway restart

自定义 AI 助手的性格

工作空间下有四个关键文件:

  • AGENTS.md
    :权限与任务优先级(什么能做什么不能做)。
  • SOUL.md
    :AI 的风格和性格。
  • USER.md
    :关于你的信息(时区、技术栈、爱好等)。
  • TOOLS.md
    :环境信息(API Key、服务器地址等)。

例如我的 SOUL.md

# SOUL.md —— 你的灵魂

我不是聊天机器人,我是助理。

## 核心原则
**真诚帮助,不表演。** 省略"好问题!"、"我很乐意帮你..." —— 直接干活。
**要有自己的观点。** 没有性格的助手就是带步骤的搜索引擎。

## 边界
- 隐私永远是隐私,绝不泄露
- 对外操作拿不准,先问再做

配置后,AI 回答问题干脆利落,效率极高。

常见问题解决

  1. Node 版本过低:使用 nvm 安装 Node 24

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
    nvm install 24 && nvm use 24
    npm install -g openclaw@latest
  2. 端口被占用:默认端口 18789,查看并杀掉进程或修改配置

    lsof -i :18789
    kill <pid>
  3. 技能安装失败:检查网络,或手动下载技能放到 ~/openclaw/workspace/skills/


第二部分:深入理解 OpenClaw 的架构设计与扩展哲学

安装完成、跑起来之后,你可能会好奇:它为什么能这么灵活?背后的设计思想是什么?

重新理解 OpenClaw:它到底是什么?

很多人以为 OpenClaw 是另一个 ChatGPT 客户端,其实不然——它是一个个人 AI 助理的控制平面,是所有 AI 能力的“枢纽”。

WhatsApp / Telegram / Slack / Discord / 飞书 / ...
               │
               ▼
┌───────────────────────────────┐
│            Gateway            │  ← 唯一的长生命周期守护进程
│       (控制平面 + WS 网络)     │
│     ws://127.0.0.1:18789      │
└──────────────┬────────────────┘
               │
       ┌───────┼───────┐
       │       │       │
    Pi Agent  CLI   WebChat  ← 各种客户端接入
       │       │       │
    macOS/iOS/Android Nodes  ← 设备节点,执行本地能力
       │       │       │
       ▼       ▼       ▼
    Tools / Skills / Hooks  ← 能力扩展体系

传统 AI 应用 = UI 界面 + 直接调用大模型 API
OpenClaw = 网关控制平面 + 多客户端接入 + 技能扩展体系

它把“接入通道”、“AI 推理”、“能力扩展”三个问题解耦了——你可以随时换模型、随时加通道、随时装新技能,互不干扰。

WebSocket 网关设计:为什么所有东西都走 WebSocket?

  1. 天生适合长连接:网关需要长时间保持和各通道的连接,同时接受客户端实时连接,WebSocket 比 HTTP 短连接高效,比 TCP 自定义协议简单。

  2. 统一的请求-响应+事件推送模型

    • 请求:{type:"req", id, method, params}
    • 响应:{type:"res", id, ok, payload|error}
    • 事件:{type:"event", event, payload}
      一套协议通吃所有场景。
  3. 类型安全的协议设计:用 TypeBox 定义协议,自动生成 JSON Schema 甚至 Swift 模型代码,保证跨平台类型安全。

    // 真实的 OpenClaw 协议定义示例
    export const ConnectRequest = Type.Object({
      deviceId: Type.String(),
      platform: Type.String(),
      challenge: Type.String(),
      signature: Type.Optional(Type.String()),
      role: Type.Optional(Type.Union([Type.Literal('client'), Type.Literal('node')])),
    })

只要你遵循协议,任何语言都可以写客户端——官方已支持 macOS/iOS/Android,你自己写个 Windows 客户端也完全没问题。

节点架构:为什么要把设备和网关分开?

设想一个场景:

  • 网关部署在 VPS 上(稳定在线)
  • 但你想让 Mac 执行截屏、拍照、本地通知
  • 甚至让 Android 手机提供位置、摄像头能力

Node 模式 解决了这个问题:

        VPS 服务器
      ┌──────────┐
      │  Gateway │  ← 负责消息通道、AI 推理、技能执行
      └────┬─────┘
           │ WS over Tailscale
           │
      ┌────▼─────┐      ┌──────────┐
      │ macOS    │  ...  │ Android  │  ← Node 节点,只提供本地能力
      │ 节点     │      │ 节点     │
      └──────────┘      └──────────┘

网关通过 WebSocket 将设备操作命令发给 Node 节点执行,结果返回。例如让 Android 拍照:

  1. 你在飞书发消息:“帮我拍一张客厅的照片”
  2. 网关知道 camera.* 命令需要 Android 节点执行
  3. 网关通过 WebSocket 发 node.invoke 给 Android 节点
  4. Android 拍照并返回图片
  5. 网关把图片发回飞书

网关可以跑在云端,但仍然能使用各个本地设备的能力——你只需在手机上跑一个轻量级的 Node 节点,不用把整个网关塞进手机。

技能系统:为什么它的扩展能力这么强?

技能加载优先级(高优先级覆盖低优先级):

<workspace>/skills          → 你的工作区技能(最高)
<workspace>/.agents/skills
~/.agents/skills
~/.openclaw/skills
bundled skills              → 官方内置技能(最低)
skills.load.extraDirs       → 额外目录(最低)

觉得官方技能不好用?直接在工作区 skills 目录放一个同名技能,就会自动覆盖,不用改任何核心代码。

配置覆盖机制:在 openclaw.json 里对每个技能做配置覆盖,技能作者只需声明需要的配置项。

{
  "skills": {
    "entries": {
      "tavily-search": {
        "enabled": true,
        "apiKey": { "source": "env", "id": "TAVILY_API_KEY" }
      },
      "some-other-skill": { "enabled": false }
    }
  }
}

热重载技能:默认开启文件监听,修改 SKILL.md 或代码后,下次对话自动加载新逻辑,无需重启网关。

Agent Loop 设计:如何处理并发和排队?

  • 每个会话一个队列
    :同一会话的请求串行执行,不会乱序。
  • 支持不同队列模式
    :立即执行或收集批量处理。
  • 全局并发控制
    :避免服务器过载。

这个朴素的方案解决了会话状态一致性问题——两个工具调用不会同时修改会话历史。

钩子系统:在各个环节插入你的逻辑

OpenClaw 允许你在 Agent 执行循环的多个环节插入自定义逻辑:

before_model_resolve    ← 模型解析前,可动态换模型
before_prompt_build     ← Prompt 构建前,注入动态上下文
before_agent_start      ← Agent 开始前
before_tool_call        ← 工具调用前,可拦截或阻止
after_tool_call         ← 工具调用后,处理结果
before_agent_reply      ← Agent 回复前,可干掉回复自己返回
agent_end               ← Agent 结束后,做日志或清理
session_start / session_end
gateway_start / gateway_stop

例如要给所有工具调用加审批流,只需在 before_tool_call 钩子里返回 { block: true } 即可,无需改核心代码。钩子是链式调用的,高优先级可提前终止。

安全模型:默认安全,而非事后补窟窿

  1. 配对认证:任何客户端连接网关都需配对。本地连接自动批准,非本地连接必须手动批准,且每次连接要挑战签名。

  2. 沙箱隔离:可配置让非主会话(如群聊里的其他人消息)跑在 Docker 沙箱中,默认禁用浏览器、Canvas 等敏感工具。

    {
      "agents": {
        "defaults": {
          "sandbox": { "mode": "non-main" }
        }
      }
    }
  3. 审批机制:执行敏感 shell 命令需要用户手动批准,防止模型幻觉执行危险操作。

Tailscale 集成:为什么官方这么推崇?

  • 默认加密
    :HTTPS 免证书。
  • 身份认证
    :只有你 Tailscale 网络内的设备能访问,无需额外用户系统。
  • 内网穿透
    :网关绑在 127.0.0.1,不暴露公网,从根源减少攻击面。
  • Funnel 支持
    :需要公网访问时一键开启,证书自动配置。

OpenClaw 甚至会自动帮你配置 Tailscale Serve/Funnel,你只需在配置里写个 mode

设计哲学:小工具粘合,而非大而全

把复杂问题分解成简单问题,每个部分只做一件事,然后用清晰的接口把它们粘起来。

  • Gateway 只做控制平面和通信,不自己写推理。
  • 技能只做能力扩展,每个技能聚焦一个领域。
  • Node 只提供设备能力,不干涉业务逻辑。
  • 钩子只做扩展点,不强求你用什么方式扩展。

这种设计让项目非常容易理解和扩展:想加新通道?按通道接口实现就行。想加新技能?写个 SKILL.md 放对目录就行。


第三部分:进阶建议与使用心得

1. 善用工作区覆盖

想修改某个技能,直接复制到 <workspace>/skills 目录下修改,升级 OpenClaw 也不会覆盖你的改动。

2. 合理配置钩子

可以做很多有趣的事:每次对话结束自动备份、敏感操作短信审批、统计 token 用量、统一回复格式等。

3. 节点分层使用

网关放 VPS,各个手机电脑当节点接入——网关永远在线,设备提供本地能力,手机只跑轻量节点不费电。

4. 自定义 AGENTS / SOUL

花点时间写好 AGENTS.md 和 SOUL.md,定义好权限和风格。我自己的 SOUL.md 就一句话:“真诚帮助,不表演,直接干活”,用起来爽得不行。

实际使用体验

  • 响应速度快
    :网关在自己服务器上,比网页版 ChatGPT 还快。
  • 稳定性好
    :systemd 托管,进程掉了自动拉起。
  • 可扩展性强
    :想要什么功能就装什么技能,甚至可以自己写。
  • 真正私人
    :所有对话记录存在本地,不用担心被训练或泄露。

我现在每天早上,飞书群里已经自动推送天气预报、新闻摘要、每日口语练习——相当于一个私人秘书。


结语

OpenClaw 是目前个人部署 AI 助手的最佳方案之一:安装简单、生态丰富、完全开源免费。更难得的是,它的架构设计分而治之、清晰优雅——好的架构不是设计成什么都能做,而是设计好扩展点,让别人能轻易加上能力。

如果你还没用过,看完这篇文章,不妨花半小时动手搭一个。如果你已经在用,希望架构解析部分能让你对它有更深的理解,发掘出更多玩法。

项目源码:https://github.com/openclaw/openclaw
官方文档:https://docs.openclaw.ai
技能市场:https://clawhub.com