最近好几个朋友都在折腾同一件事:把 OpenClaw 装到 Windows 10 上,再接入 DeepSeek 模型,想给自己搭一个跑在本地、能自动处理消息和任务的智能助理。结果很多人卡在了第一步:有人 Python 装错了版本,有人配置文件填了密钥但启动还是报 401,还有人想卸载却发现自己连配置缓存在哪都找不到。
这篇教程就按“部署 → 配置 → 排查 → 调优 → 清理”的顺序,把我在 Windows 10 上反复安装、反复卸载实践出来的经验一次说清楚。内容适合三类人:完全没接触过 OpenClaw 的新手、已经在 Linux 上跑通但想在 Windows 上复现的老手、以及装了之后不想要了想彻底卸载的“回头党”。只要你愿意跟着命令行一步步敲,基本不会有太大问题。
1. 动手之前先想明白:这套本地组合解决了什么问题
1.1 为什么不直接用网页版
很多人第一次听到 OpenClaw 加 DeepSeek 这个组合,第一反应是:这些能力我在网页上不也能用吗,为什么非要本地部署?
差别其实很大。网页版解决的是“偶尔问个问题”的需求,而 OpenClaw 解决的问题是“让模型自动参与你的工作流”。你可以把它理解成一个本地的大脑中枢,外部消息、定时任务、文件变化都能触发它,它收到信号后再调用 DeepSeek 这样的模型做推理,最后把结果送回给你或者其他系统。
本地部署带来的直接好处有三个。第一是数据在自己手里,中间环节少了,敏感信息不用经过别人的网页服务转发;第二是可编程,你能写规则、写流程,让它在指定时间干指定的事;第三是方便调试,出错了看日志、改配置、重启进程,整个链路都是可控的。
1.2 这套组合的实际工作方式
理解 OpenClaw 和 DeepSeek 各自扮演什么角色,后面配置的时候你才不会懵。
OpenClaw 本身不是一个“万能聊天机器人”,它更像一个调度网关。你给它一个任务,它负责拆解任务、管理上下文、调用外部工具、记录执行结果。而 DeepSeek 是负责“思考”的模型引擎,它接收你的提示词,生成回复内容,然后交还给 OpenClaw 继续处理。
打个比方:OpenClaw 是办公室里的项目经理,DeepSeek 是坐在隔壁工位的行业专家。项目经理收到需求,整理成清晰的问题,递给专家;专家给出答复,项目经理再负责把答复包装成你能用的结果。所以你在配置的时候,OpenClaw 侧的配置决定“它怎么做事”,DeepSeek 侧的模型名和密钥决定“它用什么大脑来想问题”。
1.3 适合谁、不适合谁
说实话,这套方案不是给所有人准备的。适合它的人有这几类:
- 想把自己的日常消息渠道统一到一个中枢,让模型自动读取和处理;
- 想写点定时任务、自动化流程,又不想把数据放到云端服务;
- 对模型调用成本敏感,希望自己控制调用频率和上下文长度;
- 愿意花半小时读日志、改配置,而不是遇到问题就想放弃的人。
不适合的人我也直说:如果你完全不想碰命令行,也不想理解“环境变量”“端口”“配置文件”这些概念,那还是老老实实停留在网页版更省心。本地部署的本质是“用一点运维成本换自由度和可控性”,这个账每个人得自己算清楚。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Windows 10 环境准备:最容易翻车却最少被写清楚的几步
2.1 需要准备的三件套:Python、Node.js、Git
OpenClaw 的主流版本是 Python 项目,但它的控制台界面和部分前端组件依赖 Node.js,安装和更新依赖又会用到 Git。所以这三样东西一个都不能少。
先说 Python。很多人栽在这里是因为装了最新的 3.13,结果某个依赖库还没适配,启动直接给你抛一个看不懂的语法错误。我的建议是装 3.11 或者 3.12,这两个版本兼容性已经被大量项目验证过。装的时候务必勾选“Add Python to PATH”,这一步不勾,后面你在终端里敲 python 就会提示找不到命令。
然后是 Node.js,装 LTS 长期支持版就行,不需要追求最新。Git 也一样,装默认选项即可,重点是把 Git 的 bin 目录加进 PATH,方便在终端里直接用 git 命令。
装完之后打开 PowerShell,依次敲这三个命令,确认环境没问题:
powershell复制python --version
node --version
git --version
每个命令都应该返回一个正常的版本号而不是“不是内部或外部命令”。如果有提示找不到,说明对应软件没加进 PATH,去系统环境变量里手动补上,或者重新安装一次并勾选 PATH 选项。
2.2 解决 Windows 的“长路径”限制
这是一个隐藏很深的坑。Windows 10 默认对文件路径长度有限制,超过 260 个字符的操作会被系统直接拒绝。而 OpenClaw 的项目目录一旦嵌套深一点,依赖安装时很容易就撞上这个限制,报错信息往往是“文件名太长”或者“系统找不到指定的路径”。
解决办法是在注册表里开启 Win32 长路径支持。用管理员身份打开 PowerShell 执行:
powershell复制New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force
执行完需要重启电脑才生效。我建议在装 OpenClaw 之前就把它设好,别等到依赖装到一半报错再去处理,那会浪费很多时间。
2.3 PowerShell 执行策略与命令行习惯
Windows 10 默认限制脚本执行,有些安装脚本会要求你放开执行策略。你不需要把它设成完全不设防,只要对当前用户放开即可:
powershell复制Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
另外我强烈建议你全程使用 PowerShell 而不是老旧的 CMD 窗口。PowerShell 对现代开发工具的支持更好,命令补全、管道处理都更顺手。后续教程里的命令我也统一按 PowerShell 的语法写。
2.4 顺手开启的开发者选项
在 Windows 设置里找到“更新和安全 → 开发者选项”,把“开发人员模式”打开。这一步不是必须的,但很多 Python 依赖在安装过程中会尝试创建符号链接,没有开发者模式权限时可能会失败。开了之后对普通使用没有负面影响,属于“有备无患”的操作。
3. 安装 OpenClaw 并接入 DeepSeek:从克隆仓库到第一次对话
3.1 拉取项目并安装依赖
环境准备好之后,找一个干净的目录,我习惯在用户目录下建一个 projects 文件夹:
powershell复制mkdir $HOME\projects
cd $HOME\projects
git clone 你的OpenClaw仓库地址
cd OpenClaw
把“你的OpenClaw仓库地址”换成实际项目地址。如果你是通过压缩包方式下载的,就把压缩包解压到这个目录,效果一样。
进入项目目录后,安装 Python 依赖。老版本项目一般使用 requirements.txt:
powershell复制python -m pip install -r requirements.txt
依赖包数量多,安装过程可能需要几分钟甚至更久,耐心等。国内网络环境下如果下载速度特别慢或者频繁超时,把仓库地址指向国内镜像源再装一次:
powershell复制pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
装完后建议执行一次项目自带的自检命令或者查看 README 中的快速开始部分,我见过不少版本会提供 openclaw --doctor 之类的命令,能一次性排查出缺了什么依赖、哪里配置不对。
3.2 获取并配置 DeepSeek 的 API 密钥
OpenClaw 本身不提供模型推理能力,它要接入 DeepSeek 就必须拿到一个 API 密钥。
流程是:在 DeepSeek 的官方控制台注册账号 → 创建一个 API Key → 充值之后才能正常调用高级模型。创建 API Key 的时候注意,密钥只在创建页面完整显示一次,务必复制保存好。
拿到密钥后,有两种方式配置。第一种是设置环境变量:
powershell复制setx DEEPSEEK_API_KEY "sk-你复制下来的密钥"
setx 设置的是用户级永久环境变量,设置完后要新开一个终端窗口才生效。第二种是直接改 OpenClaw 的配置文件。配置文件一般位于项目目录下,名字可能是 config.json、config.yaml 或者 settings.py,不同版本差别很大,以你拉下来的版本里 README 说明为准。
一个典型的 JSON 配置大概长这样:
json复制{
"llm": {
"provider": "deepseek",
"api_key": "sk-你的密钥",
"model": "deepseek-chat",
"base_url": "你的接口地址"
}
}
使用环境变量方式的话,api_key 字段写 env: DEEPSEEK_API_KEY。两种方式各有利弊:环境变量方式好处是配置文件和代码可以放心分享,不会泄露密钥;配置文件方式更直观,适合一个人独立使用。我自己的习惯是用环境变量,因为很多 “莫名其妙报 401” 的问题,根源就是配置文件被人不小心传出去之后密钥泄露。
3.3 第一次启动与验证
依赖装好、配置填好之后,在项目目录下执行启动命令。不同版本的启动命令可能不一样,常见的有:
powershell复制python main.py
或者项目提供的命令行入口:
powershell复制openclaw start
启动成功后,日志里会打印一串本地服务地址,比如 http://localhost:8080。用浏览器打开这个地址,你应该能看到 OpenClaw 的控制台界面。如果控制台加载不出来,大概率是端口被占用或者前端依赖没装完整,这个问题我在下一部分专门讲。
进入控制台后,先发一条最简单的测试消息,比如“你好”。观察日志里有没有产生调用 DeepSeek 的记录,以及界面有没有正常回复。如果你能看到正常的回复,说明从 OpenClaw 到 DeepSeek 的整条链路已经通了,恭喜你,最难的环节已经过去。
3.4 把 OpenClaw 注册为开机服务(可选)
如果你希望 OpenClaw 常驻后台,开机自动运行,可以把它加进 Windows 启动项。我用的方法是直接在启动文件夹放一个快捷方式:
在 PowerShell 里执行:
powershell复制shell:startup
这行命令会打开当前用户的启动文件夹。把 OpenClaw 的启动脚本快捷方式放进去,下次开机它就会自动启动。
如果你需要更精细的配置,比如失败自动重启、按计划运行,可以打开“任务计划程序”创建任务,触发器选“登录时”,操作选“启动程序”,程序填 Python 的完整路径,参数填启动脚本路径,保存即可。
4. 常见问题排查:按报错链路的逐个击破
4.1 启动就崩:依赖缺失与版本不匹配
很多人第一次启动就直接看到红色报错,最常见的是:
text复制ModuleNotFoundError: No module named 'xxx'
这说明某个 Python 依赖包没装上。执行 pip install -r requirements.txt 之后再试一次。如果重装后仍然报缺模块,很可能是你的 Python 环境和别人不一样。我建议在项目目录下建一个虚拟环境,把所有依赖装进虚拟环境里,避免和其他项目打架:
powershell复制python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
另一个高频问题是 Python 版本太新。比如某些依赖库只适配到 3.12,你在 3.13 上跑就会出现奇怪的语法错误或者编译失败。这种情况下不要硬扛,直接装一个 3.11 版本,项目往往就能跑起来了。
4.2 接入模型失败:401、模型名不对、超时
启动成功但发消息没有回复,打开日志一看:
-
401 Unauthorized:密钥无效。可能的原因有三个——密钥复制不全、密钥过期、或者配置里的密钥被环境变量里的旧值覆盖。排查方法:先确认环境变量有没有残留,再确认配置文件里有没有显式填密钥,两条路都指向同一个密钥,问题立刻清楚。 -
Model Not Found或者model not exist:配置文件里的模型名不对。DeepSeek 的模型标识不是拍脑袋想出来的,必须用服务商文档里列出的准确名称。不同时期模型的标识会调整,所以最稳妥的方式是打开官方文档,找到当前支持的模型列表,把那个名字原样复制进配置。 -
Connection timed out:网络侧问题。先单独验证一下能不能访问到 DeepSeek 的接口地址,最简单的办法是直接用浏览器访问你配置的接口地址域名,看返回什么。能通的话再检查是不是本地防火墙拦截了 OpenClaw 进程的网络请求。
这里分享一个我常用的“分头验证法”:先抛开 OpenClaw,直接用 Python 脚本调用接口,通的话说明密钥和网络没问题,问题在 OpenClaw 配置;不通的话先解决接口调用本身的问题,避免在两边反复横跳。
python复制import requests
url = "你的接口地址/v1/chat/completions"
payload = {
"model": "deepseek-chat",
"messages": [{"role": "user", "content": "你好"}]
}
headers = {
"Authorization": "Bearer 你的API密钥",
"Content-Type": "application/json"
}
resp = requests.post(url, json=payload, headers=headers, timeout=30)
print(resp.status_code)
print(resp.text)
这个脚本执行成功,再回过来查 OpenClaw 的配置。
4.3 浏览器打不开控制台:端口与防火墙
启动日志显示服务正常运行,但浏览器死活打不开页面。我说一个最常见的场景:你启动了两个不同版本的服务,第二个实例没起来,但第一个实例占着端口,日志里又打印了同样的端口号,实际上访问到的还是旧实例。
先用这个命令看端口被谁占着:
powershell复制netstat -ano | findstr :8080
把 8080 换成你配置的端口。输出里看 PID 那一列,再到任务管理器的“详细信息”里找到对应进程,确认是不是残留的旧 OpenClaw 进程。如果是,结束进程再重新启动。
还有一种情况是防火墙弹窗问你允不允许 Python 访问网络时你点了“取消”。解决办法是到“控制面板 → Windows Defender 防火墙 → 允许应用通过防火墙”,把 Python 设为“允许”。还要注意一个细节:OpenClaw 监听地址如果是 127.0.0.1,那就只能本机访问,如果想让局域网内其他设备访问,需要改成 0.0.0.0,这个区别很多人容易忽略。
4.4 打字没反应的“隐形故障”:配置没热加载
有个坑非常隐蔽:你改完配置文件,回到控制台继续发消息,结果发现一切如旧。你以为是配置没生效,把配置反复改了好几遍,折腾半天,最后发现原来是服务要从头到尾重新启动一遍,配置文件不是随时重新读取的。
OpenClaw 的配置加载是在进程启动时完成的,改完配置之后如果不重启,全部白改。所以养成一个习惯:每次改完配置,按 Ctrl + C 停掉服务,重新启动。判断配置有没有正确加载,不要靠猜,直接看启动日志里有没有打印对应配置项,很多版本会在启动时输出配置文件里几个关键字段,核对一下就行。
5. 从能用变好用:模型切换、上下文长度与基础调优
5.1 切换不同的模型服务
OpenClaw 支持在一个配置里同时定义多个模型入口,给不同的任务分配不同的模型。这就像项目经理手底下有多个专家,简单的问答找普通助理,复杂的深度分析找资深顾问。
典型配置结构:
json复制{
"llm": {
"default": "deepseek-chat",
"options": {
"deepseek-chat": {
"provider": "deepseek",
"api_key": "env: DEEPSEEK_API_KEY",
"model": "deepseek-chat"
},
"deepseek-reasoner": {
"provider": "deepseek",
"api_key": "env: DEEPSEEK_API_KEY",
"model": "deepseek-reasoner"
}
}
}
}
上面的 deepseek-reasoner 只是一个举例,实际模型标识以官方文档为准。配置完成后,你可以在 OpenClaw 的交互界面里手动指定用哪个模型处理当前对话,也可以写规则:简单任务走默认模型,复杂任务自动切到推理能力更强的模型。这样既控制成本,又保证关键任务的输出质量。
5.2 上下文长度与 token 上限设置
用模型的时候,很多人对 token 没有概念,只知道“能聊多少句”。其实每次调用模型都需要把对话历史打包发过去,模型能处理的输入长度就叫上下文窗口,超过之后最老的消息会被遗忘。
OpenClaw 允许你配置上下文长度,这个参数决定了它会把多少历史消息带进模型请求。设得太大,请求时间拉长、费用变高;设得太小,模型会“失忆”,前后逻辑接不上。
我给的起步参考值:
| 参数 | 推荐值 | 说明 |
|---|---|---|
| 上下文窗口 | 4096 或 8192 | 普通对话 4096 够用,复杂任务建议 8192 |
| 最大回复长度 | 1024 或 2048 | 防止模型一次性输出过长的回答 |
| 超时时间 | 120 秒 | 深度思考场景要给足推理时间 |
| 并发请求数 | 1 到 2 | 本地调试阶段别开太高,容易触发限流 |
另外注意:上下文窗口不是越大越好,因为每次请求都把整个历史发给模型,窗口越大,单次请求的耗时和费用就越高。你要根据实际任务复杂度去调整。
5.3 请求超时与并发控制
本地跑 OpenClaw 时,如果时不时出现“请求超时”的报错,第一反应不应该是去改 OpenClaw 的配置,而是先看服务商那边当天的接口响应状况。深度思考类模型通常需要较长推理时间,默认的 30 秒超时很容易不够用。我的做法是把 OpenClaw 侧的请求超时时间设到 120 秒以上。
并发数方面,新手最容易犯的错是把并发调得特别高,觉得“同时处理越多越快”。实际结果往往是被模型服务商限流,出现一排 429 Too Many Requests 报错。本地部署的起步阶段,并发设 1 到 2 就已经足够了,等确认稳定运行,再逐步往上加。
5.4 给模型设定“人设”或“工作规则”
把 OpenClaw 跑通之后,你最先想做的应该就是让它“按我的方式来做事”。这个通过系统提示词实现。系统提示词就是你在每次对话前悄悄告诉模型的行为准则,模型会按照这个准则来组织回答。
比如你是做技术支持的,可以在配置里加:
json复制{
"llm": {
"system_prompt": "你是一名严谨的IT技术支持,回答时要先复述用户问题,再分步骤给出排查建议,避免使用模糊表达。"
}
}
这个字段非常值得花时间打磨。我见过不少人把系统提示词写得特别长,结果模型反而抓不住重点。我的经验是:提示词要具体、要限定行为方式,但不要堆砌形容词。把“你是专家”改成“你要按照以下步骤处理问题”,效果立竿见影。
系统提示词是你整个本地部署里投入产出比最高的配置项,因为它直接影响模型每一次输出的质量,又不需要额外花一分钱。
6. 彻底清理与卸载:不留一处痕迹的完整清单
6.1 先停服务,再谈卸载
很多人卸载软件的习惯是直接删文件夹,这个习惯在 OpenClaw 上行不通。因为它在运行过程中会持续占用文件、写入缓存、维护日志。直接删文件夹会导致进程仍在后台运行,占着端口不放,下次你想重装都装不上去。
正确顺序是:先停掉正在运行的 OpenClaw 进程。如果你是用终端直接启动的,回到那个终端窗口按 Ctrl + C;如果窗口已经关了,就打开任务管理器,在“详细信息”里找到 Python 进程,判断一下命令行里包含 OpenClaw 路径的那个进程,结束它。
更保险的方式是在 PowerShell 里查端口占用的 PID,然后精确清除:
powershell复制netstat -ano | findstr :8080
taskkill /PID 具体PID /F
注意,/F 是强制结束,确认 PID 确实是 OpenClaw 的再执行,别误杀其他进程。
6.2 删除项目文件夹与 Python 依赖
停掉服务之后,先删除项目目录本身:
powershell复制Remove-Item -Recurse -Force $HOME\projects\OpenClaw
但如果你的依赖是全局安装的,项目删了不等于依赖也删了。Python 的第三方包还残留在 site-packages 目录里,占用磁盘空间不说,还可能影响全局环境。在项目目录被删之前,或者如果你知道自己都装过什么,手动卸载:
powershell复制pip uninstall openclaw -y
pip uninstall 其他的相关包名 -y
这里的“相关包名”需要你根据实际安装记录来判断。如果实在想不清,也可以不用管——残留的 Python 包顶多占点空间,不会再被系统调用,影响不大。
6.3 清理配置、缓存与环境变量
这是最容易被忽略的一步,也是“卸载不干净”的根源。
OpenClaw 生成的配置文件、日志、缓存通常存放在两个位置:一个是用户目录下的隐藏文件夹,一般叫 .openclaw;另一个可能在系统的 AppData 目录里。检查一下:
powershell复制Get-ChildItem $HOME -Force | Where-Object {$_.Name -like "*openclaw*"}
Get-ChildItem $HOME\AppData\Roaming -Force | Where-Object {$_.Name -like "*openclaw*"}
Get-ChildItem $HOME\AppData\Local -Force | Where-Object {$_.Name -like "*openclaw*"}
找到以后,确认里面没有你想留存的聊天记录或者配置备份,然后删除。
环境变量也要查。我前面用 setx 设置过 DEEPSEEK_API_KEY,如果不清理,它会一直留在系统里。打开“编辑账户的环境变量”,把它从用户变量里删掉。没有图形界面操作的话,用命令也可以:
powershell复制[Environment]::SetEnvironmentVariable("DEEPSEEK_API_KEY", $null, "User")
顺便检查一下 PATH 里有没有 OpenClaw 相关的路径残留,有的话一并删掉。
最后还要看两个地方:启动文件夹里有没有快捷方式残留,任务计划程序里有没有 OpenClaw 相关的计划任务:
powershell复制shell:startup
Get-ScheduledTask | Where-Object {$_.TaskName -like "*openclaw*"}
有就删掉,没有说明之前没注册过,跳过即可。
6.4 判断卸载是否干净的方法
卸载完如何确认自己的机器已经“干净”了?我常用的验证方式是做一轮搜索:
powershell复制Get-ChildItem $HOME -Recurse -Force -ErrorAction SilentlyContinue | Where-Object {$_.Name -like "*openclaw*"}
再加上前面提到的环境变量检查、计划任务检查和端口检查。四项都查不到任何结果,才能算真正卸载完。这套流程走完,你下次想重新安装也不会被旧的配置干扰。
我对卸载是否彻底的标准一直很朴素:你再搜不到 OpenClaw 相关的文件、进程、环境变量和任务计划,系统里干干净净,那这次清理就没白做。按照这份清单从头走一遍,Windows 10 上的部署、调优和清理闭环就算完整了。
