1. 为什么要在本地跑一个 AI 代理框架
OpenClaw 是一个开源的 AI 代理框架,能让你把大模型接到自己的电脑上,通过终端命令、文件读写、定时任务这些真实动作去完成事情,而不是只停留在聊天窗口里。它适合三类人:一是对数据敏感、不想把公司文档发到云端的开发者;二是想研究 Agent 执行链路、需要改源码做二次开发的技术爱好者;三是手里有本地模型或 API 额度、想搭一个长期在线助理的折腾党。
我最初接触它是因为一个很具体的痛点:每天要重复整理下载目录里的发票 PDF、按月份归档、再把汇总表发到自己的消息通道。用云端助手做,每次都要手动上传文件,而且隐私上总觉得别扭。OpenClaw 的思路是把代理进程跑在本机,模型只负责决策,真正的文件操作、命令执行都在本地完成,数据不出设备。这一点在 excerpt 里被反复强调,也是它和普通聊天机器人最本质的区别。
本地部署的核心优势可以归纳成四条。第一是隐私可控,敏感信息不经过第三方服务器,向量记忆存在本地 sqlite-vec 里,跨会话不丢上下文。第二是系统级权限,代理能调用 exec 执行终端命令、用 read/write/edit 操作文件、用 cron 管理定时任务,这是"能做事"的基础。第三是模块化,模型层可以换 Claude、GPT、通义千问,工具层可以加技能插件,架构不锁死。第四是交互入口多,能通过 Telegram、Slack、iMessage 这类常用通讯软件下指令,不用专门打开一个 App。
不过要提醒一句:本地部署不等于零门槛。你需要一台常开的机器(Mac mini、旧笔记本、云主机都行)、一个可用的模型 API、以及愿意读日志排错的耐心。下面我按环境准备、模型接入、配置落地、验证请求、排错这条链路,把每一步都拆到能直接复制执行的程度。整个过程我会用 TaoToken 作为模型接入层来演示,因为它同时兼容 Anthropic 和 OpenAI 两种协议,配置起来省事。
2. 环境准备与 TaoToken 接入前置
2.1 机器与运行时要求
OpenClaw 本质是一个 Node.js 服务加一个代理运行时,对硬件要求不高,但对"常开"要求高。我实测下来,2 核 4G 的机器跑代理逻辑完全够用,真正吃资源的是模型推理——如果你走 API,本地几乎不占 GPU;如果你想接本地模型(比如通过 Ollama),那显存就得另算。
运行时方面,建议 Node.js 20 LTS 以上,pnpm 作为包管理器。先确认版本:
node -v # 期望输出 v20.x 或更高 pnpm -v # 没有的话执行:npm install -g pnpm如果你打算让代理执行系统命令,建议单独建一个低权限用户来跑服务,别用 root。这不是 OpenClaw 的强制要求,但代理能调 exec,权限收窄一层总归安心。
2.2 为什么选 TaoToken 做模型接入层
OpenClaw 的模型配置支持自定义 Base URL,这意味着你可以把请求指向任何兼容 Anthropic 或 OpenAI 协议的服务。TaoToken 的价值在于它把两种协议统一到一个入口,你换模型时不用改代码,只改配置里的 Model ID 就行。官网在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 端点是 https://taotoken.net/api ,注意 API 地址不带 UTM 参数,配置时别把查询串带进去。
接入前你需要准备三样东西,我把它叫做"三件套":Base URL、API Key、Model ID。这三者在任何 OpenClaw 配置里都是成对出现的,缺一个就会报 401 或 model not found。API Key 在控制台生成,地址是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite ,生成后立刻复制,页面刷新就看不到了。
2.3 拉取 OpenClaw 源码
git clone https://github.com/openclaw/openclaw.git cd openclaw pnpm install安装完成后先别急着启动,OpenClaw 首次运行会引导你生成配置目录,通常在~/.openclaw/下。你可以先手动建好,避免权限问题:
mkdir -p ~/.openclaw到这一步环境就绪了。接下来是整篇文章最关键的部分——把模型接进去。很多人卡在这里,不是因为配置难,而是因为协议选错、字段名写错。下一节我把两种协议的配置都给你,照着填即可。
3. 可复制配置:settings.json 与模型三件套
3.1 配置文件位置与结构
OpenClaw 的主配置是~/.openclaw/settings.json,模型相关的字段集中在models和agents两个节点下。我建议你先备份一份默认配置,再动手改:
cp ~/.openclaw/settings.json ~/.openclaw/settings.json.bak下面这份是我实测能跑通的配置,走 Anthropic 协议接入。注意baseUrl结尾不要带斜杠,apiKey用你控制台生成的那串,model填具体的 Model ID:
{ "models": { "providers": { "taotoken-anthropic": { "type": "anthropic", "baseUrl": "https://taotoken.net/api", "apiKey": "sk-你的Key", "models": [ { "id": "claude-sonnet-4-5", "name": "Claude Sonnet 4.5", "contextWindow": 200000 } ] } } }, "agents": { "default": { "model": "taotoken-anthropic/claude-sonnet-4-5", "maxTokens": 8192, "temperature": 0.3 } } }如果你更习惯 OpenAI 协议,把 provider 的type改成openai,baseUrl保持https://taotoken.net/api,Model ID 换成对应的即可。两种协议的区别主要在请求体和流式解析上,OpenClaw 内部会按type字段走不同的适配器,你不需要改代码。
3.2 三件套对照表
| 配置项 | 填写内容 | 常见错误 |
|---|---|---|
| Base URL | https://taotoken.net/api | 多写斜杠、带 UTM 参数 |
| API Key | 控制台生成的 sk- 开头串 | 复制时带空格、用错项目的 Key |
| Model ID | 如 claude-sonnet-4-5 | 写成显示名、大小写不符 |
注意:Base URL 一定不要带
?utm_source=...这类查询参数,那是给网页统计用的,写进 API 配置会导致 404 或签名校验失败。
3.3 环境变量方式(可选)
如果你不想把 Key 写进 JSON,可以用环境变量覆盖。OpenClaw 支持读取OPENCLAW_MODEL_API_KEY:
export OPENCLAW_MODEL_API_KEY="sk-你的Key"然后在 settings.json 里把apiKey字段留空或写成"${OPENCLAW_MODEL_API_KEY}"。这种方式适合把配置提交到 Git 的场景,避免密钥泄露。我自己的做法是本地用环境变量,服务器上用 systemd 的EnvironmentFile注入。
配置写完后,先做一次语法校验,JSON 少个逗号是最常见的低级错误:
python3 -m json.tool ~/.openclaw/settings.json > /dev/null && echo "JSON OK"看到JSON OK再往下走。接下来启动服务并验证代理是否真的能响应。
4. 启动服务与验证代理响应
4.1 启动命令与日志观察
前台启动方便看日志,第一次调试强烈建议这么做:
pnpm start -- --config ~/.openclaw/settings.json正常启动后你会看到类似输出:加载配置、初始化 provider、注册工具、监听本地端口。关键是要看到 provider 初始化成功那一行,如果模型配置有问题,这里就会抛错,不会等到你发请求才暴露。
服务起来后,另开一个终端做健康检查。OpenClaw 一般会暴露一个本地 HTTP 端口,默认在 3000 附近,具体看日志里的listening on。
curl -s http://127.0.0.1:3000/health # 期望返回 {"status":"ok"} 之类4.2 发一条真实代理任务
健康检查只证明进程活着,不证明模型通。真正的验证是让代理执行一个带工具调用的任务。我用一个最简单的文件操作来测:让它读取当前目录并汇报。
curl -s http://127.0.0.1:3000/agent/run \ -H "Content-Type: application/json" \ -d '{ "input": "列出当前工作目录下的文件,并用一句话总结", "agent": "default" }'如果一切正常,返回体里会包含模型生成的文本,以及一次exec或read工具的调用记录。看到工具调用记录,才说明代理链路是通的——模型决策、工具执行、结果回传这三步都跑通了。
4.3 判断部署成功的三个信号
第一,日志里出现模型响应耗时和 token 统计,说明请求真的打到了 TaoToken 并返回。第二,返回体里有tool_calls字段,说明代理没有退化成纯聊天。第三,你让它做的文件操作在磁盘上真实发生了,比如让它创建一个测试文件:
curl -s http://127.0.0.1:3000/agent/run \ -H "Content-Type: application/json" \ -d '{"input":"在当前目录创建 hello-openclaw.txt,内容写 deployed ok","agent":"default"}' ls -l hello-openclaw.txt && cat hello-openclaw.txt文件存在且内容正确,本地部署就算成功了。这一步比任何日志都直观,因为它证明代理有真实的系统级执行能力,而不只是返回了一段文字。
5. 常见报错排查:401、local proxy failed 与 reading choices
5.1 401 Unauthorized
这是最高频的报错,几乎都出在 Key 上。先确认三件事:Key 有没有复制完整、有没有多余空格、是不是当前项目的 Key。可以用一条 curl 直接测 Key 是否有效,绕开 OpenClaw:
curl -s https://taotoken.net/api/v1/messages \ -H "x-api-key: sk-你的Key" \ -H "anthropic-version: 2023-06-01" \ -H "Content-Type: application/json" \ -d '{"model":"claude-sonnet-4-5","max_tokens":16,"messages":[{"role":"user","content":"hi"}]}'如果这条也返回 401,那就是 Key 本身的问题,去控制台重新生成。如果这条通了但 OpenClaw 报 401,那多半是 settings.json 里apiKey字段被环境变量覆盖成了空值,检查一下有没有同时设了两处。
5.2 local proxy failed
这个报错通常出现在你配置了本地代理端口但代理没起来,或者 Base URL 指向了一个不可达的地址。排查顺序:先curl -v https://taotoken.net/api看网络是否通,再检查 settings.json 里的baseUrl有没有写错域名。还有一种情况是机器上的 DNS 解析异常,nslookup taotoken.net能帮你确认。
注意:如果你所在网络环境对 HTTPS 出站有限制,任何 API 调用都会失败,这属于网络层问题,不是配置问题。先保证
curl能通,再谈 OpenClaw。
5.3 reading choices 相关报错
这个报错一般出现在 OpenAI 协议模式下,框架期望返回体里有choices数组,但实际拿到的是错误结构或空体。原因通常是 Model ID 写错,服务端返回了一个错误 JSON,框架解析时找不到choices字段。解决办法是先用 curl 确认该 Model ID 在 TaoToken 上可用,再回填到配置里。另外检查type字段是否和协议匹配——用 Anthropic 的模型却把 type 写成 openai,也会触发这类解析错误。
5.4 OAuth 与鉴权类报错
如果你在配置里误开了 OAuth 模式,或者引用了需要交互式登录的 provider,会看到 OAuth 相关报错。OpenClaw 的 API Key 模式不需要 OAuth,确认 settings.json 里没有oauth节点即可。有些教程会让你跑openclaw auth login,那是给特定托管服务用的,自建场景直接填 Key 更简单。
排错时养成一个习惯:每次只改一个字段,改完重启服务看日志。同时改三四个地方,出错了你根本不知道是哪个引起的。我踩过的坑就是一次性把 provider、model、baseUrl 全换了,结果报错信息指向一个无关字段,白白多花半小时。
6. 把代理用起来:从验证到日常
部署验证通过只是起点。真正让 OpenClaw 产生价值的是把它接进你的日常流程。我目前的做法是让它常驻在一台小主机上,通过消息通道接收指令,定时任务负责每天整理文件。模型侧继续用 TaoToken 的 Coding Plan 跑长期编码类任务,地址是 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite ,因为代理任务往往是长会话、多轮工具调用,按量计费不如套餐划算。
如果你只是想先体验模型对话能力,可以打开 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite 直接试;要管理 Key 和额度就去控制台 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite ;接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite ,里面有各协议的字段说明,配置卡住时对着查最快。
最后给一个实用技巧:把 settings.json 纳入版本管理时,用settings.example.json存模板,真实 Key 走环境变量,这样换机器时复制模板加导出变量就能恢复,不用重新翻控制台。代理跑稳之后,你会发现它最大的好处不是省了几次点击,而是那些"本来要手动做、又懒得做"的琐事,终于有人替你做了。