)
1. 从 GitHub 拉源码到跑通OpenClaw 本地部署到底卡在哪OpenClaw 是一个开源的 AI 执行框架简单说它不是大模型本身而是给大模型装上手脚的那层调度系统。你给它一个任务它能去读写文件、跑命令、调接口把对话变成执行。适合谁适合想在自己机器或云主机上跑一个私有智能体、又不想被某个厂商平台锁死的开发者。它的 GitHub 仓库更新很勤直接 clone 源码部署能拿到最新能力但这也是坑最多的一条路——依赖版本、Node 环境、模型通道配置任何一环没对上启动就是一堆报错。我试过从零在一台干净的 Ubuntu 22.04 上拉仓库跑起来中间踩了几个典型坑Node 版本低于 22 导致原生模块编译失败、.env里模型地址写错导致请求一直转圈、云端容器里没映射端口导致外部访问不到。这篇就把本地和云端两条路径都走一遍重点放在可复制的配置和部署后怎么验证真的通了模型调用统一走 TaoToken 的 Key 和 API 通道省得你到处注册各家平台的账号。先说清楚两条路径的差别。本地部署适合调试和隐私敏感场景数据全在自己盘里缺点是关机就停。云端部署适合要 7×24 在线的场景租一台云主机把仓库拉上去用容器跑配好端口映射就能远程访问。两条路径的仓库拉取、依赖安装、模型配置逻辑是一样的区别只在运行环境和网络暴露方式。环境要求先对齐这是后面所有步骤的前提项目要求说明操作系统Windows 10 / macOS 12 / Ubuntu 22.04Linux 推荐 Ubuntu容器生态最顺Node.js≥ v22低于 22 会在装依赖时报编译错误包管理器npm 或 pnpmpnpm 装得快仓库两种都支持Git任意较新版本源码安装必须内存≥ 2GB推荐 4GB跑模型调度和插件会吃内存权限Windows 管理员 / Linux sudo装全局依赖和写系统目录需要这里有个容易被忽略的点Node 版本一定要先确认。很多人系统里预装的是 v18 或 v20直接 clone 下来npm install会卡在某个原生依赖的 node-gyp 编译上报错信息还特别长看着像网络问题其实是版本问题。先跑node -v看一眼低于 22 就用 nvm 切一个。# 安装 nvm如果还没有 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash source ~/.bashrc # 装并切到 Node 22 nvm install 22 nvm use 22 node -v # 应输出 v22.x.x环境对齐之后本地和云端的分叉点就出现了本地直接在当前目录跑云端要考虑容器化和端口。下面第二节先把 TaoToken 的 Key 和通道准备好因为不管哪条路径模型调用都靠它。2. TaoToken 前置准备统一 Key 与 API 通道配置在拉仓库之前先把模型调用的通道准备好这样部署完能立刻验证不用来回切窗口。TaoToken 在这里扮演的角色是统一的模型接入层——你不需要在 OpenClaw 里分别填 Moonshot、OpenAI、Anthropic 各自的地址和 Key而是用一套 Base URL 加一个 Key通过它去路由到不同模型。对 OpenClaw 这种要频繁切换模型的框架来说这能省掉大量配置维护工作。先拿 Key。打开官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册登录后进控制台在 API Keys 页面创建一个新 Key。创建时给它起个能认出来的名字比如openclaw-local方便以后区分是本地还是云端在用。Key 只在创建时完整显示一次复制下来存好后面.env里要用。拿到 Key 之后记住两个核心信息OpenClaw 的模型配置全靠它们Base URLhttps://taotoken.net/apiAPI Key你刚复制的那串字符模型 ID 这块要注意OpenClaw 的配置里填的是模型标识不是随便写个名字。TaoToken 支持的主流模型都有对应的 ID比如 Claude 系列、GPT 系列、Kimi 系列。你可以在模型对话页面先试一下目标模型能不能正常返回确认 ID 写对了再往 OpenClaw 里填。模型对话入口在这里https://taotoken.net/api?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content如果你打算长期跑编码类任务或者 Agent 工作流可以顺带看下 Coding Plan它在调用额度和并发上更适合持续运行https://taotoken.net/api?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentKey 和通道准备好之后先别急着配 OpenClaw用一条 curl 确认通道本身是通的。这一步能帮你把通道问题和OpenClaw 配置问题分开后面排障会轻松很多。curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer 你的Key \ -H Content-Type: application/json \ -d { model: claude-sonnet-4-5, messages: [{role: user, content: ping}] }返回里能看到choices字段和一段回复内容就说明 Key 和通道没问题。如果这里就报 401那是 Key 的问题跟 OpenClaw 无关先解决这个再往下走。这一步花两分钟能省掉后面半小时的瞎猜。3. 可复制配置本地与云端部署的完整片段这一节是全文的核心把本地和云端两条路径的配置都给全。先说本地从 GitHub 拉仓库开始。# 1. 拉取仓库 git clone https://github.com/openclaw/openclaw.git cd openclaw # 2. 安装依赖pnpm 更快没有就用 npm pnpm install # 或者 npm install # 3. 复制环境变量模板 cp .env.example .env接下来编辑.env这是模型调用能不能通的关键。把下面这段按你的实际情况填进去重点是OPENAI_BASE_URL和OPENAI_API_KEY这两项指向 TaoToken# .env 配置片段 # 模型通道统一走 TaoToken OPENAI_BASE_URLhttps://taotoken.net/api/v1 OPENAI_API_KEY你的TaoToken_Key # 默认使用的模型 ID DEFAULT_MODELclaude-sonnet-4-5 # 本地服务监听端口 PORT3000 # 数据目录本地部署建议放当前项目下 DATA_DIR./data这里有个细节OPENAI_BASE_URL末尾要带/v1因为 OpenClaw 内部走的是 OpenAI 兼容协议它会在这个地址后面拼/chat/completions。如果你只写到https://taotoken.net/api请求路径就错了会返回 404 或者一直转圈。这个坑我在第一次配的时候踩过排查了半天才发现是路径少了一段。配置写完本地启动pnpm start # 或者 npm run start看到日志里输出监听端口和 gateway 就绪的信息本地这条路径就算跑起来了。默认访问http://localhost:3000能看到界面。再说云端。云端推荐用 Docker把环境变量和端口都固化在配置里迁移和重启都省事。先写docker-compose.yml# docker-compose.yml version: 3.8 services: openclaw: image: node:22-slim container_name: openclaw working_dir: /app volumes: - ./openclaw:/app - ./data:/app/data ports: - 3000:3000 environment: - OPENAI_BASE_URLhttps://taotoken.net/api/v1 - OPENAI_API_KEY你的TaoToken_Key - DEFAULT_MODELclaude-sonnet-4-5 - PORT3000 - DATA_DIR/app/data command: sh -c npm install npm run start restart: unless-stopped云端部署的步骤是先把仓库 clone 到云主机上然后在仓库同级目录放这个docker-compose.yml注意volumes里的./openclaw要指向你实际 clone 下来的目录名。然后# 启动容器 docker compose up -d # 看日志确认启动成功 docker compose logs -f openclawrestart: unless-stopped这行很关键它保证云主机重启后容器自动拉起来实现 7×24 在线。端口映射3000:3000把容器内端口暴露到主机外部通过云主机的公网 IP 加 3000 端口访问。记得在云主机的安全组里放行 3000 端口否则外面连不上这个也是常见坑。如果你用的是 Cline MCP 或者 Claude Code 这类工具去连 OpenClaw 的接口配置里同样要写全三件套Base URL 填https://taotoken.net/api/v1Key 填你的 TaoToken KeyModel ID 填claude-sonnet-4-5或你实际要用的模型。三样缺一不可少一个就是连不上或者报模型不存在。4. 验证请求确认部署后接口真的通了部署完不能只看进程活着就完事得实际发一个请求确认整条链路通了。验证分两层先验 OpenClaw 服务本身活着再验它通过 TaoToken 调模型能拿到回复。第一层检查服务状态# 本地或云端容器内执行 curl http://localhost:3000/health返回{status:ok}之类的健康检查结果说明服务进程正常。如果这一步就失败那是部署问题跟模型通道无关去看容器日志或者本地启动日志。第二层走 OpenClaw 的接口发一个真实请求验证它能通过 TaoToken 拿到模型回复curl http://localhost:3000/api/chat \ -H Content-Type: application/json \ -d { message: 帮我列一下当前目录下的文件, model: claude-sonnet-4-5 }如果返回里带了模型生成的回复内容说明 OpenClaw 到 TaoToken 再到模型的整条链路是通的。这一步成功你的部署就算真正完成了。云端的话把localhost换成云主机的公网 IPcurl http://你的云主机IP:3000/health这里有个验证技巧如果第二层请求返回的报错里出现reading choices这种字样说明请求发出去了但响应结构不对通常是 Base URL 路径写错或者模型 ID 不存在。如果报local proxy failed或者连接超时那是网络层的问题检查云主机安全组和容器端口映射。把报错信息对着这两类去分能快速定位。验证通过之后你可以回到模型对话页面再确认一下同一个模型在网页端也能正常返回两边结果一致就说明配置没问题https://taotoken.net/api?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content5. 本篇常见错排查401、local proxy failed、reading choices部署过程中最耗时的就是排错这一节把几个高频报错和对应解法列清楚你对着报错信息直接找就行。401 Unauthorized。这个最直接就是 Key 不对。可能的原因Key 复制时带了空格、Key 已经失效或被删、.env里变量名写错导致读不到。排查顺序是先确认.env里OPENAI_API_KEY的值和你复制的一致再单独用第 2 节那条 curl 测一下 Key 本身。如果 curl 能通但 OpenClaw 报 401那就是 OpenClaw 没读到.env检查启动时的工作目录对不对.env要在项目根目录。local proxy failed。这个报错通常出现在云端容器里意思是容器内部往外发请求失败了。原因一般是容器网络配置问题或者云主机本身出网受限。排查进容器docker exec -it openclaw sh在里面 curl 一下 TaoToken 的地址看能不能通。如果容器内不通但主机上通那是容器 DNS 或网络模式的问题给 compose 加network_mode: host或者检查 DNS 配置。reading choices。这个报错说明请求发出去了返回的 JSON 里没有choices字段代码去读就报错。根因是响应结构不对最常见的是 Base URL 路径写错——比如写成了https://taotoken.net/api少了/v1请求打到了错误的端点。另一个可能是模型 ID 写错通道返回了错误信息而不是正常的 completion 结构。解法确认OPENAI_BASE_URL是https://taotoken.net/api/v1确认DEFAULT_MODEL是通道支持的模型 ID。OAuth 相关报错。如果你在配置里误开了需要 OAuth 的模型提供商会报授权失败。OpenClaw 里如果同时配了多个 provider确保默认走的是 TaoToken 这条 OpenAI 兼容通道别让 OAuth 类型的 provider 抢了默认。检查配置文件里 provider 的优先级把 TaoToken 通道设为默认。端口占用或访问不到。本地报EADDRINUSE是 3000 端口被占了改PORT换个端口。云端外部访问不到先确认安全组放行了端口再确认 compose 里ports映射写对了最后确认云主机防火墙没拦。把这几类报错和现象对照着记下次再遇到能直接定位。排障时如果怀疑是通道问题可以回 API Keys 页面重新生成一个 Key 测试排除 Key 本身的因素https://taotoken.net/api?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content6. 部署完成后的接入与长期运行建议部署跑通只是开始真正用起来还要考虑长期运行的稳定性。本地部署的话机器关机服务就停适合调试和按需使用如果你要它持续处理任务云端那条路径更合适配合restart: unless-stopped能做到开机自启。长期运行有几个实用建议。第一把.env和docker-compose.yml里的 Key 管理好别提交到 Git 仓库用.gitignore排除掉。第二云端部署定期看容器日志docker compose logs能发现内存泄漏或者请求异常。第三模型 ID 别写死在代码里放在环境变量里换模型时改配置重启就行不用动代码。如果你后面要接 Claude Code 或者 Cline MCP 这类工具记住三件套的写法Base URL 用https://taotoken.net/api/v1Key 用你的 TaoToken KeyModel ID 用通道支持的模型标识。这三样在 OpenClaw 的.env里、在 Cline 的 MCP 配置里、在 Claude Code 的 settings 里都是同样的逻辑配一次就能复用。需要看更完整的接入文档和参数说明可以到这里翻https://taotoken.net/api?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content最后一步回到你的 OpenClaw 界面发一个真实任务让它执行比如读取当前目录的 README 并总结。看到它真的去读文件、调模型、返回总结这条从 GitHub 仓库到本地/云端部署、再到 TaoToken 统一 Key 接入的完整链路就算彻底走通了。