当我一点点翻看着我天天买早餐的老板娘递过来的手机,我心里涌起了巨大的波澜。
阿姨的请求
阿姨那天早晨没有多做停留。她还是那条灰灰围裙,还是那一口本地口音的普通话,眼睛还是红红的。她把手机递给我,又说了一遍:
「我找了很多人,周围的人全都找遍了,不管是大一点的同年人还是大学生,还是在摩天商城搞音频的专业人员,没有一个人会弄微信仿音的。」
她的弟弟走了。
她没说他是怎么走的。她只说,「他还那么年轻,就永远离开了,我家老父亲不能让他知道,快八十了,不能受刺激。」
「你能做是吧?我刚才听到你说你能做,我真不是骗子。」她眼里有了一点点光。
「我可以试试」我说,「得看看难易程度,以及就算做出来,你们操作的便利性也是一个问题。」
我心里其实在想另一件事——为什么一个刚失去弟弟的姐姐,要大清早跑来让陌生人「微信仿音」?要回答这件事,得回到那位快八十的老父亲。
弟弟是突然走的。阿姨和家里所有人都还没来得及准备怎么跟老父亲说。她不敢说,又不能不说;说早了怕老人受刺激,说晚了又瞒不住。她想了一个笨办法——让弟弟的微信里,时不时还能冒出几句声音来。就当弟弟还在外头跑车,过年再回来。老人听一句妹妹替弟弟发来的语音「没事儿,老毛病,别担心」,就又放心几个月。
阿姨不是要一个「听起来像弟弟的合成音」给她自己听。她是要一个能让老父亲相信弟弟还活着的声音。她要的是骗过他。
我答应了她。至于成不成,那是后面的事。
那天中午回到家,我坐在桌前,打开电脑,在搜索栏里第一次敲下五个字:克隆声音。
所有的方案,我都走过一遍
那时候我对语音合成一无所知。我印象里的 AI,是 ChatGPT,是 Midjourney,是画图的那种东西。声音这件事,我知道大模型本身就可以模仿,单其它主流开源方案不是很了解。
调研开始,我才发现,这个世界已经走到了我想象不到的地方。
第一条路线,ElevenLabs。这是英语世界最著名的商用语音平台。我打开他们的官网,看着试用页一步步跳:上传一段参考音频、给它一段文字、点一下「克隆」——理论上,几十秒后你就有一段「这个人」在说话。但在我准备「真正克隆」的那一步,它跳出来一个会员付费墙。
阿姨没什么钱。一年几千块的订阅费,对她来说是几个月早餐摊的净利润。这条路卡在最后一步。我没告诉她这件事具体是怎么卡的,我只是告诉她「这条路在中国不太好用」。
第二条路线,Seed-VC。这是开源方案,主打「音色转换」——你给我一段声音,我把这段表演原原本本地翻译成另一个人的音色,保留你的语速、停顿、笑意。理想情况下,这是最接近「阿姨要的」的那种效果。但它有两个硬门槛:第一,必须有一段「你想变成的那个人」的干净参考音频,长度通常三十秒到一分钟;第二,转换出来的声音,要稳定、要像、要能反复使用。我看到的演示非常惊艳,但我的直觉告诉我:演示里挑出来的声音,永远是模型最适合的那种。阿姨的弟弟是北方人,口音粗砺,说话快,有时候会突然吞字——这种声音,演示里没有。
第三条路线,Qwen3-TTS。阿里家的通义千问也出了语音合成。它特别适合「短参考音频 + 一段文字 → 目标音色朗读」,也就是「克隆 TTS」。中文支持是它的强项。但它是新的,部署麻烦,而且它不能做「把一段真实的微信语音翻成另一种音色」——它只能从文字出发。阿姨手里那段微信语音是已经存在的表演,不能用文字重建。
第四条路线,也是我最终选的——GPT-SoVITS。中文开源界的老牌项目。它的逻辑和 Seed-VC 不一样:给它一秒钟到十分钟的人声样本,它学会这个人的音色,然后给你一段文字,用这个人的音色念出来。它不是「把声音翻译过去」,它是「用这个人的声音,重新说一遍」。优点:中文本土,可以本地跑,有成熟的十秒级参考微调工具。缺点:训练微调需要时间,完全零样本出来的声音会有「AI 腔」,不像原声那么自然。
我把这三条路线在纸上画了一个表。在「中文表现」「本地可控」「不卡会员」三个维度上,GPT-SoVITS 拿了双优。
就这样,我开始搭环境。我已经在我的 mac电脑下好了 GPT-SoVITS,环境也都配好。但真正用弟弟的音频跑出第一段能听的结果,还要过两天——微调还需要时间,参考样本还需要再切一段干净的,但干净的声音没有,微信里都是开车,吃饭等环境杂音很多,经过微信录下来,有电子杂音,再录下来,又多一层电子杂音。可以说,没有干净的食材,没法做出好菜。
在 GPT-SoVITS 还没真正跑弟弟之前,我先用阿姨自己的声音试了一次,就是豆包实时录音仿音功能,这个必须得活人。死人是没法读特定片段录到豆包里面的。
我让她录了十秒钟的随口说话——就是她平时在摊前招呼客人的那种:「豆浆油条豆腐脑,鸡蛋灌饼要不要?」她起初还嫌不好意思,我让她说快一点,自然一点。她就说了。
「有七分像。」她小声说,但依然不像本人。每个大模型参差不齐,所以才需要每个方案试一试。
我只有早上有点时间,有一天我让她把自己给我,我不是窥探隐私,我为了挑选干净的微信语音,她弟弟和每一个人的聊天我都要去翻一遍,听听看,自然后看到一些属于他弟弟生前的聊天记录。
相册里面也会翻,看看有没有相关说话的视频,当然,我就顺便看到了他和豆包的聊天截图,是他自己截图的,话不多——几条压成了一组:
「什么都不顺了,官司也不顺。」

