Ubuntu 上跑 OpenClaw 个人 AI 助手:TaoToken 统一 Key 接入与 config.toml 配置骨架
1. Ubuntu 上跑 OpenClaw 个人 AI 助手先把链路想清楚OpenClaw 是一个可以本地部署的个人 AI 助手框架跑在 Ubuntu 上用 Node.js 起服务通过 Web 控制台、Telegram、微信等入口跟你对话支持自动任务和自定义技能。它适合谁适合手里有一台 Ubuntu 机器物理机、虚拟机、云主机都行、想自己掌控对话数据、又不想从零写一套 Agent 调度逻辑的开发者。核心检索词就三个Ubuntu、OpenClaw、大模型 API 接入。我这次的目标很明确在 Ubuntu 上把 OpenClaw 跑起来用 TaoToken 的统一 Key 接大模型把config.toml配置骨架写清楚启动后验证助手能正常回话。整条链路是「装 Node.js → 装 OpenClaw → 配模型 API → 启动网关 → 验证对话」。很多人卡住的地方不是安装而是模型 API 的 baseUrl、apiKey、模型 id 三件套对不上以及网关的allowedOrigins没配导致浏览器报 origin not allowed。这篇就把这些坑一次讲透。需要说明的是OpenClaw 的配置在不同版本里可能是openclaw.json或config.toml本文以config.toml骨架为主线同时给出 JSON 形态的对照你按自己版本的实际文件名落盘即可。下面所有命令都可以直接复制。2. TaoToken 前置统一 Key 与接入地址在配模型之前先把 Key 这件事解决。TaoToken 提供统一的大模型 API 接入层一个 Key 可以对接多家模型省去你在每个厂商后台分别注册、分别管额度、分别记 baseUrl 的麻烦。对 OpenClaw 这种需要频繁切换模型的场景特别合适——你只要改配置里的模型 idKey 不用动。你需要先拿到两样东西一个 API Key在控制台的 API Keys 页面创建形如sk-xxxxxxxx创建后只显示一次记得存好。接入地址baseUrlhttps://taotoken.net/api这是 OpenAI 兼容协议的入口OpenClaw 里api字段填openai-completions就能对接。创建 Key 的入口在这里API Keys 管理https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentapikeys如果你还没注册官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contenthome 注册后在控制台里就能看到 Key 管理和用量面板。想先确认模型能不能通可以用模型对话页面直接发一条消息试试模型对话体验https://taotoken.net/model-chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentmodelchat这一步的意义在于先用网页确认 Key 有效、模型可用再去配 OpenClaw能排除掉一半「到底是 Key 错还是配置错」的扯皮。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentdoc 里面有完整的协议说明和示例。3. 可复制配置Ubuntu 环境 config.toml 骨架3.1 装 Node.js 与基础依赖OpenClaw 要求 Node.js ≥ 22推荐用 NodeSource 源装 LTS。先更新系统并装基础工具sudo apt update sudo apt install -y curl gnupg2 ca-certificates lsb-release git装 Node.js 22.xcurl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - sudo apt install -y nodejs node -v npm -vnode -v输出v22.x.x就对了。如果输出的是系统自带的旧版本说明 NodeSource 源没生效重跑上面那条setup_22.x的脚本再装一次。Git 顺手配一下身份后面拉技能包会用到git config --global user.name Your Name git config --global user.email youexample.com3.2 安装 OpenClaw推荐用 pnpm装包快、依赖处理干净npm install -g pnpm pnpm config set registry https://registry.npmmirror.com/ pnpm add -g openclawlatest openclaw --versionopenclaw --version能打印版本号就说明 CLI 装好了。接着跑初始化向导openclaw onboard向导会问你模型厂商、网关端口、工作目录等。这里可以先随便选一个因为后面我们要手动改配置文件向导只是帮你把目录结构和默认文件生成出来。3.3 config.toml 配置骨架OpenClaw 的核心配置在~/.openclaw/下。下面这份config.toml骨架把 TaoToken 作为模型提供方接进去你可以直接抄[meta] lastTouchedVersion 2026.3.2 [models] mode merge [models.providers.taotoken] baseUrl https://taotoken.net/api apiKey sk-你的TaoToken密钥 api openai-completions [[models.providers.taotoken.models]] id claude-sonnet-4-5 name claude-sonnet-4-5 api openai-completions reasoning false input [text, image] contextWindow 200000 maxTokens 8192 [[models.providers.taotoken.models]] id gpt-4o-mini name gpt-4o-mini api openai-completions reasoning false input [text] contextWindow 128000 maxTokens 16384 [agents.defaults] workspace /home/你的用户名/.openclaw/workspace [agents.defaults.model] primary taotoken/claude-sonnet-4-5 [agents.defaults.models] taotoken/claude-sonnet-4-5 {} taotoken/gpt-4o-mini {} [gateway] port 18789 mode local bind lan [gateway.controlUi] allowedOrigins [ http://localhost:18789, http://127.0.0.1:18789, http://192.168.1.100:18789 ] [gateway.auth] mode token token 自定义一个网关访问令牌几个关键点解释一下。baseUrl必须是https://taotoken.net/api不要多加/v1OpenClaw 会按openai-completions协议自己拼路径。apiKey填你在 TaoToken 控制台创建的 Key。primary里的taotoken/前缀对应[models.providers.taotoken]这个段名段名改了前缀也要跟着改。如果你的版本用的是openclaw.json结构等价把上面的 TOML 翻译成 JSON 即可字段名一一对应{ models: { mode: merge, providers: { taotoken: { baseUrl: https://taotoken.net/api, apiKey: sk-你的TaoToken密钥, api: openai-completions, models: [ { id: claude-sonnet-4-5, name: claude-sonnet-4-5, api: openai-completions, contextWindow: 200000, maxTokens: 8192 } ] } } }, agents: { defaults: { model: { primary: taotoken/claude-sonnet-4-5 }, models: { taotoken/claude-sonnet-4-5: {} } } }, gateway: { port: 18789, mode: local, bind: lan, controlUi: { allowedOrigins: [ http://localhost:18789, http://127.0.0.1:18789 ] }, auth: { mode: token, token: 自定义网关令牌 } } }3.4 关于 allowedOrigins 与 bindallowedOrigins是网关的 CORS 白名单控制哪些网页地址能访问 Web 控制台。浏览器打开控制台时会带上当前页面的 Origin网关只放行列表里的地址不在列表里就直接拒绝报origin not allowed。所以如果你从局域网另一台机器访问必须把那个 IP 加进去。bind lan表示监听所有网卡允许内网访问。如果你只在宿主机访问虚拟机里的 OpenClaw记得在虚拟机软件里配好端口转发NAT 模式下把宿主机的 18789 转发到虚拟机的 18789然后把宿主机访问用的地址加进allowedOrigins。改完配置后重启网关openclaw gateway restart ss -tlnp | grep 18789看到0.0.0.0:18789或*:18789就说明监听正常。4. 验证请求启动网关并确认助手能回话配置落盘后启动网关openclaw gateway start openclaw status --allstatus --all会列出网关状态、模型提供方、当前 primary 模型。确认taotoken提供方显示为已加载、primary 是taotoken/claude-sonnet-4-5。接着用命令行直接发一条测试消息验证模型链路openclaw chat 用一句话介绍你自己如果返回了模型生成的文本说明 Key、baseUrl、模型 id 三件套全对。如果报 401是 Key 问题报 404多半是 baseUrl 多了/v1或模型 id 写错报超时检查网络能不能通到taotoken.net。再验证 Web 控制台。浏览器打开http://你的机器IP:18789输入配置里的网关 token进入控制台后发一条消息。如果浏览器报origin not allowed回到allowedOrigins把你当前访问用的完整地址含端口加进去重启网关再试。如果控制台提示设备待批准用设备管理命令处理openclaw devices list openclaw devices approve Request ID # 或者一次全批 openclaw devices approve --all看到助手正常回复整条链路就通了。想看实时日志排错openclaw logs --follow5. 本篇常见错排查报origin not allowedallowedOrigins没包含你浏览器地址栏里的完整 Origin。注意 Origin 是协议://IP:端口端口不能省。改完必须openclaw gateway restart。报 401 UnauthorizedTaoToken Key 错了或没填。去控制台重新创建一个注意 Key 只在创建时显示一次。填进apiKey后重启网关。报 404 或 model not found两种可能。一是baseUrl写成了https://taotoken.net/api/v1去掉/v1二是模型 id 跟 TaoToken 实际提供的名称不一致去模型对话页面确认可用模型名。网关起不来端口被占ss -tlnp | grep 18789看谁占了改[gateway] port换一个或停掉占用进程。改了配置不生效OpenClaw 有些版本会缓存配置跑一次openclaw doctor --fix修复配置再openclaw gateway install --force同步最后openclaw gateway restart。宿主机访问不了虚拟机NAT 模式下必须配端口转发且虚拟机里bind要是lanallowedOrigins要包含宿主机访问用的地址。对话没反应但网关正常多半是 primary 模型的前缀跟 provider 段名不匹配。段名是taotokenprimary 就必须是taotoken/模型id。6. 长期编码与 Agent 场景的接入建议如果你不只是想让助手聊天而是要把它当长期编码助手或 Agent 跑自动化任务模型调用频率会明显上升这时候按量计费的 Key 管理就需要更细。TaoToken 的 Coding Plan 适合这种长期、高频的编码与 Agent 场景额度模型更贴合持续调用Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcodingplan配置上你可以在[agents.defaults.models]里挂多个模型日常对话用便宜的编码任务切到能力强的通过改primary一行切换Key 始终是同一个。接入文档里有完整的模型列表和协议细节配之前扫一眼能少走弯路接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentdoc最后提醒一句config.toml里的apiKey和网关token都是敏感信息别提交到 Git 仓库也别贴到公开渠道。本地跑通之后把这两个值换成环境变量注入是更稳妥的做法。