1. 为什么你的 OpenClaw 装完就报错:从零跑通第一个 Agent 的真实路径
OpenClaw 是一个自托管的 AI Agent 网关,它能让你把大模型接到 Telegram、Discord 这类消息平台上,再通过技能(Skill)扩展出抓取摘要、定时提醒、文件处理等能力。适合谁?适合会用终端粘贴命令、想让 AI 帮自己干重复活的人。你不需要懂 Docker,也不需要理解模型推理原理,只要按顺序执行命令,就能拥有一个 24 小时在线的数字助手。
但现实是,很多人在第一步就卡住了。终端里满屏红字,API Key 填了又报 401,技能装完发现是恶意脚本。我试过在三个不同系统上从零装 OpenClaw,踩过的坑包括:安装脚本跑完openclaw命令找不到、Telegram Bot Token 粘贴后没反应、以及最危险的——从技能市场随手装了一个低星技能,结果它试图读取~/.ssh目录。这篇教程会把完整链路拆开:安装、初始化、接入模型、连接 Telegram、用 skill-vetter 做安全审查、最后跑通一个真实 Agent。每一步都有可复制的命令和配置片段,遇到报错直接对照第 5 节的排查清单。
核心检索词先明确:OpenClaw 安装、Agent 配置、skill-vetter 安全审查、ClawHavoc 风险规避、Telegram 接入。下面从环境准备开始。
2. 前置准备:TaoToken 接入与 OpenClaw 环境初始化
在装 OpenClaw 之前,你需要先解决“模型从哪来”的问题。OpenClaw 本身不提供模型,它只是一个调度层,背后要接一个兼容 OpenAI 或 Anthropic 接口的 API 服务。这里我用 TaoToken 作为模型接入层,原因是它的接口格式和主流 SDK 完全兼容,配置时只需要改 Base URL 和 Key,不需要动 OpenClaw 的源码。
TaoToken 的 API 地址是https://taotoken.net/api,注意这个地址不带任何查询参数,直接作为 Base URL 使用。你需要先去控制台创建一个 API Key,路径是:登录后进入 API Keys 页面,点击创建,复制生成的 Key。这个 Key 只显示一次,建议先存到密码管理器里。
拿到 Key 之后,先别急着装 OpenClaw,用 curl 验证一下 Key 是否可用:
curl -X POST https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer sk-你的Key" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-3-5-sonnet-20241022", "messages": [{"role": "user", "content": "回复OK"}], "max_tokens": 10 }'如果返回 JSON 里choices[0].message.content有内容,说明 Key 和网络都正常。如果返回 401,检查 Key 是否复制完整;如果返回model not found,说明模型 ID 写错了,换成gpt-4o或claude-3-5-sonnet-20241022再试。
接下来装 OpenClaw。Mac 和 Linux 用官方脚本:
curl -fsSL https://get.openclaw.ai | bash脚本跑完会提示你重启终端或执行source ~/.zshrc。这一步不能跳过,否则openclaw命令不在 PATH 里。Windows 用户去官网下载.exe安装包,双击后一路下一步,安装程序会自动加 PATH,装完重新打开 PowerShell。
验证安装:
openclaw --version能输出版本号就说明二进制没问题。如果提示command not found,手动把 OpenClaw 的安装目录加到 PATH,Mac/Linux 默认在~/.openclaw/bin,Windows 默认在%USERPROFILE%\.openclaw\bin。
环境变量方面,OpenClaw 会把配置存在~/.openclaw/目录下,API Key 加密存储在~/.openclaw/credentials.json。这个文件权限默认是 600,不要手动改成 644,否则同机器其他用户能读到你的 Key。
3. 可复制配置:OpenClaw 接入模型与 Telegram 的完整片段
这一节直接给可复制的配置。OpenClaw 的初始化向导openclaw onboard是交互式的,但如果你想像我一样批量部署,可以直接写配置文件。配置文件路径是~/.openclaw/config.toml,格式是 TOML。
先看模型接入部分。OpenClaw 支持 OpenAI 兼容接口和 Anthropic 原生接口两种模式。用 TaoToken 的话,推荐走 OpenAI 兼容模式,因为它的/v1/chat/completions端点最稳定:
[model] provider = "openai-compatible" base_url = "https://taotoken.net/api/v1" api_key = "sk-你的Key" model_id = "claude-3-5-sonnet-20241022" max_tokens = 4096 temperature = 0.7 [model.fallback] provider = "openai-compatible" base_url = "https://taotoken.net/api/v1" api_key = "sk-你的Key" model_id = "gpt-4o"这里model_id必须和 TaoToken 支持的模型列表一致。如果你不确定有哪些模型,去模型对话页面看下拉列表,或者直接调/v1/models接口:
curl https://taotoken.net/api/v1/models \ -H "Authorization: Bearer sk-你的Key"返回的 JSON 里data[].id就是可用模型 ID。注意base_url结尾要带/v1,因为 OpenClaw 会在后面拼/chat/completions。如果你写成https://taotoken.net/api,请求会变成https://taotoken.net/api/chat/completions,直接 404。
Telegram 接入部分,配置文件里加:
[integrations.telegram] enabled = true bot_token = "1234567890:ABCdefGHIJklmNOPqrstUVwxyz-1234567" allowed_users = ["你的Telegram用户ID"]allowed_users是白名单,只有列表里的用户能给 Bot 发指令。这个字段强烈建议填,否则任何人搜到你的 Bot 都能调用你的 API 额度。获取自己的 Telegram 用户 ID 的方法是:在 Telegram 里搜@userinfobot,给它发任意消息,它会返回你的数字 ID。
Bot Token 从@BotFather获取:搜@BotFather,发/newbot,按提示设名字和用户名(用户名必须以bot结尾),创建成功后 BotFather 会返回 Token。Token 格式是数字:字母数字混合,复制时注意不要带空格。
配置写完后,不要直接跑openclaw start,先用openclaw config validate检查语法:
openclaw config validate如果输出Config OK,说明 TOML 格式和必填字段都没问题。如果报missing required field: model.api_key,检查 Key 是否写在了正确的 section 下。
4. 验证请求:从 skill-vetter 审查到第一个 Agent 跑通
配置验证通过后,先装安全审查工具 skill-vetter。这个工具是 OpenClaw 官方提供的,用来在安装技能前扫描代码:
openclaw skills install skill-vetter装完后,用它检查任意技能。比如你想装一个叫daily-digest的技能,先跑:
openclaw skills vet daily-digest输出会分三块:基本信息(下载量、版本数、作者)、静态扫描结果(文件访问、网络请求)、风险等级。如果看到尝试读取 ~/.ssh/*或向未知 IP 发送数据,直接放弃安装。ClawHavoc 事件就是攻击者上传了 1000 多个恶意技能,专门窃取 API Key 和本地文件。skill-vetter 的静态扫描能拦住大部分明显恶意代码,但它不是万能的,下载量低于 1000、版本数少于 5 的技能,即使扫描通过也建议再观望。
安全审查通过后,装一个真实技能来验证 Agent 链路。这里用telegram-echo做最小验证:
openclaw skills install telegram-echo然后启动 OpenClaw:
openclaw start终端会输出:
Model connected: claude-3-5-sonnet-20241022 Telegram bot online: @your_agent_bot Skills loaded: skill-vetter, telegram-echo OpenClaw is running. Press Ctrl+C to stop.现在打开 Telegram,找到你的 Bot,发一句hello。如果 Bot 回复Echo: hello,说明模型调用、Telegram 接入、技能加载三条链路全部通了。如果 Bot 没反应,看终端日志:
openclaw logs --tail 50日志里会显示具体是哪一步失败。常见的是401 Unauthorized,说明 API Key 无效;或者local proxy failed,说明 Base URL 写错了。
验证模型是否真的在调用,可以在 Telegram 里发一个需要推理的问题,比如1+1等于几,只回数字。如果 Bot 回2,说明模型确实在工作,不是本地硬编码的回复。
5. 常见报错排查清单:401、local proxy failed、reading choices、OAuth
这一节对照真实报错。以下四个是我在部署 OpenClaw 时实际遇到过的,按出现频率排序。
报错一:401 Unauthorized
Error: model request failed: 401 Unauthorized原因:API Key 无效或过期。排查步骤:先用第 2 节的 curl 命令单独测 Key,如果 curl 也 401,说明 Key 本身有问题,去 TaoToken 控制台重新生成。如果 curl 正常但 OpenClaw 报 401,检查config.toml里api_key字段是否有多余空格或换行。TOML 里字符串不能跨行,Key 必须写在一行内。
报错二:local proxy failed
Error: local proxy failed: dial tcp 127.0.0.1:7890: connect: connection refused原因:系统里设了本地代理,但代理服务没启动。OpenClaw 会读取环境变量HTTP_PROXY和HTTPS_PROXY。排查:执行echo $HTTPS_PROXY,如果有值但代理没开,要么启动代理,要么临时取消:
unset HTTPS_PROXY unset HTTP_PROXY openclaw start注意:TaoToken 的 API 地址是直连的,不需要走任何代理。如果你在环境变量里设了代理,反而会导致请求失败。
报错三:reading choices
Error: json: cannot unmarshal object into Go struct field .choices原因:模型返回的 JSON 结构和 OpenClaw 预期的格式不一致。通常是因为base_url写成了 Anthropic 原生端点,但provider配的是openai-compatible。排查:确认base_url是https://taotoken.net/api/v1,provider是openai-compatible。如果你要用 Anthropic 原生格式,base_url改成https://taotoken.net/api,provider改成anthropic,但这样模型 ID 也要换成 Anthropic 的命名。
报错四:OAuth token expired
Error: OAuth token expired, please re-authenticate原因:如果你用的是 Claude Code 或 Codex 的 OAuth 登录方式接入,token 有效期通常只有几小时。排查:重新跑openclaw onboard,选择 OAuth 登录,浏览器会弹出授权页。如果浏览器打不开,用设备码模式:终端会显示一个 URL 和 code,在另一台设备上打开 URL 输入 code 即可。OAuth 模式下不需要手动填 API Key,但 token 过期后必须重新授权,不适合长期无人值守的场景。长期运行建议用 API Key 模式。
排查完报错后,如果 Agent 能正常回复,建议把openclaw start注册成系统服务,这样终端关了 Agent 也不会停。Mac 用launchd,Linux 用systemd,Windows 用nssm。具体配置不在本篇展开,但核心是把openclaw start的启动命令和~/.openclaw/工作目录写进服务配置。
6. 从验证到长期运行:Agent 隔离环境与 CTA
Agent 跑通之后,下一步是让它长期稳定运行,同时不污染你的主环境。OpenClaw 支持在隔离目录下运行,通过--data-dir参数指定:
openclaw start --data-dir /opt/openclaw-data这样所有配置、日志、技能文件都放在/opt/openclaw-data下,删掉这个目录就等于完全卸载。如果你在服务器上跑,建议用非 root 用户运行,并给--data-dir目录设 700 权限:
sudo useradd -r -s /bin/false openclaw sudo mkdir -p /opt/openclaw-data sudo chown openclaw:openclaw /opt/openclaw-data sudo chmod 700 /opt/openclaw-data sudo -u openclaw openclaw start --data-dir /opt/openclaw-data技能更新也要定期做。skill-vetter 只能扫描安装时的版本,如果技能作者后续更新了代码,旧版本的安全结论就失效了。建议每周跑一次:
openclaw skills update --all openclaw skills vet --all如果vet --all输出里有任何技能风险等级变成“高”,立即卸载:
openclaw skills uninstall 技能名Telegram Bot 的 Token 如果泄露,任何人都能冒充你的 Bot 发消息。定期在@BotFather里用/revoke命令重置 Token,然后更新config.toml里的bot_token字段,重启 OpenClaw 即可。
到这里,你的第一个 Agent 已经在隔离环境里稳定运行了。模型接入用的是 TaoToken 的 API,Key 在控制台的 API Keys 页面管理;如果你想先试试模型对话效果再决定长期用哪个模型,可以去模型对话页面直接测试;如果打算把 Agent 用在编码或长期自动化任务上,Coding Plan 提供了更稳定的额度方案。接入文档里有完整的配置参数说明,遇到本篇没覆盖的报错可以去那里对照排查。