
OpenClaw 的心跳每 60 秒跑一次~/.openclaw/HEARTBEAT.md里 anthropic 那一行却长期挂着disconnected日志一行行刷Auto-reconnecting——这个现象在 TaoToken 用户群里出现的频率高得离谱。先把结论放前面心跳机制本身大概率没坏掉的是它背后的模型通道真正消耗 Token 的是各个 Channel 背后那些会话调用心跳只是负责发现它们还活着没有。把通道的认证和地址换成 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 里创建的那一套重连刷屏基本就停了。这篇按排障顺序走一遍先确认是通道层掉线再改模型通道最后回到监控命令看下一次心跳。1. HEARTBEAT.md 里 anthropic 显示 disconnected到底是谁在报错1.1 先用 openclaw status | grep heartbeat 确认层级看到Auto-reconnecting的第一反应往往是去调心跳间隔把 60 秒改成 30 秒、改成 120 秒结果什么都没变。原因很简单心跳是个调度器它只负责按周期叫醒一次被叫醒之后要探测的对象是各个 Channel。调度器正常、被探测对象不健康日志就会呈现出「心跳在跑、通道在重连」的割裂状态。先确认是不是这种情况openclaw status | grep heartbeat如果输出里能看到heartbeat: running、interval: 60s、last tick: 刚刚说明时钟这条线是好的。同一份 status 里往下看 channel 部分anthropic 通常会是disconnected或者degraded。这两个信号放在一起看答案就很明确了不是心跳丢了是它每次敲 anthropic 的门都没人应。1.2 cat ~/.openclaw/HEARTBEAT.md那一行写的是通道健康度心跳每跑一轮会把结果写回~/.openclaw/HEARTBEAT.md这个文件既是给人看的也是给后续轮次做对比用的cat ~/.openclaw/HEARTBEAT.md你会看到类似这样的内容更新时间戳、每个 Channel 一行状态、过期会话的清理计数。重点不是时间戳而是 anthropic 那一行——它长时间停在disconnected而其余通道是connected这就排除了网络整体不通、机器 DNS 坏了这类全局因素。单个通道反复掉线几乎一定落在认证或地址这一层要么 Key 无效要么 Base URL 指向了一个不接受当前请求形态的端点要么模型 ID 压根不存在导致服务端拒绝会话建立。1.3 为什么 60 秒心跳没问题通道却在重连把心跳想成小区保安每 60 秒巡一次楼Channel 就是楼里的每家住户。保安按点巡逻没问题但某户人家门锁坏了、钥匙不对他每次去都进不去于是巡逻记录里那户永远标红。你换巡逻频率、换巡逻路线都没用得先把那把锁修了。映射回 OpenClaw心跳周期、HEARTBEAT.md 的写入逻辑、会话过期清理策略这些都是 OpenClaw 自己的代码改它们不会让一个认证失败的通道突然能连上。要动的是通道配置里指向哪里、用什么凭证、报哪个模型名这三件事。而这三件事恰好可以在一个地方一次性拿齐。2. 分清三种掉线心跳停了、认证失败、会话清理卡住2.1 现象对照表别把所有红色都当同一个病排障最怕的就是把所有异常归成一类。下面这张表对应的是 OpenClaw 里最容易混淆的三种状态对照着看能省掉大量瞎试的时间现象日志关键词大概率原因动手方向心跳完全不动无 tick 输出时间戳不更新Gateway 进程没起或崩了先看进程与 Gateway 启动日志单通道反复重连Auto-reconnecting、channel anthropic认证失败 / Base URL 不接受 / 模型名错改通道配置里的凭证与地址会话数只涨不降过期会话计数长期不变通道连不上会话回收依赖连接状态同上通道通了回收自然恢复第二行和第三行经常一起出现而且第三行是第二行的果不是独立的病。很多人看到会话堆积就去调清理阈值调完发现没效果就是因为上游通道根本没通。2.2 Auto-reconnecting 前后该抓哪几行日志Auto-reconnecting本身信息量很低它只告诉你「我准备重连了」。真正有用的是它前后几行——尤其是第一次连接尝试时服务端返回的那一句。跟一次完整日志openclaw logs --filter heartbeat --follow盯住三类行连接建立阶段的返回401、403、invalid api key、model not found这类直接指向配置错误。URL 拼接痕迹日志里如果出现.../v1/v1/messages这种重复路径说明 Base URL 尾部多写了/v1工具自己又补了一次。超时与重试节奏固定 60 秒一次失败、然后立刻重试属于配置性失败时间抖动很大、偶发成功才更像网络或上游抖动。抓到第一类里那句具体报错后面的路就短了很多。多数情况下它和「换一个能稳定提供 anthropic 兼容通道的地址与 Key」是同一件事。3. 把 anthropic 通道改到 TaoToken拿 Key、填 Base URL3.1 打开官网创建 API Key顺便把模型名抄下来这一步对应原文里「Channel 连接检查 / 自动重连」那段——原文讲的是发现问题、自动重连我们要做的是在重连之前把通道的凭证换对。先打开 TaoToken 注册登录进入控制台创建一把 API Key复制出来先存好。同时在模型广场里挑一个要用的模型把它的模型 ID 原样复制——不要自己拼日期后缀、不要凭印象写gpt-5这种未必存在的名字以模型广场当时列表里显示的那串为准。Key 的占位符统一写成YOUR_API_KEY本文所有配置里都按这个填。TaoToken 在这条链路里只提供两样东西Key 和 Base URL它不参与 OpenClaw 的心跳逻辑也不改变 HEARTBEAT.md 的写法这一点先分清楚后面排查才不会跑偏。3.2 Base URL 填 https://taotoken.net/api末尾不要带 /v1这是最容易错的一处。填进 OpenClaw 通道配置的地址是https://taotoken.net/api注意两件事末尾不要加/v1也不要加任何 query 参数。很多客户端自己会在 Base URL 后面补/v1/messages之类的路径你再手动补一次就变成双份服务端只会回你 404。官网落地页和接口地址是两个不同的东西注册、建 Key、看用量、看模型广场走 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 而填进工具的永远是https://taotoken.net/api。3.3 ~/.openclaw/channels 里的通道配置怎么写OpenClaw 的通道配置在不同版本里字段名会有出入以你本机openclaw --version对应的文档为准但核心三件套永远是 Base URL、Key、模型 ID。下面这份示例是 anthropic 通道改到 TaoToken 之后的形态{ channels: { anthropic: { type: anthropic-compatible, base_url: https://taotoken.net/api, api_key: YOUR_API_KEY, model: YOUR_MODEL_ID, timeout_ms: 120000, max_retries: 2, heartbeat: { enabled: true, interval_ms: 60000 } } } }如果你的版本把通道配置拆成单独的~/.openclaw/channels/anthropic.json那就把上面anthropic对象里的内容平铺进去效果一样。还有一类版本会优先读环境变量例如ANTHROPIC_BASE_URL与ANTHROPIC_AUTH_TOKEN这种情况下配置文件写了也可能被环境变量盖掉改完记得确认一下哪边优先export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_AUTH_TOKENYOUR_API_KEY不写这一段也能跑但写了就要保证它和配置文件里的值一致否则你会在「明明改了却还是重连」的循环里绕很久。4. 重启 Gateway看下一次心跳是否稳4.1 先用 taotoken cc 做一次最小验证在动 OpenClaw 之前先用命令行确认这把 Key 和这个地址本身是通的可以把变量降到最少npm install -g taotoken/taotoken taotoken cc -k YOUR_API_KEY -u https://taotoken.net/api -m YOUR_MODEL_ID这里-u后面同样不带/v1。如果这一条能正常出结果说明 Key、地址、模型 ID 三件事都是对的问题就只剩 OpenClaw 自己的配置有没有读到、有没有被覆盖。反过来如果这一步就报错先解决报错再回去改 OpenClaw别在两个地方同时改。4.2 openclaw logs --filter heartbeat --follow 该看到什么配置保存、Gateway 重启之后重新挂上监控openclaw logs --filter heartbeat --follow正常的形态是下一轮心跳到来时anthropic 通道先出现一次连接建立然后稳定在connected后续心跳里它只做轻量探测不再出现Auto-reconnecting。观察点不是「一次成功」而是「连续三轮以上都没有重连」——单次成功可能只是重试碰巧命中连续稳定才能说明凭证和地址是对的。4.3 HEARTBEAT.md 从 disconnected 翻成 connected 后会话清理也回来了等两三轮过去再回头看那个文件cat ~/.openclaw/HEARTBEAT.mdanthropic 那行应该已经变成connected同时过期会话的清理计数开始正常滚动下降。这一步很关键它证明了之前会话堆积确实是被通道状态拖住的而不是清理逻辑本身有问题。到这儿OpenClaw 里的模型调用算是走通了——心跳还是那个 60 秒的心跳改的只是它每次敲的那扇门后面通向哪里。5. 还是 Auto-reconnecting按这份清单往下走5.1 401 或 invalid api key最直接的一类。常见诱因有三个Key 复制时带了首尾空格配置文件里还是上一次的旧 Key环境变量又把新 Key 覆盖回去了以及 Key 本身被删除或重建过。处理方式很朴素——重新去 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 控制台复制一次粘贴进配置文件后顺手确认一遍环境变量然后重启 Gateway。注意不要在两处各留一个不同的 Key这种「薛定谔的凭证」最难查。5.2 base_url 尾部多写了 /v1日志里出现.../v1/v1/...或者直接 404基本就是这个问题。把base_url改回https://taotoken.net/api末尾不带斜杠、不带/v1、不带任何参数。顺带提醒一句不要把带utm_source的官网链接贴进 Base URL那串参数是给人点链接用的不是接口参数。5.3 模型 ID 对不上模型 ID 错的表现有时候很迷惑连接看起来建立了但会话一发起就被拒日志里刷的是模型相关错误而不是认证错误。模型 ID 一律以模型广场当时列表里显示的为准复制粘贴别手打。如果你的通道配置里模型字段是留空的、由客户端自己填默认值那也要确认那个默认值在当前账号下有权限。5.4 超时、并发与本地环境的干扰前三类都排除后才轮到环境因素。观察重连的时间分布如果间隔稳定、每次都失败在同一个位置还是配置问题如果时好时坏、成功与失败交替出现再看超时设置是不是太短、并发是不是超过了通道能承受的量、本机是否走了会改写请求的本地服务。把timeout_ms适度放宽、把max_retries保持在 2 左右通常比无限重试更好排查——无限重试只会把日志刷得更花。6. 通道跑通后把这把 Key 的账对清楚心跳恢复稳定之后建议做一次收尾避免下次再遇到类似现象时又从头查一遍。先在 TaoToken 模型对话 里用同一把 Key 发一条测试消息确认模型 ID 和 Base URL 和你写进 OpenClaw 的完全一致这一步能把「配置里写对了但工具读错了」的情况筛掉。如果你打算让 OpenClaw 长时间挂着跑会话可以顺手看一眼 Coding Plan 的额度是否够用别等重连问题解决了、额度先见底。Key 的增删和轮换都在 控制台 API Keys 里做换完记得同步更新 OpenClaw 配置和环境变量。如果你同时还接了 Claude Code环境变量对照可以看 Claude Code 接入文档字段命名和 OpenClaw 那套不完全一样别互相抄。最后一句提醒OpenClaw 的通道负责把会话送出去、把结果拿回来真正的执行动作仍然要由你在本地完成。让通道里的会话生成配置片段、解释日志、对照报错都行涉及生产库、生产机器的操作还是本机执行、把输出贴回来更稳妥。心跳稳定只是说明门通了门里做什么仍然是你说了算。