1. 为什么要在自有环境跑 OpenClaw AI AgentOpenClaw 是一个本地优先的 AI Agent 框架核心能力是把「模型调用 工具执行 任务编排」三件事收进一个可自托管的服务里。你可以把它理解成一个跑在自己机器上的智能体调度中枢它负责接收任务、拆解步骤、调用模型推理、再驱动本地技能文件处理、网页抓取、脚本执行等完成闭环。适合谁一是对数据流向敏感、不希望业务数据出内网的团队二是想深度定制 Agent 行为、需要改提示词和技能插件的开发者三是希望把 Agent 能力嵌进内部系统的工程同学。私有化部署的价值不在「省钱」两个字上而在于可控。模型参数你能改技能边界你能定日志落在自己磁盘上出问题能直接翻源码定位。但很多人卡在第一步环境装完了服务起来了模型却连不通。原因往往不是框架本身而是模型接入这一层没打通——要么 Key 管理混乱要么 Base URL 配错要么请求格式对不上。这篇就按「环境准备 → 服务启动 → 模型接入 → 连通性验证 → 排障」的顺序走一遍重点放在模型接入配置上。我会用 TaoToken 作为统一的模型通道来演示因为它把多家模型的 Key 和 API 收敛成一个入口配置项少、切换模型只改一个 Model ID适合私有化场景下做统一接入层。下面所有命令和配置都可以直接复制路径和字段名保持和实际一致。2. TaoToken 前置准备统一 Key 与 API 通道在动手改 OpenClaw 配置之前先把模型通道准备好。私有化部署最容易踩的坑是每个模型单独配一套 Key、一套地址配置文件越写越长换模型要改好几处。TaoToken 的思路是提供一个统一的 API 入口你只需要一个 Key、一个 Base URL通过改 Model ID 来切换底层模型。第一步拿到 API Key。访问控制台创建密钥https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite创建后复制那串以sk-开头的 Key先存到本地临时文件里别直接贴进会提交到 Git 的配置。建议用环境变量管理# Linux / macOS写入当前 shell 会话 export TAOTOKEN_API_KEYsk-你的密钥 # 验证是否写入成功 echo $TAOTOKEN_API_KEYWindows PowerShell 用$env:TAOTOKEN_API_KEYsk-你的密钥 echo $env:TAOTOKEN_API_KEY第二步确认 Base URL。TaoToken 的 API 入口是https://taotoken.net/api注意这个地址不带任何查询参数直接作为 OpenAI 兼容协议的 base_url 使用。OpenClaw 走的是 OpenAI 兼容的 chat completions 协议所以 Base URL 填这个即可框架会自动拼接/v1/chat/completions这类路径。第三步选一个 Model ID。私有化场景下建议先用一个稳定的通用模型跑通链路比如qwen3.5-plus这类平衡型模型响应速度和推理质量都够用。等链路通了再按任务类型切换。Model ID 的完整列表可以在文档里查https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite这里有个关键点OpenClaw 的模型配置里Base URL、API Key、Model ID 是三个独立字段必须同时正确。很多人只改了 Model ID 忘了改 Base URL结果请求打到默认地址上报 401 或者连接超时。三件套要一起配缺一不可。提示Key 不要硬编码进.env后提交到仓库。生产环境建议用系统环境变量或密钥管理服务注入.env只放非敏感配置。3. 可复制配置OpenClaw 接入 TaoToken 的完整片段环境依赖先过一遍。OpenClaw 需要 Node.js v18 或更高版本Git 用于拉代码。验证版本node -v # 期望 v18.x 及以上 npm -v git --version如果 Node 版本不够Linux 下用 NodeSource 装curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt-get install -y nodejsmacOS 用 Homebrewbrew install node拉代码、装依赖git clone https://github.com/openclaw/openclaw.git cd openclaw npm install接下来是核心模型接入配置。OpenClaw 支持用.env加配置文件两种方式我建议把敏感信息放.env把模型结构放 JSON 配置。先建.env# .env TAOTOKEN_API_KEYsk-你的密钥 OPENCLAW_WORKSPACE/home/yourname/openclaw-workspace然后在项目配置目录下建模型配置文件路径按 OpenClaw 约定放在config/models.json{ providers: { taotoken: { baseUrl: https://taotoken.net/api, apiKeyEnv: TAOTOKEN_API_KEY, protocol: openai, models: [ { id: qwen3.5-plus, label: Qwen3.5 Plus, contextWindow: 131072, default: true }, { id: qwen-max, label: Qwen Max, contextWindow: 32768 } ] } }, activeProvider: taotoken, activeModel: qwen3.5-plus }这份配置里几个字段要盯紧baseUrl必须是https://taotoken.net/api不要多加/v1框架会自己拼apiKeyEnv指向环境变量名而不是把 Key 写死protocol填openai因为走的是 OpenAI 兼容协议activeModel决定默认用哪个模型。如果你更习惯 TOML 风格OpenClaw 也支持config/models.toml[providers.taotoken] baseUrl https://taotoken.net/api apiKeyEnv TAOTOKEN_API_KEY protocol openai [[providers.taotoken.models]] id qwen3.5-plus label Qwen3.5 Plus contextWindow 131072 default true [active] provider taotoken model qwen3.5-plus两种格式选一种即可别同时存在否则加载顺序可能不符合预期。配好后启动服务npm start看到类似Agent service listening on port 3000的输出说明服务起来了。此时模型通道还没验证下一步专门做连通性测试。4. 验证请求确认模型通道真的通了服务起来不等于模型通了。最稳的验证方式是绕过 Agent 逻辑直接对模型通道发一个最小请求。OpenClaw 一般自带一个诊断命令先试npm run diagnose -- --provider taotoken --model qwen3.5-plus如果框架没有这个命令就用 curl 直接打 TaoToken 的接口确认 Key 和地址本身没问题curl -s https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: qwen3.5-plus, messages: [ {role: user, content: 只回复两个字通了} ], max_tokens: 16 }期望返回类似{ choices: [ { message: { role: assistant, content: 通了 } } ] }只要choices[0].message.content有内容说明 Key、Base URL、Model ID 三件套都对。这一步过了再回到 OpenClaw 里跑一个真实任务npm run agent -- --task 列出当前工作目录下的文件并统计数量观察日志里是否有模型请求记录、是否有工具调用记录。正常的话你会看到 Agent 先请求模型做规划再调用文件技能最后汇总结果。如果这一步卡住问题多半在 Agent 的工具权限或工作目录配置而不是模型通道。实测下来把模型通道单独验证一遍能省掉大量排查时间。很多人一上来就在 Agent 层调报错了分不清是模型问题还是框架问题。先 curl 通再跑 Agent问题定位快很多。5. 常见报错排查401、local proxy failed 与 reading choices私有化部署报错集中在几类逐个对照。401 Unauthorized。最常见。原因通常是 Key 没读到或读错。检查环境变量是否在当前进程可见printenv | grep TAOTOKEN如果为空说明启动服务的 shell 没加载.env。OpenClaw 不会自动读.env需要显式加载比如用dotenv或在启动命令前source .env。另外确认 Key 没有多余空格或换行复制时容易带上。local proxy failed / connection refused。这类报错说明请求根本没出去或者被本地网络策略拦了。先确认 Base URL 拼写是https://taotoken.net/api不是http也不是带/v1的地址。再确认机器能解析并访问该域名curl -I https://taotoken.net/api如果这里就失败是网络层问题和 OpenClaw 无关。注意不要配置任何非官方的网络转发工具直接用系统正常网络访问即可。reading choices of undefined。这个报错说明框架拿到了响应但响应结构里没有choices字段。常见原因是 Base URL 多写了/v1导致请求路径变成/v1/v1/chat/completions服务端返回了错误结构。把baseUrl改回https://taotoken.net/api即可。另一个原因是 Model ID 写错服务端返回错误对象而非标准响应同样会触发这个报错。对照文档确认 Model ID 拼写。OAuth / token expired 类报错。如果你用的是需要 OAuth 的模型通道注意 OpenClaw 里配置的是 API Key 模式不要混用。TaoToken 走的是 Bearer Token配置项是apiKeyEnv不是 OAuth 流程。出现 OAuth 相关报错检查是不是误配了别的 provider。Codex auth.json 相关。如果你同时用 Codex 类工具注意它的auth.json和 OpenClaw 的配置是两套。Codex 的auth.json里存的是它自己的凭证OpenClaw 不读这个文件。别把两者搞混OpenClaw 只认自己的config/models.json加环境变量。排查顺序建议固定先 curl 直连验证三件套再看 OpenClaw 日志里的实际请求 URL 和响应体最后查框架配置加载顺序。按这个顺序走绝大多数问题十分钟内能定位。6. 长期运行与统一接入建议链路跑通后接下来是让它稳定跑下去。私有化部署的长期问题是模型切换和 Key 轮换。用 TaoToken 做统一接入层的好处在这里体现换模型只改activeModel一个字段不用动 Base URL 和 KeyKey 轮换只改环境变量配置文件不动。如果你打算把 Agent 用在长期编码或自动化任务上可以了解下 Coding Plan 这类方案适合需要持续调用、按量计费的场景https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite日常调试模型行为、对比不同模型输出用模型对话页面更直观https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewriteKey 管理和新建密钥在控制台https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite配置字段和协议细节查文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite最后给一个实用技巧把config/models.json纳入版本管理但把.env加进.gitignore。这样团队协作时配置结构统一密钥各自注入。再写一个scripts/check-model.sh把第 4 节的 curl 验证封装起来每次改完配置先跑一遍比在 Agent 层试错快得多。私有化部署的稳定性往往就藏在这些小脚本里。
阅读完成 · 觉得有帮助?