1. 为什么要在本地跑 OpenClaw 2.7.9 这套数字员工
OpenClaw 2.7.9 是一个可以在自有服务器或本机运行的 AI 数字员工框架,它能接入 490+ 大模型,把「对话」升级成「能动手干活」的自动化角色。适合谁?适合手里有一台闲置机器、想把文件整理、文档提取、浏览器采集这类重复操作交给 AI 的开发者和小团队。它的核心卖点不是聊天,而是任务调度:你描述目标,它拆步骤、调工具、跑完给你结果。
我这次部署的目标很明确:在一台内网 Linux 服务器上把 OpenClaw 2.7.9 跑起来,模型鉴权不走各家厂商的零散 Key,而是统一走 TaoToken 的 API 通道,这样 490+ 模型的切换只改一个 Model ID,不用来回换密钥。整个过程踩了几个坑,尤其是 Gateway 离线和模型鉴权 401,下面按可复制的顺序写清楚。
先说清楚本地私有化的价值。所有操作日志、文档资料、任务中间产物都留在本机,不上传云端,这对处理内部合同、报表、代码库的场景很关键。OpenClaw 的 Gateway 服务负责调度,角色(Agent)负责执行,模型负责推理,三者解耦。你要做的就是把这三段接起来:Gateway 起服务、角色配权限、模型配通道。
部署前有两个硬性前提。第一,安装目录必须是纯英文路径,禁止空格、中文、特殊符号,Windows 下推荐D:\AItools\OpenClaw,Linux 下推荐/opt/openclaw。第二,安全防护软件会误判键鼠模拟和文件读写行为,安装阶段需要临时退出或加白名单,否则核心组件会被隔离,表现为启动后 Gateway 一直离线。这两点后面排障章节还会展开。
我试过在一台 4 核 8G 的 Ubuntu 22.04 上跑,Gateway 常驻内存约 600MB,单角色任务调度延迟在可接受范围。如果你只是本机试用,Windows 版解压即用;如果要长期挂机做数字员工,建议 Linux + systemd 托管。下面从 TaoToken 的 Key 准备开始,一步步到验证请求成功。
2. TaoToken 统一 Key 与 API 通道准备
TaoToken 在这里的角色是「统一鉴权入口」。OpenClaw 支持自定义 OpenAI 兼容的 Base URL,所以你把模型请求指向 TaoToken 的 API 地址,用一把 Key 就能调用它聚合的模型,切换模型只改 Model ID。这样做的直接好处是:OpenClaw 的配置文件里只维护一套鉴权信息,490+ 模型的接入不用逐个申请。
第一步,打开官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 注册并登录。登录后进入控制台,地址是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite 。在控制台里找到 API Keys 页面,路径是 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite ,点新建 Key,复制出来。这个 Key 只显示一次,建议先存到密码管理器。
第二步,确认 API 基地址。TaoToken 的 API 入口是 https://taotoken.net/api ,注意这个地址不带任何查询参数。OpenClaw 里填 Base URL 时,通常要填到/v1这一级,也就是https://taotoken.net/api/v1,具体以你所用模型通道的文档为准。文档入口在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,里面有各模型的 Model ID 列表,抄的时候别抄错大小写。
第三步,想清楚你要用哪种模型。如果只是验证链路,用便宜的小模型即可;如果要做长期编码或 Agent 任务,可以看 Coding Plan 页面 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite ,选适合高频调用的套餐。验证模型是否通,可以直接在模型对话页 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=chat&utm_campaign=rewrite 里发一句话,确认 Key 有额度、模型能回。
这里有个容易忽略的点:OpenClaw 的模型配置和 TaoToken 的 Key 是两套东西。Key 是身份,Base URL 是通道,Model ID 是你要调哪个模型。三者缺一不可,而且必须语义一致——你填的 Model ID 必须是 TaoToken 文档里真实存在的,否则会报model not found。我建议先把这三个值写在一张便签上:Base URL = https://taotoken.net/api/v1、API Key = sk-xxxx、Model ID = 文档里抄的那个。
如果你用的是 Claude Code 这类工具做润色或编码辅助,接入逻辑一样:Base URL 指向 TaoToken,Key 用同一把,Model ID 换成对应 Claude 系列。Claude Code 的接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 里有专门章节,配置项名称和 OpenClaw 不同,但三件套不变。准备好这三样,下一节直接写配置文件。
3. 可复制配置:OpenClaw 2.7.9 接入 TaoToken
这一节是全文最该照着抄的部分。OpenClaw 2.7.9 的配置分两层:一层是 Gateway 的模型通道配置,一层是角色(Agent)的任务配置。先解决模型通道,因为 Gateway 起不来,角色无从谈起。
OpenClaw 的模型配置通常放在安装目录下的config文件夹,文件名可能是models.json或settings.json,以你实际解压后的结构为准。下面给一份 OpenAI 兼容格式的 JSON 片段,路径和字段名按 OpenClaw 2.7.9 的常见结构写,你对照自己的文件改:
{ "providers": { "taotoken": { "type": "openai-compatible", "baseUrl": "https://taotoken.net/api/v1", "apiKey": "sk-你的TaoToken密钥", "models": [ { "id": "你的ModelID", "name": "taotoken-primary", "contextWindow": 128000 } ] } }, "defaultProvider": "taotoken", "defaultModel": "你的ModelID" }如果你更习惯 TOML 格式,等价写法如下,字段含义一致:
[providers.taotoken] type = "openai-compatible" baseUrl = "https://taotoken.net/api/v1" apiKey = "sk-你的TaoToken密钥" [[providers.taotoken.models]] id = "你的ModelID" name = "taotoken-primary" contextWindow = 128000 [defaults] provider = "taotoken" model = "你的ModelID"环境变量方式更适合容器化部署,把密钥从配置文件里抽出来,避免提交到 Git:
export OPENCLAW_PROVIDER=taotoken export OPENCLAW_BASE_URL=https://taotoken.net/api/v1 export OPENCLAW_API_KEY=sk-你的TaoToken密钥 export OPENCLAW_MODEL=你的ModelID写完之后检查三件事。第一,baseUrl结尾是/v1,不要多写斜杠也不要少写。第二,apiKey没有多余空格,复制时容易带上换行。第三,defaultModel和models[].id完全一致,大小写敏感。这三点任意一个错,Gateway 启动时不会报错,但发指令时会返回 401 或model not found。
角色配置单独放在agents目录,一个角色一个文件。数字员工的核心是「角色 + 工具权限 + 触发方式」。下面是一个文件整理角色的最小配置:
{ "name": "file-organizer", "model": "你的ModelID", "systemPrompt": "你是文件整理助手,按类型分类文件,清理空文件夹和重复文件。", "tools": ["filesystem.read", "filesystem.write", "filesystem.move"], "schedule": "manual" }tools字段决定这个角色能碰什么。生产环境里别给filesystem.write之外的系统级权限,尤其是涉及删除的操作,先在小目录试。schedule设为manual表示手动触发,改成 cron 表达式就能定时跑。配置写完,下一节启动 Gateway 并验证。
4. 启动 Gateway 并验证请求成功
配置就绪后启动 Gateway。Windows 下双击一键启动程序,Linux 下进安装目录执行启动脚本。第一次启动会加载初始化资源,界面提示「等待服务就绪」,这个过程 1 到 3 分钟,别急着关窗口。判断成功的标志是客户端右上角显示 Gateway 在线。
Linux 下我建议用 systemd 托管,避免 SSH 断开后进程被杀。写一个 unit 文件:
[Unit] Description=OpenClaw Gateway After=network.target [Service] Type=simple WorkingDirectory=/opt/openclaw EnvironmentFile=/opt/openclaw/.env ExecStart=/opt/openclaw/openclaw-gateway Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target把上一节的环境变量写进/opt/openclaw/.env,然后systemctl daemon-reload && systemctl enable --now openclaw。用systemctl status openclaw看状态,journalctl -u openclaw -f看实时日志。
Gateway 在线后,先做一次最小验证请求,确认 TaoToken 通道真的通。用 curl 直接打 TaoToken 的接口,排除 OpenClaw 本身的干扰:
curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer sk-你的TaoToken密钥" \ -H "Content-Type: application/json" \ -d '{ "model": "你的ModelID", "messages": [{"role": "user", "content": "回复:链路正常"}] }'返回 JSON 里choices[0].message.content有内容,说明 Key、Base URL、Model ID 三件套正确。如果返回 401,是 Key 问题;返回model not found,是 Model ID 问题;返回连接超时,是 Base URL 或网络问题。这一步过了,再回到 OpenClaw 界面发指令。
在 OpenClaw 底部输入框发一条真实任务,比如「把下载文件夹内文件按图片、文档、压缩包分类存放,清理空文件夹」。观察右上角 Token 使用记录有没有增长,有增长说明请求确实走了 TaoToken。任务执行完,去目标目录看结果。如果 Gateway 在线但指令无响应,多半是角色配置里的model字段没对上,或者tools权限不足。
验证通过后,你可以把角色改成定时任务,让它每天固定时间跑。数字员工的落地就是这样:一次配好,长期自动执行。下面把常见的报错集中排一遍。
5. 常见报错排查:401、local proxy failed、reading choices
排障的核心思路是分层定位:先确认 Gateway 活着,再确认模型通道通,最后确认角色配置对。下面按真实报错逐个拆。
401 Unauthorized。这是鉴权失败,九成是 Key 问题。检查顺序:Key 是否复制完整、是否带了多余空格或换行、是否已过期或被删。用上一节的 curl 单独测,如果 curl 也 401,就是 Key 本身的问题,去 API Keys 页面重新生成一把。如果 curl 通但 OpenClaw 报 401,说明 OpenClaw 读到的 Key 和你以为的不一样,检查环境变量是否被.env覆盖,或者配置文件里是否还留着旧的 Key。
local proxy failed。这个报错通常出现在 Gateway 尝试走本地代理转发时。OpenClaw 某些版本会默认启用本地代理,如果你的环境没有代理服务,就会失败。解决办法是在配置里关掉本地代理,让请求直连 Base URL。检查settings.json里有没有proxy或localProxy字段,设为false或删掉。同时确认系统环境变量里没有残留的HTTP_PROXY、HTTPS_PROXY,有的话清掉再重启 Gateway。
reading choices 相关报错。典型信息是cannot read property 'choices' of undefined或reading 'choices'。这说明请求发出去了,但返回体结构不是预期的 OpenAI 格式,代码去读choices时拿到 undefined。原因通常是 Base URL 填错,比如漏了/v1,请求打到了非 API 路径,返回的是 HTML 或错误页。把baseUrl改成https://taotoken.net/api/v1再试。另一个可能是 Model ID 不存在,服务端返回了错误对象而非标准响应,同样会导致读不到choices。
OAuth 相关报错。如果你在配置里误开了 OAuth 模式,而 TaoToken 走的是 API Key 鉴权,就会冲突。检查配置里有没有authType: "oauth"之类的字段,改成apiKey或bearer。Claude Code 接入时如果报 OAuth 错误,同理,确认用的是 Key 而不是登录态。
Gateway 一直离线。回到最初的两个前提:安全软件是否拦截了核心组件、安装路径是否纯英文。Windows 下把 OpenClaw 目录加入 Defender 白名单,Linux 下检查journalctl里有没有权限拒绝的记录。路径含中文或空格会导致 Gateway 启动脚本解析失败,表现为进程起了又退。
第一次启动特别慢。这是初始化资源加载,正常现象,等 1 到 3 分钟。第二次启动会快很多。如果超过 5 分钟还离线,看日志里有没有卡在某个下载步骤,可能是网络问题。
排查时记住一个原则:先用 curl 验证 TaoToken 通道,再验证 OpenClaw 配置。通道通了,问题一定在 OpenClaw 这一侧;通道不通,先解决 Key 和 Base URL。这样能省掉大量来回试的时间。
6. 把数字员工跑成长期任务:接入与进阶入口
链路跑通只是起点。真正让 OpenClaw 产生价值的是把角色变成长期任务:定时整理文件、定时提取文档、定时汇总数据。你可以在角色配置里把schedule从manual改成 cron 表达式,比如0 9 * * *表示每天九点执行。配合 systemd 托管 Gateway,机器重启后任务自动恢复。
模型侧如果要换更强的模型做复杂推理,只改配置里的 Model ID,Key 和 Base URL 不动。这就是统一通道的意义:490+ 模型的切换成本降到一行配置。需要新 Key 或管理额度,去 API Keys 页面 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 。接入细节和字段说明看文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 。想先验证某个模型的表现,直接在模型对话页 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=chat&utm_campaign=rewrite 试。长期跑编码或 Agent 类高频任务,Coding Plan 页面 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 有对应方案。
最后给一个实操建议:先把一个角色跑稳,再复制成多个。每个角色只给完成它任务所需的最小工具权限,尤其是写和删除权限。我见过太多人一上来给全权限,结果一个误判把工作目录清空。小步验证,逐步放开,这才是本地私有化数字员工能长期跑下去的方式。