我自己是在一个周五晚上开始把 OpenClaw 往 Windows 笔记本上装的,原以为半小时能搞定,结果折腾到凌晨两点才真正跑通。后来复盘发现,踩的那些坑十有八九都可以提前躲开。OpenClaw 这个开源项目,说简单点就是一个可以跑在你自己电脑上的 AI 个人助理框架,它能接各种大模型,能接飞书、Telegram、Discord 这些消息渠道,也能让你直接在命令行里指挥它干活。这篇就是我的完整部署复盘,从环境准备到常见问题排查,照着走基本能绕开大部分坑。
1. 为什么要在 Windows 本地跑 OpenClaw
1.1 先搞懂 OpenClaw 到底是个啥
OpenClaw 不是那种需要连某个云端平台才能用的 AI 工具,它的核心逻辑是“把智能体跑在你自己控制的机器上”。你可以把它理解成一个通用调度器:它连接大模型作为大脑,连接各种聊天工具作为嘴巴和耳朵,然后把“对话记录、任务状态、工具调用”这些信息统一管理起来。它在底层用 Clojure 编写,运行时依赖 Java,所以 Windows 用户装它的时候会碰到“Java 17”“Docker”“WSL2”这些词,别慌,这些都是常规套路。
我没有夸大它的能力,但实际体验下来,它确实能帮我在本地做不少自动化的事情。比如你在飞书群里 @ 它让它整理一份周报,它会先调用你配置的大模型接口生成内容,再通过飞书机器人把结果发回来。整个过程的数据只经过你的电脑和模型接口,不经过一个你不清楚的第三方中间服务器,这对我来说是很大的安全感。
1.2 本地部署和用云服务的差别
市面上已经有大量开箱即用的 AI Agent 平台,为什么还要自己部署一个?最直接的原因是可控性。你用公共平台时,会话记录、文件、配置都放在人家服务器上,想导出或者深度定制很麻烦。OpenClaw 本地部署以后,所有 session 文件、日志、配置都躺在你的磁盘里,你可以随意备份、改名、删掉重来。
另一个差异是渠道自由度。公共平台通常只给你一个聊天入口,OpenClaw 则允许你自己定义 Channel。你今天在终端里跟它聊,明天在飞书里跟它聊,它看到的上下文是同一套。这种“多渠道但单一记忆”的能力,靠公共平台很难做到。当然,本地部署也有代价:你需要自己维护环境、处理冲突、盯日志。Windows 上的坑尤其多,后面我会一个个列出来。
1.3 适合哪些人,坑在哪里
如果你熟悉 Docker、命令行,或者至少愿意照着文档敲命令,那 OpenClaw 很适合你。如果你想双击一个 exe 就完事,那现阶段还是劝退。它毕竟是一个面向“开发者/半开发者”的开源项目,图形化界面不能说完全没有,但很不成熟,核心操作还是在终端和配置文件里完成。
Windows 上部署的坑主要集中在这几块:一是 WSL2 和 Docker Desktop 的组合经常出幺蛾子;二是 Java 环境变量没配好导致启动失败;三是端口占用、文件锁这类细节问题,报错信息看着吓人,其实解决办法很简单。后面你会看到,大部分问题不是你的操作错误,而是环境默认配置不适合本地部署导致的。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 部署前把这些东西备齐
2.1 硬件和操作系统的底线要求
先说结论:8GB 内存是起步,16GB 更舒服。OpenClaw 本身占不了太多内存,但 Docker Desktop、WSL2、Java 进程、再加上大模型接口的响应缓存,叠在一起就会让老机器吃力。我自己在 8GB 内存的笔记本上跑,Docker 占用 2GB,Java 进程占用 800MB,再加浏览器和编辑器,内存直接飙到 90% 以上,所以有条件一定先加内存。
操作系统方面,Windows 10 64 位 21H2 以上、Windows 11 都行。重点是必须开启虚拟化。怎么确认?打开任务管理器 -> 性能 -> CPU,看“虚拟化”那一栏是否是“已启用”。如果是禁用状态,需要进 BIOS 打开 Intel VT-x 或 AMD-V,否则 WSL2 和 Docker 就没法工作。别问我为什么知道,我第一台机器就是在这里卡了一小时。
2.2 JDK 17、Docker、WSL2 这些依赖怎么装
OpenClaw 的官方运行方式其实有两种:一种是用 Docker 容器跑,另一种是直接用发行包加 JDK 运行。Windows 下我强烈推荐第一种,因为 Docker 镜像里已经把 Java 和所有依赖打包好了,你不需要在宿主机装 JDK。但是!Docker Desktop 在 Windows 上又依赖 WSL2,所以装 Docker 的过程避免不了要碰 WSL。
具体步骤:
- 打开 PowerShell(管理员权限),执行
wsl --install安装 WSL2。 - 重启电脑。
- 去 Docker 官网下载 Docker Desktop for Windows,安装时选中“使用 WSL 2 后端”。
- 设置里把 WSL 2 的发行版配套好,通常选默认的
Ubuntu或docker-desktop。
如果你选择不用 Docker,直接跑发行包,那就需要单独装 JDK 17。去官方下载 jdk-17_windows-x64_bin.exe,装完以后配置系统环境变量 JAVA_HOME 指向安装目录,然后把 %JAVA_HOME%\bin 加到 Path 里。在终端敲 java -version 能看到 17.0.x 就说明 OK。
注意:JDK 版本别用 20 或 21,OpenClaw 官方测试环境是 Java 17,版本太高可能出现不明所以的反射异常或模块权限报错。
2.3 大模型 API Key 和渠道配置说明
OpenClaw 本身没有模型,你要给它配一个模型接口。国内用户用得比较顺的是阿里云百炼的千问系列,因为它提供 OpenAI 兼容接口,OpenClaw 里可以直接当 OpenAI 来配置。你需要去阿里云百炼控制台开通服务,创建一个 API Key。这个 Key 是你的核心凭证,写入配置文件时建议用环境变量引用,别明文写死在文档里。
渠道方面,OpenClaw 支持多种 Channel。最简单的验证渠道是本地终端,也就是直接在命令行里跟它对话,这部分零成本。如果你想接飞书,需要先去飞书开放平台创建应用,拿到 App ID 和 App Secret,然后配置事件订阅、机器人权限等。我建议第一次部署先只开终端 channel,跑通了再开放飞书,不然两边配置混在一起很难排查。
3. 一步一步在 Windows 上完成部署
3.1 方式一:用 Docker Compose 一键部署(推荐)
先克隆项目到本地。如果你的网络访问 GitHub 比较慢,可以配置镜像加速,但那种问题不在本文范围。打开 PowerShell 执行:
bash复制git clone https://github.com/openclaw/openclaw.git
cd openclaw
项目里通常会给一个 docker-compose.yml 示例文件,核心内容大概是拉取镜像、映射数据目录、设置环境变量。在启动之前,你需要先创建数据目录,比如 C:\openclaw-data,然后在 docker-compose 里把宿主机目录映射进容器。这样做的好处是,容器删除重建后你的会话记录和配置还在。
启动命令很简单:
bash复制docker compose up -d
第一次会拉取镜像,时间取决于网速。看到 Started 日志后,再用 docker compose logs -f 观察日志,确认没有异常。这个方式最省心,因为我不用在宿主机上处理 Java 版本冲突。
3.2 方式二:直接用发行包加 JDK 17 运行
如果不习惯 Docker,或者公司电脑不允许装 Docker Desktop,你可以走发行包路线。下载最新的 Windows 发行包,解压到一个没有空格和中文的路径,比如 C:\openclaw。然后用命令行启动:
bash复制set JAVA_HOME=C:\path\to\jdk-17
set PATH=%JAVA_HOME%\bin;%PATH%
openclaw.bat
这里你会发现,脚本启动的关键就是让系统能找到 Java。如果出现“找不到或无法加载主类”或者 java 不是内部或外部命令,99% 是环境变量没有生效。另外,我建议不要双击运行,要老老实实开一个 PowerShell 窗口,因为当前窗口的日志和报错信息非常关键,双击窗口闪退的话你都不知道发生了什么。
3.3 配置大模型:以千问 Qwen 为例
OpenClaw 的配置核心是 config.yaml 或 .env 文件,不同版本不太一样,但思路一致:告诉它用哪个模型的接口。以千问为例,它的 OpenAI 兼容地址是 https://dashscope.aliyuncs.com/compatible-mode/v1。
在配置里新增一个 provider,大致长这样:
yaml复制providers:
qwen:
type: openai-compatible
base_url: https://dashscope.aliyuncs.com/compatible-mode/v1
api_key: ${DASHSCOPE_API_KEY}
model: qwen-plus
然后设置默认模型为 qwen:
yaml复制model_provider: qwen
model_name: qwen-plus
qwen-plus 是千问中间档位的模型,理解能力和响应速度都比较均衡。如果你想更便宜、更快,可以换成 qwen-turbo;如果对复杂逻辑要求高,可以选 qwen-max。我自己的经验是,日常任务先用 qwen-plus,测试阶段为了省 Token 用 qwen-turbo。
提示:
${DASHSCOPE_API_KEY}这种写法是引用环境变量,别直接复制一个带引号的字符串。Windows 下可以执行setx DASHSCOPE_API_KEY "你的key",设置完要重新打开终端才能生效。
3.4 配置并激活 Channel
Channel 是 OpenClaw 与外部对话入口的统称。配置完模型后,你需要至少启用一个 Channel 才能跟它对话。最简单的就是 terminal channel,配置文件里通常这样写:
yaml复制channels:
terminal:
enabled: true
如果你要接飞书,需要在飞书开放平台创建应用,拿到凭证后补齐配置:
yaml复制channels:
feishu:
enabled: true
app_id: cli_xxxx
app_secret: xxxx
配置完之后,在命令行里启动 OpenClaw,终端 channel 会直接给你一个输入提示符,你输入“你好”看它是否回复。飞书 channel 则需要在飞书群里添加机器人,再触发一次事件订阅验证。遇到“agent failed before reply”这类报错,别怀疑是你 Channel 配置写错了,大概率是会话锁问题,我在后面第四章专门讲。
3.5 验证部署是否成功
跑通以后,先做三件事:第一,在终端里连续问几个上下文相关的问题,验证记忆功能是否正常;第二,查看数据目录是否生成了 session 文件,确认持久化生效;第三,重启一次 OpenClaw 进程,看看重启后还能不能继续对话。如果这三步都过了,你的部署基本就稳了。
我习惯再加一个压力测试:一次问一个长问题,比如让它写 2000 字的方案,看看它在飞书或终端里怎么处理超长输出。很多人在这一步会发现“输出被截断”的问题,这也是一个常见坑,具体解法看第四章。
4. 部署和日常使用中的高频问题排查实录
4.1 agent failed before reply: session file locked(会话文件锁)
这个报错应该排在 OpenClaw 问题排行榜第一位。报错信息长这样:agent failed before reply: session file locked (timeout 60000ms)。意思很简单:程序去读写某个 session 会话文件时,发现文件被别人锁住了,等了 60 秒也没等到锁释放。
什么情况下会发生?通常是你上一次运行 OpenClaw 没正常退出,或者同时启动了两个进程,两个进程都想操作同一个会话文件。Windows 下尤其容易出现,因为你在终端里 Ctrl+C 不一定能完全杀掉 Java 进程,于是僵尸进程继续占着文件锁。解决办法:
- 打开任务管理器,找到所有 Java 进程,结束掉。
- 进入 OpenClaw 的数据目录,把
sessions目录下的.session文件备份后删除。 - 重启 OpenClaw。
如果你的场景是多人或多个进程需要同时访问同一个会话,可以考虑把超时时间调大,比如 120000ms,但不建议把锁当成常态使用。正常情况下一台电脑只需要一个 OpenClaw 进程,锁问题基本都是上一次残留进程导致的。
4.2 飞书输出容易被截断
用飞书 Channel 时,OpenClaw 回复内容太长的话,飞书机器人消息会被截断,或者只发出来前半段。这是因为飞书单条消息有长度限制,而 OpenClaw 默认可能把整段文本当一条消息发出。
解决思路是让 OpenClaw 对超长回复做分段发送。有些版本可以通过 Channel 配置开启自动分割,比如:
yaml复制channels:
feishu:
enabled: true
split_long_messages: true
max_message_length: 1500
如果没有这个字段,可以换个思路:在系统提示词里要求模型“分点回答,每次回复不超过 500 字”。虽然麻烦一点,但能显著降低截断概率。我自己的体会是,让模型控制输出长度比让程序去分割文本更自然,因为程序硬切可能会把列表或代码切得七零八落。
4.3 Windows 下的端口占用与防火墙问题
OpenClaw 启用 Web 服务或某些 Channel 时,会在本地监听端口。常见的是 8080、8000 或者你自定义的端口。Windows 下很大概率遇到端口被其他程序占用,表现是启动日志提示 address already in use。
排查方法:
bash复制netstat -ano | findstr :8080
看到 PID 后,在任务管理器结束对应进程,或者执行:
bash复制taskkill /PID 你的PID /F
然后重新启动。另外,Windows 默认防火墙可能会拦截来自局域网或飞书回调的访问,如果你后发现外部访问不通,去“控制面板 -> Windows Defender 防火墙 -> 允许应用通过防火墙”里把对应程序或端口加入放行列表。注意,飞书机器人如果需要 OpenClaw 公网回调地址,那又涉及内网穿透那套东西,这里不展开。
4.4 其他 Windows 特有杂坑
- 脚本闪退:
openclaw.bat双击运行后一闪而过。这个问题的原因是控制台窗口在脚本出错时立即关闭。解决办法是用 PowerShell 或 CMD 手动运行,不要双击。 - WSL 版本过低:Docker Desktop 报错提示 WSL 需要更新。执行
wsl --update,然后在 PowerShell 里确认wsl --status显示默认版本为 2。 - 日志乱码:Windows 终端默认代码页不是 UTF-8,中文日志可能变成乱码。执行
chcp 65001切换为 UTF-8。 - 配置文件被 BOM 污染:用记事本编辑 YAML 文件时,另存为会加入 BOM 可能导致解析失败。推荐用 VS Code 或 Notepad++,保存时选择 UTF-8 无 BOM。
这些都是我实际碰到过的问题,逐个解决以后,整个部署过程其实还挺顺畅的。千万不要急着下结论说是软件 bug,八成都是环境细节没对齐。
5. 把 OpenClaw 用得更顺手的几个小习惯
5.1 数据备份与容器管理
OpenClaw 真正值钱的是会话数据和个人配置,而不是二进制本身。我习惯每天结束前把数据目录打包到另一个盘里。如果你用 Docker,写一个简单的备份脚本:
bash复制docker compose stop
tar -czvf openclaw-backup.tar.gz C:\openclaw-data
docker compose start
备份前先停容器,避免文件锁和写一半的数据。恢复时把 tar 包解压回原目录,再启动容器。这个习惯看起来很基础,但我身边不少朋友都是在数据丢失以后才后悔。
5.2 多模型切换与成本控制
OpenClaw 支持配置多个 provider,你可以同时配千问、通义、或者其他兼容 OpenAI 接口的模型。日常对话用便宜的快速模型,复杂任务切换到大模型。在对话里输入类似“切换模型到 qwen-max”的指令,OpenClaw 会响应切换,省得我去改 YAML 再重启。
成本控制方面,我给自己的规则是:测试代码或做技术验证时用 qwen-turbo,写正式文案、做推理分析时才用 qwen-max。模型接口调用的费用是按 token 算的,OpenClaw 会把长上下文一股脑发给模型,所以如果对话历史特别长,成本会上升。建议定期清空旧会话,或者开启会话自动压缩功能,不同版本叫法不一样,但思路都是“只保留最近的 N 条消息”。
5.3 后续可以玩的方向
当 OpenClaw 跑起来以后,我更推荐把它往“个人自动化中枢”方向折腾。比如你可以在电脑上创建一个定时任务,让它每天早晨整理昨天的工作日志;也可以把它接入自己的项目管理工具,让它在收到关键词后自动创建待办。OpenClaw 最大的价值不是那一个开箱即用的功能,而是你可以基于它现有的 Channel 和 Provider 结构,根据自己的需求去做扩展。
我记得第一次跑通时,只是让它在终端里回了一句“你好”,当时感觉也就那样。后来我给它配了千问,接入了飞书,又让它能读取本地文件,才慢慢体会到本地部署的好处。整个过程里,Windows 上的安装和配置算是第一道坎,跨过去之后反而觉得比在 Linux 上更顺手,至少调试时我能随时开任务管理器看资源占用,也能用熟悉的工具去查端口和进程。
配置 OpenClaw 的时候,我还发现一个小技巧:无论用什么方式启动,先把日志级别调到 DEBUG,遇到报错时日志里会直接告诉你卡在哪个模块。Windows 下很多网络和文件权限问题,只看表面报错根本判断不了,有了完整日志,至少能自己去搜解决方案。这个习惯我后来用在了所有本地部署的开源项目上,算是折腾出来的经验吧。
