AI 对话朗读回答时,让你看见声音读到哪儿
ChatGPT、Gemini 和 Claude 都会把自己的回答读出来,声音确实好听。但它们都不肯告诉你声音读到了哪里。你按下它们的朗读按钮,音频开始,900 个词就那样躺着,上面一个记号都没有。眼睛离开十秒,再找回自己的位置就只能靠猜。
Readalix 把缺的那一半补上。在这三个站点上,按下它们的朗读按钮,扩展就跟住它们的音频:给正在念的那句上色,再给句中那个词上更重的色。它们的声音,我们的高亮。不用再找第二个播放按钮,也没有什么模式要开:你照旧用它们的按钮,高亮自己就在那儿了。
它的行为方式
它是覆在别人音频上的一层被动画面,行为也就像这样:
- 任何一条回答,读多少遍都行。在第二条回答上按朗读,高亮就搬过去。回头重读早先那条,它从第一个词重新开始。
- 它从不抢你的控制权。这不算 Readalix 的一次朗读,所以它绝不接管弹窗里的播放和暂停按钮。它们暂停时,高亮就停在声音停下的地方;而你自己开始一次朗读,高亮会被清掉。
- 一旦对不上,它就停。这些是别人的页面,而页面是会重建的。当 Readalix 再也判断不出正在读哪条回答,它就安静地停止高亮,它们的音频照旧不受影响。

词的高亮是估算,不是测量
Readalix 自己的声音大多会在每个词开始时报一个真实事件,那时的词高亮不靠猜,是被告知的。三家 AI 对话都不公开这类信息。Readalix 能看到的只有一只钟:声音在音频里走到了哪里,整段音频有多长。于是位置只能从文本上建模:按字符给每个词称重,再把音频的进度映射到这个总量上。有三处细节让这笔账站得住:
- 代码块完全不分配时间。它们的声音会跳过代码块,所以 Readalix 也跳过:高亮直接从代码块前的最后一个词跳到块后的第一个词。实测表明,若让代码块也分走它那份音频,一段三分钟的回答会偏出大约六秒。
- 真实时长一到,它就重新锚定。刚生成的一次朗读,最初几秒并不知道自己有多长。在那之前,高亮按实测的平均速度前进;真实时长落地后,回答余下的部分就从高亮当前所在处起,摊到音频余下的时间里。
- 它从不往后退。它们的钟报出的位置,可能落在模型已经走到的地方之后。词往回跳读起来像口吃,所以高亮宁可原地不动,等声音追上来。
由此有两点。越短越准:两句话的回答几乎没有偏移的余地,而很长的一段,速度上一点小误差就有几百个词可以累积。而百分之百精确不在选项之内:除了站点自己告诉我们每个词从哪里开始,没有别的办法做到精确,而没有一家会告诉我们。在我们实测的那些回答上,模型与音频的差距在百分之一以内,看上去就是正确的那个词或它的邻居。它不会永远这么贴。
有些语言拿不到有用的词高亮
模型是把空格之间的一串文字当作一个词,这在英语、西班牙语、阿拉伯语或印地语里是个不错的定义,在中文、日文、泰文里则根本不成定义。不写空格的文字里,一整个小句都算作一个词,于是“词”高亮一次亮起一个小句,能告诉你的东西就很少了。密度不均的文本也有同样的毛病,只是轻些:长网址、代码标识符和数字,每个字符占用的时间和散文并不一样。
所以留下靠得住的那一半。句子够长,在它内部早一点或晚一点通常挪不动那个记号,因此在设置 → 高亮颜色里,你可以把词的那一半关掉,只留句子那一半:一个清楚的记号沿着回答往下走,里面没有东西在抖。两个开关都是全局的,所以管的也是普通网页上的朗读。

无论如何都还在的那些
余下这些,都不依赖词的时间点有多贴:
- 回答自己会滚动。对话面板会让正在朗读的文字留在视野里。你要是有意滚开,一个小标签会显示当前的词,点一下就跳回去,遵循的是与普通朗读同一个“滚动跟随朗读”设置。
- 它们的声音按你的速度走。Readalix 弹窗里的朗读速度滑块会驱动它们的播放器,读到一半时改也算。在默认的 1× 上 Readalix 完全不插手,所以从不碰我们这个滑块的人,站点自带的速度控件照样好用。
- 你的高亮配色,用在它们的页面上。就是你为整个网络挑的那套配色,而且会读它们的浅色或深色主题,而不是假定其中一种。
- 没有东西离开浏览器。这里没有语音要合成,也没有文本要发送:Readalix 只是在读一只钟,然后画上高亮。回答不会去任何服务器,我们的不会,别人的也不会。

如果你宁可不要
那就关掉:设置 → 朗读里每个站点各有一个开关,你可以只丢掉不喜欢的那个,留下另外两个。估算出来的高亮,确实是个口味问题。有人觉得一个大致落在正确位置的记号,恰好足够把眼睛留在文字上;也有人觉得偶尔亮错一个词,比没有记号更烦。两种都说得通,所以它是一个开关,而不是替你做好的决定。
我们宁愿交出一个诚实的估算,也不愿什么都不给。一段读出声却看不见位置的回答,是一个你不敢把眼睛移开的页面;而一个大多时候正确、也从不多许诺的记号,让你敢移开。