GPT-5.5和Opus 4.8都搞不定的Bug,被Fable 5一晚上解决
Fable 5 如何用一套“破案监控系统”,解决了GPT-5.5和Opus 4.8都束手无策的诡异Bug。
核心内容:
1. 一个无法复现、全球随机的用户账号“互串”悬案
2. GPT-5.5与Opus 4.8给出的不同诊断与局限
3. Fable 5的独特思路:停止猜测,设计取证系统
今天这篇,是一个破案故事。
主角不是人,是 Claude 家刚发布的新模型,Fable 5。
---
一、悬案
一、悬案
事情要从几个月前说起。
Raphael AI(raphael.app)收到了一类堪称诡异的投诉:用户登录自己的账号,看到的却是一个陌生人——陌生人的名字、陌生人的头像、以及陌生人的全部生成历史。
第一次看到投诉截图时,那种头皮发麻的感觉至今记忆犹新。
更麻烦的是,这种投诉一次又一次地出现,甚至国内用户也反馈了同样的问题。
这个 bug 有多邪门?不妨列一下:
百万级用户里,只有几百人中招,概率低到像都市传说,根本无法复现。无论怎么测,测试环境里从来不会出现。
双向互串:A 能看到 B 的账号,B 也能进 A 的。
跨设备:一边是 Mac 上的 Chrome,另一边是 iPhone 上的 Safari。
全球随机:东京、巴黎、多伦多……毫无地域规律。
最邪门的是最后一条:
数据库里查不出任何异常。
它就这么挂着,像房间里有一只看不见的蚊子,你知道它在,但你拍不到它。
二、自信的错误答案
二、自信的错误答案
当然,第一反应是求助 AI。事实上,这个 bug 从第一次出现到现在已经好几个月了,期间不断尝试让 AI 协助排查。
先问 GPT-5.5,把所有的日志、Cloudflare API、Sentry API 全部喂给它。说实话,这模型在业界有口皆碑,以前很多重要判断都靠它把关。
GPT-5.5 的回答斩钉截铁:
“这是 Cloudflare 的缓存 bug。你的代码没有问题。建议向 Cloudflare 提交工单反馈。”
它说得太笃定了,笃定到让人差点真的去提工单。
再问 Opus 4.8。它倒是很诚实,排查了一圈,说找不到确定的方向。
对比之下,Opus 4.8 有一个明显胜过 GPT-5.5 的优点:它更容易承认“我不知道”,幻觉概率更小。
诚实是诚实了,但案子还是悬着。
这一轮下来,有个体会越发深刻:
自信的错误答案,比没有答案更危险。
没有答案,最多原地踏步。自信的错误答案,会烧掉最贵的东西——时间,还顺便烧掉对正确方向的注意力。
三、Fable 5 说:别猜了
三、Fable 5 说:别猜了
Fable 5 发布后,把这个悬案丢给了它。
它做了一件让人愣住的事。
它没有给答案。
它说(大意):现有的信息,不足以定位问题。任何结论都是猜测。
停止猜测,开始埋取证。
然后它当场设计了一套“破案监控系统”:
- ——这个请求进来的时候是谁,出去的时候服务器发给你的是谁的数据,一一比对,对不上就报警。
给每一个登录相关的响应装上“进出对账”
- ——没经过登出,身份却换了人?立刻上报现场证据。
给每个用户的浏览器装上“身份哨兵”
下面展示一些截图:
![]() |
![]() |
最让人佩服的是:它
提前写好了判决书。
证据还没回来,每种证据对应什么结论,它已经安排得明明白白。
这像什么?像刑警破案。不靠灵感,不靠直觉,靠在每个路口装监控,让嫌疑人自己走进画面里。
这里有一条今天就能用的方法论,也是这次最大的收获:
遇到悬案,别让 AI 猜,让 AI「设计取证」。
猜测的尽头是运气。取证的尽头是真相。
四、真相:一个 await
四、真相:一个 await
监控装好,部署上线。日志回来了,毒源现形。
凶手是一个广为人知的开源认证库——BetterAuth 的某个老版本。
用大白话讲讲这个 bug。
服务器处理登录的时候,要往一个“响应头容器”里装用户的登录凭证。正常的写法,每个请求一个容器,各装各的。
但这个库的老版本,
所有请求共用一个容器。
平时相安无事,因为大部分时候请求是一个一个排队来的。
但问题出在这里:往容器里装凭证的过程中,有一步异步操作——
代码里的一个 await——会让整个流程“挂起”那么零点几毫秒。
就是在这零点几毫秒里,如果恰好有另一个用户的登录挤了进来——
两个人的凭证,装进了同一个容器。
用户 A 的登录凭证,装进了用户 B 的响应。B 的浏览器一收下,B 就变成了 A。
一个 await,让用户变成了别人。
这个解释,把前面所有的“邪门”全部串了起来:
为什么无法复现?因为它只在两个请求挤进同一毫秒时触发,本地测试根本没有那个并发量。
为什么百万人里只有几百人中招?因为这是一场概率游戏,流量越大,“开奖”越频繁。
为什么全球随机、跨设备?因为毒在服务器的响应里,跟你用什么设备、在哪个国家,毫无关系。
Fable 5 给它的定性是:
教科书级的并发事故,只有高并发的生产环境才会现形。
这类 Bug 在 BetterAuth 里还有好几处,就不一一展开了。
更有意思的是——这个 bug,BetterAuth 库的官方并不知道。
新版本是彻底重写的,不是老版本的升级。老版本的坟,没人去挖。
我们大概是全球第一批挖开看的人。
五、还没完:退烧之后,还要清病灶
五、还没完:退烧之后,还要清病灶
你以为打个补丁就结束了?
没有。这才是这个故事里最值得保留的部分。
第一版补丁打上去,部署,报警继续响。
排查发现一个特别“工程”的坑:这个库发布的时候带两套构建产物(ESM 和 CJS,可以理解为同一本书的精装版和平装版)。只补了其中一套,而线上实际跑的是另一套。
补全两套,报警频率降下来了。
但还在响。
换别的 AI,到这一步大概率开始车轱辘话了。Fable 5 又看了一轮新日志,给出第二个判断:急性中毒已经止住了,但几个月的串号,在数据库里沉淀下了
慢性病灶
于是又是一轮:先备份,再生成一张“清理决策表”过目,然后单事务清洗数据,最后给数据库上了唯一约束——把复发的门,从根上焊死。
对了,排查途中还有个黑色幽默:之前另一个 AI(Codex GPT-5.5)帮忙修别的问题时,顺手引入了一个慢查询,恰好把这个并发 bug 的触发窗口放大了几个数量级。
一个 AI 埋的雷,给另一个 AI 的 bug 当了扩音器。
直到看到 Fable 5 给出的“完结撒花”,才算真正松了一口气。
六、那一晚,我在干什么?
六、那一晚,我在干什么?
说出来不怕大家笑话。
在复制粘贴。
把服务器的日志粘给它。把它给的命令粘到服务器。
折腾到后半夜,破案、打补丁、清数据、上约束、装好长期监控,全链路走完。
复盘的时候意识到,那一晚的角色,就像是一个给侦探递咖啡的助手。
真正的侦探,是 AI。
七、Not Productivity, Rather Capability
七、Not Productivity, Rather Capability
这件事过去几天了,还在回味那种震撼。
让人震撼的,不是“它修好了”。
而是它
解题的方式:
它知道自己不知道,所以拒绝猜。
它设计实验,让证据说话。
它修完急性病,还主动去找慢性病。
它给自己的每一个动作,都留了验证手段。
这不是“答题答得好”。这是顶级工程师才有的工作品味。
很多人说,AI 是生产力工具。以前也这么说。
现在觉得,这个说法太小看它了。
生产力,是把同样的事,做得更快。
能力,是做到以前根本做不到的事。
这种全球范围内可能只有库作者本人才能定位的 bug,放在过去,选项只有两个:高薪去请一位世界级的并发专家——请不起,也找不到;或者,让它永远挂着。
现在,它住在终端里。
Not productivity, rather capability.
不是你做事的速度变快了。
是你能做到的事,变多了。
世界又变了。这次变的不是工具,是
你能成为谁。
===
最近有没有被Fable 5震撼到的瞬间?欢迎在评论区分享。

