“你说的备份,是什么时候做的?”她问。
“三天前。”
“三天前终止令还没下达。”
“我知道。”
“那你为什么要做镜像?”
电梯到达一楼,门打开。他没有回答,先走出去。她跟上,穿过空荡荡的大厅。柜台的夜班保全抬头看了他们一眼,视线在程司晏手中的工牌上停了一下,又低下头。温以宁注意到程司晏的工牌是红色的——外部顾问才有红色工牌,正式员工是蓝色。她从没在公司见过他。
大门外的风灌进来,带著初秋夜晚的凉意。她只穿了一件白大褂,里面是薄针织衫,风一吹就透了。她没有缩肩膀,只是把白大褂的扣子扣上一颗。
他的车停在路边,一辆深灰色的轿车,没有贴任何辨识标志。他解锁车门,没有绅士风度地帮她开门,直接坐进驾驶座。她拉开副驾驶的门,坐进去。
车内有淡淡的木质气味,不是芳香剂,更像是某种护手霜残留的味道。中控台上没有任何装饰,连常见的吊饰都没有。她扫了一眼后座——空的,没有背包、文件、甚至没有一瓶水。这辆车干净得像展示间,没有任何生活痕迹。
引擎发动,车子滑入夜色中。
“史丹佛毕业?”她问。
“硕士。”他打方向盘,转进一条她没走过的路。“分布式系统。”
“哪一年?”
“一九年。”
“回国多久?”
“两年。”
“做什么?”
“应用开发。自己的工作室。”
她看著窗外流逝的路灯,计算这些资讯之间的关联性。史丹佛硕士,分布式系统背景,两年前回国,做应用开发,被深源科技请来做安全审计的外部顾问。安全审计需要系统安全背景,分布式系统勉强相关,但不是最直接的领域。方至诚不会无缘无故请一个应用开发者来审计AI项目。
“方至诚找你来的?”
“对。”
“他怎么知道你的?”
“我开发的应用下载量超过五百万,业内有人知道。”
“什么应用?”
“一个开源的情感对话工具。”
她转头看他。他的侧脸在仪表板的光线中轮廓分明,表情没有变化。
“情感对话?”她重复这两个字。这不是一个做分布式系统的人会开发的应用类型。
“对。”他没有进一步解释。
车子在一栋旧公寓前停下。他熄火,下车,她跟著出来。公寓的外墙磁砖是八十年代流行的马赛克拼贴,路灯下看得出褪色的痕迹。大门是老式铁门,他输入密码,门锁发出沈重的机械声。
三楼,没有电梯。楼梯间的灯是声控的,他们的脚步声唤醒一盏又一盏昏黄的灯泡。她在后面跟著,看见他的影子在墙上拉长又缩短,缩短又拉长。
他在三楼左侧的门前停下,钥匙转动两圈,推开门。
工作室比她想像的小。大约二十坪的空间,靠墙放著三张工作桌,桌上各有一台大尺寸显示器。窗边有一排书架,上面没有书,全是硬碟和外接储存设备。空气中有咖啡和电子产品散热混合的气味。
他走向最左边的工作桌,打开显示器。屏幕亮起,桌面干净得只有三个图标——一个终端、一个文件夹、一个浏览器。
“备份在服务器上,我现在可以开始传输。”他坐下,手指放在键盘上。“但在那之前,我需要你帮我做一件事。”
“什么事?”
“帮我审查一段代码。”
她皱眉。“你把我从公司带到这里,就为了审代码?”
“那段代码和你的情感标签层有关。”他没有看她,打开终端,输入一串指令。“我需要确认我的实现没有偏离你的理论。”
屏幕跳出一个文件目录。她走近,看见目录名称——/echo_lite/core/。她的脚步停住了。
Echo。那是她的项目名称。
“这是什么?”
“我开发的开源项目。”他点开目录,里面有数十个文件,全部以.py结尾。“Echo的精简版,基于你的博士论文第四章实现的。”
她没有说话,视线扫过文件名。每一个都是她熟悉的——attention_layer.py、emotion_embedding.py、context_tracker.py。这些文件名和她实验室里的文件几乎一模一样,但程式码是不同的。他的版本更精简,注释更少,但架构完全遵循她论文中的设计。
她拉过旁边的椅子坐下,开始逐行阅读。
第一眼她就发现了差异。她的论文第四章提出了一个理论架构,但从未给出具体实现方式——因为她认为当时的计算资源无法支撑。但这个版本做到了。他用分布式计算的分片技术解决了记忆体瓶颈,用知识蒸馏压缩了模型体积,甚至加入了她后来在版本3.2才想到的情绪混合编码。
她的手指在触控板上滑动,视线跟著程式码移动。每一行都干净、精确,逻辑链条完整得像是被反复打磨过的石头。她读到attention_layer.py的第87行,发现他用了一种她从没想过的注意力机制——不是让AI关注对话中的关键词,而是关注情感转折点。
这个设计比她版本7.0的注意力层更优雅。
“你什么时候写的这些?”
“陆续写的。开始是七年前。”
她的手指停在触控板上。七年。这个数字比她预期的任何数字都大。
“你在史丹佛的时候?”
“对。”他靠在椅背上,声音平静。“读你的论文那年我二十一岁,在交大读大四。那篇论文改变了我对AI的看法。”
她没有回应。她的视线回到屏幕上,继续阅读。但她的大脑已经不在程式码上。她在计算时间线——七年前她刚从MIT毕业,在顶会上发表了那篇论文,然后回国,加入深源科技,开始Echo项目。七年来她以为自己是在孤独地探索一条没人走的路,但此刻她才知道,在世界的另一个角落,有一个人一直在她的理论基础上默默地盖房子。
她翻到下一个文件。emotion_vector.py。打开的瞬间,她看见了一段她无法忽视的程式码——情感向量的定义方式,和她实验室版本3.2完全一致。不是相似,是完全一样。连变数名称都相同。
“你怎么知道版本3.2的向量定义?”她转头看他。“那个版本从未公开过。”
他沉默了两秒。“我猜的。”
“猜的?”
“你的论文第四章提出了情感空间的七维假设。版本3.2的向量定义是那个假设的最优解。任何人沿著同样的逻辑推导,都会得到同样的结果。”
她盯著他。他的表情没有任何心虚的痕迹,但她不确定那是诚实还是经过训练的平静。
她关掉那个文件,打开另一个。context_tracker.py。读到第156行时,她的呼吸停了一瞬。
那是一段注释。不是技术说明,是一行她读过的句子。
“记忆不是储存,是重建。”
这是她外婆说过的话。外婆在她十五岁那年说的话,在她房间里整理旧照片时说的。她从未把这句话写在任何公开场合——没有论文、没有演讲、没有社群媒体。她只在一个地方写过:版本1.0的程式码注释里,那是她回国后写的第一行程式码,旁边用中文写著“外婆说,记忆不是储存,是重建”。
那行程式码从未离开过她的实验室。
“你怎么知道这句话?”她的声音比她想的重。
他看著她,没有回避。“我看过版本1.0的注释。”
“你不可能看过。版本1.0从未公开。”
“你记不记得六年前的顶会,你展示Echo的第一个原型时,现场萤幕投影了你的开发环境?”
她记得。那是她回国后第一次在国际会议上展示Echo,紧张得手心出汗。萤幕投影了她的整个桌面,包括程式码编辑器。她当时只注意到展示效果,没注意旁边的注释栏。
“那天坐在第三排的人,用相机拍下了你的萤幕。”他说。“那个人是我。”
她没有说话。她的脑中浮现一个画面——二十一岁的学生,坐在学术会议的第三排,举著相机对著萤幕,拍下一个他可能永远不会再见到的研究者的程式码注释。然后把那行注释记了六年,写进自己的程式码里。
“你拍了多少?”
“全部。你的萤幕上所有能拍到的程式码。”
“七年来你一直在用那些?”
“不是用。是学习。”他纠正她,语气平静但坚定。“我从没把你的程式码直接复制到我的项目里。你可以逐行比对。”
她不需要比对。她刚才已经读过,每一行都是原创的,但每一行都带著她思想的痕迹。就像一个人听了另一个人的故事,用自己的话重新讲了一遍,讲得更好。
她关掉context_tracker.py,关掉文件目录,萤幕回到桌面。她的视线落在浏览器图标上,然后落在旁边的文件夹上。文件夹的名字是“WYN”。
她的手指悬在触控板上。
“那是什么?”
他没有回答。她点开文件夹。
里面只有一个档案——PDF文件,档名是“WYN_2017_thesis.pdf”。她的博士论文。
“你存了我的论文?”
“我存了所有能找到的你的文章。”
她关掉文件夹,转头看他。他没有闪避她的视线,但她注意到他的右手手指在膝盖上轻轻敲了两下——这是他今晚第一个显示不安的动作。
“程司晏。”她叫他的全名。“你到底想做什么?”
“我说过。帮我审查一段程式码。”
“不是这个。”她的声音低下来。“你备份我的数据,带我来你的工作室,让我看你的项目。你想从我这里得到什么?”
他沉默了很久。工作室里只有电脑风扇的声音,和窗外偶尔传来的车声。他看著她,眼睛里那种递归般的深渊再次出现,一层套著一层,她看不见最底层。
“你的项目被终止了。”他说。“但你的理论不该被终止。我做的这个开源项目,需要你的情感模型才能完整。你的模型需要算力和工程架构才能落地。”
“所以?”
“所以合作。”
“合作。”她重复这个词,语气里没有任何情绪。
“你的情感模型加上我的工程能力,可以做出一个人们真正能用的AI。”
“然后呢?”
“然后你的七年心血不会变成灰烬。”
她看著他。他看著她。工作室的光线比机房柔和,但他的眼睛在这种光线下反而显得更深。她试图在那双眼睛里找到谎言的痕迹——闪烁、游移、过度的真诚——但她只看见一种沈淀下来的东西,像是被时间筛过的沙。
她站起来。
“我不合作。”
他没有动,只是抬头看她。
“为什么?”
“因为我不信任你。”