她走向门口。她的鞋踩在木地板上,每一步都发出清晰的声响。她的手碰到门把时,听见身后传来键盘声。她停下,没有回头。
“你没有锁门。”他说。
她转头。他已经转向萤幕,手指在键盘上移动,像是刚才的对话没有发生过。萤幕的光映在他脸上,平静、专注,和机房里第一次看见他时一模一样。
“备份会在二十四小时内传完。”他没有看她。“门没锁,你想走随时可以走。”
她的手在门把上停了两秒,然后松开。
她没有走回他身边。她站在门边,看著他写程式码。他的手指移动的节奏和机房里一样,每个按键都压到底,稳定、均匀。她看了很久,久到她的视线从他的手指移动到他的肩膀,再从他的肩膀移动到萤幕上。
萤幕上正在写的程式码不是神经压缩,也不是情感模型。是一个新文件,档名她看不清楚。
她走近一步。两步。三步。
她站回刚才的位置,低头看萤幕。他在写一个数据传输脚本,用来把服务器上的备份传到她指定的储存位置。程式码的最后一行写著:
预计传输时间:二十三小时四十一分钟
她没有坐下。她站在他旁边,看著他写完那个脚本,按下储存。他的手指离开键盘,靠在椅背上,抬头看她。
“你不信任我。”他说。不是疑问。
“对。”
“那你为什么留下来?”
她没有回答。她低头看著萤幕上那个传输脚本,看著那行预计时间。二十三小时四十一分钟。在这段时间里,她需要决定要不要把七年心血交给一个她认识不到两小时的人。
她的视线从萤幕移到他的电脑桌面。桌面上的三个图标——终端、文件夹、浏览器。她再次点开那个文件夹,点开她的博士论文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,第九十二行到第一百三十行。”她没有停。“情感向量的定义完全正确,但维度选择有冗余。七维假设是理论最优解,但在工程实践上,五维就够了。你保留了七维,因为你不敢改我的理论。”
他转头看她。这一次他的耳朵不只是泛红,红到了脖子。
“你不敢改我的理论,但你改了我的压缩算法。”她说。“你在机房里说我的压缩逻辑有漏洞,然后你写了神经压缩。你明明有能力改,但你选择不改。为什么?”
他沉默了很久。这次的沉默比之前任何一次都长,长到她能听见自己的心跳在耳膜里撞击。
“因为你的理论是对的。”他说。“七维假设在工程上是冗余的,但在情感上是必要的。就像人类不需要七种基本情绪也能活下去,但没有了那些细微的差异,我们就不算是人。”
她看著他。他的表情没有变化,但他的声音在说到“人”这个字的时候,出现了一个几乎不可察觉的颤抖。
“你不敢改我的理论,不是因为你怕技术失误。”她说。“是因为你怕我。”
他没有否认。
“你怕我觉得你在偷窃。”她继续。“所以你尽可能保留原来的样子,即使你知道可以做得更好。”
他的右手握住了滑鼠,握得很紧,指节泛白。
“你写了七年代码,不敢联系我。你把我的论文致谢加进你的PDF,不敢让我知道。你在机房里帮我备份数据,不敢告诉我你早就做过镜像。”她的声音越来越低。“你到底在怕什么?”
他松开滑鼠。他的手指一根一根张开,像是在放下某种握了很久的东西。
“怕你看著我的时候。”他说。“眼睛里没有光。”
窗外的阳光终于穿透云层,从窗户斜射进来,在他的工作桌上切出一道金色的线。那条线刚好落在他的键盘上,把白色的按键染成暖色。
她没有说话。她转向自己的萤幕,重新打开原始码目录。
“四十八小时。”她说。“我会审完所有程式码。审完之后,我会告诉你我的决定。”
“好。”
她开始阅读。从第一个文件开始,一行一行,一个函数一个函数。她的手指在触控板上滑动,视线在程式码间移动,大脑在每一个逻辑节点上停下来检查、验证、思考。身后的键盘声重新响起,节奏稳定,像是她心跳的背景音。
不知道过了多久,她的手机响了。她昨天把手机留在机房,但她的备用手机在口袋里——她忘了自己带了备用手机。萤幕上显示的号码是公司的总机。
她接起来。
“温以宁女士,这是深源科技人力资源部的正式通知。您的劳动合同已于今日终止,请于三个工作日内办理离职手续。相关文件已发送至您的公司邮箱,请查收。”
她没有说话,挂断电话。萤幕上弹出邮件通知。她点开,附件是一份终止合同书和竞业协议。
竞业协议第四条:乙方(温以宁)自离职之日起两年内,不得从事任何与AI情感计算相关的研究、开发、商业应用工作,无论任职于企业或个人名义。
她盯著那行字看了很久。两年。七百三十天。一万七千五百二十小时。足够她的理论再被引用一千次,足够Echo被完全遗忘,足够八十七万用户找到下一个替代品。
她把手机放在桌上,萤幕朝下。
“怎么了?”他的声音从身后传来。
她没有转头。“公司发了解聘通知。竞业协议,两年内不能做任何AI情感计算相关的工作。”
身后没有键盘声。安静持续了很久,久到她以为他离开了。然后她听见椅子移动的声音,脚步声,他在她旁边停下来。
她抬头看他。他低头看著她的手机萤幕,表情她看不清楚,因为逆光的关系他的脸在阴影中。
“竞业协议的条款,我看看。”他伸出手。
她把萤幕转向他。他弯下腰,视线在萤幕上移动,嘴唇微微抿著。她看见他的眉头皱了一下,然后放松,然后又皱了一下。
“第四条的写法有问题。”他说。
“什么问题?”
“它禁止你从事AI情感计算的‘研发’和‘商业应用’。但没有禁止你参与开源项目。”他抬头看她。“开源项目不算商业应用,也不算是正式的研发工作。它是一个灰色地带。”
“你在说我可以继续写程式码?”
“你在说你可以以开源贡献者的身份,提交程式码到我的项目。这不算‘从事AI情感计算相关工作’,这算是个人技术交流。”
她看著他。他的表情很认真,但她在他眼睛里看见了某种她昨晚没有看见的东西——不是深渊,是光。那种光很微弱,像是远处窗户里透出来的灯,但确实在那里。
“你在帮我找漏洞。”
“我在帮你活下去。”
她低下头,看著萤幕上那份竞业协议。第四条的字体是标准的十二号,黑色,印在白色的纸上。两年。七百三十天。一万七千五百二十小时。
她伸出手,关掉邮件。
“我饿了。”她说。
他愣了一下,然后走向门口。“我去买。”
“不用。”她站起来。“我自己去。你的工作室附近有什么?”
“楼下左转,有一家面店。”
她走向门口,手放在门把上时停下来。她没有转头。
“程司晏。”
“嗯。”
“你的attention_layer.py,第两百零三行的设计,我会用在版本8.0里。”
身后沉默了三秒。
“你不是不能做研发吗?”
“开源贡献不算研发。”她打开门。“我帮你改程式码,你算力支援。合作愉快。”
她走出门,没有回头。走廊的声控灯因为她的脚步声亮起来,昏黄的光线照在磨石子地上。她下楼,推开公寓的大门,走进阳光里。
秋天的阳光不烈,照在皮肤上有温暖的重量。她站在人行道上,闭上眼睛,感觉光线穿过眼皮变成橘红色。口袋里的硬碟贴著大腿,透过布料传来冰凉的触感。
她张开眼睛,走进面店。点了一碗阳春面,不加肉燥,不加葱花。老板问她要不要加卤蛋,她说不用。
面端上来的时候,她拿起筷子,发现自己的手在抖。不是疲劳,是某种她不知道该怎么命名的东西。她把筷子放下,等了三秒,再拿起来。手不抖了。
她吃完面,付了钱,走出面店。阳光还在,云散了一些,天空露出浅蓝色。她抬头看三楼的窗户,窗帘是拉开的,但她看不见里面。
她走回公寓,上楼。门没有关,留了一条缝。
她推开门,程司晏坐在他的工作桌前,萤幕上开著程式码编辑器。他听见声音转头看她,视线在她的脸上停了一秒,然后回到萤幕上。
“吃饱了?”
“嗯。”
她走回自己的工作桌,坐下。萤幕还停留在刚才的页面,echo_lite的原始码目录。她的手指放在键盘上,没有动。
“你的情感标签层。”他没有看她。“版本1.0到7.0,你打算用哪个版本整合进我的架构?”
她想了想。“7.0。但需要修改。你的架构比我的实验室环境更高效,我可以把情感维度从七维扩充到九维。”
他转头看她。“九维?你的论文里说七维是上限。”
“那是七年前的论文。”她打开终端,开始建立新的工作目录。“七年可以改变很多事。”
她在目录名称那一栏输入:/echo_memory/。
他看见那个名称,没有说话。她感觉到他的视线在她的萤幕上停留了几秒,然后移开。身后的键盘声重新响起,节奏比之前快了一点。
她的手指开始在键盘上移动。第一行程式码,import numpy as np。第二行,import torch。第三行,她停了一下,然后输入:
Echo Memory - 基于温以宁(2017)情感计算理论,程司晏(2019-2024)工程架构
记忆不是储存,是重建。
她没有回头看他。但她知道他在看。因为身后键盘声在那一刻停了一秒,然后重新响起,节奏比之前更快、更稳。
窗外的阳光继续移动,从她的桌面移到他的桌面,再从他的桌面移到书架上的硬碟上。那些硬碟的黑色外壳在光线中反光,像是某种等待被开启的容器。
她的手机在桌上震动了一下。她没有看。她知道那是什么——公司的正式解聘通知,竞业协议,两年的禁令。但她现在不关心这些。
她的手指在键盘上没有停。
温以宁在萤幕前坐了很久。她的手指放在键盘上,但没有敲击。萤幕上开著那个新的工作目录——/echo_memory/——底下只有三行程式码。三行。一个小时的成果。
她的视线停在竞业协议的邮件上。萤幕分成两个视窗,左边是程式码,右边是那份PDF。第四条的黑色字体在白色的背景上格外清晰,像是用刀刻进去的。
身后传来键盘声,稳定、均匀,没有因为她的停顿而改变节奏。程司晏在写程式码,从她吃完面回来到现在,他没有问她任何问题,没有催促,甚至没有转头看她。他只是坐在那里,偶尔喝一口已经凉掉的咖啡,手指持续移动。
她的视线从萤幕移到窗外。太阳已经偏西,光线从金色变成橘红,在书架的硬碟上拉出长长的影子。她记得外婆也有这样的习惯——在傍晚时分坐在客厅里,什么话都不说,只是看著光线在墙上移动。她小时候不懂那有什么好看,现在她懂了。看著光线移动,比看著萤幕上不能写的程式码容易。
她的手从键盘上移开,放在膝盖上。右手无意识地摸到口袋里的硬碟,黑色外壳被体温捂热了,不再冰凉。
“程司晏。”她说。
键盘声停了。“嗯。”
“你说竞业协议有漏洞。”
她听见椅子移动的声音。他走过来,手里拿著笔记型电脑,在她旁边坐下。他没有把电脑放在她的桌上,而是放在自己膝盖上,萤幕转向她这一侧。
“第四条。”他打开那份PDF,手指在触控板上滑动,停在关键段落。“‘乙方不得在中华人民共和国境内从事任何与AI情感计算相关的研究、开发、商业应用工作。’”
“我看到了。”
“但这里没有定义‘从事’的范围。”他继续往下滑。“第六条补充说明了‘从事’的定义——‘指以雇佣、顾问、合伙、独资等商业形式参与相关活动’。”
她读完第六条,然后重新读了一遍。
“你的意思是——”
“开源贡献不算。”他说。“你不是以雇佣关系参与,不是顾问,不是合伙。你是以个人身份提交程式码到一个开源项目。这在法律上属于言论自由和学术交流的范畴。”
她看著他。他的表情很认真,眉头微皱,嘴唇微微抿著——那是一个正在进行逻辑推演的人会有的表情。
“你确定?”
“不确定。”他没有回避。“这是一个灰色地带。如果公司要告你,他们可以主张开源贡献属于‘以个人名义从事研发工作’。但诉讼成本高,举证困难,而且会引发公关危机。一个科技公司起诉研究员参与开源项目,这在新闻上不好看。”
“所以你的意思是,他们可能不会告?”
“他们可能不会告。但如果他们告了,你有可能输。”
她低下头,看著自己的手。她的手指交叉在一起,拇指互相绕著圈。那是她紧张时的习惯动作,她自己知道,但控制不了。
“这不是一个安全的方案。”
“没有安全的方案。”他的声音平静。“你的项目已经被终止了,你被解聘了,竞业协议绑住你两年。安全的路是找一份不相干的工作,等两年过去。但那条路会让你的七年心血变成硬碟里的一堆档案,永远不会被执行。”
她抬头看他。他正看著她,眼睛里没有怜悯,没有鼓励,只是一种她无法命名的专注。
“你希望我选择不安全的路。”
“我希望你选择你的路。”他说。“不管那是什么。”
她沉默了很久。窗外的光线继续移动,橘红色变成紫灰色,书架上的影子拉得更长,几乎要碰到地面。她想起外婆在傍晚时分说的话——“天黑了就开灯,没什么好怕的。”外婆总是这样,把复杂的事情说得很简单。天黑了开灯,饿了吃饭,想做的事就去做。
“你的开源项目。”她说。“如果我以开源贡献者的身份提交程式码,我的模型会变成怎样?”
“任何人都可以下载、使用、修改。”
“包括商业公司?”
“包括商业公司。开源协议是MIT,没有任何使用限制。”
她的手指停止了绕圈。“那我的七年心血就免费了。”
“对。”
“任何人都可以拿去做产品卖钱?”
“对。”
她站起来,走向窗边。窗外的街道已经亮起路灯,橘黄色的光晕在暮色中显得温暖。楼下有人在遛狗,狗绳是红色的,狗是白色的,小型犬,走得很快,拖著主人往前。她看著那只狗消失在转角,视线停在空荡荡的人行道上。
“你知道我为什么做Echo吗?”她没有转头。
身后沉默了三秒。“你的论文致谢里写了。为了你的外婆。”