1. 为什么你的 OpenClaw 总是卡在“启动成功但用不了”
很多人第一次接触 OpenClaw,是被它“本地优先、能自动干活”的定位吸引的。它本质上是一个开源的个人 AI 助手与自主代理,能通过自然语言指令完成文件读写、跨工具协同、日程管理、代码辅助这类重复性任务,数据默认落在你自己的电脑或服务器上,不上传第三方。适合谁?适合想拥有一个“数字员工”但又不想把敏感数据交出去的人,也适合想拿它做二次开发、接自己模型通道的开发者。
但真正动手部署时,90% 的人会卡在三个地方:Node.js 版本不对、端口没放行、服务起来了但模型通道没配通。前两个是环境问题,第三个是接入问题。这篇就按“从零到跑通一次真实请求”的顺序走一遍,覆盖 Node.js 和 Docker 两种环境,重点把 OpenClaw 接入 TaoToken 统一 Key/API 通道的配置片段给全,让你复制就能用。
先说清楚 OpenClaw 的架构,不然后面配置容易懵。它分三层:决策层负责调 LLM,执行层负责落地操作本地系统,扩展层用 Skills 模块化扩展能力。核心基于 TypeScript 开发,所以对 Node.js 版本有硬要求——必须 ≥ v22,低于这个版本安装后直接报错,服务起不来。这一点我踩过,别问,问就是重装。
部署前把三件事办了:内存 ≥ 2GB、硬盘 ≥ 1GB;Node.js 装到 v22 以上;如果要接云端模型,提前准备好 API Key。下面进入正题。
2. TaoToken 前置准备:统一 Key 与 Base URL 怎么拿
OpenClaw 本身不绑定任何一家模型,它通过 provider 配置去调模型。你可以接本地 Ollama,也可以接云端通道。这里我们用 TaoToken 作为统一入口,好处是一个 Key 走通多个模型,Base URL 固定,配置一次就行,不用每个模型改一遍。
第一步,打开官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 注册并登录。登录后进控制台,找到 API Keys 页面,新建一个 Key。这个 Key 就是后面配置里的apiKey,复制出来存好,页面关了就看不全了。
第二步,确认 Base URL。TaoToken 的 API 入口是 https://taotoken.net/api ,注意这个地址不带任何查询参数,配置时直接填这个。OpenClaw 里 provider 的baseUrl就写它。
第三步,想好你要用哪个模型。TaoToken 支持多种模型,你在控制台或模型对话页面能看到可用列表。记下你要用的 Model ID,比如claude-sonnet-4-5这类标识,后面配置里model字段要填它。如果你不确定用哪个,先去模型对话页面发一条消息试试,确认能通再写进配置。
这里给一个关键提醒:OpenClaw 的 provider 配置里,baseUrl和apiKey必须成对出现,缺一个就会在请求时抛 401 或连接失败。很多人只填了 Key 忘了改 Base URL,结果一直连默认地址,报错还找不到原因。下面第三节会把完整配置片段给出来。
3. 可复制配置:Node.js 与 Docker 两种环境的完整片段
这一节是核心,直接给可复制的配置。分两种环境:Node.js 手动部署和 Docker 部署。两种环境的 OpenClaw 配置文件路径不同,但内容结构一致。
先看 Node.js 环境。假设你已经用npm i -g openclaw@beta或pnpm add -g openclaw@beta装好了,并且执行过openclaw onboard初始化。OpenClaw 的配置通常落在用户目录下的配置文件夹里,你可以用openclaw config get查看当前配置。我们要改的是 provider 部分。新建或编辑配置文件,写入以下 JSON 片段:
{ "models": { "providers": { "taotoken": { "baseUrl": "https://taotoken.net/api", "apiKey": "你的_TaoToken_Key", "models": [ { "id": "claude-sonnet-4-5", "name": "Claude Sonnet via TaoToken" } ] } } }, "agents": { "defaults": { "model": { "primary": "taotoken/claude-sonnet-4-5" } } } }注意primary字段的写法是provider名/模型ID,这里 provider 名是taotoken,模型 ID 是你在 TaoToken 控制台看到的那个。两者用斜杠连接,写错一个字符就会报“model not found”。
如果你更习惯用命令行逐条设置,等价命令是:
openclaw config set models.providers.taotoken.baseUrl https://taotoken.net/api openclaw config set models.providers.taotoken.apiKey 你的_TaoToken_Key openclaw config set agents.defaults.model.primary taotoken/claude-sonnet-4-5再看 Docker 环境。Docker 部署时配置通过挂载卷传入,假设你把配置目录挂在~/openclaw,那么配置文件就在~/openclaw/config.json。内容同上。启动容器时确保挂载正确:
docker run -d --name openclaw-core \ -p 18789:18789 \ -v ~/openclaw:/data \ openclaw/openclaw如果你的配置放在/data/config.json,OpenClaw 启动时会读取它。改完配置后重启容器:docker restart openclaw-core。
这里有个容易忽略的点:Docker 容器内的localhost指的是容器自己,不是宿主机。如果你在容器里还想接宿主机的 Ollama,baseUrl不能写http://localhost:11434,要写宿主机的实际地址。但接 TaoToken 这种云端通道没这个问题,直接写https://taotoken.net/api即可。
配置写完后,别忘了验证语法。JSON 里多一个逗号、少一个引号都会导致启动失败。可以用python -m json.tool config.json快速检查格式。
4. 启动与验证:发一条真实请求确认通道打通
配置写完,重启服务。Node.js 环境执行:
openclaw gateway restartDocker 环境执行:
docker restart openclaw-core然后查看服务状态:
openclaw gateway status看到running就说明服务起来了。但这不代表模型通道通了,必须发一条真实请求验证。打开浏览器访问http://localhost:18789,如果是云服务器就换成公网 IP。进入 Web 控制面板后,发送一条测试消息,比如“用一句话介绍你自己”。
如果配置正确,你会看到模型正常回复。如果卡住或报错,看终端日志。Node.js 环境直接看当前终端输出,Docker 环境用:
docker logs -f openclaw-core日志里如果出现401 Unauthorized,说明 Key 不对或没带上;如果出现ECONNREFUSED或local proxy failed,说明 Base URL 写错或网络不通;如果出现reading choices相关报错,通常是返回体结构不符合预期,多半是 Base URL 指向了错误的端点。
验证通过后,你可以再试一条稍微复杂的指令,比如“在当前目录创建一个 test.txt 并写入 hello”,确认执行层也能正常工作。这一步能跑通,说明 OpenClaw 的决策层和执行层都活了。
5. 常见报错排查:401、连接失败、模型找不到逐个解决
这一节按真实报错来。第一个,401 Unauthorized。原因通常是三个:Key 复制时带了空格、Key 已失效、请求没带上 Key。解决动作:重新去控制台复制 Key,确认配置里apiKey字段没有多余空格;如果 Key 刚建,等几秒再试;检查baseUrl是否写成了https://taotoken.net/api,少写/api或写成别的路径都会导致鉴权失败。
第二个,local proxy failed或ECONNREFUSED。这个报错说明 OpenClaw 尝试连接 Base URL 但连不上。先确认网络能访问https://taotoken.net/api,可以在终端执行curl -I https://taotoken.net/api看返回。如果返回 200 或 401 都说明网络通,问题在配置;如果超时,检查服务器 DNS 或防火墙出站规则。Docker 环境还要确认容器网络模式,默认 bridge 模式出站没问题,但如果用了自定义网络要确认路由。
第三个,model not found或reading choices报错。前者是primary字段里的模型 ID 写错了,去 TaoToken 控制台核对准确 ID;后者通常是 Base URL 指向了非兼容端点,确认写的是https://taotoken.net/api而不是其他路径。还有一种情况是模型 ID 大小写不一致,比如Claude-Sonnet-4-5和claude-sonnet-4-5在某些实现里不互通,统一用小写。
第四个,OAuth相关报错。如果你之前配过其他 provider 的 OAuth 流程,残留的 token 可能干扰。解决动作:清掉旧的 provider 配置,只保留taotoken这一个,然后重启服务。OpenClaw 的 provider 是并列的,不会自动切换,但残留配置可能让默认模型指向失效通道。
第五个,服务启动后端口访问不了。先确认18789端口在监听:lsof -i:18789或netstat -ano | findstr 18789。如果没监听,说明服务没真正起来,看日志。如果监听了但访问不了,检查防火墙和云服务器安全组,入站规则放行18789。Docker 环境还要确认-p 18789:18789映射写对了。
排查顺序建议:先看日志定位报错类型,再对照上面五类处理。不要一上来就重装,多数问题是配置字段写错。
6. 跑通之后:把 OpenClaw 用起来的几个实际动作
服务通了,通道也验证了,接下来是让它真正干活。第一个动作,把默认模型固定成你常用的那个。如果你在 TaoToken 里有多个模型,可以按任务切换,比如代码辅助用一个,文本处理用另一个。切换命令就是改agents.defaults.model.primary然后重启。
第二个动作,开启沙箱模式。如果你打算把 OpenClaw 分享给多人用,或者让它执行文件操作,建议开启沙箱,限制访问范围:
openclaw config set agents.defaults.sandbox.mode "non-main"重启后,非主会话会在隔离环境中运行,误操作影响可控。
第三个动作,接入通信工具。OpenClaw 支持在聊天软件里直接控制,不用每次开 Web 面板。以 Telegram 为例,找 BotFather 创建机器人拿到 BotToken,然后:
openclaw config set channels.telegram.botToken "你的BotToken"重启服务后就能在 Telegram 里发指令了。
第四个动作,如果你要长期跑在服务器上,用 Docker 的--restart unless-stopped参数保证容器自启:
docker update --restart unless-stopped openclaw-core这样服务器重启后 OpenClaw 会自动起来,不用手动干预。
最后说一个实际经验:OpenClaw 的配置改动后一定要重启服务才生效,改完不重启是新手最容易忽略的一步。另外,TaoToken 的 Key 建议单独建一个给 OpenClaw 用,方便后续轮换和排查。需要看更多接入细节可以去接入文档,想先试模型效果就去模型对话页面发几条消息,长期编码或跑 Agent 任务的话 Coding Plan 更合适。通道配通只是开始,真正省时间的是把它接进你每天的工作流里。