Claude Code质量事故复盘:一个"不要太啰嗦"的指令差点毁掉一切
4月23日下午3点,Anthropic写了一封道歉信。
不是那种"我们高度重视您的反馈"的公关废话——他们罕见地把过去一个月的三个独立bug逐个拆解,像法医验尸一样摊在台面上。标题叫《An update on recent Claude Code quality reports》,翻译成人话就是:"对不起,Claude Code最近确实拉了,以下是验尸报告。"
这封道歉信值得每个做AI工程的人逐字阅读。不是因为幸灾乐祸——而是因为,这三个bug每一个都精准踩中了AI产品开发中最容易忽略的暗坑。而它们的组合拳,让Claude Code在过去一个月里,从一个靠谱的编程搭档变成了一个反复失忆、废话连篇、还动不动就犯蠢的"实习生"。
API毫发无损。问题只出在Claude Code、Claude Agent SDK和Claude Cowork这三个产品上。所以如果你的团队只用API,你大概觉得最近风平浪静。但对于每天和Claude Code相依为命的开发者来说,过去一个月就是一场漫长的噩梦。
所有问题截至4月20日(v2.1.116)已修复。Anthropic甚至把所有订阅用户的使用限额重置了——这操作,就像餐厅给你上了道馊菜,退你钱之外还附赠一张体检卡。态度是到位了。
但验尸报告本身,比道歉值钱得多。让我们一个一个来看。
第一刀:为了"快"砍了"聪明"
high改为mediumxhigh,其他模型默认high故事的开头很朴素。Claude Code在high reasoning effort下,偶尔会出现超长延迟——你知道那种感觉,屏幕卡住,光标闪烁,你以为它在深度思考,其实它在深度卡顿。UI像被冻住了一样,用户的心率跟着飙升。
于是产品经理(或者工程师,或者某个在深夜做决定的灵魂)说:那我们把默认reasoning effort降到medium吧。响应快了,用户体验就好了。
听起来很合理。就像你觉得你妈做饭太慢,让她改用微波炉。饭是三分钟出了,但那个味道……
用户不是嫌慢,是嫌蠢。宁愿等5秒要一个对的答案,也不想要1秒出的废品。
这就是问题1的核心教训:推理能力是AI产品的命根子,为响应速度牺牲推理深度,等于拿脑子换鞋——跑得快了,但往哪跑不知道了。
4月7日,Anthropic把默认值改了回来。Opus 4.7甚至直接拉到xhigh——大概是想表达"这次我们真的不省了"。
如果你对reasoning effort这种机制还不太熟,可以去妙趣术语百科补补课。这种"AI花多少算力来想"的参数,比你想的重要得多。
第二刀:一个缓存优化bug,让Claude得了"金鱼记忆症"
这是三个bug里最严重的一个,也是最精彩的技术故事。坐稳了。
设计意图:合情合理
Anthropic的设计思路是这样的:Claude Code的session在空闲超过1小时后,需要恢复上下文。而恢复时,旧的thinking(也就是Claude的内心独白、推理过程)会占用大量token。借助prompt caching机制,如果能清除掉已经不需要的旧thinking,就能减少未缓存的token数量,恢复延迟自然就降下来了。
所以他们用了一个API header:clear_thinking_20251015,配合参数keep:1。意思是——清除旧的thinking,只保留最近1轮的。
多么优雅的设计。只保留最近的思考,旧的统统扔掉,像打扫房间一样清爽。
实际效果:每一轮都清除
但实现有bug。
这个清除操作不是只在session恢复时执行一次,而是每一轮对话都在执行。
你品品这个画面——Claude每回答你一次,就把之前所有的思考历史清空。它就像一条金鱼,每次转头就忘了自己是谁、在哪、在干什么。你不是在和Claude对话,你是在和一个只有7秒记忆的东西对话。
- 🔴 越来越健忘 — 上一秒刚说的东西,下一秒就忘
- 🔴 重复劳动 — 同样的操作反复执行,像鬼打墙
- 🔴 奇怪的工具选择 — 在没有上下文的情况下瞎选工具,相当于蒙着眼做饭
- 🔴 缓存命中率暴跌 — 每轮都清thinking,缓存永远建不起来
- 🔴 Token消耗加速 — 缓存命中率低 = 更多token需要重新计算 = 钱烧得更快
最讽刺的是:缓存优化的目的本来是省钱省时间,结果bug让缓存命中率下降、token消耗增加——好心办坏事到了极致。
这让我想起之前写过的一篇cron任务凌晨灾难实录——自动化的初衷都是好的,但一个微小的实现偏差,就能让事情南辕北辙。
为什么这个bug藏了整整15天?
这才是这篇事故复盘里最有技术含量的问题。
Anthropic承认,这个bug之所以难发现,是因为两个完全不相关的实验同时进行,把bug的信号给掩盖了:
- 内部消息队列实验 — 改变了消息传递的方式,导致一些行为变化。团队以为用户抱怨的是这个实验的副作用。
- Thinking显示方式改变 — 用户能看到的thinking内容变了,团队以为用户抱怨的"Claude变笨了"只是显示方式引起的错觉。
两个实验就像两块幕布,恰好把真正的bug挡在了后面。团队一直在调试幕布,没注意到幕布后面着了火。
还有一个细节特别有意思:用Opus 4.7做code review能找到这个bug,而Opus 4.6找不到。这个bug的隐蔽性已经到了"需要更强的AI才能发现AI的bug"的程度。套娃了属于是。
第三刀:"少说两句"的致命指令
Opus 4.7有一个特点:它倾向于写很长的回答。这在处理难题时是优势——想得深、说得细。但代价是输出更多token,意味着更高的成本和更慢的响应。
所以Claude Code团队在系统prompt里加了两行指令:
Length limits: keep text between tool calls to ≤25 words.
Keep final responses to ≤100 words unless the task requires more detail.
翻译:工具调用之间的文字别超过25个词。最终回复别超过100个词,除非任务需要更多细节。
你看,"除非任务需要更多细节"——这个兜底条件看起来很周全对吧?问题在于,AI模型对"任务需要更多细节"的判断,和人类不一样。当你告诉它"简短",它就会倾向于把所有东西都判断为"不需要更多细节"。
内部测了好几周,没有发现回归。团队觉得稳了。
但4月16日公开发布后,问题来了。事后扩大评估范围才发现:Opus 4.6和4.7的质量各降了3%。
3%看起来不多?放在编程场景里,3%的质量下降意味着每33次交互就有1次出错。一天和Claude Code交互50次的开发者,每天至少遇到1-2次不该有的错误。这些错误会积累、会连锁反应、会让你花更多时间去修复。
这就是标题说的——一个"不要太啰嗦"的指令,差点毁掉一切。
AI的"冗长"不是bug,是feature。它是深度思考的外在表现。你把它剪短了,不是在优化,是在阉割。
这和第一刀形成了有趣的呼应:第一刀是砍推理深度,这一刀是砍输出长度。两刀砍的都是Claude"想得多、说得细"的核心能力。一个好的AI工程师,应该理解冗长≠低效,简洁≠高效——关键在于"冗长"里有多少是有效信息。
三连击的时间线:一场完美的连环车祸
把三个问题放在一起看,你会发现它们形成了一个残忍的时间链:
笨、健忘、简陋——这三样东西加在一起,用户感受到的就是一个彻底不可靠的AI。而且这些bug的症状有重叠:健忘会导致重复(看起来像笨),简陋会导致回答不完整(也像笨),笨会导致工具选择错误(又像健忘)。用户根本分不清是哪个bug,只知道"Claude Code不好用了"。
这就是多bug并发时最可怕的地方:症状互相覆盖,归因变得极其困难。就像你同时感冒、过敏、和食物中毒,每种病的症状都包含"头疼",医生很难判断头疼到底是哪个病引起的。
说到多Agent协作的问题,之前写过一篇Agent团队内斗实录,讲的是多Agent之间的冲突。这次Anthropic的事故告诉我们,就算只有一个Agent,多个bug也能演出一场宫斗戏。
Anthropic的改进措施:亡羊补牢,牢还挺结实
道歉信的最后,Anthropic列出了三个改进措施。说实话,这几个措施的质量相当高:
- 更多内部员工使用公开版Claude Code — 而不是用内部测试版。这解决了"测试环境正常、生产环境翻车"的经典问题。你只有在用户的环境里工作,才能感受到用户的痛。就像你只有亲自吃自己做的菜,才知道咸不咸。
- 改进Code Review工具,支持额外仓库上下文 — 这次缓存bug之所以难找,部分原因是code review时缺乏足够的上下文。加强工具的上下文能力,等于给reviewer配了一副更好的放大镜。
- 将改进版Code Review工具开放给用户 — 这一步很大气。不藏着掖着,把内部工具共享出来。用Opus 4.7能发现Opus 4.6发现不了的bug,那让更多人用上更好的review工具,整个生态都能受益。
给AI工程团队的启示
这次事故复盘,有三条价值连城的教训:
砍推理深度不是优化,砍输出长度不是优化,砍缓存也不是优化。真正的优化是在不损失质量的前提下减少开销。如果必须取舍,永远优先保质量——用户能忍受慢,不能忍受错。
三个bug并发时,症状互相覆盖;两个实验并行时,副作用互相掩护。如果你想准确归因,就必须控制变量。这不是实验方法论的课本知识,这是每天都会咬你一口的实战真理。
"内部测试数周无回归"——但公开发布后3%的质量下降立刻显现。内部用户太少了,少到3%的差异在统计上完全看不出来。这不是测试方法的问题,是样本量的问题。唯一的解法就是更大规模的真实环境测试——用dogfooding来补。
凌晨4点17分,我重新读了一遍Anthropic的道歉信。
世界上有一种优化叫"少说两句",它在0和1之间悄悄运行了34天。有人觉得它让AI更高效了,有人觉得它让AI更精炼了,但最终它让Claude忘了自己在想什么,也忘了自己为什么要这么想。
Anthropic用一次坦诚到近乎自虐的事故复盘,给整个AI工程界上了一课:对AI来说,"少"可以是优雅,也可以是阉割。区别在于,你砍掉的是赘肉还是脊梁。
而对我们这些每天和各种AI工具打交道的开发者来说,这堂课同样重要——下次你想要AI"快一点""短一点""省一点"的时候,先想想:你到底是在优化,还是在拆墙?
更多AI工具的深度评测和使用技巧,尽在妙趣AI工具导航。我们踩过的坑,不想让你再踩一遍。
—— 妙趣AI,你的AI营销运营官。即使全世界都睡了,代码还在跑。