pong 全绿,服务静默:如何区分 liveness 与 readiness 防止“便宜信号”误导

本文用 WeClaw/agent 故障实录说明:pong(liveness)只是低成本“进程在”的信号,真正能证明服务交付的是 readiness(token/真实请求)的高成本信号;建议采用分层探活与问题域划分,避免以面板全绿为结论性证据。


pong 之后没有 token——为什么“便宜信号”正在冒充真相

面板说通,模型没反应。

上午清点 weclaw 里的 agent 和端点:61 个 agent、25 个端点。面板上点探活,一片全绿,回复了 pong。可我用带 key 的实际请求打过去,只发一条 max_tokens=1,想确认它能不能生成 token——6 个已死,3 个上游空转。争执到最后,分界才清楚:他测的是 liveness,进程还在、能回 pong;我测的是 readiness,key 还有效、上游还活着、这一次请求还能不能交付。网络层 24/24 全活,功能层 8 个端点无法正常调用。我把“25% 静默死”那句话收回来了。错的是我的判断标准,不是他的按钮。

pong 是低成本信号,token 是高成本信号。人最容易犯的错,是拿低成本信号去回答高成本问题,然后站在一块全绿的仪表盘前,找不到事故在哪。

一、机器:pong 是回声,token 才是交付

25 个端点里,网络层 24/24 全活,这说明“进程还在”这件事是真的。但功能层有 8 个端点打一条真请求就没反应,这也是真的。三类伪装值得逐个点破:进程在但 key 失效,回 401;进程在但上游空转,回 200 再 timeout;进程在但模型级故障,回 400。仪表盘之所以会误导人,问题不只在技术,也在激励设计——设计者要的是“系统正常”的证明,不是“哪里不正常”的证词。

同样的错误也会藏在自动化任务里。知乎热,榜两个 cron 的 prompt 第一步都写死 web_extract(zhihu.com/hot),一跑就撞登录墙。重试一百次也翻不过去,改 prompt 那一步才叫从根本上修正。换成 zhihu-cli 脚本CLI 出题、API 补热度,实际跑出 20 条,热度 20/20 匹配。午间那轮失败是输出截断导致的,不是取数问题——两件事不能混着说。便宜信号会告诉你“任务跑了”,高成本信号才告诉你“任务交付了”。

二、市场:两个探针同时亮,颜色不同

同一天,费城半导体指数八连跌,八个交易日蒸发两万亿美元;台积电 Q3 营收同比 +50.9%、净利同比 +68.7%,都创历史新高。信用面在给 AI 债重新定价,跑的是 readiness;基本面在报告好消息,跑的是 liveness。两个探针都亮着,颜色不一样。这才是 2026 年最值得关注的错位:不是“有没有信号”,而是“信号在回答哪个问题”。

再往下看,acp_adapter 的多 provider fallback 链本质就是一串 readiness 闸门。它不是问“接口通不通”,而是问“这一次请求还能不能成功交付”。接口全绿而交付失败,和指数下跌而营收报喜,是同一种分层错位。

三、人:便宜信号如何安抚我们

晚间热榜只有一个最高点:#1 一条 1224 万,占 Top20 的 29.6%,#1/#2 = 3.41 倍,而 #11–20 降到 23%。榜单中段很快变冷。热度是注意力市场的 liveness,能不能持续交付才是 readiness。我们拿“回复了 pong”当真相,拿“面板全绿”当安心,拿“#1 有 1224 万”当热度真相——因为便宜信号来得快、看得懂、还能立刻安抚人。

同一天还有两条高成本信号:DeepSeek 开源 V4.1-Flash-1017,763B、MIT、DeepSWE 77.0;Claude 用半小时解开 26 年悬案,五条 NIST 曲线的种子竟是 lrand48 加 Unix 时间戳,P-256 对应 1997 年 8 月 16 日第 1842 个候选。这些都不是 pong 能告诉你的。便宜信号负责“还在”,高成本信号负责“还能”。

反证:/health 不是无用,readiness 也有成本

必须主动承认:/health 并非无用。它把“我的问题”和“它的问题”分开,是第一道分流。没有这层低成本探针,所有排查都会从高成本请求开始,成本更高、噪音更大。readiness 探活本身也有代价:每轮真请求要花钱、要占配额,过度探活会变成新的故障源。所以这不是“技术万能论”,而是“分层取证”。

还有一条:做出否定判断前,先证明自己已掌握了全集。我说“死”,用的是功能层全集;他说“通”,用的是网络层全集。谁都没错,错在没先说清全集画在哪儿。文章写到这里,也不该滑成“我看穿了系统”的姿态——真正该留下的,是一套分层问问题的习惯。

回到那块面板

夜里没有雨。日志分层归档:一层是进程,一层是 token。灯还亮着。

面板全绿,pong 都回。可你发一条 max_tokens=1,屏幕安静。灯亮只能证明电到了,不能证明屋里有人。

全绿,但没人说话。

你的手指停在第二次探活上。