1. 为什么要在 ClawBot 里统一模型入口ClawBot 是一个自托管的 Claude Code 增强版本你可以把它理解成「跑在自己机器上的 AI 助手网关」它对外提供 Web UI、终端界面和 Telegram Bot 三种交互方式对内则要调用 Claude 系列模型完成推理。问题恰恰出在「对内」这一层——Claude Code CLI 需要一份 Anthropic 风格的凭证Telegram Bot 走的是网关自己的模型配置Web UI 又可能读取另一份环境变量。三套入口各自维护 Key改一次模型要动三个地方排查一次 401 要翻三份日志。我试过把同一个 Key 分别塞进~/.claude/settings.json、~/.clawbot/clawbot.json和 shell 的ANTHROPIC_API_KEY结果 Telegram Bot 能回消息、Claude Code 却报fetch failed因为两者的 base URL 指向了不同域名。这类「配置漂移」在自托管场景里非常常见尤其是你同时用 Claude Code 做本地编码、又想让 Telegram Bot 在手机上接活的时候。TaoToken 在这里的角色是「统一 Key 统一 API 通道」你只申请一个 Key把它同时写进 ClawBot 的config.toml网关侧和 Claude Code 的settings.jsonCLI 侧两边都指向同一个 API 地址。这样模型切换、额度查看、故障排查都收敛到一个入口不用再猜是哪份配置没生效。这篇手册就围绕这个骨架展开给出可直接复制的配置片段并演示启动 Web UI 后验证 Bot 消息回传与 Claude Code 请求链路的完整动作。适合已经装好 ClawBot、正在被多份 Key 配置困扰的自托管用户。2. TaoToken 前置准备拿 Key 与确认通道在动配置文件之前先把「钥匙」和「门牌号」确定下来。TaoToken 的官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册登录后进入控制台创建 API Key。API 的基础地址是 https://taotoken.net/api 注意这个地址不带任何查询参数配置里直接写它即可。创建 Key 的路径在控制台的 API Keys 页面建议按用途命名比如clawbot-gateway和claude-code-local方便日后按项目吊销。Key 只在创建时完整显示一次复制后先存到密码管理器不要直接贴在聊天记录里。关于模型名TaoToken 的通道兼容 Anthropic Messages 格式所以你在 ClawBot 和 Claude Code 里填的模型标识要跟通道支持的名称对齐。常见写法是claude-sonnet-4-5这类具体以控制台「模型对话」页面列出的可用模型为准。你可以先在模型对话里发一条测试消息确认 Key 和模型名匹配再去改本地配置——这一步能省掉后面一半的排障时间。需要提醒的是ClawBot 的 agents 具备执行命令、读写文件的能力接入任何外部 API 通道前都要清楚它的权限边界。TaoToken 只是提供模型调用入口不改变 ClawBot 本身的 agent 行为所以安全审计仍然要做后面第 5 节会给命令。3. 可复制配置骨架config.toml 与 settings.json这一节是全文的核心。ClawBot 网关侧读的是~/.clawbot/clawbot.json部分版本用config.toml字段名一致Claude Code CLI 侧读的是~/.claude/settings.json。两份配置里的 base URL 和 Key 必须指向同一个 TaoToken 通道否则就会出现「Bot 能回、CLI 报错」的割裂现象。先看 ClawBot 网关侧的配置骨架。下面这段可以直接粘进~/.clawbot/clawbot.json把sk-你的TaoToken密钥替换成真实 Key{ models: { providers: { taotoken: { baseUrl: https://taotoken.net/api, apiKey: sk-你的TaoToken密钥, api: anthropic-messages, models: [claude-sonnet-4-5] } }, default: taotoken/claude-sonnet-4-5 }, channels: { telegram: { enabled: true, token: 你的TelegramBotToken } } }几个字段的含义需要说清楚。api固定写anthropic-messages因为 TaoToken 通道走的是 Anthropic Messages 协议models是数组可以放多个模型名default用provider/model的形式指定默认模型。channels.telegram.token是你在 Telegram 里找 BotFather 申请到的 Bot Token跟 TaoToken 的 Key 是两回事别混。再看 Claude Code CLI 侧的~/.claude/settings.json。这份配置让本地claude命令也走同一个通道{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的TaoToken密钥, ANTHROPIC_MODEL: claude-sonnet-4-5 } }如果你更习惯用 shell 环境变量而不是 settings.json可以在~/.zshrc或~/.bashrc里写export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEYsk-你的TaoToken密钥 export ANTHROPIC_MODELclaude-sonnet-4-5两种方式选一种即可同时写会以 settings.json 优先。改完配置后重启网关clawbot gateway restart clawbot channels status正常输出里应该能看到Gateway reachable、Telegram default: enabled, configured, running以及 Web UI 的本地地址。如果 Telegram 那行显示stopped先别急着怀疑 Key多半是 Bot Token 写错或网络到 Telegram 的连通性问题。4. 验证请求链路Web UI、Bot 回传与 Claude Code配置写完不等于通了要分三层验证Web UI 能不能打开、Telegram Bot 能不能回消息、Claude Code 能不能出结果。这三层分别对应网关、通道、CLI任何一层断了都能定位到具体环节。第一层启动并访问 Web UI。执行clawbot dashboard或直接浏览器打开http://127.0.0.1:18789/带 Token 的地址形如http://127.0.0.1:18789/?token你的token。页面能加载出聊天界面说明网关进程和 Web 服务正常。在输入框发一句「你好」如果模型返回内容说明网关到 TaoToken 的模型调用链路是通的——这一层通了Telegram Bot 大概率也能通因为两者共用models.providers配置。第二层验证 Telegram Bot 回传。在 Telegram 里找到你创建的 Bot发送/start或任意消息。正常情况 Bot 会在几秒内回复。如果没反应按顺序查clawbot channels status看 Telegram 是否 runningtail -f ~/.clawbot/logs/gateway.log看有没有收到 update确认 Bot Token 没有多余空格。Bot 能回消息说明「Telegram → 网关 → TaoToken → 模型 → 回传」整条链路闭合。第三层验证 Claude Code CLI。新开一个终端进入任意项目目录执行claude -p 用一句话说明这个目录的用途如果返回模型输出说明settings.json里的 base URL 和 Key 生效了。这一步最容易踩的坑是 shell 里残留了旧的ANTHROPIC_API_KEY导致 settings.json 被覆盖。用env | grep ANTHROPIC确认当前环境变量有冲突就unset掉再试。三层都通过后你可以做一个交叉验证在 Claude Code 里让它读一个文件并总结同时在 Telegram Bot 里问同一个文件的内容两边应该都能拿到结果且日志里能看到请求都打到了taotoken.net/api。这就证明「统一 Key」的目标达成了。5. 本篇常见错排查即使按上面的骨架配也可能遇到几类典型报错。下面按现象归类给出定位命令和修法。现象一Web UI 打不开提示连接失败。先确认进程在跑ps aux | grep clawbot-gateway。再看端口有没有被占lsof -i :18789。如果端口被别的程序占了改clawbot.json里的gateway.port再重启。最后看错误日志tail -50 ~/.clawbot/logs/gateway.err.log里面通常会直接写明是配置解析失败还是端口绑定失败。现象二报TypeError: fetch failed。这是模型请求发不出去八成是 base URL 写错或网络到 TaoToken 不通。先用 curl 直接测通道curl -s https://taotoken.net/api/v1/messages \ -H x-api-key: sk-你的TaoToken密钥 \ -H anthropic-version: 2023-06-01 \ -H content-type: application/json \ -d {model:claude-sonnet-4-5,max_tokens:50,messages:[{role:user,content:hi}]}如果 curl 能返回内容而 ClawBot 报 fetch failed说明是 ClawBot 读到的配置跟你以为的不一样。用cat ~/.clawbot/clawbot.json | jq .models.providers确认实际生效的 baseUrl 和 apiKey注意有没有拼写错误或多余斜杠。现象三Telegram Bot 无响应。先clawbot channels status看状态如果是disabled检查channels.telegram.enabled是否为 true。如果是configured, stopped看日志里有没有401 Unauthorized——那通常是 Bot Token 错了跟 TaoToken 的 Key 无关。还有一种情况是 Bot 收到了消息但模型调用失败这时日志里会有 TaoToken 返回的错误码按错误码去控制台核对 Key 状态和额度。现象四Claude Code 报认证失败但 Bot 正常。这说明网关侧配置没问题问题在 CLI 侧。检查~/.claude/settings.json的 JSON 格式是否合法多一个逗号就会静默失效用cat ~/.claude/settings.json | jq .验证。再确认没有 shell 环境变量覆盖必要时在 settings.json 里显式写全三个变量。现象五日志里模型名不识别。如果你填的模型名不在 TaoToken 通道支持列表里会返回模型不存在。去控制台的模型对话页面确认可用模型名改clawbot.json的models数组和default字段重启网关。排查时养成一个习惯先看日志再改配置。tail -f ~/.clawbot/logs/gateway.log挂着复现一次操作日志里基本会直接告诉你哪一层断了。6. 把 Key 收敛到一个入口之后配置骨架跑通之后日常维护会轻松很多。模型要换只改clawbot.json的default和settings.json的ANTHROPIC_MODEL两处Key 不用动额度要查去 TaoToken 控制台看一个账号即可出问题要排查先 curl 测通道再分层看 Web UI、Bot、CLI定位路径是固定的。如果你后续要把 ClawBot 接到更多入口比如长期跑编码任务或做 Agent 编排可以了解下 Coding Plan 这类按周期计费的方案适合高频调用场景只是偶尔验证模型效果的话模型对话页面就够用。接入文档里有各语言 SDK 的示例需要把 TaoToken 嵌进自己脚本时可以参考。最后留一个实用习惯把~/.clawbot/clawbot.json和~/.claude/settings.json里的 Key 用环境变量引用而不是硬编码比如apiKey: ${TAOTOKEN_API_KEY}这样配置文件可以进版本库而不会泄露凭证。改完记得clawbot gateway restart然后按第 4 节的三层验证再走一遍确认链路没断。