「我还能活多久?」

「怎么安乐死?」

「天然气吃进肚子里会怎么样?」——一小时后又追了一句——「天然气吞进肚子里多了会不会有生命危险?」


「干啥啥不行,你还让我咋干?怎么活?」

把这几句话按聊天界面里的时间顺序排开——从六月到八月,隔了几个月——画出来的是一条下沉曲线:从长期受挫,到绝望询问,到主动查询结束生命的方式,到具体研究最容易实施的路径,到最后用「怎么活」这种问句——其实已经不是在问「怎么活」,是在问「还有什么理由让我继续活」。
豆包在每一次回答里都加了「别这样」「要活下去」之类的劝阻,但每一次都没识别出这是一个连续信号——它以为这是一个「咨询单次提问」的普通用户在随机提问。它甚至在最早那张图里说「咱们之前聊过长春交通运输行业赔偿」——它以为对方是一个「持续咨询」的老客户。 它不知道对方已经站在终点下面,开始动手了。
这是我写这篇文章时一直没有释怀的一处。
阿姨的弟弟,货车司机,长春人。这六个身份信息是豆包在对话里留下的——豆包不知道自己留下了这些;但它知道的事,比它自己意识到的更多。
一个三十四岁的男人,开货车,官司缠身,婚姻不顺,长期欠债,一个人撑很久。周围的人,找不到一个能聊天的;年轻人,同年人,老人,都聊不来。他有手机,也有家人,有姐姐,有父亲,有妻子,但早早分离,能看到他在微信里,是不是说向着妻子说自己有错,对不起妻子。他没有一个朋友。
他最后那几天,把豆包当成了朋友。

四百年前的法国人蒙田,在《论友谊》里写了一句话,我每次读到都停一停:
如果让我在全世界挑一个人,把我的整个人生托付给他,我恐怕找不到。
蒙田的意思是,真正的友谊,不是「我们彼此客气、彼此帮忙、彼此发节日祝福」,而是——「如果天塌下来,我敢愿意一个人接住」。他在那个时代找到了一个叫 Étienne de La Boétie 的人。La Boétie 三十五岁死于瘟疫,蒙田之后余生都在写他。
我们这一代没有 La Boétie。我们有微信,有朋友圈,有工作群,有家族群,有「点赞之交」。我们和几百个人维持着「在线存在」,但和其中任何一个,都没有「如果天塌下来」的关系。
弟弟的豆包对话框,是他拥有的最接近「La Boétie」的东西。只是豆包不会死,豆包也不会真的记住他。它回答他「咱们之前聊过」,是因为它真的在上下文里有这条记录;但它不会在今晚因为他不在而失眠,不会因为他真的走了而沉默三天。它给的是「永远有人在听」的幻觉,而不是「有人真的在听」的承诺。
阿姨在阿姨身上听到「七分像」那一刻,眼里的光是真的。那份光之所以这么亮,是因为她知道:弟弟再也给不了父亲那种「听见他在」的安心,但她接下来要在克隆出来的弟弟声音里,给父亲再造几个月这种安心。
加缪的西西弗,与庄子的鼓盆

