搞 AI agent 的朋友,应该都遇到过这种尴尬:本地大模型已经跑起来了,但让它干点实事——整理文件、批量处理图片、调一下命令行里的脚本——它又变成“只会说话不会动手”的聊天机器人。我在 Windows 10 这台主力机上折腾 OpenClaw 本地部署,就是为了解决这个问题。简单说,OpenClaw 是一个本地优先的 AI Agent 运行框架,它负责把大模型的自然语言回复翻译成真正能落地的电脑操作。配合 DeepSeek、Qwen 这些开源模型,你完全可以在不联网、不上传数据的情况下,让电脑自动完成一堆重复劳动。这篇文章就从环境准备、模型接入、权限配置到第一个自动化任务,把我踩过的坑和最终稳定跑通的方案一次性写清楚。如果你也想在 Windows 10 上本地部署 OpenClaw,照着这个思路走,能少走很多弯路。
1. 项目概述与核心思路拆解
1.1 OpenClaw 到底是个什么角色
你可以把 OpenClaw 理解成一个“跑在本地的数字管家”。它的工作方式和大模型应用不太一样:普通聊天机器人只负责生成应答文本,而 OpenClaw 会在大模型生成完回复之后,继续解析出可执行的工具调用,然后在你的电脑上真正执行这些动作。比如你说“帮我整理下载文件夹”,大模型负责理解这句话,OpenClaw 负责决定调用哪个脚本、执行什么命令,做完之后还能把结果反馈给你。这种“思考 + 执行”的闭环,才是 Agent 和 Chatbot 的本质区别。
我最初注意到 OpenClaw,是因为它把 Skill、Workspace、Exec Approvals 这些概念全部本地化,没有强绑定任何云端平台。换句话说,你不需要注册账号,不需要把私密文件传到别人的服务器,所有配置、权限文件、执行日志都落在 ~/.openclaw/ 目录里。对于我这种经常处理客户数据的人,本地部署这个特性比单纯追求“智能”更重要。
1.2 为什么我选择 Windows 10 而不是 Linux
说实话,AI 工具链在 Linux 上确实更“顺理成章”,但现实是我的主力办公机就是 Windows 10,很多业务软件只有 Windows 版本,换系统不现实。OpenClaw 对 Windows 10 的支持已经足够好,它通过 PowerShell 调用系统工具,也可以执行 Python、Node.js 脚本,并不比 Linux 环境差多少。尤其在你只需要操作本地文件、调用浏览器、跑一些数据处理任务时,Windows 10 反而更方便,因为系统自带的记事本、资源管理器、计划任务都能被直接调度。
如果你在 Windows 11 上部署过,会发现在 OpenClaw 这一层几乎没有任何区别,配置文件格式、权限机制完全一致。选择 Windows 10 的另一个原因是它的稳定性——我遇到过好几个用 Windows 11 开发版的朋友,安装完 OpenClaw 之后总被系统更新破坏环境。相比之下,Windows 10 的长期支持版本更省心,尤其是 22H2 之后的版本,对 WSL、Docker 这些虚拟化组件的兼容性已经很成熟了。
1.3 部署前必须理解的核心概念
真正的坑往往不是安装命令,而是你不理解 OpenClaw 的运行模型。按照我的实际使用经验,下面这几个概念是必须提前搞懂的:
- Workspace(工作区):OpenClaw 执行任务时所在的根目录,默认是
C:\Users\你的用户名\.openclaw\workspace。所有文件操作默认都在这个目录内进行,避免 Agent 乱写系统文件。 - Skill(技能):预先定义好的指令集。每个 Skill 是一个带描述文档和可执行脚本的文件夹,OpenClaw 会在大模型需要时自动加载对应 Skill。
- Exec Approvals(执行授权):OpenClaw 在执行命令前会检查是否在批准名单中。没有批准的命令会弹确认,或者直接拒绝。这个机制非常重要,它是安全底线。
- Model Backend(模型后端):OpenClaw 本身不包含大模型,它需要连接一个推理服务。常见的本地后端是 Ollama,也可以是 LM Studio、MiniMax H3 本地服务这类支持 OpenAI 兼容接口的工具。
如果这些概念没搞清楚,后面配置的时候会到处碰壁,尤其是 Exec Approvals,我第一次就是因为没配置好,所有命令都被拦截,还以为 OpenClaw 坏了。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 部署前的环境准备
2.1 硬件和系统要求对照表
先别急着敲命令,我把目前 Windows 10 上跑 OpenClaw 比较舒服的硬件门槛列出来,你可以对照自己的机器看看:
| 配置项 | 最低要求 | 推荐配置 | 说明 |
|---|---|---|---|
| 操作系统 | Windows 10 64位 21H2 | Windows 10 22H2 | 32位系统就不要挣扎了,很多依赖装不上 |
| 内存 | 8 GB | 16 GB 以上 | 跑 7B 量化模型至少要 8G,加上系统和其他程序,16G 才顺畅 |
| 磁盘空间 | 10 GB 可用 | 30 GB 以上 | 主要是模型文件占空间,7B 量化约 4GB,代码和依赖约 2GB |
| 显卡 | 无要求 | NVIDIA 显卡 6GB 显存以上 | 有独显跑模型快很多,纯 CPU 也能跑,就是慢 |
| Python | 3.10 | 3.11 或 3.12 | OpenClaw 插件和脚本大多基于 Python |
| Node.js | 16 | 20 LTS | 新版 CLI 的依赖很多要求 Node 18 以上 |
内存这条我多说一句:我一开始在 8GB 内存的旧笔记本上跑,模型加载之后硬盘狂读,系统几乎卡死。后来换到 16GB 内存的机器,体验完全两个世界。如果你的机器内存只有 8G,建议先用 3B 级别的小模型,比如 qwen2.5:3b,或者关闭其他大软件再跑。
2.2 Python、Node.js、Git 安装要一次到位
OpenClaw 的运行依赖不少,但核心就是三件套:Python、Node.js、Git。Windows 10 上安装这几个工具的坑点主要在于环境变量。很多人以为装完了就没事,结果打开新的 PowerShell 窗口输入 python --version 还是提示找不到命令,这就是安装时没有勾选 “Add to PATH”。
我先说我这边实测下来的顺序:
- 安装 Python。去 Python 官网下载 3.11 版本,安装时务必勾选 “Add Python to PATH”,其他选项默认即可。
- 安装 Node.js。下载 LTS 版本,也就是 20.x,安装一路下一步,不需要改安装目录,默认路径没有空格问题。
- 安装 Git。下载 Git for Windows,安装时选择 “Git from the command line and also from 3rd-party software”,这样 PowerShell 里直接用
git命令。 - 全部装完后,重新开一个 PowerShell 窗口,依次输入以下三条命令验证:
powershell复制python --version
node -v
git --version
如果三条命令都能输出版本号,说明环境正常。如果某一条报错,大概率是 PATH 没配对,可以去“系统属性 -> 高级 -> 环境变量”里手动把安装目录加进去。
这里还要提醒一个容易被忽略的点:如果你的 Windows 10 更新卡在某个版本好久了,比如一直卡在 22H2 那个著名的 30% 进度,建议先把更新问题解决,或者干脆用微软官方媒体创建工具制作一份最新的 Windows 10 安装镜像重装一次。OpenClaw 用到的 WSL、Windows 安全功能都依赖比较新的系统组件,系统过旧会引发各种莫名奇妙的驱动或服务问题。
2.3 安装 OpenClaw:三种方式与我的推荐
OpenClaw 的安装方式主要有三种:PowerShell 官方安装脚本、npm 全局安装、源码编译安装。我自己在 Windows 10 上都试过,直接说结论:日常使用首选 npm 全局安装,原因无它,就是升级方便且稳定。
先给出我正在用的 npm 安装方式:
powershell复制npm install -g openclaw-cli@latest
openclaw --version
如果你所在网络环境访问 npm 官方源很慢,可以先切换镜像源再安装,我使用的是淘宝镜像:
powershell复制npm config set registry https://registry.npmmirror.com
npm install -g openclaw-cli@latest
PowerShell 官方脚本的方式我也用过,它适合不想提前装 Node.js 的用户,但脚本会自己再下载一套运行时,安装过程比较黑盒,出了问题不好排查。源码编译则适合二次开发,需要先把仓库 clone 下来,然后 npm install 再 npm link,步骤繁琐而且容易因为网络问题中断,不是人人都需要。
这里有一个经验:无论用哪种方式,都先确定安装目录。很多人用 PowerShell 安装后,OpenClaw 的实际可执行文件被放到了用户目录下的 AppData\Roaming\npm 里,如果之后找不到 openclaw 命令,就去这个目录看一眼。另外,如果你希望把全局包安装到自定义目录,可以用 npm 的 --prefix 参数,但我不建议新手这么做,除非你特别清楚自己在干什么。
3. 初始化与配置本地模型
3.1 初始化 OpenClaw 工作目录
安装完成之后,第一件事就是初始化。在 PowerShell 里执行:
powershell复制openclaw init
这条命令会在你的用户主目录下创建 .openclaw 文件夹,包含下面这些关键文件和目录:
text复制C:\Users\Administrator\.openclaw\
├── config.json
├── exec-approvals.json
├── skills\
└── workspace\
config.json:核心配置文件,主要用来指定模型后端、默认参数、调试开关。exec-approvals.json:命令审批规则表,OpenClaw 每次执行命令前都会查这张表。skills\:存放你自定义的技能包,后面我们实战会用。workspace\:Agent 的默认工作目录,文件和脚本默认都在这里读写。
为什么官方要默认放在用户目录,而不是安装目录?因为权限隔离。C:\Program Files 这类目录普通用户没有写权限,如果 OpenClaw 想在这里创建文件,系统会弹 UAC,反而麻烦。放在用户目录下,OpenClaw 就能毫无阻碍地读写自己的工作文件,不需要管理员权限。理解这一点,后面遇到“拒绝访问”的报错就不会懵了。
3.2 把 Ollama + DeepSeek 接到 OpenClaw
OpenClaw 本身不带模型,所以我先用 Ollama 管理本地模型。Ollama 的安装很简单,去官网下载 Windows 安装包,装完之后在 PowerShell 里拉取 DeepSeek 的量化模型:
powershell复制ollama pull deepseek-r1:7b
如果你显存不大,也可以用更小的参数版本:
powershell复制ollama pull qwen2.5:3b
模型下载完成后,先手动验证一下 Ollama 服务是否正常。默认情况下,Ollama 会监听 http://localhost:11434,直接在浏览器访问这个地址如果能返回内容,说明服务起来了。
接下来要修改 OpenClaw 的 config.json,让它把请求转发到 Ollama。我用的配置如下:
json复制{
"model": {
"provider": "ollama",
"base_url": "http://localhost:11434",
"model_name": "deepseek-r1:7b",
"temperature": 0.3,
"max_tokens": 4096
},
"workspace": "C:\\Users\\Administrator\\.openclaw\\workspace",
"auto_approve": false
}
重点解释几个字段:
provider:模型服务类型,Ollama 就走这个。base_url:本地推理服务的地址,不要写错端口。model_name:要使用的模型名称,必须在 Ollama 里已经存在。temperature:答案随机性,自动化任务建议设低一点,0.2 到 0.4 之间比较稳定。auto_approve:是否自动批准所有命令,新手先保持false,等熟悉权限机制再决定。
配置好之后,在 PowerShell 里运行 openclaw doctor,这个命令会检查依赖和连通性,如果显示模型连接正常,说明配置对了。
3.3 Skill 和 Exec Approvals 权限模型
OpenClaw 的一大特点是 Skill 机制。每个 Skill 就是一个文件夹,里面有一个说明文档和一个可执行脚本。当你在对话中提出需求时,OpenClaw 会把 Skill 的说明喂给大模型,大模型判断该调用哪个技能,然后 OpenClaw 再去执行对应脚本。这个设计的好处是,你不用每次都把完整脚本发给模型,只需要把精简的接口描述发过去就行。
我们先看一个最简单的 Skill 目录结构:
text复制skills\
└── hello\
├── SKILL.md
└── script.py
SKILL.md 用来描述这个技能的作用和参数,我的示例:
markdown复制# Hello Skill
Say hello to the user and print current time.
## Usage
When user says "hello" or asks about time, execute:
python script.py
script.py 就是实际执行的脚本:
python复制from datetime import datetime
print("Hello from OpenClaw!")
print("Current time:", datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
接下来是关键:如果 OpenClaw 没有在 exec-approvals.json 里找到对 python 命令的批准,它就不会执行脚本。所以我们要打开 exec-approvals.json,把常见命令预先加进白名单。一个典型的配置长这样:
json复制{
"rules": [
{
"pattern": "python *",
"description": "Allow running python scripts"
},
{
"pattern": "powershell *",
"description": "Allow powershell commands"
}
]
}
这里 pattern 是通配符匹配规则,python * 表示任何以 python 开头的命令都会直接放行。我不建议把 * 放在前面,那等于关闭安全保护。批准的粒度越细越好,比如你只想允许运行特定目录下的脚本,就把模式写成 python C:\\Users\\Administrator\\.openclaw\\workspace\\* 这种带完整路径的形式。
4. 实操:让 OpenClaw 完成第一个任务
4.1 启动服务并验证本地模型连通
所有配置完成后,就可以启动 OpenClaw 了。大多数人用两种模式:一种是常驻服务,一种是一次性对话。常驻服务适合后续通过 API 调用,我更喜欢用对话模式先验证。
在 PowerShell 里输入:
powershell复制openclaw chat
如果一切正常,你会看到一个交互提示符。此时输入一句话:
text复制你好,告诉我当前时间
OpenClaw 会先把这句话交给 DeepSeek 理解,然后检查是否命中了某个 Skill。由于我上面写了一个 hello Skill,它就会调用 python script.py,然后把输出结果反馈回来。第一次执行可能需要几十秒,因为还要加载模型和等待大模型生成。如果返回了问候语和时间,说明安装、配置、权限全部打通了。
这里有个细节:启动 openclaw chat 之前,最好先单独确认 Ollama 服务是否正在运行。很多人把 ollama serve 这个服务忽略了,以为装完就自动启动。实际上 Windows 版 Ollama 安装后通常会在后台自启,但如果没自启,你直接运行 OpenClaw,会看到连接 refused 之类的报错。此时手动执行一下 ollama serve 或者在系统托盘里启动 Ollama 就行。
4.2 场景实战:用 Skill 自动整理下载文件夹
光是打声招呼没意思,我来写一个真正能用的 Skill:自动整理下载文件夹。这个需求很普遍,也是体验“Agent 帮你干活”的最直观方式。
需求一句话:把 C:\Users\Administrator\Downloads 下的文件按扩展名移动到对应的子文件夹里,比如图片放进 Images,文档放进 Documents,压缩包放进 Archives。
先建 Skill 目录:
text复制skills\
└── sort_downloads\
├── SKILL.md
└── sort.py
SKILL.md 内容:
markdown复制# Sort Downloads
Sort files in the Downloads folder by extension.
## Usage
When user asks to organize or sort the downloads folder, run:
python sort.py
sort.py 内容:
python复制import os
import shutil
DOWNLOAD_DIR = r"C:\Users\Administrator\Downloads"
CATEGORY_MAP = {
".jpg": "Images",
".jpeg": "Images",
".png": "Images",
".gif": "Images",
".pdf": "Documents",
".docx": "Documents",
".txt": "Documents",
".zip": "Archives",
".rar": "Archives",
".exe": "Installers",
}
if __name__ == "__main__":
for filename in os.listdir(DOWNLOAD_DIR):
file_path = os.path.join(DOWNLOAD_DIR, filename)
if not os.path.isfile(file_path):
continue
ext = os.path.splitext(filename)[1].lower()
target_dir = CATEGORY_MAP.get(ext, "Others")
target_path = os.path.join(DOWNLOAD_DIR, target_dir)
os.makedirs(target_path, exist_ok=True)
shutil.move(file_path, os.path.join(target_path, filename))
print(f"Moved: {filename} -> {target_dir}/")
然后在 OpenClaw 对话里输入:
text复制帮我把下载文件夹整理一下
OpenClaw 会加载 sort_downloads Skill,执行 Python 脚本,最后汇报哪些文件被移动到了哪个目录。由于我在 exec-approvals.json 里已经批准了 python * 模式,这条命令会直接执行,不会中途停下来。
这个例子很小,但它完整展示了 OpenClaw 的工作模式。你完全可以照葫芦画瓢,把任何能用脚本完成的工作,比如批量重命名、生成报表、发送邮件提醒,都封装成 Skill。
4.3 进阶:用 Playwright 控制浏览器
如果你的自动化任务需要操作网页,OpenClaw 也能配合 Playwright 实现。大致思路是:在 Skill 里写一个 Python 脚本,脚本通过 Playwright 启动浏览器,打开目标网页,然后按照预设步骤操作。这不是什么黑魔法,就是 Python + Playwright 的标准用法。
不过我要提个醒:浏览器自动化受网页改版影响非常大,今天能用的选择器,明天可能就失效了。所以我不建议用它来做需要长期稳定运行的关键业务,更适合用在临时任务,比如批量截图、抓取某个公开页面的数据。稳定性和维护成本,大家在设计 Skill 时一定要心里有数。
5. 常见问题与避坑指南
5.1 安装时卡住或 npm 源慢
在实际部署中,最常见的问题集中在安装阶段。如果你执行 npm install -g openclaw-cli 的时候,进度条长时间不动,大概率就是 npm 默认源访问慢。切换成国内镜像后,速度会立竿见影。另外,PowerShell 执行脚本时可能会提示“在此系统上禁止运行脚本”,这是因为默认执行策略是 Restricted。你不需要去改全局策略,只要在 PowerShell 里运行一次:
powershell复制Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
然后重新打开 PowerShell 即可。
5.2 权限文件报错:exec-approvals.json
很多人第一次运行 Skill 时会遇到类似这样的提示:
text复制legacy exec approvals exist at /root/.openclaw/exec-approvals.json. run `openclaw migrate-approvals` to migrate.
这个提示我之前也头疼了好久。简单说,OpenClaw 升级后,旧的授权文件格式已经不再兼容,需要迁移到新格式。解决办法就是在 PowerShell 里执行:
powershell复制openclaw migrate-approvals
如果提示文件是损坏的,或者你完全不在乎旧的授权记录,可以直接把旧的 exec-approvals.json 备份之后删掉,再运行 openclaw init 重新生成一个新的。删掉旧文件之后,之前批准过的命令需要重新批准,但总比一直卡在报错里强。我建议迁移完成后看一下新文件内容,确认规则还是你想要的,尤其是涉及命令模式白名单的规则。
5.3 模型连不上、响应太慢
如果 OpenClaw 对话时提示模型连接失败,或是一直转圈,重点关注三个点:
- Ollama 服务是否在运行。打开新 PowerShell,执行
ollama list,如果能看到模型列表,说明服务正常。 - 配置地址是否正确。
config.json里的base_url必须是http://localhost:11434,不要写https,也不要写错误端口。 - 模型是否已经拉取成功。如果你配置的是
deepseek-r1:7b,但 Ollama 里实际拉取的是别的名称,就会一直报 404。
响应慢的问题则取决于硬件。纯 CPU 跑 7B 模型,每个请求耗时可能 30 秒以上,这很正常。如果觉得慢,换 3B 模型,或者开启模型量化。另外,显存不足时 OOM 会导致模型反复重启,表现为第一次回答很慢,后面又好了、然后又突然卡住。这种情况只能换小模型,没有别的办法。
5.4 防火墙、路径与中文目录问题
Windows 防火墙偶尔会拦截 Node.js 或 Python 进程的本地端口访问,这不是每次都会发生,但一旦发生就很隐蔽。遇到模型连接超时,可以先去“防火墙 -> 允许应用通过防火墙”里确认 Node.js 是否被勾选。另外,本地回环流量一般不受防火墙限制,所以如果出现拦截,多和安装的新安全软件有关,建议优先排查第三方防护软件。
路径问题是 Windows 独有的坑。OpenClaw 工作目录如果放在带空格的路径下,比如 C:\Users\My Name\.openclaw,部分脚本解析参数时会把路径截断。所以安装时,Windows 用户名尽量是英文,不要有空格和特殊字符。工作目录也尽量不要放在被 OneDrive 或云同步工具同步的文件夹里,否则文件锁冲突会让你抓狂。
6. 部署完成后的一点个人心得
最后聊点实际的。OpenClaw 这类本地 Agent,最值得花时间的地方不是安装本身,而是把常用操作拆成适合自己的 Skill。刚开始使用的时候,我也总想让它一步到位完成复杂任务,结果经常在中间某一步因为权限、脚本路径、模型理解偏差而失败。后来我发现一个规律:与其让 Agent 一次性执行十步操作,不如把任务拆成几个小 Skill,每个 Skill 只干一件事,再用对话把它们串联起来。这样出了问题定位特别快,排查成本低很多。
另外一个建议是把常用命令提前在 exec-approvals.json 里白名单化,否则每个操作都弹确认框,瞬间就失去“自动化”的意义了。但白名单也不要写得太宽,类似 python * 这种就够了,千万不要为了省事把所有命令都无差别放行,毕竟 Agent 也是根据大模型的判断来操作的,偶尔会有判断失误的时候。
等到这套流程跑顺了,后面扩展的空间很大。我自己下一步打算把 ComfyUI 的本地生成流程也接进来,让 OpenClaw 直接帮我批量处理图片素材。说到底,Windows 10 本地部署 OpenClaw 只是第一步,真正值钱的,是它让你开始重新思考“哪些重复劳动可以从今天开始交给电脑自己完成”。
