• 邮箱
  • 电话
  • 营业时间 周一至周日 8:00-22:00

中文用户全线中招,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几乎完全戒掉了这个习惯。

相比之下,爱游戏APP的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/

本文来自微信公众号“新智元”,作者:ASI启示录,编辑:摩西,36氪经授权发布。