1. 为什么要养这只龙虾:OpenClaw到底解决什么问题
1.1 “第二只龙虾”是什么梗,和Windows用户有什么关系
先说个圈内小文化。OpenClaw的吉祥物是一只龙虾,社区里管部署一个可用的OpenClaw实例叫“养了一只龙虾”,管跑通第二个实例叫“养第二只龙虾”。听起来像玩梗,实际上对应的是很现实的需求:你的第一个实例往往承担日常聊天、日程安排、信息收集,当你觉得不够用,想把工作群、个人知识库、本地模型分开管时,就需要第二套独立运行的实例。而Windows平台恰恰是很多人在“第一只”上踩坑最狠的地方。
很多教程默认你在Linux服务器上部署,可实际开发者的日常电脑就是Windows。我一开始也以为这玩意儿是“Linux专属”,后来发现只要把WSL2、Docker Desktop、Windows Terminal这三件套理顺,Windows上养龙虾的体验丝毫不比Linux差,甚至因为能同时用图形界面和命令行,排错反而更直观。这篇教程就是面向那些“不想为了一个Agent重装系统”的Windows用户,从环境准备、首次部署、多实例配置,到高频报错排查,一条龙讲清楚。
1.2 OpenClaw和其他AI助手框架的差异点
OpenClaw本质上是一个本地优先、多渠道接入的AI智能体框架,核心定位是“你自托管的私人管家”。和现在市面上那些云端Agent平台相比,它有四个很明显的差异:
- 本地优先:你的会话记录、配置、文件都保存在自己的机器上,适合对数据敏感、不想把对话记录扔给云端的人。
- 多渠道接入:同一个智能体可以接到Microsoft Teams、Obsidian、命令行、聊天软件等多个入口,实现“一个大脑,多个触点”。
- 模型自由:既可以用OpenAI兼容的云API,也可以接本地的Ollama、千问等模型,换模型不需要迁移平台。
- 配置驱动:所有行为通过一个配置文件管理,改配置约等于改智商,适合版本化管理。
这四个特点组合起来,让OpenClaw特别适合两类人:一是想在本地长期挂机、折腾自动化流程的极客;二是想把多个聊天工具统一收口到同一个AI大脑的团队和个人。
1.3 为什么单独写Windows版教程而不是直接用WSL糊弄
WSL2确实能跑Linux环境,但“能跑”和“好用”是两回事。Windows平台有一堆独有的坑:端口被占用需要杀进程、WSL内核版本过旧导致Docker起不来、Windows防病毒软件对镜像文件的误报、会话文件锁冲突等等。这些在纯Linux服务器上几乎不会遇到,但在Windows上几乎人人都会遇到至少一个。所以我这篇会把Windows相关的环境细节、命令、排查方法作为重点,而不是简单地把Linux教程复制一遍。
2. 开工前状态检查:把Windows环境整理成能跑Agent的样子
2.1 确认系统版本和WSL2这扇“大门”
在动手之前,先花十分钟确认三件事:Windows版本、WSL状态、Docker状态。我建议至少是Windows 10 21H2以上或者Windows 11,因为低版本对WSL2的支持不完整,中途会遇到内核模块缺失的问题。
打开PowerShell依次执行:
winver wsl --status wsl --list --verbose docker version几个关键判断标准:
winver弹出窗口显示版本号,Windows 10 2004以上才支持WSL2,Win11就没这个问题。wsl --status如果提示“WSL的版本过旧”或者“请更新”,直接执行wsl --update更新内核。这个坑在热搜里天天有人问,原因就是Windows自带的WSL组件版本太老,Docker Desktop在检查后端时会直接拒绝启动。wsl --list --verbose里应该至少有一个发行版(比如Ubuntu-22.04),而且VERSION列必须是2。如果是1,执行wsl --set-version 发行版名 2升级。docker version能看到Server版本才算Docker后台活着,否则大概率是Docker Desktop没启动或者没切到WSL2模式。
2.2 Docker Desktop设置:关键开关别漏掉
Docker Desktop装好之后,注意一个容易被忽略的选项:Settings -> General -> Use WSL 2 based engine。这个开关决定Docker跑在Hyper-V还是WSL2后端。我强烈建议选WSL2后端,因为它和Linux环境的兼容性最好,而且能在WSL中直接用docker命令,而不需要额外装一套Linux版Docker。
装完Docker Desktop后,在WSL终端里验证一下:
docker compose version docker ps如果docker ps能正常列出空列表,说明Docker在WSL里的通信正常。这一步有问题的话,后面所有镜像拉取和容器启动都会卡住,而且是那种“看起来正常但就是没反应”的卡法。
2.3 给端口、防火墙、杀毒软件提前“松绑”
OpenClaw默认会占用几个本地端口,常见的是8080、3000、或者8443,具体取决于你的配置和接入的渠道。Windows上最典型的翻车场景是端口被别的程序占着,导致Agent启动失败但日志又不直接告诉你真正的端口冲突。
启动前先检查常用端口是否空闲:
netstat -ano | findstr "3000 8080 8443"有结果的话,用PowerShell杀掉占用进程:
Get-NetTCPConnection -LocalPort 3000 | Select-Object OwningProcess Stop-Process -Id <上一条查到的PID> -Force另外,Windows Defender对Docker的虚拟磁盘文件(ext4.vhdx)和高频I/O目录偶尔会有误报或实时扫描干扰。如果部署过程中发现IO异常慢,可以把OpenClaw的工作目录加入Defender排除列表,这个技巧在纯Linux教程里绝对见不到。
2.4 安装Git和终端环境
很多人忽略Git在Windows上的作用。OpenClaw的多实例管理和配置版本化都依赖Git,而且后续拉取官方仓库更新也需要。Windows下装Git很简单,装完在WSL里跑git --version确认一下。
Windows Terminal推荐用微软商店的最新版,主要是为了同时开多个标签页:一个跑WSL的Agent进程,一个跑Docker日志,一个跑PowerShell做端口管理。没有它也能工作,但有了之后排错效率会高很多,因为你能看到日志和命令输出同时滚动。
3. 主流程:第一次在Windows上把OpenClaw跑起来
3.1 方式A:Docker Compose一键部署
最常见的部署路径是Docker Compose。先建一个专用目录,避免把配置文件散落得到处都是:
mkdir -p ~/openclaw && cd ~/openclaw git clone https://github.com/openclaw/openclaw.git . docker compose up -d第一次启动时Docker会拉取镜像,慢的话稍等一会。拉取完成后,docker compose logs -f可以看到启动日志,出现“Agent is running”之类的提示就说明基础框架起来了。
这套方法的好处是干净:所有依赖都封装在容器里,不会污染你的Windows系统。坏处是排查问题时多了一层容器封装,日志和文件都在容器内部,需要docker exec -it <容器名> bash进入容器去看。
3.2 方式B:原生模式运行时
如果你不想用Docker,或者打算长期开发调试OpenClaw本身的代码,可以走原生模式。需要Node.js版本至少18以上,然后:
npm install -g openclaw openclaw init my-agent cd my-agent openclaw start原生模式更灵活,调试起来直接看进程输出,但依赖项更多,Windows下偶尔会遇到原生模块编译不过的问题。我个人的建议:新手无脑选Docker方式,省心且容易回滚;老手如果要做二次开发,再选原生模式。
3.3 Agent怎么选择Channel:把你的智能体接到各个入口
OpenClaw的“Channel”指的是接入渠道。你可以在配置文件里声明你要接入哪些平台,常见的几个:
| Channel | 用途 | 配置要点 |
|---|---|---|
| terminal | 本地命令行交互 | 无需额外配置,默认开启 |
| teams | 微软Teams消息互通 | 需要注册一个Azure应用,获取应用ID密钥 |
| obsidian | 和Obsidian知识库联动 | 指定Vault路径、文件夹 |
| openai | 调用OpenAI兼容API | 配置base_url和api_key |
| 千问 | 接入通义千问 | 配置千问API的base_url和密钥 |
配置结构通常是这样的:
channels: terminal: enabled: true teams: enabled: true app_id: "你的Teams应用ID" app_secret: "你的密钥" obsidian: enabled: true vault_path: "D:/ObsidianVault"启动时OpenClaw会按这个列表初始化各个Channel。只保留了terminal的情况下,你会得到一个能直接对话的命令行助手;把Teams配好之后,你在Teams里发消息,Agent就能回复。
3.4 模型接入:本地Ollama还是云API
接入大模型是OpenClaw配置里最重要的一步。两种选择各有适用场景:
- 云API(千问、OpenAI兼容服务等):效果稳定、上下文能力强,但要求网络畅通,而且如果API密钥没有配置好,启动时会报连接错误。
- 本地Ollama:完全离线可用,隐私最好。适合Windows本地实验。缺点是本地模型参数量有限,长文本和复杂推理能力弱一些。
我用本地方案举例。先在Windows上装Ollama,再拉取一个模型:
ollama pull qwen2.5:7b然后在OpenClaw配置里指定模型服务地址:
model: provider: ollama base_url: "http://localhost:11434" model_name: "qwen2.5:7b"启动后可以用一句“你是谁”来测试。能正常回复,说明“第一只龙虾”已经活了。如果回复超时,多半是模型推理太慢,换小一点的模型例如qwen2.5:3b先跑通再升级。
4. 第二只龙虾:多实例并行和数据管理
4.1 为什么非要再养一只
很多人的第一个实例用来做日常问答和任务记录,跑一阵之后发现不够用了:想接入另一个聊天工具,又不想把现有对话历史弄乱;想试一个新模型,又不想影响稳定运行的实例;想让两个Agent各管一个知识库。这些都是养第二只龙虾的真实理由。多实例隔离之后,每个实例有自己的配置、自己的会话记录、自己的端口,互不干扰,升级一个不包括更新另一个。
4.2 多实例规划:独立目录、独立端口、独立会话
多实例最忌讳的事情就是共用配置目录。既然要用多个实例,就要把“实例”当“进程”一样管理。我的推荐布局:
~/openclaw/ agent1/ openclaw.yaml sessions/ data/ agent2/ openclaw.yaml sessions/ data/在Windows上路径同样适用,~/openclaw实际对应WSL用户目录。每个实例的配置里务必设置不同的端口和管理地址:
server: port: 3000server: port: 3001这样两个实例可以同时运行,互不冲突。如果你打算把两个实例接到同一个聊天平台,注册渠道应用时也要分开,因为同一组应用凭证只应该被一个实例持有。
4.3 Microsoft Teams与Obsidian的“第二入口”配置
接入Teams需要你在Azure门户注册一个应用,拿到的应用ID和密码填到channels.teams里。有几个细节容易被坑:
- Teams应用的重定向URI必须和OpenClaw提示的一致,否则授权回调会失败。
- 如果之前已经用第一个实例接入过Teams,第二个实例要换一个新的应用注册,因为Teams不允许同一应用凭证被两个机器人同时使用。
- 消息权限不要贪多,只授权机器人需要的发消息、收消息权限即可。
Obsidian接入相对简单,只要在配置里指定Vault路径,再选择同步方向:是让Agent读取笔记作为知识来源,还是允许Agent往笔记里写入内容。我建议先只读,等观察稳定后再开写入。Windows路径里要注意反斜杠问题,写配置时要么用正斜杠D:/ObsidianVault,要么在反斜杠前面加转义。
4.4 会话文件:多实例最容易踩的锁
每个OpenClaw实例在运行时会维护一个会话文件,保存当前对话上下文。正常情况下,一个实例只对应一个会话文件,完全独立。但如果你用复制目录的方式创建第二个实例,就会把第一个实例的会话文件也复制过去,两个进程同时读写同一个会话文件,结果就是报错:
agent failed before reply: session file locked (timeout 60000ms)这个问题的本质是文件锁竞争:第二个进程拿不到第一个进程持有的锁,等待超时后直接放弃。解决方法很明确:每个实例必须拥有自己的会话文件,不能用拷贝目录大法。创建新实例的正确方式是新建目录、重新初始化,然后把旧配置里的模型和渠道参数复制过来,而不是整个目录复制。
5. 常见故障:我在Windows下遇到过的五个实际问题
5.1 “session file locked”超时:最常见的Windows多实例问题
这恐怕是热搜里最眼熟的一条报错。我实际排查过一次,场景是这样的:我先在后台用第一个实例跑着任务,然后又手动启动了一个新实例,但新实例是在旧实例目录里临时启动测试的。结果两个进程都尝试读写同一个session.lock文件,新进程等60秒拿不到锁就报错退出。
排查链路是:
- 确认有没有其他OpenClaw进程在跑:
ps aux | grep openclaw。 - 确认当前实例的工作目录是否与其他进程共享:检查配置文件里
session路径。 - 如果是误操作,把新实例的会话路径改成独立目录,重来。
如果确认只有一个进程但还是报锁错误,通常是因为上一次异常退出后锁文件没释放。这时候安全做法是删除会话目录下的.lock文件再重启,而不是直接把整个会话目录删掉,否则你会丢失历史上下文。
5.2 端口被占用:Windows上最普通的启动失败
Windows的端口占用率和Linux有得一拼。我遇到过三次:两次是Electron类应用占了3000端口,一次是Redis占了6379顺带把OpenClaw的服务端口挤了。
解决思路分两步:
# 第一步找到谁的端口 netstat -ano | findstr ":3000" # 第二步按PID杀进程 taskkill /PID <PID> /F如果你不想杀进程,更推荐改OpenClaw的端口,毕竟杀进程可能会影响别的应用。在配置文件里把端口改成3001或者8081,重启就好。
5.3 WSL版本过旧:Docker和OpenClaw的连环翻车
Docker Desktop在WSL下跑得好好的,某天突然提示“WSL needs updating”,或者容器启动后一直处于Restarting状态。原因基本就是Windows更新了WSL内核,而Docker Desktop缓存的WSL镜像没有跟着升级,或者反过来。
处理办法:
wsl --update wsl --shutdown然后再打开Docker Desktop,它会重新初始化WSL后端。注意wsl --shutdown会关闭所有正在运行的WSL发行版,等于把你当前WSL里的进程都停掉,执行前确认没有重要任务在跑。
5.4 拉取镜像超时和下载卡住
在Windows上首次部署时,Docker需要拉取多个基础镜像,网络不理想的情况下经常卡在某个层的下载上。我的经验是:
- 先配置镜像加速器,国内云厂商提供的加速地址在Docker Desktop的Settings -> Docker Engine里加
registry-mirrors。 - 拉取失败不要反复重启,先
docker compose pull单独拉一次,看到具体卡在哪一层再处理。 - 如果某个基础镜像一直在Retrying,试试把Docker Desktop重启并选择“Clean / Purge data”之外更温和的方式,比如重新登录。
需要说明的是,这些都是基于常见实践的通用方案,不同网络环境下表现差异很大,关键是学会看Docker日志,别瞎试。
5.5 配置改了没生效
修改配置文件后,用docker compose restart重启容器,发现配置还是旧的。这种情况几乎都是因为“改了宿主机文件,但容器内挂载的是旧路径”。用Docker部署时,配置文件是通过卷挂载进容器的,目录对不上就会出现这种“改了等于没改”的错觉。
正确操作是:确认docker-compose.yml里volumes映射的宿主机路径和实际配置文件所在路径一致,然后docker compose down && docker compose up -d强制重建容器。原生模式则直接openclaw restart。
6. 让龙虾长期稳定运行:配置、备份与性能调优
6.1 用环境变量分离不同环境的配置
部署第二个实例时,最值得养成的习惯是环境变量与配置文件分离。比如API密钥不要直接写进openclaw.yaml,而是通过环境变量注入。Windows下在PowerShell里这样设置:
$env:QWEN_API_KEY="你的密钥" $env:OPENCLAW_PORT="3001"在WSL shell里则是:
export QWEN_API_KEY="你的密钥" export OPENCLAW_PORT="3001"这样做的直接好处是:同一个配置文件可以复制给多个实例,只要在不同环境里设置不同的环境变量就行,密钥不会因为复制配置而泄露。否则多个实例共用一个配置文件,改密钥就得去每个文件里改一遍,迟早出乱子。
6.2 本地模型搭配夜批任务:让Windows机器变成你的夜间工人
Windows电脑很多人的使用习惯是白天办公、晚上挂机。既然机器晚上闲着,不如把OpenClaw接上本地模型跑夜批任务。比如:每天凌晨自动整理Obsidian笔记、定时抓取RSS生成摘要、把邮件草稿归档。这种任务不需要很聪明的云端大模型,本地7B模型完全够用,还能避免把笔记内容传到外部。
在配置里开启定时任务:
tasks: - name: daily_notes_summary schedule: "0 2 * * *" prompt: "读取今天的笔记,把要点整理成一份摘要写到日记文件夹"schedule字段是cron表达式,Windows用户如果第一次接触会觉得反直觉,你可以先把它理解为“分 时 日 月 周”五个数字,例如0 2 * * *就是每天凌晨2点执行。
6.3 配置备份:用Git管理你的龙虾基因
既然养了龙虾,就别裸奔。OpenClaw的配置文件、会话记录、知识库路径都是重要资产,我强烈建议用Git管理整个实例目录:
cd ~/openclaw/agent1 git init git add openclaw.yaml data/ sessions/ git commit -m "agent1 baseline"Windows下如果有OneDrive同步,也可以把agent1目录放进OneDrive里,实现自动云备份。但要注意:不要把session.lock这类临时文件同步进去,否则多设备同时同步可能会锁冲突。
6.4 扩展方向:从两只龙虾到龙虾养殖场
当你熟练养了第二只龙虾,后面再增加实例就很快了。常见的扩展玩法包括:
- 一个实例专职处理Teams工作消息,另一个实例专职处理Obsidian知识库问答。
- 一个实例用本地模型做隐私任务,另一个用云模型做高质量创作。
- 在Windows上用计划任务控制OpenClaw的定时启停,省电又方便。
我个人实际用下来的体会是:OpenClaw最大的魅力在于“每个实例都可以拥有不同人格和工作边界”,你不是在维护一堆进程,而是在建立一个属于自己的人工智能工作团队。Windows平台的稳定性虽然不如Linux服务器,但只要把WSL2和Docker这套基础打好,日常跑两三个实例没有任何问题,甚至可以挂机跑很久不重启。
最后再分享一个小技巧:如果你把OpenClaw的服务端口暴露在局域网,记得在Windows防火墙里只允许指定的IP访问,而不是直接允许所有网络访问。这个配置虽然多花两分钟,但能避免很多不必要的安全风险。养龙虾可以,别被陌生人顺手捞走。