她走向门口。她的鞋踩在木地板上,每一步都发出清晰的声响。她的手碰到门把时,听见身后传来键盘声。她停下,没有回头。
“你没有锁门。”他说。
她转头。他已经转向萤幕,手指在键盘上移动,像是刚才的对话没有发生过。萤幕的光映在他脸上,平静、专注,和机房里第一次看见他时一模一样。
“备份会在二十四小时内传完。”他没有看她。“门没锁,你想走随时可以走。”
她的手在门把上停了两秒,然后松开。
她没有走回他身边。她站在门边,看著他写程式码。他的手指移动的节奏和机房里一样,每个按键都压到底,稳定、均匀。她看了很久,久到她的视线从他的手指移动到他的肩膀,再从他的肩膀移动到萤幕上。
萤幕上正在写的程式码不是神经压缩,也不是情感模型。是一个新文件,档名她看不清楚。
她走近一步。两步。三步。
她站回刚才的位置,低头看萤幕。他在写一个数据传输脚本,用来把服务器上的备份传到她指定的储存位置。程式码的最后一行写著:
预计传输时间:二十三小时四十一分钟
她没有坐下。她站在他旁边,看著他写完那个脚本,按下储存。他的手指离开键盘,靠在椅背上,抬头看她。
“你不信任我。”他说。不是疑问。
“对。”
“那你为什么留下来?”
她没有回答。她低头看著萤幕上那个传输脚本,看著那行预计时间。二十三小时四十一分钟。在这段时间里,她需要决定要不要把七年心血交给一个她认识不到两小时的人。
她的视线从萤幕移到他的电脑桌面。桌面上的三个图标——终端、文件夹、浏览器。她再次点开那个文件夹,点开她的博士论文PDF。
论文的第一页是摘要。第二页是目录。她快速往下拉,拉到最后一页。致谢。
她读过自己的致谢无数次。但此刻她看见的不是自己的版本。这份PDF是她的论文,但致谢页的最后多了一段话,用灰色字体标注,显然是后加上去的。
“感谢温以宁教授。你的程式码注释让我第一次知道,技术可以承载情感。你的存在让我相信,这个世界上有人能写出温柔的代码。”
她的手指停在触控板上。
她转头看他。他的视线落在键盘上,没有看她。她注意到他的耳朵边缘有一点红——不明显,但在萤幕光的照射下无所遁形。
“你写过我的论文?”她问。
他伸出手,关掉萤幕。桌面上的光消失了,工作室陷入只有窗外路灯的昏暗。
“不是写过。”他的声音在黑暗中听起来更低。“是还在写。写了七年。”
窗外的路灯在他脸上投下橘黄色的光,她看见他的表情——不是机房里的平静,不是车上的从容。是一种她从未在任何人的脸上见过的东西。像是某种被她撞见的秘密,但他没有掩藏,只是安静地让它被看见。
她的手机不在身上。她的背包在机房。她的七年心血在一个陌生人的服务器里。而此刻她站在一个写了她的论文七年的男人的工作室里,窗外是凌晨两点的城市,桌上萤幕的电源灯一闪一闪,像是某种等待的信号。
“为什么不联系我?”她问。
他没有回答。他站起来,从书架上拿了一颗外接硬碟,放在桌上。
“传输已经开始了。”他说。“你需要什么时候拿到数据?”
“明天。”
“好。”
她看著那颗硬碟。黑色的外壳,没有任何标签。里面装著她七年的一切——三十七个版本的模型、1.2PB的数据、每一行程式码、每一次失败的实验纪录。全部在他手上。
“你说的审查程式码。”她说。“审查什么?”
他从桌上拿起一个随身碟,递给她。“整个Echo·lite的原始码。我想知道,我的实现有没有背叛你的理论。”
她接过随身碟。金属外壳还留著他掌心的温度。
“如果我审查后发现背叛了呢?”
“那你可以带著你的数据离开。我不会留你。”
她握紧随身碟,金属的边缘压进她的掌心。
“我需要一台电脑。”
他指向中间的工作桌。“那台是你的。”
她走过去,坐下,插入随身碟。萤幕亮起,文件目录弹出来。几千个文件,几十万行程式码,七年份的思念。
她点开第一个文件,开始阅读。
身后传来他打开萤幕的声音,键盘声重新响起。两个人的节奏再次交错——她的停顿较多,他的稳定如常。窗外的路灯在某一刻熄灭,天快亮了。但她没有注意到。她的视线固定在屏幕上,一行一行读著一个陌生人用七年时间为她写的情书。
温以宁醒来时,萤幕上的时钟显示凌晨五点四十四分。她的脸贴在工作桌上,键盘的痕迹压在右颊上,留下一排浅浅的印记。她撑起身体,颈椎发出细碎的声响,视线模糊了几秒才重新聚焦。
萤幕上还开著echo_lite的原始码。她记得自己读到attention_layer.py的第两百零三行,然后意识就中断了。她的手指移动到触控板上,滚动页面,找到昨晚最后读到的地方。程式码还在,她的记忆也没有遗漏——她记得每一行,记得每一个函数的逻辑,记得他在注意力机制的设计里埋的那个彩蛋。
她昨晚发现了那个彩蛋。在attention_layer.py的注释区块里,他写了一段被她跳过的文字,直到她读第三遍时才注意到。那段注释不是技术说明,是一串日期——2017.03.14、2018.03.14、2019.03.14,一直列到2023.03.14。每一串日期旁边都有一个版本号,从0.1到6.3。七年,七个版本,都在同一天更新。
三月十四号。她的生日。
她没有删除那段注释。她关掉文件,继续读下一个。
现在她转头看向左边的工作桌。程司晏不在。他的笔记型电脑阖著,椅子推回桌面下,整齐得像是从来没有人坐过。桌上只有一个马克杯,里面有残留的咖啡,表面结了一层薄薄的膜。
她站起来,膝盖因为长时间弯曲发出抗议。工作室的光线比昨晚明亮,窗外的天空是浅灰色的,云层很低。她走向窗边,看见楼下的街道已经有早餐店的铁门声和摩托车的引擎声。她不知道现在几点,她的手机还在公司的机房里。
身后传来门锁转动的声音。
程司晏走进来,手里提著一个塑胶袋。他换了衣服——昨晚的衬衫变成深灰色的棉质上衣,领口有些松,露出锁骨的线条。他的头发没有整理,前额的发丝垂下来,遮住一部分眉骨。他看见她站在窗边,脚步顿了不到一秒,然后走向工作桌。
“早餐。”他把塑胶袋放在桌上。“豆浆和饭团,不知道你吃不吃的习惯。”
她没有移动。他没有催促,从袋子里拿出自己的那份,打开笔记型电脑。萤幕亮起时,他的脸被光线照出一种疲惫的苍白,但手指放在键盘上的姿势和昨晚一样稳定。
“你没睡。”她说。
“睡了两小时。”
“在哪里睡?”
“沙发。”
她看向房间角落的黑色沙发。沙发上有一条折叠整齐的毯子,枕头的位置有轻微的凹陷。她走回工作桌,坐下,打开塑胶袋。饭团还是温的,豆浆的杯壁凝结了水珠。她咬了一口饭团,发现里面加了她不吃的肉松,但她没有挑出来,一口一口吃完。
“你的项目。”她说,咽下最后一口豆浆。“活跃用户多少?”
他抬起头看她。“八十七万。”
“八十七万?”她的手指停在豆浆杯上。“全部基于我的论文?”
“基于你的论文第四章。”他纠正。“但大部分用户不知道。他们只知道这是一个能好好说话的AI。”
她放下豆浆杯。“你的应用叫什么?”
他没有回答,转向萤幕,敲了几下键盘。他的萤幕转向她——浏览器打开了一个网页,页面很简洁,白色背景,中央有一个对话框,对话框上方写著一行字:Echo·lite — 说你想说的。
网页右上角显示一个数字:871,342。即时活跃用户。
她的视线从那个数字移到对话框。对话框里有一段预设文字:“你好,我是Echo。今天想聊什么?”
“我写这个的时候。”他的声音从萤幕后面传来。“想的不是做产品。只是想证明你的理论是对的。”
“证明给谁看?”
“证明给所有人看。”他停了一下。“也证明给你看。”
她没有回应。她点开网页的关于页面,里面有一段文字,没有署名。
“Echo是一个开源的情感对话项目。它的核心信念很简单:AI不该只是更快的计算器,它应该成为人类情感的容器。这个项目基于温以宁教授的情感计算理论,她的研究证明了情感可以被编程,但无法被算法穷尽。这不是矛盾,这是人性。”
她读完那段文字,关掉浏览器。
“你需要我审查多少程式码?”
“全部。”
“全部是几行程式码?”
“二十三万行。”
“你希望我在多久内看完?”
“二十四小时。”
她转头看他。他正看著她,表情平静,但她注意到他的右手手指又在膝盖上轻轻敲了两下。
“你昨晚说合作。具体怎么合作?”
“你把你的情感模型整合进我的架构。我提供算力和工程支持。项目开源,不收费,不商业化。你的名字挂在第一作者。”
“你得到什么?”
“你的模型。”他回答得太快,像是早就准备好这个答案。“没有你的模型,我的应用只能做到模仿。有了你的模型,它可以真正理解。”
她看著他。他没有回避她的视线,但她注意到他说话时喉结动了一下——一个细微的、不受控制的动作。
“你怕什么?”她问。
他的手指停止了敲击。“什么?”
“你刚才说那些话的时候,喉结动了。人在说出让自己不安的话时会这样。”
他沉默了三秒。三秒里他的视线没有离开她,但她看见他的眼睛深处有什么东西在移动,像是水面下的暗流。
“我怕你拒绝。”他说。
“为什么怕?”
“因为我需要你的认可。”
“认可什么?”
“认可我没有把你的理论变成垃圾。”
工作室里安静下来。窗外传来早餐店的铁门声,有人在外面喊“豆浆两杯”,脚踏车的铃声由远而近。这些声音像是从另一个世界传来的,和他们所在的这个空间隔著一层看不见的膜。
她转向萤幕,重新打开echo_lite的原始码目录。
“二十四小时不够。”她说。“给我四十八小时。”
他没有说好,也没有说不好。她听见他站起来的声音,脚步声走向书架,然后是硬碟被移动的细微声响。
他走回来,把一颗外接硬碟放在她桌上。“这是你的情感标签层备份。全部七个版本。”
她看著那颗硬碟。黑色外壳,没有任何标签。她的七年,她的三十七个版本,她的每一次崩溃和每一次突破,都在这颗小小的装置里。
“你不留备份?”
“不留。”
“为什么?”
“因为你说了不信任我。”他坐回自己的位置,打开笔记型电脑。“信任需要从某个地方开始。”
她的手指放在硬碟上,金属外壳冰凉,和昨晚那颗随身碟的温度完全不同。她把硬碟放进口袋,拉上拉链。
“你的attention_layer.py,第两百零三行。”她说。
他的手指在键盘上方停住。“怎么了?”
“你用了情感转折点的注意力机制。这个想法比我的版本好。”
他没有说话。她看见他的耳朵边缘开始泛红,从耳垂蔓延到耳尖,像是某种缓慢的显影过程。
“但第两百一十七行的权重初始化有问题。”她继续说。“你用均匀分布初始化注意力权重,会导致模型在训练初期过度关注非情感特征。应该用截断正态分布。”
他转向萤幕,打开那个文件。他的视线快速扫过第两百一十七行,然后停下来。
“你是对的。”他说。他的声音比刚才低了一点。
“你的emotion_vector.py,第九十二行到第一百三十行。”她没有停。“情感向量的定义完全正确,但维度选择有冗余。七维假设是理论最优解,但在工程实践上,五维就够了。你保留了七维,因为你不敢改我的理论。”