先说我为什么会对这个东西这么上心。我手上常年有大量重复性杂活:整理周报、抓网页信息、把草稿“翻译”成正式邮件、按模板批量生成文件。以前靠按键脚本能解决一部分,但一遇到“情况变一下”就全乱套。后来我开始折腾能自己规划任务、调用工具、反复试错的AI Agent,真实干活时才发现,市面上很多噱头产品根本不适合本地化的办公场景——又封闭又贵,数据还全往云端送。直到我拿到OpenClaw这个Agent运行时,才觉得这才是我想要的东西:开源、可改、能接本地模型,还能把浏览器、命令行、文件系统这些真实工具交给它。既然我主力工作机是Windows,索性花了一整天把部署流程完整跑通了。
这篇文章就是那段实操记录的完整复盘。我会把Windows上从零部署OpenClaw的过程一点点拆开,包括前置环境怎么装、配置文件每一项是什么意思、第一次启动会踩什么坑、怎么验证Agent真的在“自己干活”。不管你是刚接触AI Agent的新手,还是已经玩过几套框架的开发者,照着这套流程走,大概率能少走我走过的弯路。
1. 为什么要抓 Windows 这个平台来部署 Agent
1.1 OpenClaw 到底是个什么容器
OpenClaw在我理解里就是一个AI Agent的“运行时外壳”。它本身不产生智能,真正干活的大模型是外接的,它负责把大模型和外部工具连起来。你可以把它想成一名“虚拟实习生”的中枢神经系统:大脑是模型服务,手和脚是各种工具,OpenClaw则是那个负责接收指令、拆解任务、按步骤调用工具、检查结果、循环推进的执行框架。
早期版本想在Windows上跑起来,需要自己编译一堆依赖,过程相当劝退。到了最近这个发行版本,项目方已经默认把运行环境做成了容器镜像,Windows用户只需要准备好Docker环境,把镜像拉下来,再写一份YAML配置文件,基本上就能把Agent环境跑起来。这个“开箱即用”的改进,是这次部署能顺利落地的最关键前提。
1.2 Windows 下的三种部署路线比较
我实际评估过三条路:直接在Windows进程里裸跑、用WSL2跑原生Linux程序、用Docker Desktop跑容器。第一轮我就把裸跑方案排除了,因为OpenClaw本体是面向Linux环境设计的,直接在Windows上裸跑,依赖缺失问题会非常折磨人,光是Python环境和编译工具链就能耗掉半天时间。
WSL2原生方案理论上可行,但需要你自己管理Linux里的进程、开机自启、数据备份,升级版本时也容易把环境搞乱,谈不上“保姆级”。最终我选了Docker Desktop方案:通过WSL2做后端,把OpenClaw跑在容器里。这么做的好处是环境隔离彻底、升级就是换镜像、删掉重来也不影响系统。代价是Docker Desktop本身要占一点内存,但对我来说完全值得。
提示:如果你机器上没有Docker Desktop,先去官网下载安装,安装时记得勾选“Use WSL 2 instead of Hyper-V”这个选项。这是后面所有步骤的前提。
2. 部署前的体检与依赖清单
2.1 硬件要求,真不是越高越好
OpenClaw本体对CPU和内存要求不高,真正吃资源的是你外面接的大模型服务。我用的是一台内存32GB、CPU为8核的工作机,跑起来非常从容。如果你的机器内存只有8GB,我建议不要硬上,因为Agent运行起来之后,容器、模型服务、浏览器实例三者同时在内存里,很容易把机器拖死。
内存至少16GB是我给出的建议值。磁盘则尽量使用固态硬盘,因为镜像解压和Agent频繁读写工作目录,机械硬盘的随机读写速度会让人崩溃。显卡方面,如果你打算让Agent接本地大模型,有一张6GB以上显存的NVIDIA显卡会舒服很多;如果只是走云端API,核显就完全够了,对硬件几乎没有要求。
2.2 软件清单,少一个都白搭
我把这次部署实际用到的软件列成了一张表,方便你对着检查。
| 软件/组件 | 版本要求 | 用途说明 |
|---|---|---|
| Windows | Windows 10 22H2 或 Windows 11 | 提供WSL2和Docker的支持基础 |
| WSL2 | 2.x最新版 | Docker Desktop的运行后端,Linux内核承载容器 |
| Docker Desktop | 4.x最新稳定版 | 管理和运行OpenClaw容器 |
| Windows Terminal | 最新版 | 更好用的命令行体验,不是必须但强烈建议 |
| Git | 2.40以上 | 拉取示例配置和工具脚本 |
| Edge浏览器及WebDriver | 与系统Edge同版本 | 如果让Agent操作网页,这两个是标配 |
还有一个容易忽略的点:OpenClaw要接模型服务,你就得有一个能用OpenAI兼容协议通信的模型接口。我机器上跑着一个本地推理服务,监听在127.0.0.1的11434端口,这让我测试时完全可以离线操作。如果你手头没有本地模型,用云端平台的API接口也行,后面配置只是改几个字段的事。
3. 一步步把 OpenClaw 装起来
3.1 拉取镜像与规划数据目录
安装好Docker Desktop之后,先确认它正常运行。然后打开命令行,执行一条很简单的命令,把OpenClaw的镜像拉到本地:
docker pull openclaw/agent:latest我这里用的镜像是示例名,你实际部署时请以项目官方文档里给你的完整镜像名为准,不同渠道分发版本名是不一样的。
镜像拉下来之后,不要急着运行。先把工作目录建好,我的做法是在D盘单独开了一个总目录:
D:\openclaw\ ├── config\ # 放配置文件 ├── data\ # Agent的工作目录和长期数据 ├── logs\ # 运行日志输出到宿主机,方便排查 └── storage\ # 放模型临时缓存的附件为什么要把目录映射出来?因为容器一旦删除重建,内部的数据就会清空。把配置、日志、工作数据全部映射到宿主机目录,这是Docker部署的基本功,不然下次升级镜像,你之前给Agent积累的所有资料就全没了。
3.2 准备核心配置文件
OpenClaw读取的主配置文件名是config.yaml。我那次第一次启动时因为不会写这个文件,走了不少弯路。下面这个是我验证过能用的最小配置:
agent: name: "local-helper" language: "zh-CN" timezone: "Asia/Shanghai" provider: endpoint: "http://127.0.0.1:11434/v1" api_key: "local-test-key" model: "qwen3:8b" server: port: 8080 web_ui: true workspace: root_dir: "/workspace/data" tools: enabled: - web_search - file_operation - browser - command_line permission_policy: "ask"这段配置里,我挨个解释一下关键项。agent.name是给Agent起个名字,以后你在WebUI界面上跟它打招呼用的。provider就是“大脑”的设置,endpoint指向模型服务的地址,本地推理服务一般就是这个,api_key可以随便填,本地服务不校验,model写你实际要用的模型名。server.port是Web管理界面的端口,tools里声明Agent能用哪些工具。permission_policy设置为ask,意味着Agent每次调用敏感工具前都会弹确认,这个对第一次跑很重要,可以让你看清它每一个动作。
3.3 启动容器,参数尽量一次性写对
配置文件准备好之后,我用的启动命令是:
docker run -d \ --name openclaw \ -p 8080:8080 \ -e TZ=Asia/Shanghai \ -v D:/openclaw/config:/etc/openclaw \ -v D:/openclaw/data:/workspace/data \ -v D:/openclaw/logs:/var/log/openclaw \ -v D:/openclaw/storage:/workspace/storage \ --restart unless-stopped \ openclaw/agent:latest命令里的启动参数很多人看不懂,我给你拆一下。-d是让容器在后台运行;--name指定容器名,方便后续用docker logs openclaw来看日志;-p 8080:8080把宿主机的8080端口映射到容器的8080端口,这样浏览器才访问得到WebUI;-e TZ=Asia/Shanghai设置容器时区,不设的话日志时间会和本地时间差8小时,排查问题时会非常别扭;那四个-v参数就是把宿主机目录挂进容器里,路径一一对应。--restart unless-stopped表示容器意外退出后自动重启,这个对长期挂机很有用。
运行完之后,用docker ps看一眼容器状态。正常情况下你会看到STATUS一栏是Up状态,过几秒再看日志,如果出现“HTTP server started”之类的记录,说明服务起来了。
4. 第一次启动与接口验证
4.1 打开WebUI建立第一个Agent
服务起来之后,打开浏览器访问http://localhost:8080。第一次进入时,系统会引导你设置管理员账号和密码。这个账号是用来管理Agent、查看日志的,和Agent本身的身份是分离的,别跟config.yaml里的agent混为一谈。
进入主界面之后,会看到一个会话列表。我依次做过下面这几件事,回头再看文档时理解快很多:
- 新建一个会话,在输入框里跟Agent说一句“你好,介绍一下你自己”,测试基础对话链路。
- 在对话界面查看“工作区”标签页,确认它能看见映射进去的data目录内容。
- 打开“工具调用记录”,看看刚才那次对话里Agent有没有暗中调用过什么工具。
第一次跟它对话,如果模型通道正常,应该一两秒内就能收到响应。如果一直在转圈不回复,问题大概率出在provider配置上,你先检查endpoint是不是localhost写成了别的地址,再看本地推理服务是不是真的起来了。
4.2 用API接口做一次底层连通性测试
WebUI界面能用还不够,我更习惯先用命令行直接打一下模型的API接口,把底层链路单独验证掉。这么做的原因是,如果直接打开WebUI报错,你分不清到底是OpenClaw配置坏了,还是模型服务本身的问题。提前把模型服务测通,后面的排查范围就小了一半。
我用的测试命令很简单,不同系统里curl用法没差别:
curl http://127.0.0.1:11434/v1/chat/completions \ -H "Content-Type: application/json" \ -d "{\"model\":\"qwen3:8b\",\"messages\":[{\"role\":\"user\",\"content\":\"说一句话\"}]}"返回一段带choices字段的JSON,就说明模型通道完全正常。这一步通过后,再遇到Agent没反应,问题就几乎可以锁定在OpenClaw侧,而不是模型侧。
4.3 给Agent布置一个能验证“自主行动”的任务
链路都通了之后,我布置了一个最简单的真实任务来做端到端测试:“读取/workspace/data/meeting_notes.txt,把里面提到需要跟进的待办事项列成一份清单,保存到/workspace/data/todo.md。”
这个任务看起来简单,但里面包含的步骤不少:Agent必须先用文件工具找到并读取meeting_notes.txt,再根据内容分析出待办事项,然后用文件工具创建并写入todo.md,中间还有可能反复检查写对了没有。这套动作完整走下来,才算真的验证了Agent具备“会使用工具完成任务”的能力,而不只是会聊天。
从日志里我看到它在两次工具调用之间停顿了几秒,像是在自己判断结果是否满意,最后才确认完成。这种感觉很奇妙,就像看着一个新人实习生第一次独立交作业。如果日志里没有出现文件读取和写入记录,那说明tools的配置没有生效,你回去检查config.yaml里的tools.enabled部分,确认容器启动时挂载的是你改过的那份配置文件。
5. 常见问题与调参心得
5.1 镜像拉不下来、容器反复重启、模型一直不答话
这三类问题是我在部署过程中真实遇到过的,也是群友问得最多的。我整理成了下面这张速查表,直接照着排查就能省很多事。
| 问题现象 | 大概率原因 | 解决动作 |
|---|---|---|
| 拉取镜像卡住很久不动 | 网络到镜像仓库的路由质量差 | 改用仓库给的其他下载通道,或者让有条件的同事导出离线镜像包 |
| 容器启动立即退出 | 端口被占用或配置格式错误 | docker logs openclaw看报错,用netstat -ano查8080端口占用 |
| WebUI开了但Agent不回复 | 模型服务没启动或endpoint写错 | 先按4.2的curl步骤直接测模型接口 |
| 启动时报时区文件错误 | 未设置TZ环境变量 | 在docker run命令里加-e TZ=Asia/Shanghai |
| 中文内容乱码 | 文件编码不是UTF-8 | 所有配置文件和待处理文档统一保存为UTF-8编码 |
容器反复重启还有一种隐蔽可能:配置文件里的YAML缩进不对。YAML对空格和缩进极其敏感,一个字母不对就会导致解析失败。我的建议是不要用记事本直接编辑,用能显示缩进和语法错误的代码编辑器,比如VS Code,配合YAML插件,就能提前发现低级错误。
5.2 工具权限一直被拒,Agent连文件都读不了
我第一次跑任务时,Agent明明在日志里说要读取文件,结果权限评估一直失败,任务直接中断。后来发现是config.yaml里的workspace.root_dir设置有问题。
OpenClaw默认有一条安全边界:Agent只能操作工作目录内的文件。我在宿主机上挂载数据目录的路径是D:/openclaw/data,映射进容器后是/workspace/data,但配置文件里如果写错成别的路径,容器里Agent就会发现“这个目录不存在”,进而拒绝所有文件操作。
解决办法是让配置里的root_dir和docker run里的数据挂载目标路径保持一致。这个一致性检查,新人很容易漏。
5.3 内存占用高、Agent反应迟钝
跑了几分钟后我发现,内存占用居然爬到了接近7GB。Docker Desktop本身占一段,模型服务占一段,容器里的Agent运行时占一段,三座大山加起来,如果机器只有16GB,反应自然会变慢。
解决方法有两个层面。一是控制模型规模,把几十亿参数的大模型换成量化等级高一点的小模型,速度会快很多,日常任务完全够用。二是给容器设置内存上限,在docker run后面追加一条参数:
--memory=4g加了这个参数之后,最坏情况下容器最多占4GB内存,不至于把整机拖死。但你要有心理准备:如果同时跑的任务太重,容器可能因为内存超限被杀掉。这反而是一种保护机制。
5.4 时区、日志、缓存,这些小事也别忘了
部署完你以为就结束了?我吃完亏之后总结了几条:
- 时区必须设,不然日志时间和你本地时间相差8小时,排查问题时很容易产生误解。
- 日志要挂出来,OpenClaw默认把日志写进容器内部,容器一旦重建,历史日志全没了,所有排查线索跟着消失。挂载logs目录出来后,日志文件自动在宿主机保存。
- 工作目录里不要放太多无关文件,Agent在浏览工作区时会把所有文件都看一遍,文件越多,它每次决策前的准备工作就越慢。
- API密钥不要直接写在YAML里。我自己的习惯是用环境变量把密钥传进容器,配置文件里只写占位符。这样一来,即使config.yaml不小心对外分享,也不会泄露密钥。
6. 我这几个小时的实战感受
整套流程走下来,我最大的体会是,OpenClaw这类Agent运行时,难点不在启动容器,也不在跟模型对接,而在“让Agent安全地使用你本地的工具”这件事上。权限策略设得太松,它可能在你不注意时执行危险命令;设得太紧,它又寸步难行。我建议第一次跑的人先用ask模式,每一步都观察它想干什么,等熟悉它的脾气了,再针对特定工具放行。
另外一个很实在的建议是:刚开始不要追求大模型。先用一个小模型把Agent控制工具的链路跑顺,再换能力更强的大模型。因为小模型响应快、出错了也好判断问题出在哪个环节;直接上大模型,响应慢不说,一旦出问题很难分清是模型理解错了还是工具调用错了。
最后再分享一个小技巧,我后来把Agent接入一个定时任务,让它每天早上自动读取指定目录下的新文档,按固定模板生成摘要,完成后自动归档。这已经跑了好几天,非常稳。Windows下部署Agent并没有想象中那么复杂,一个Docker环境加一份YAML配置就能干很多实在的事了。把我这些步骤和踩坑点吃透,这块硬骨头你大概率也能稳妥啃下来。