我一直觉得,AI Agent 这类东西最劝退人的不是它有多难,而是网上的教程清一色默认你是个“读了十年计算机的老手”。一会儿让你配环境变量,一会儿让你改 source 列表,折腾一晚上连个对话框都没跑起来。所以当 OpenClaw(社区也叫 Clawdbot)这类项目出现的时候,我第一反应是:能不能真正做到“一条命令跑起来”?实测下来,答案是能,但前提是你得知道命令背后在干什么,以及踩坑点在哪。
这篇教程就是干这个的。我会带着你从零开始,先在云服务器上用 1 分钟把 OpenClaw 部署起来,再教你把同样的流程搬到本地 Windows 或 Linux 机器上,最后讲清楚 skill 到底是个什么东西、怎么集成、怎么写一个最简版本。整个过程全程保姆级,每个命令我都会解释它干了啥,每个配置我都会说清楚为什么这么写。不管你是第一次碰 Docker 的小白,还是想了解 Agent 扩展机制的进阶玩家,照着敲就行。
1. 部署前的准备:搞清楚你要跟哪些“零件”打交道
1.1 方案选型:为什么我坚持用 Docker 而不是裸机装
在正式开始敲命令之前,我想先花两分钟跟你聊聊部署方案的选型问题。因为 OpenClaw 本身是一个 Node.js 项目,社区也提供了一键安装脚本,可以让你直接在系统上装依赖、跑进程。但我的建议始终是:能用 Docker 就别裸奔。
原因有三点。第一,OpenClaw 的依赖链不算短,Node 版本、npm 包、配置文件路径,稍有偏差就能让整个服务起不来;而 Docker 镜像把这些乱七八糟的依赖全部打包好了,你拉下来就是一个干净、固定的运行环境。第二,OpenClaw 需要调用外部 API,同时也会监听本地端口,容器化之后端口映射、网络权限、日志管理都变得非常可控,出了问题删掉容器重建就行,不会污染你的系统。第三,云服务器和本地电脑的操作系统可能不一样,你在 Mac 上本地调试没问题,但云上是个 CentOS,裸机部署多半会遇到奇奇怪怪的兼容性差异,而 Docker 把这种差异全部抹平了。
打个比方,Docker 就像是一个打包好的“毛坯房”,里面水管、电线、门窗全部装好了,你只需要拎包入住;而裸机部署就像你买了一块地自己盖楼,每一步都可能出问题。对于“0 基础 + 1 分钟部署”这个目标来说,Docker 是不二之选。
我目前常用的部署方式是:云服务器上用 Docker 跑 OpenClaw,本地开发时同一套镜像直接拉起来,两边行为一致,几乎没有环境差异导致的坑。这样也方便我把配置文件统一管理,后面讲 skill 集成的时候你会体会到这个好处。
1.2 硬件与环境要求:云上和本地各需要什么
别被“AI Agent”这个词吓到,OpenClaw 本身不是什么吃显存的大模型,它只是一个调度框架,真正干活的模型在云端 API 或者你本地跑的 Ollama 里。所以它对硬件的要求低得惊人。
| 部署方式 | 推荐配置 | 最低可跑配置 | 使用场景 |
|---|---|---|---|
| 云服务器 | 2核4G,40G SSD | 1核2G(轻量级使用) | 7x24 小时在线、接入 Teams/飞书等办公场景 |
| 本地电脑 | 16G内存,随便一颗现代CPU | 8G内存,Docker Desktop 能跑 | 开发调试、本地模型联动、学习体验 |
有一点必须提醒你:OpenClaw 在云上跑和在本地跑,唯一的硬性区别是你有没有外网访问能力。因为它的多数 skill 和部分 channel 回调需要公网地址,本地跑的话一般只做调试用,真要接入飞书机器人或者 Teams 机器人,还是建议放在云上。另外,如果你打算在本地接 Ollama 这类本地模型,那就要考虑模型本身的参数量和显存占用,2B 模型大概需要 4-6G 内存,7B 模型建议 16G 以上。这个我后面会专门讲。
操作系统方面,Docker 官方支持 Windows、macOS、主流 Linux 发行版。Windows 上用 Docker Desktop 即可,Linux 上用命令行安装 docker-ce。需要注意 Windows 老版本(比如 Win10 家庭版)可能没有 Hyper-V,装 Docker Desktop 会失败,建议直接搜“启用 WSL2”教程,把 WSL2 打开再装 Docker,这是最省事的路子。
1.3 前置资源:API 密钥和大模型 API 的选择思路
OpenClaw 自己不带大模型,它只是一个“大脑的经纪人”,真正思考的是你接入的模型。在你开始部署之前,先想清楚一个问题:这个 Agent 的大脑要用谁的?
主流选择有三类:
- 大厂官方 API:DeepSeek、阿里千问、OpenAI、Anthropic 等,优点是与 OpenClaw 兼容性好、响应快、不用自己维护模型;缺点是花钱,但 DeepSeek 这类国产模型的定价非常便宜,日常使用成本可以忽略。
- 本地模型:通过 Ollama 跑 Qwen、DeepSeek 蒸馏版、Ministral 这类开源模型,OpenClaw 通过本地接口对接。优点是免费、数据不出内网;缺点是电脑性能要有底线,且模型能力不如云端 API 强。
- 中转/聚合 API:一些服务商提供多模型聚合接口,OpenClaw 也能对接。这个我不展开推荐,你自己选择正规渠道就行。
我建议小白第一次跑通流程时直接用 DeepSeek 或千问的 API,因为它们的接口兼容 OpenAI 格式,OpenClaw 配置起来几乎是填空。先去对应开放平台注册账号、创建 API Key、充值几块钱,部署的时候就能直接用。等你把整个流程跑熟了,再尝试把大脑换成 Ollama 本地模型也不迟。
这里我踩过一个大坑:很多人部署完之后发现 Agent 回复“/api_key 没有配置”,但明明在配置文件里写了。后来我发现是配置文件里的 Key 字段和 OpenClaw 实际读取的环境变量名对不上。所以,拿到 API Key 之后,先别急着往配置里填,先想清楚它是给哪个 provider 的、格式长什么样,这个到第二章我会详细讲。
2. 核心配置解析:看懂 OpenClaw 的“大脑”和“手脚”
2.1 配置文件到底长什么样:一个真实案例拆解
OpenClaw 启动后会自动生成一个配置目录,通常是工作目录下的~/.openclaw/,里面有一个叫config.yaml的主配置。你第一次跑起来之后会看到它自动生成了一个默认配置,那个默认配置是不带任何模型 API 的,需要你自己填。
拿我自己的实际配置举个例子:
# config.yaml 核心摘录 agent: name: "my-helper" model: provider: "deepseek" # 指定用哪个模型服务商 api_key_env: "DEEPSEEK_API_KEY" # 从环境变量里读 Key base_url: "https://api.deepseek.com" model_name: "deepseek-chat" channels: - type: "terminal" # 让 Agent 在命令行里跑起来 - type: "feishu" # 接入飞书机器人 app_id: "cli_xxxxx" app_secret: "xxxxx" servers: - port: 8080 # 提供一个 HTTP 服务,方便调试看到这个配置,你应该能理解 OpenClaw 的设计理念了。它把 Agent 拆成了三个核心部分:大脑(model)、手脚(channels)和神经(servers)。大脑负责理解你说的话、生成回复;手脚负责跟外界交互,比如在飞书里收消息、在 Teams 里发卡片;神经负责提供 API 接口,方便你别的方式调它。
这里最值得注意的是api_key_env这个字段。它是说你可以在配置文件里不直接写 Key,而是写一个环境变量的名字,然后在启动容器或系统里设置这个环境变量。这样做的最大好处是:你的配置文件可以被分享、进 Git 仓库,不会把你的密钥泄露出去。我强烈建议你也这样做,特别是打算把配置备份到云上或者给朋友看的时候。
还有一个容易忽略的字段是model_name。不同服务商的三款模型名称五花八门,比如 DeepSeek 叫deepseek-chat,阿里千问叫qwen-plus。如果你填错了名字,OpenClaw 调用 API 时就会报错,且报错信息通常很模糊,比如“Model not found”或者“Unknown request URL”。所以填配置时一定要去对应模型服务商的文档里查一遍准确的模型名,别凭标题里的印象填。
2.2 模型怎么选:DeepSeek、千问还是本地 Ollama
Model 配置决定了 Agent 的“智商”。不同模型在处理 Agent 场景时的差距非常明显,特别是工具调用(function call)能力。我自己的实测感受是:如果你要用 skill,至少要选一个能稳定输出工具调用的模型。DeepSeek 的deepseek-chat虽然是性价比之王,但偶尔也会出现“忘记调用工具直接硬编回复”的情况;千问系列在中文场景下表现更稳,但价格略高。
如果你不想花钱,本地 Ollama 是很好的替代方案。Ollama 的安装非常简单,装好后在终端跑ollama run qwen2.5:7b就能把模型拉起来。然后你要把 OpenClaw 的 provider 指向本地地址:
agent: model: provider: "ollama" base_url: "http://host.docker.internal:11434" # 注意:容器内访问宿主机要用这个 model_name: "qwen2.5:7b"为什么写成host.docker.internal而不是localhost?因为 OpenClaw 跑在 Docker 容器里,容器里的localhost指的是容器自己,不是你的宿主机。host.docker.internal是 Docker 给容器预留的一个魔法域名,指代宿主机。这一点非常容易踩坑,很多人本地模型配了半天连不上,就是卡在这。
至于模型的温度、max_tokens 这些参数,我建议新手先不要动,保持默认即可。等你跑通了,再慢慢调“temperature”来让 Agent 更活泼或更保守。
2.3 skill 到底是个什么东西:从目录结构到触发机制
如果你用过 ChatGPT 的插件或者 Coze 的插件,那 skill 一点也不陌生。skill 就是给 Agent 加装的一根“专用工具手”,它由一组指令、脚本和配置文件组成,目的是让 Agent 在特定话题下干得更专业。
OpenClaw 的 skill 机制很老派也很务实:每个 skill 就是一个文件夹,放在~/.openclaw/skills/下面,里面至少有一个SKILL.md文件作为说明书,还可能有几个脚本文件。当你在对话里提到跟这个 skill 相关的关键词时,Agent 会去读 SKILL.md,按照里面的说明一步一步执行。
我给一个最简单的 skill 例子,名字叫math_helper,作用是让 Agent 在回答数学问题时先算再答:
mkdir -p ~/.openclaw/skills/math_helper cat > ~/.openclaw/skills/math_helper/SKILL.md << 'EOF' # math_helper ## 描述 这是一个数学计算辅助 skill。当用户提出数学计算问题时,必须使用 python3 脚本先计算,再给出结论。 ## 触发条件 用户消息中包含“计算”、“多少”、“等于”等词,或明显是一个数学表达式。 ## 执行步骤 1. 接收用户输入 2. 提取表达式 3. 调用同目录下 calc.py 完成计算 4. 把结果整合成回答 EOF cat > ~/.openclaw/skills/math_helper/calc.py << 'EOF' import sys print(eval(sys.argv[1])) EOF这样建好之后,重启 OpenClaw,你再说“帮我计算 12345 乘以 6789”,Agent 就会调用这个 skill,而不再是凭它自己的算力硬算。这个模式的价值在于:你可以把任何重复性的工作固化成 skill,比如查天气、做笔记、翻译文档、调用公司内部 API 等。
这里必须强调一个程序员思维的转变:skill 的核心不是写脚本本身,而是定义好“什么时候触发”和“怎么执行”。SKILL.md 写得越清晰,Agent 调用的准确率越高。我见过不少人写 skill,脚本牛逼得不行,但 SKILL.md 就一句话,结果 Agent 压根不触发。你得把它当成一份给“笨但认真”的实习生看的说明书。
2.4 channel 选择与平台接入:飞书、Teams 还是 CLI
channel 是 OpenClaw 的“耳朵和嘴巴”,决定了 Agent 从哪儿听消息、把消息发到哪儿。新手从terminalchannel 开始是最稳的,因为不需要任何平台配置,直接就地在命令行里跟 Agent 对话。
但大多数人感兴趣的是接入办公软件,让 Agent 变成团队里一个真正的成员。常见的选择是飞书和 Microsoft Teams。配置方式在上面的示例里已经给过雏形,飞书需要在开放平台创建应用、拿到 App ID 和 App Secret,再把消息回调地址填到平台后台。Teams 则更复杂一点,需要你在 Azure 门户注册机器人应用,配置 Bot ID 和密码。
这里我想特别提醒一个 2025 年 OpenClaw 社区特别热的痛点:飞书输出容易被截断。原因是飞书消息有长度限制,Agent 回复一长就直接被切掉,用户只看到半截话。解决思路有两个:一是把模型配置里的max_tokens调小,逼 Agent 说短话;二是写一个专门的截断处理 skill,让 Agent 输出前强制分段,或者把长内容写成 Markdown 消息卡片。
就我的体验来说,如果你只是想自己体验一下 Agent,用terminal就够了;如果你想让它干活、接入团队协作,优先选飞书,因为国内网络环境稳定、文档丰富;Teams 适合外企或习惯 Office 生态的团队。选 channel 的核心标准不是“哪个酷”,而是“你的团队本来就用哪个”。
3. 实操部署全流程:云端 1 分钟跑起来
3.1 云端部署:购买服务器后的 5 步操作
我在云上部署过不下十次,从腾讯云到阿里云到轻量级 VPS 都试过。最流畅的路径是:买一台 2 核 4G 的轻量服务器(系统选 Ubuntu 22.04),然后按下面五步走。
第一步,更新系统并安装 Docker:
curl -fsSL https://get.docker.com | sh systemctl start docker这个命令秒装 Docker 官方源,不用你去配什么 yum 源。装完之后docker --version验证一下。
第二步,拉取 OpenClaw 镜像。社区镜像名通常是ghcr.io/openclaw/openclaw或者 Docker Hub 上的openclaw/openclaw,具体看你用的版本说明。我用的命令是:
docker pull openclaw/openclaw:latest第三步,创建配置目录和密钥文件:
mkdir -p /opt/openclaw export DEEPSEEK_API_KEY=sk-你的密钥第四步,启动容器,把内部端口映射到宿主机:
docker run -d \ --name openclaw \ -p 8080:8080 \ -v /opt/openclaw:/root/.openclaw \ -e DEEPSEEK_API_KEY=$DEEPSEEK_API_KEY \ openclaw/openclaw:latest这行命令看着长,拆开其实就四件事:给容器起名、把宿主机 8080 端口映射到容器内部 8080、把/opt/openclaw目录挂载成容器内的工作目录、把刚才设置的环境变量传进去。
第五步,验证启动是否成功:
docker logs -f openclaw看到日志里出现类似“Agent is running”的字样,就说明部署成功了。此时你可以直接敲docker exec -it openclaw /bin/bash进入容器,跑一个对话测试。
实测下来整个过程不会超过两分钟,唯一可能卡住的是拉镜像那一步,如果你服务器网络在境外资源上比较慢,可以配置镜像加速器(这个每个云厂商控制台都有教程)。拉下来之后启动是非常快的。
3.2 本地部署:Windows 用户和 Linux 用户的两种姿势
本地部署的最终效果跟云上一样,但有一个前提:你必须先把 Docker 装好。Windows 用户直接安装 Docker Desktop 就行,记得安装完之后把 WSL2 打开。Linux 用户按上一节第一步那样安装 docker-ce 即可。
装好 Docker 之后,流程跟云上几乎完全一样。我直接给 Windows 用户一个可以在 PowerShell 里跑的版本:
mkdir C:\openclaw docker pull openclaw/openclaw:latest docker run -d --name openclaw -p 8080:8080 -v C:\openclaw:/root/.openclaw -e DEEPSEEK_API_KEY=sk-xxx openclaw/openclaw:latest注意 Windows 的路径挂载格式是C:\openclaw这种盘符写法,在 Docker Desktop 里会自动转换成宿主机路径。如果你用的是 Git Bash,路径写法可能又要变成/c/openclaw,反正多试两下就懂了。
本地启动成功后,你在浏览器访问http://localhost:8080就能看到一个简单的调试页面,或者在终端里执行:
docker exec -it openclaw openclaw chat直接在命令行里跟 Agent 对话。这个“本地 Chat”模式特别适合练手,因为它不依赖任何外部回调服务,关键是还能看到 Agent 的完整日志输出,对理解 skill 的触发逻辑帮助极大。
3.3 本地模型联动:Ollama 与 OpenClaw 的低成本组合
本地部署 + 本地模型是很多人追求的“离线可用的 AI 助手”。真要把这两样串起来,核心就在于让容器里的 OpenClaw 找到宿主机里的 Ollama。这里我把步骤拆解一遍。
第一步,宿主机安装 Ollama,装完跑一个轻量模型:
curl -fsSL https://ollama.com/install.sh | sh ollama pull qwen2.5:3b ollama run qwen2.5:3b第二步,修改 OpenClaw 配置,把 model provider 指到 Ollama。配置文件里写上:
agent: model: provider: "ollama" base_url: "http://host.docker.internal:11434" model_name: "qwen2.5:3b"第三步,重启容器让配置生效:
docker restart openclaw然后你在命令行里跟 Agent 说一句话,如果它回复了,那整套本地模型链路就通了。如果没通,99% 的问题是base_url写错。在容器里跑一个curl http://host.docker.internal:11434就能验证 Ollama 是否可达。
这个组合的吸引力在于完全免费、完全离线。不过我也得说实话:3B 模型的智商跟deepseek-chat差了两个量级,更复杂一点的 skill 调用容易翻车。所以我的建议是,本地模型适合做测试、做隐私保护场景,真要干重活还是得接云端 API。
3.4 验证技能:让 Agent 干点实事
部署完成之后,别急着庆祝,先做三个小测试,确保整个系统不是“看起来活着,实际是死的”。
第一个测试叫“基础对话测试”。你直接发一句“你是谁”,如果 Agent 快速回复,说明大脑连接正常。如果卡住没反应,去docker logs openclaw看有没有 API 报错。
第二个测试叫“skill 触发测试”。你先装一个技能,比如前面写的math_helper,然后发“请帮我计算 2 的 10 次方”。如果 Agent 的回答不是一个大概数字而是一个精确数字,说明 skill 调用成功。如果它回了一个错误答案,说明触发失败或脚本有问题,去日志里查 python 进程有没有跑起来。
第三个测试叫“channel 连通测试”。如果你配了飞书,就让同事给你发一条消息;如果只有 terminal,那就不用测了。
这三个测试做完,才算真正跑通了。跑通之后,你就可以开始琢磨 skill 扩展了——这个过程非常有趣,稍微改一下 SKILL.md,Agent 就能学会一项新技能,有点像在给一个外教不断更新教材。
4. 常见问题与排查技巧实录
4.1 session file locked 超时报错:到底是谁锁住了文件
OpenClaw 社区有个高频报错,原文是“agent failed before reply: session file locked (timeout 60000ms)”。我第一次看到这个报错时一头雾水,后来排查才发现,问题出在多个 OpenClaw 实例在同时读写同一个 session 文件。
最常见的情形是:你跑了一个容器,又手贱在宿主机上跑了一个二进制版本,两边共用了同一个配置目录,session 文件就被锁住了。解决办法分三步:
- 先查一下有没有多实例在跑:
docker ps看容器列表,再用ps aux | grep openclaw看宿主机进程。 - 把多余的实例关掉,只保留一个。
- 如果还是报错,直接删除 session 目录里的锁定文件:
rm -rf ~/.openclaw/sessions/*.lock,然后重启容器。
这个报错的本质是文件锁机制,跟“网络不行”“API 不行”都没关系,你不用绕弯路去检查 API Key。我遇到过有人因为这个报错去重装了一整遍系统,其实只要删掉锁文件就好了。
4.2 飞书输出截断问题:三种解法照着选
在飞书里用 OpenClaw,长回复被截断几乎是必经之痛。飞书对单条消息的长度有硬限制,超过就会被平台强行切掉,用户看到的回复内容就断了,很影响体验。
我的处理经验分成三个等级。第一级是治标:把模型的max_tokens调小一点,从默认的 4096 调到 2048,逼 Agent 精简回复。第二级是治本:制作一个“分段输出”的 skill,让 Agent 在生成内容前先规划好段落,每段控制在较短字数内,然后用多个消息卡片分段发送。第三级是另辟蹊径:让 Agent 在回复里生成摘要,把详细内容写成 Markdown 文件或者文档链接,用户需要详情再点开。
我推荐至少做到第二级,因为调小 tokne 会降低回复质量,而分段输出对用户是透明的,体验最好。
4.3 新手最容易踩的坑汇总
这部分是我踩过无数坑之后总结出来的高发区。整理成一张速查表,你照着排查能省大量时间。
| 症状 | 根本原因 | 解决办法 |
|---|---|---|
| 容器启动了,但对话没反应 | API Key 没填对或环境变量没传进容器 | 检查docker inspect openclaw里有没有对应的 Env 变量 |
| 回复全是乱码或问号 | 终端编码问题,飞书里则是模型输出被错误解析 | Windows 终端切 UTF-8 编码;飞书场景检查是否开了“富文本卡片”模式 |
| skill 永远不触发 | 触发关键词写得太模糊,或 SKILL.md 格式不对 | 重写触发条件,用更精准的动词或名词 |
| 本地 Ollama 连不上 | base_url写成了localhost | 改成host.docker.internal |
| 飞书消息回调失败 | 公网 IP 没有暴露给飞书平台,或端口没映射 | 确保服务器安全组放行对应端口,并检查应用回调地址是否填写准确 |
| 每次重启配置就丢 | 没挂载配置目录 | 启动容器时记得-v参数挂载外部目录 |
这里面我最想强调的是“每次重启配置就丢”这个问题。很多人第一次用 Docker 都会踩,因为容器是临时的,你不挂载外部目录,配置就写在容器内部,一删容器就全没了。养成习惯:所有要保留的数据都得通过-v挂在宿主机上,这等同于“把贵重物品放进保险箱”。
5. 最后再分享一个关于 skill 的小技巧
我现在每天都在用 OpenClaw,最多的场景不是让它耍酷聊天,而是帮我把零散的笔记整理成结构化文档。这靠的就是一个我自己写的 skill,触发词是“帮我整理”,SKILL.md 里写明“读取输入内容的主题、分段、提炼要点、输出 Markdown”。这个 skill 逻辑非常简单,但价值极大。
给你一个可以直接抄的模板思路:SKILL.md 一定要包含三块内容。“描述”部分说明这个 skill 擅长什么;“触发条件”部分写清楚哪些词或句式应该触发它;“执行流程”部分按步骤写清楚 Agent 拿到输入后先做什么、再做什么、最后输出什么格式。
在部署和 skill 集成的过程中,我个人最深的体会是:工具本身不复杂,复杂的从来都是环境差异和配置细节。所以遇到报错别慌,先去查日志,再对照我上面给的排查表逐项过一遍。把这一步走通了,你就能从“能跑通”进阶到“会调教”,Agent 才会真正变成你的得力助手。