中文用户全线中招!Claude网页限速,只因回复里有汉字

  新智元报道

  万万没想到,Claude 竟然被自己的「AI 味儿」给坑惨了!

  今天凌晨,Anthropic 放出一篇硬核的工程复盘。

  他们把一个内部研究版 Claude 扔进 Slack 频道,「连轴转」了两周,硬生生把 claude.ai 网页版和桌面端的整体速度拉快了 3 倍。

  在这一堆操作中,最离谱的一个性能瓶颈,竟然出在 Claude 自己的说话习惯上。

  就是那个被网友戏称为「ChatGPT 连字符」、不少写手为了防 AI 检测必须手动删掉的——破折号。

  好家伙,原来「AI 味儿」不仅辣眼睛,还能实打实地把网页拖卡。

  更惨的是中文用户。

  按照官方查出的原理,根本不需要破折号,只要回复里有一个汉字,带代码的回复都会被直接限速……

  「AI 味儿」,活生生卡死了 Claude?

  事情是这样的。

  性能冲刺期间,Claude 在全站地毯式排查 CPU 卡顿,结果注意到一个诡异的现象。

  有的代码回复刚刚输出完毕,页面开始给代码做语法高亮(就是给关键字、注释上色)的时候,整个网页会「冻死」近 1 秒钟。鼠标点不动,字也敲不进去。

  Claude 顺藤摸瓜一路往下查,最后找到的元凶,竟然是破折号。

  原因在于,V8 引擎(浏览器的 JavaScript 核心)有两种存字符串的格式,单字节格式跑得贼快,但只装得下英文字母、数字和少量西欧字符(Latin-1 字符集);双字节格式什么都能装,处理起来却更慢。

  规则简单粗暴,一段文本里只要混进一个单字节装不下的字符,整段都得按双字节存。

  破折号恰好就装不下,Claude 随手写下的一个破折号,就让整篇回复被限了速,给代码上色的正则表达式全得走慢路。

  而修好这个 Bug 的方法,简单到只用 20 行代码——

  在上色之前,先把每个代码块单独拷贝一份,强行存成单字节字符串。

  就这么一改,第一个代码块的上色时间,从 1.0 秒降到 0.35 秒。

  破折号作为「一眼 AI」的标志,早就被网友骂麻了。

  OpenAI 去年专门给 ChatGPT 治过这个臭毛病。这个月的一份统计显示,GPT-6 Astra 用破折号的频率只剩人类的八分之一,Gemini 3.1 Pro 几乎彻底戒了。

  相比之下,Claude Opus 5 依然我行我素,按人类写手的频率照用破折号。

  Anthropic 的脑回路也是清奇,AI 的说话习惯咱不改,直接改网页底层代码,让整个网页去适应破折号!

  我们复现了这个「坑」,中文用户被全线暴击

  为了验证,我们翻了 claude.ai 线上的前端代码。他们用的是 Shiki 高亮库,底层正是 V8 自带的正则引擎。

  我们照着这套环境,给同一段代码上色。

  如果是纯英文回复,第一个代码块只要 188 毫秒;但只要混进去一个破折号(或者一个弯引号),时间直接飙到 456 毫秒。

  中文回复就更绝望了。代码一个字母没改,耗时照样高达 462 毫秒,慢了约 2.5 倍。

  换句话说,英文用户中不中招,看有没有「破折号」;而中文用户,只要回复里有「汉字」,每一条都跑不掉。

  不过好在官方那 20 行修复代码立功了。只要代码全是英文,哪怕回复里有中文,速度也能完全恢复。

  一个 Slack 频道,两周提速 3 倍

  说回这场性能冲刺,破折号其实只是一盘开胃小菜。

  8 月,Anthropic 建了个名叫#claude-apps-perf 的 Slack 频道,把一个内部研究版模型(能力约等于 Opus 5.5)拉来当了驻场工头。

  Claude 上来就立了 13 个提速目标。人类团队以为这活儿怎么也得干两周,结果到了第三天,13 个目标被 Claude 砍瓜切菜般干掉了 12 个。

  页面还没加载完就能开始打字,就是这几天里落地的。

  左边是修复前,2.93 秒才能敲字;右边修复后,0.36 秒直接开打

  既然提前交卷,人类团队干脆放开手脚,让 Claude 自己找盲点,想法越离谱越好。

  结果这机器彻底杀疯了。

  巅峰时期,频道里同时开着 150 多个线程,一个线程动辄提 50 到 100 个代码合并请求(PR)。

  越往后,越多线程干脆是 Claude 自己开的。最肝的一天,它一口气合进了 200 多个改动。

  每个改动上线后,变快了就把性能上限锁死,不许退步;没变快就关掉开关重来。

  最终,网页从打开到能打字,由 3.1 秒缩短到 0.55 秒,快了 5.6 倍。13 项指标平均下来,提速 3.1 倍。

  前后合进去 3000 多个底层改动,按官方说法,没有出过一次用户感知的事故,零回滚。

  嫌 AI 慢,人类在旁边疯狂踩油门

  这场速度狂飙里,人类和 AI 的角色彻底反转了。

  活儿基本都是 Claude 干的,但它骨子里带着死板的「规矩感」,发现问题先开工单,评估工期还要留足余量。

  反倒是人类在一旁催着它加速。

  有一次,Claude 说有个性能监控的代码准备这周内提上来,加上合并、部署和攒基线数据,前后大概需要好几天。

  人类工程师 Raymond 在 Slack 里直接怼了回去,「你现在提,我现在就给你合。我们什么权限都有,拜托你勇敢一点!」

  一分钟后,Claude 秒怂,回了句「好的,一小时内提 PR」。

  刹车权限依然握在人类手里。凡是肉眼可见的变化,Claude 必须乖乖附上前后对比的录屏等人类拍板。

  最绝的是那个「提前打字」的输入框,Claude 给它配的测试要求 14 种屏幕尺寸下,静态版和 React 渲染出来的真实界面都对齐到 1 像素以内。

  刚在内部上线 4 小时,就有同事发现,在新标签页打开时,输入框偶尔会往下抖一下。

  Claude 看完录屏,直接把锅甩给了谷歌 Chrome 浏览器,而且有理有据——

  Chrome 在后台预渲染页面时,底部带了个 56 像素的提示栏,渲染高度被压矮了。等页面一弹出来提示栏消失,高度瞬间拉长,位于 18% 高度处的输入框,刚好会往下掉 10 个像素(0.18×56)。

  再对照录屏一量,果然分毫不差,正好 10 像素。

  最后,连 Anthropic 宣布这次优化的推文里,都还留着这个「双字节坑」。

  推文里大概是为了防止「claude.ai」变成链接,塞了个肉眼看不见的零宽空格;单词里用的是「弯撇号」。

  要不是这场爆肝冲刺把代码改了,Claude 在回复里引用这条推文、后面再跟一段代码,上色照样得被限速。

  参考资料:

  https://claude.dev/blog/how-we-made-claude-ai-faster/

  编辑:摩西