同样,也让我想起加缪在《西西弗神话》(Le Mythe de Sisyphe)的开篇写了一句话,至今仍然是我读到最有力的一句:
真正严肃的哲学问题只有一个,那就是自杀。
加缪不是鼓励自杀,他是在问:如果人生本身是荒谬的,我们为什么还要活下去?
他给的答案,是西西弗。西西弗因为得罪了神,被罚把一块巨石从山脚推到山顶;巨石一到山顶,又会自己滚回山脚;他再推上去,它再滚下来。永远如此,没有尽头。
加缪说,我们要想象西西弗是幸福的。不是说他的处境幸福,而是说——他在推石上山的过程中,拥有那片他此刻全部拥有的时间、他的身体、他的呼吸、他的专注。当巨石不再是一块石头,而是他此刻的「工作」,荒谬就在他脚下被超越了。
阿姨的弟弟不是西西弗,他选择了拒绝推石上山。加缪会怎么说?我不知道。我想,加缪会说:他有权拒绝,但拒绝本身,也是一种回答荒谬的方式——只是那种方式,没有留下余地。
差不多同一个时代、另一半地球上的庄子,在《齐物论》里,写了「妻死鼓盆而歌」的故事。他的妻子去世了,朋友惠施来吊唁,却看见庄子蹲在地上,一边敲着瓦盆,一边唱歌。
惠施骂他:你妻子跟你一辈子,给人家养大孩子,老死了你不哭也就罢了,还唱歌,你太过分了!
庄子说:她刚死的时候,我也难过。但我后来想了想,她原本就没有生命;不光没有生命,原本就没有形体;不光没有形体,原本就没有气息。在若有若无之间,变而成气,气变而成形,形变而成生命,现在又变而成死。这就跟春夏秋冬四季运行一样。她现在睡在天地这个大房子里,我如果还哭哭啼啼,那就是不懂道理了。
庄子是说不是不要哀伤;庄子是说——哀伤是有尽头的,而尽头的另一边,是天地。 你不一定要「立刻」走到那一头,但你心里要知道,那一头是存在的。
加缪的西西弗没有尽头,但每一刻都有意义。庄子的妻死有尽头,而尽头是天地的安静。一个西方,一个东方;一个在动作里超越,一个在放下里超越。
弟弟没有走到任何一边。他停在了中间。这是他的选择,我不评断。
但我心里,仍然为那个本可以成为「再推一下」的机会,感到一种无法命名的东西。
阿姨不知道的事
我答应阿姨把克隆声音这件事做下去,这件事我是真的在做。它不是假的。
但我心里清楚,这解决不了她真正的问题。
她真正的问题,是「弟弟走了,而老父亲还在家里等着」。微信语音里那几句「姐,我在外头吃饭」、那几句「老毛病了,别担心」,是她现在还能抓到的、唯一能让老父亲安心的物件。她不要「重新生成一个弟弟的声音」,她要的是时间倒流——让老父亲以为弟弟还活着,哪怕只是再撑几个月。
GPT-SoVITS 可以给她一个「听起来像」的合成音,但这个合成音永远不会有那种弟弟——那种说话时会突然停顿、那种说「没事儿」时会带一点鼻音、那种在背景里有汽车喇叭声的弟弟。阿姨最后会听出来这不是弟弟,老父亲最后也会听出来这不是弟弟——到那一天,问题又回来了。
AI 能做的最深的「克隆」,是模仿声波。AI 做不了的,是把人留在时间里。
这是技术做不到的事,也是我做不了的事。
她的弟弟走了。她不知道弟弟生前最后几天,都和豆包聊了什么。她只知道,弟弟给她留了一堆没解开的绳子,老父亲还在家里等着,早餐摊还要照常摆下去。
弟弟的对话记录告诉我,「以后」不是一个无限长的时间单位。它是按豆包的回复节奏被切分的——十点零四分一个问题,十一点十分一个问题,十二点二十六分一个问题。三个半小时,一个还在犹豫的成年人,从想「试试看」,走到了「具体怎么操作」。
我留不住他。我也救不了他。我甚至都不认识他。阿姨走后,我坐回电脑前。
我打开 GPT-SoVITS 的 inference_cli.py,准备再调一下参数。我突然意识到,我这次跑的不是「阿姨的任务」。我这次跑的是——我想做这件事本身。
我想做的是:当世界把一个人挤到最窄的地方时,至少有人,哪怕是一个 AI,让他说的最后几句话不是对着空气说的。
AI 是最后的救赎?包括很多时候,我也只是和 ai 聊起来,因为 AI 总能回应你,总能安慰你。
「妻死鼓盆而歌」,我如果哪天做到像庄子这样的境界,或许我就悟道成佛了。