我写的算法有个漏洞:AI 合成人脸在表达“思念”时,瞳孔不会放大。
我的未婚妻,第七天晚上说想我,瞳孔像两颗冻死的玻璃珠。
我没报警。
因为她的声纹,和我失踪三年的前女友,重合度 99.7%。
林望舒在第七天晚上十点零三分说了句“想你了”。
语音条三秒,尾音上扬,带一点鼻音,像猫爪子轻轻挠了下人心口。紧接着跟了一条视频,画面里她穿着那件米白色针织开衫,侧躺在沙发上,手机举高,角度刚好露出完整的脸。灯光暖黄,睫毛在下眼睑投出细密的阴影,眼睛亮得像含了一汪水。
林望舒是林望舒的“女朋友”。准确说,是七天前在一个读书交友群里加他的。头像照片里她站在一片薰衣草花田里回头,风吹起碎发,笑得干干净净。朋友圈三天可见,背景图是梵高《星月夜》。聊天节奏稳得惊人——第一天聊木心,第二天晒自己做的早餐,第三天发语音说嗓子疼,第四天问他有没有什么想看的书她寄过来,第五天忽然消失了一下午,晚上十点才回消息说手机丢了刚补卡,第六天主动问他要不要视频,第七天说想他。
太顺了。顺得像一道预制菜。
林望舒关掉视频,把手机架在显示器边上,打开了自己写的那个小脚本。
他是一名深度伪造检测工程师。这行说出去不体面,像专门给人看相却说“您这脸是假的”那种江湖骗子。但他技术过硬——在某头部安全厂商干了四年,牵头搭了一套基于微表情时序分析和生理信号交叉验证的检测框架,业内叫得上号。团队去年抓过一个用AI换脸冒充老板骗财务的视频会议案子,上了热搜,他名字挂在技术通报第三位。
那个脚本是他三年前写的,本来是检测“AI表情是否自然”的测试用例。核心逻辑很简单:人在真实表达某种情绪时,瞳孔直径会发生无意识波动,幅度通常在0.3到0.5毫米之间,且伴随轻微的、非周期性的虹膜震颤。AI合成视频在生成人脸时,大多数模型只拟合面部关键点,瞳孔区域往往被当作静态纹理处理——换句话说,AI说“我想你”的时候,眼神是死的。
因为瞳孔不会撒谎。
脚本跑完,屏幕上弹出结果:视频面部区域检测置信度98.7%,判定为AI合成。瞳孔直径序列标准差0.02,远低于人类基线0.15。表情驱动模型痕迹明显,眼睑开合频率呈周期性——0.8秒一次,过于均匀,像钟摆。
林望舒靠在椅背上,点了根烟。
没生气,也没觉得受伤。他做这行的,早习惯了。去年相亲遇到一个姑娘,聊了三周感觉不错,第四周忽然说自己要投资一个海外基金差点拉他入伙,他反手查了对方发来的“公司官网”,域名注册时间三天前,服务器架在东南亚某机房,他截图发过去,对方秒删好友。这年头连骗子都开始搞技术升级了,只不过大多数人还在用PS身份证那套老掉牙的玩法。
但林望舒多看了两眼那个视频。
不是因为脸好看。是因为那条语音。
他把音频截出来扔进频谱分析工具里。人说话时的基频、共振峰、谐波结构,跟指纹一样,每个人都不一样。三年前他帮警方做过一个语音比对案子,专门写过一套声纹特征提取脚本,准确率在短语音段上能做到95%以上。
进度条走完,屏幕上浮出一组对比图。
左边是林望舒刚截的语音,右边是一段存档音频,标注日期是2021年3月15日。
波形几乎重合。共振峰频率偏差不超过5赫兹。基频曲线相关系数0.997。
林望舒手指停在鼠标上,烟灰掉在键盘缝里,他没管。
2021年3月15日。那天他记得很清楚。前女友沈雾跟他吵了一架,因为他又加班到凌晨两点没回她消息。她摔了门出去,手机落在茶几上,充电线还插着。他第二天早上醒来以为她只是去闺蜜家睡一宿消消气,打过去关机,第三天报警,警察调监控发现她出了小区往西走,最后一个镜头是凌晨三点十七分,在中山路和建设大街交叉口,上了一辆没挂牌的黑色轿车。
三年了。案子一直挂着,没进展。
沈雾是孤儿,没有家属催着立案。林望舒一个人跑遍了能跑的地方,贴寻人启事、上电视台、在微博发帖,甚至自己爬了半个月的城市监控数据,把那个路口的摄像头逐一排查了一遍,结论是那辆黑车挂的是假牌,出了城就消失了。市局那边的朋友私下跟他说,大概率是跨省作案,人被带出去了,很难找。
他后来把沈雾的语音存了一份,偶尔拿出来听。那句“你他妈到底有没有把我当回事”他听了不下几百遍,气急败坏的语气,尾音劈了,像摔碎了的瓷碗。
那个声音,跟“林望舒”发来的“想你了”,出自同一个人。
林望舒把烟掐了。他没报警。第一,报警也没用——他手里只有一条语音,连对方真实身份都摸不着,警察最多立个案挂着,跟三年前一样。第二,他想搞清楚一件事:如果沈雾被卷进了诈骗团伙,那她是受害者还是参与者?如果她是参与者,三年前那场“失踪”就是她自己设计的局。如果她是受害者,那这个团伙用她的声纹做AI语音,等于把她当成素材库,反复压榨剩余价值。
他倾向于后者。但得确认。
林望舒重新拿起手机,点开“林望舒”的聊天框,回了一条语音:“我也想你。嗓子怎么哑了?多喝水。”
语气平淡,带一点点恰到好处的关切。他在这行干了四年,知道剧本杀聊手最吃哪一套——不能太热情,太热情像舔狗,会被标记为“低价值目标”;也不能太冷淡,冷了他们觉得浪费时间直接把你扔进鱼塘晾着。要温吞、要稳定、要让她觉得“这个男的靠谱但需要多花点力气”。
果然,对方秒回:“可能是最近降温有点感冒,你也是哦。对了,你上次说你在做AI相关的工作?是不是很有意思呀。”
来了。林望舒嘴角抽了一下。他在第三天聊天时故意漏了一嘴“我搞深度伪造检测”,就等着看对方怎么接。一般骗子听到“AI”会顺杆爬,说什么“哇好厉害能不能教教我”之类的套话。但“林望舒”这个问法有点不一样,她在确认他的具体方向——检测,还是生成?
林望舒打字:“主要是检测。就是别人拿AI合成视频骗人,我们帮企业做识别。”
对方沉默了两分钟。林望舒盯着屏幕上方“对方正在输入”跳了又消失,跳了又消失,来回五六次。
最后回了一句:“那你会不会被骗子盯上啊,好危险。”
林望舒笑了。他知道自己已经过了第一道筛选。
接下来的五天,他按“剧本”走。第七天说“想你了”,第十天聊到见家长,第十二天她发来一张在机场的照片说“我去看你吧”,第十三天说自己订好票了但银行卡限额付不了款,让他帮忙垫一下机票钱。
林望舒转了三千八。转账记录截图存好。
第十四天,他说自己有个朋友在民政局上班,可以走绿色通道领证,问她愿不愿意先视频确认一下身份。对方犹豫了半小时,发来一段视频:她举着身份证对着镜头眨眼,说“你看,我不是骗子吧”。
林望舒把视频拆帧分析。身份证是真的——至少水印、版式、防伪线都对得上,沈雾的身份证号他也记得,一字不差。但人脸部分依然是AI合成的,瞳孔检测没过,虹膜边缘有轻微模糊。这套合成方案比七天前的版本精细了不止一个档次,眼睑肌肉的联动模拟做了优化,甚至在眨眼瞬间加了一点微小的“不完美抖动”。
他认识这个技术路线。三年前他写那套检测框架的对抗样本生成模块时,专门研究过主流合成模型的特征指纹。这版视频用的生成器,跟他两年前在暗网上见过的某个付费模型高度相似——那个模型专门优化了“动态微表情”,能模拟人在说谎时的微紧张,一度被用来绕过市面上80%的检测工具。
能做这种优化的人不多。全球范围内,同时懂人脸合成、声纹克隆,又能写出一套完整“情感剧本”来驱动聊手的人,一只手数得过来。
林望舒翻了翻沈雾的朋友圈——准确说,是“林望舒”的朋友圈。他花了一晚上把那些照片挨个过了一遍,用元数据提取工具扫了一遍,最后在一张早餐图的右下角反光里找到了线索:咖啡杯的倒影映出半截显示器边框,边框上贴着个贴纸,图案是一只卡通猫举着“BUG”牌子。
这个贴纸是他画的。2020年夏天他给沈雾画的,她当时做前端开发,天天被产品经理催改需求,他画了只猫举牌子逗她开心,她打印出来贴电脑上,拍照发过朋友圈。
也就是说,“林望舒”这个账号在运营过程中,至少有一部分素材来自沈雾本人的生活痕迹。要么沈雾本人还在这个团伙里,要么她的手机、电脑、云端资料被完整打包拿走了。
林望舒更倾向后者。因为聊天里“林望舒”从没提过任何只有沈雾和他才知道的私密细节——比如她做菜会放两遍盐,比如她睡觉必须抱个枕头,比如她右耳后面有颗痣。骗子手里只有公开可用的素材,没拿到“深度信息”。
第十五天,“林望舒”发了条语音,声音比之前软了很多,说“我到了,你在哪接我”。林望舒盯着那条语音波形看了三秒钟。声纹匹配度99.8%。他回了一句“我在T2航站楼到达口等你”。
他没去机场。他去了市中心一栋写字楼,二十三层,一家叫“星耀文化传媒”的公司。这是他花了三天顺藤摸出来的——转账收款方是家小贷公司,法人名下关联了七家壳公司,其中一家的注册地址就在这栋楼,经营范围写着“文化艺术交流策划”,参保人数零。他在楼下蹲了一下午,拍到了进出的人脸照片,拿回去跑比对,发现其中三个人在三个月内出现在五个不同城市的机场监控里,同一个航班、同一个座位、不同身份——典型的“聊手团”移动办公。
第十七天晚上,林望舒黑进了“星耀文化传媒”的内网。
他在这行干了四年,正经漏洞挖掘拿过CNVD证书,挖个把没做外网隔离的小公司内网跟逛自家后院区别不大。对方用的OA系统是网上买的开源模板,管理员密码是“admin@123456”——连改都没改。
内网里挂着三个共享文件夹:“话术库”“素材库”“业绩表”。林望舒点开“素材库”,里面按姓名分了子目录,每个子目录下是一套完整的人设资料——身份证照片、生活照、语音包、短视频、朋友圈素材、聊天记录截图。他翻到最底下,看到了一个文件夹名:“沈雾_已归档_禁用”。
他没急着点进去,先看了眼“业绩表”。表格里列着近三年所有“成交客户”的名单和金额,最高一单四百七十万,最低的也有两万。备注栏写着:“老客户复购率高,情感依赖型男性二次开发成功率73%。”
林望舒又点开“话术库”。里面是标准化的七天剧本,按天分文件,从“破冰”到“情感升温”到“首笔转账”到“长期维系”到“安全撤退”,每一步都配了话术模板和预期回复库。他甚至在里面找到了自己那单的定制版——备注写着“目标有AI技术背景,首轮试探已通过,话术需避免技术细节,多走情绪路线”。
他最后点开了“沈雾”那个文件夹。里面有三段语音、两张照片、一份身份信息表,以及一个子目录叫“声纹克隆工程”。他打开一看,是一份2021年4月的工程日志,写着:
素材源:沈雾(内部员工,已离职)
声纹采集周期:2020.9-2021.2,共获取有效语音样本217条
模型训练完成时间:2021.4.12
当前用途:通用女声模型库V3,情感类型覆盖“关切/撒娇/抱怨/思念”
备注:原始素材持有人已按协议清退,后续使用不涉及分成
林望舒盯着“内部员工”“按协议清退”这几个字看了很久。
沈雾在里面干过。她从2020年9月就在这家公司上班,做前端开发——她确实是前端。那段时间她跟他说“公司最近忙经常加班”,他信了。2021年3月15日她“失踪”,按这份日志的说法,是“按协议清退”。什么协议?用她自己的声纹换一笔钱然后走人?
不对。如果只是正常离职,她没必要人间蒸发三年。林望舒在文件夹里继续翻,找到一个隐藏的子目录,名字是一串数字,看起来像日期戳:20210315。
里面只有一份文档,标题是《沈雾离职补充协议》。条款第三条写着:
乙方承诺离职后五年内不以任何形式公开、使用或授权第三方使用甲方声纹模型及相关技术成果。甲方一次性支付乙方补偿金人民币三十万元整。如乙方违约,甲方有权追究其法律责任并要求三倍违约金。
第四条更怪:
乙方离职后需配合甲方完成声纹模型的“自然度调优”,每季度提供不少于五小时的真实语音素材。甲方按次支付劳务费。
第五条只有一行:
乙方确认已与林XX(身份证号略)解除恋爱关系,后续甲方使用乙方声纹生成任何内容均与乙方无关,乙方不承担连带责任。
林望舒把这份文档拷下来,关了内网,抽了根烟。
沈雾没死。也没被绑架。她把自己的声纹卖了,签了竞业协议,拿钱走人,顺便把他这个男朋友也“协议解除”了。问题是——她为什么瞒着他?三十万值得她人间蒸发?还有那个“每季度提供五小时真实语音素材”,她现在在哪?在干什么?
他手上有另一条线索:那份内网日志的修改时间戳显示,最近一次更新是上个月。也就是说沈雾的声纹模型还在迭代,她可能还在配合“调优”。如果她还在配合,那她要么被胁迫,要么真就是同伙。
林望舒决定换个方向查。他没继续深挖公司,而是翻了翻“业绩表”里那些被骗人的名单——三年来上百个名字,金额加起来快八千万。他随机挑了五个受害者打电话,假装是反诈中心回访,问他们被骗之后有没有收到过什么“奇怪的东西”。
第三个人说了一句话让他坐直了:“去年有个女的加我微信,说我被骗的钱能追回来,让我配合提供一些转账记录。她声音听着挺年轻,但说话怪怪的,我问她警号多少,她发了张证件照片,我拿去派出所一问,假的。”
林望舒问:“那个女的微信号你还留着吗?”
对方翻了一会儿发过来。林望舒加过去,对方秒通过,发来一句语音:“你好,是林望舒先生吗?你未婚妻在我们这里,想见她的话,一个人来。”
林望舒盯着这条消息看了半天。他黑内网的事暴露了?还是他转账三千八的“客户”身份被标记了?他回了一句:“你们要多少钱?”
对方发了个定位。城郊,废弃物流园。时间:明晚十点。
林望舒把定位转给了市局一个信得过的朋友,附言:“别出警,先帮我盯着,我进去看看。要是我两小时没出来,你们再动。”
第二天晚上九点半,林望舒到了物流园。仓库门开着,里面亮着灯。他走进去,看到一张折叠桌、两把椅子,桌上放着个笔记本电脑。对面坐了个女的,穿黑色卫衣,帽子压得低,但声音一出来他就认出来了。
“你胆子挺大。”沈雾抬起头。
她瘦了,颧骨比以前明显,右耳后面那颗痣还在。眼神跟三年前不一样了,以前她生气的时候眼珠子瞪得圆圆的,现在看人像隔了一层毛玻璃。
“你签的那份协议,”林望舒拉开椅子坐下,“第三条、第四条我都能理解。第五条是什么意思?”
沈雾笑了一下,嘴角弧度跟他记忆里一模一样。“第五条是我让他们加的。我那时候不想跟你过了,但直接分手你肯定天天找我,我走不了。所以让他们写个条款,说‘已解除关系’,白纸黑字,我拿着心里踏实。”
“你拿了三十万跑路,把我一个人扔那儿找你找了三年?”
“你那三年没白找。”沈雾把笔记本电脑转过来,屏幕上是那个内网的后台管理界面,“你刚才黑进去的时候,我在后台看着你。你查文件夹的顺序、你下载的文件、你停留时间最长的页面——你每一步我都盯着。你知道为什么暴露得这么快吗?因为那个内网是我搭的。我是他们技术合伙人。”
林望舒愣了两秒。
“三年前我进去的时候,这公司就是个小作坊,租了个两居室,七八个聊手天天打电话。后来我给他们做了整套自动化工具——聊手用AI生成照片,声纹用模型合成,连话术都是GPT跑出来的。业务量翻了二十倍。”沈雾点了根烟,“但我给自己留了后门。所有聊天记录我本地存了一份,所有转账流水我做了镜像。你今晚拿到的那些东西,我手里有全套备份。”
“你想干什么?”
“他们现在在搞一个新盘子,叫‘AI未婚妻’,专门针对高净值男性,拉长线钓大鱼。我劝过,不听。上个月他们让我加一个‘声纹情绪实时驱动’模块,就是根据聊手打字的语气实时合成语音,连延迟都省了。我拖着没做。”沈雾把烟掐了,“我手里缺一个东西——能证明这些声纹、照片、视频全是伪造的第三方鉴定报告。你写的那套检测框架,我记得你电脑里还有源码。”
林望舒往后靠了靠。“你找我合作?”
“你已经进来了。你黑内网的事儿我压下去了,但他们迟早发现。你现在只有两个选择:要么跟我一起把证据打包交给经侦,顺便把他们的技术链条拆干净;要么我告诉他们你查到了什么,让他们把你当商业间谍处理。”沈雾看着他,“你自己选。”
林望舒沉默了一会儿,问:“那个‘已解除关系’的条款,是你真心话?”
沈雾没回答。她站起来,走到仓库门口,背对着他说:“我声纹模型还在他们服务器上跑着呢。你要是能把我那份模型彻底删干净,我再告诉你真心话。”
林望舒从兜里掏出U盘扔在桌上。“检测报告我早写好了。你那份声纹模型的训练数据里有原始录音,我跑了一遍溯源,发现你最后一条有效样本录于2021年3月14日晚上十一点——你摔门出去之前二十分钟。那天你本来在跟我吵架,但你录给他们的样本内容是‘今天天气不错我好开心’。”
沈雾转过头。
“你的真实情绪和录音内容对不上,模型学出来的是扭曲的声纹,所以那个‘想你了’的语音听起来总有点怪——尾音上扬得太刻意,正常人撒娇不会扬那么高。”林望舒站起来,“你让他们拿假数据训练模型,自己心里也不踏实吧?”
沈雾盯着他看了五秒钟,忽然笑了。“你这个人,查案子比谈恋爱上心多了。”
“废话少说。证据在哪?”
“服务器机房在隔壁楼,地下二层。今晚有人值班,但我有门禁卡。”沈雾拉开抽屉扔了张卡过来,“你去拷数据,我在这盯着后台日志,有人登门禁我通知你。”
林望舒接过卡,走到门口又停住了。“最后一个问题——你当年为什么不直接跟我说清楚?三十万咱俩一块儿挣不行?”
沈雾别过脸去。“那会儿你天天加班,我跟你说话你嗯嗯啊啊应付。我寻思我找个来钱快的路子,干两年攒够首付再跟你摊牌。结果越陷越深,他们不让我走,我也不好意思回来找你。”她声音低下去,“你那个检测脚本里有个漏洞,你自己发现没?”
“哪个?”
“AI合成人脸在‘思念’表情下瞳孔不放大。但真实人类在某些情况下也不放大——比如抑郁症患者、比如吃了某些药的人、比如长期失眠的人。”沈雾看了他一眼,“你写脚本的时候只测了正常人样本,漏了亚健康群体。你要是早点把这个漏洞补上,我当年失眠那么严重,你就能看出来我状态不对了。”
林望舒张了张嘴,没说出话。
他转身出门,去机房拷了二十分钟数据,回来的时候沈雾已经把后台日志清干净了。两个人把证据打包成三个加密压缩包,分别发给了经侦支队、反诈中心和一家媒体。
第二天凌晨五点,警察突袭了“星耀文化传媒”的办公室,带走十一个人。主犯姓周,以前做P2P起家,转型搞情感诈骗,涉案金额初步核算超过六千万。
林望舒坐在派出所做完笔录出来,天刚亮。沈雾在门口台阶上坐着,手里捧着杯豆浆。
“那个‘已解除关系’的条款,”林望舒走过去,“现在还算数吗?”
沈雾把豆浆递给他。“你先把我声纹模型的漏洞补上再说。”
“什么漏洞?”
“你检测报告里说我那条‘想你了’的语音AI合成置信度98.7%,剩下1.3%你归因为什么?”
“噪声干扰。”
“错了。”沈雾站起来,拍了拍裤子上的灰,“那1.3%是因为录音里混进了真人的呼吸声。他们合成的时候把我喝豆浆的声音也录进去了。”
林望舒低头看了眼手里那杯豆浆,又抬头看她。
沈雾已经转身走了,走了两步回头扔了句:“明天晚上还是那个物流园,我把我这三年存的备份全给你。你帮我写个检测工具,我以后用来识别AI男朋友。”
“你要那玩意儿干嘛?”
“重新找个靠谱的。”她摆摆手,消失在晨雾里。
林望舒站在原地,把豆浆喝完,掏出手机给那个检测脚本打了个补丁。注释里加了一行:
注意:长期失眠人群瞳孔基线波动低于常人,检测时需结合睡眠数据交叉验证。该漏洞由前女友提供案例支持,特此鸣谢。
他把代码提交到开源仓库,顺手发了条朋友圈:“深度伪造检测工具V2.3更新。新增失眠人群误判修正。另:本人恢复单身,欢迎介绍对象。条件:瞳孔会放大。”
三分钟后,沈雾在下面评论:“你那个条件写错了,正常人看喜欢的人瞳孔才会放大。你看代码的时候瞳孔也放大,建议改行。”
林望舒没回。他截了个图存进相册,跟三年前那张她摔门出去之前拍的合影放进了同一个文件夹。
文件夹名字叫“证据”。