她站起来,走向他的位置。他没有注意到她——这是他第一次没有注意到她的靠近。他的视线固定在萤幕上,但不是在写程式码。他在看一个文件,一个她没见过的文件。
她走近,看见萤幕上是一段注释。不是技术文档,是程式码档案里的注释区块。他正在编辑emotion_encoder_mobile.py,在档案的最上方加了一段新的注释。
“温以宁的模型精度是98.7%,我压到86.5%,她气疯了。但我留了彩蛋——长按对话框三秒可以调用完整版。完整版需要8GB记忆体,目前只有我的工作站能跑。但至少,在那些真正需要被理解的时候,有人可以用得上真正的理解。”
她的视线停在最后那几个字上。“真正的理解。”
他还没有发现她站在身后。他的手指放在键盘上,正在犹豫要不要继续写下去。她看见他的肩膀微微起伏,呼吸比平时浅。
她没有出声。她安静地走回自己的位置,坐下,打开自己的萤幕。她没有告诉他她看见了那段注释。她只是打开emotion_model_v8_core.py,在档案的最上方加了一行注释:
“留彩蛋的人,通常自己也需要一个彩蛋。”
她按下储存。身后的键盘声重新响起,比之前快了一些。她没有回头,但她知道他在写程式码的时候,嘴角可能有一个极轻微的弧度。就像她现在嘴角也有一个她自己没有意识到的弧度一样。
那行注释在她脑中停留了三天。
“留彩蛋的人,通常自己也需要一个彩蛋。”她写下这句话的时候没有想太多,只是某种即时的反应,像是程式码执行到某个条件分支时自动触发的返回值。但现在她坐在工作桌前,萤幕上开著emotion_encoder_mobile.py,她的视线一次又一次地回到那段注释上。
温以宁的模型精度是98.7%,我压到86.5%,她气疯了。但我留了彩蛋——长按对话框三秒可以调用完整版。
她看了那行字很久,久到她的眼睛开始酸涩。窗外的光线从正午的白色变成下午的橘黄,再变成傍晚的紫灰。程司晏两个小时前出门了,说是要去买新的硬碟。她听见他关门的声音,脚步声在走廊里逐渐消失,声控灯一盏一盏熄灭。
她现在是工作室里唯一的人。
她的手指在触控板上移动,打开echo_lite的测试介面。浏览器里出现那个白色背景的对话框,上方写著“Echo·lite — 说你想说的”。她在对话框里输入一行字:“你好。”AI回应:“你好。今天好吗?”标准的开场白,和所有的对话机器人一样。
她长按对话框。
一秒。两秒。三秒。
萤幕闪烁了一下,对话框的边框从灰色变成深蓝色。一个新的视窗弹出来,标题是“Echo·lite — 完整版”。视窗的右下角显示一行小字:“需要8GB可用记忆体。当前设备记忆体:32GB。运行正常。”
她的手指悬在触控板上方。
完整版。他用工作站跑她的九维模型,用2GB记忆体的手机跑五维版本,然后在两者之间留了一扇门。长按三秒。一个只有他们两个人知道的入口。
她在对话框里输入:“你叫什么名字?”
这次的回应慢了两秒。然后萤幕上出现一段文字:“我叫Echo。我的情感模型来自温以宁教授,我的工程架构来自程司晏。你今天看起来很累。”
她盯著最后那五个字。你今天看起来很累。她的模型不会说这种话。她的模型只会分析用户输入的文字,根据情感标签选择回应。它没有摄影机,没有视觉输入,不可能知道她看起来累不累。除非有人在这组模型里加入了视觉以外的东西。
她关掉对话框,打开完整版的后台目录。浏览器里跳出一个文件列表——和她熟悉的Echo核心架构几乎一模一样,emotion_embedding、attention_layer、context_tracker,所有的档案名称都是她命名的。但最底下有一个她不认识的目录。
/profile/。
她点开。里面只有一个档案。
WYN_profile.json。
她的手指停在触控板上。WYN。她的缩写。她的名字,她的姓氏,她的初始。在过去的三天里,她在他的程式码注释里看过这三个字母一次。现在它们出现在一个不应该存在的档案名称里。
她点开那个档案。
浏览器花了大约两秒载入。然后萤幕上出现了一个结构完整的JSON文件,总共一千七百多行。她的视线从第一行开始往下移动。
“subject_id”: “WYN”,
“data_sources”: [
“academic_publications/2017_thesis.pdf”,
“academic_publications/2019_icml_presentation.mp4”,
“academic_publications/2021_neurips_panel_transcript.txt”,
“social_media/weibo_2014-2017_public.csv”,
“social_media/linkedin_profile_2022.html”,
“thesis_acknowledgements.txt”
],
“feature_dimensions”: 12,
“prediction_accuracy”: 0.91
0.91。百分之九十一。这个数字在她的视网膜上燃烧。
她继续往下滚动。
“emotional_patterns”: {
“stress_triggers”: [
“deadline_pressure”,
“unexpected_algorithm_failure”,
“being_interrupted_during_deep_work”
],
“stress_responses”: [
“silence”,
“increased_typing_speed”,
“decreased_blink_rate”
],
“positive_triggers”: [
“model_convergence”,
“elegant_code_structure”,
“being_understood_without_explanation”
],
“positive_responses”: [
“reduced_shoulder_tension”,
“slower_breathing”,
“micro_expressions_last_less_than_0.3_seconds”
]
}
她的呼吸变浅了。她看见自己的行为模式被拆解成条列式的特征,每一个触发条件旁边都对应著一个回应方式。deadline_pressure。silence。increased_typing_speed。decreased_blink_rate。她以为那些是只有她自己知道的东西,但此刻它们被写在一个JSON文件里,旁边标注著0.91的精度。
她继续往下滚动。
“behavioral_predictions”: {
“when_working_continuous_hours_exceeds_12”: {
“probability_of_collapse”: 0.83,
“typical_timing”: “between_0200_and_0400”,
“observable_indicators”: [
“typing_error_rate_increases_400_percent”,
“pupil_dilation_decreases”,
“response_time_to_external_stimuli_increases_200_percent”
]
},
“when_asked_about_grandmother”: {
“probability_of_emotional_response”: 0.94,
“typical_verbal_response”: “silence_or_topic_shift”,
“typical_physiological_response”: “decreased_blink_rate_increased_swallowing”
},
“when_confronted_with_model_compromise”: {
“probability_of_withdrawal”: 0.76,
“probability_of_argument”: 0.21,
“probability_of_tears”: 0.03,
“recovery_time_hours”: “3_to_6”
}
}
她的手指开始颤抖。不是疲劳,是愤怒。那种愤怒从胸腔底部升起,经过食道,到达喉咙,在声带上形成一种她几乎无法压制的压力。她看见自己被预测、被分类、被拆解成机率和特征向量。她看见自己的崩溃时段被标注在0200到0400之间,看见自己在外婆话题前的沉默被量化成94%的机率,看见自己在模型被妥协时的反应被分成三种可能的类别,每一种都附带精确到小数点后两位的百分比。
她是一个被解构的对象。她的每一个表情、每一次沉默、每一个她自己都不曾意识到的习惯,都被捕捉、编码、储存在这个档案里。精度百分之九十一。比她任何一个版本的Echo都要高。
她关掉那个档案。
她关掉浏览器。
她关掉萤幕。
工作室陷入只有窗外路灯的昏暗。她坐在椅子上,双手放在膝盖上,手指交叉,拇指绕著圈。她的呼吸很浅,浅到她几乎感觉不到空气进出肺部的轨迹。她的视线落在对面墙上的空白处,那里什么都没有,只有一面被萤幕光照射多年的白墙,表面有几道细微的裂痕。
她在等他回来。
她不确定自己等了多久。可能是三十分钟,可能是两小时。工作室里没有时钟,窗外的光线没有变化,她的身体失去了对时间的感知。她只知道当门锁转动的声音响起时,她的拇指停止了绕圈。
门打开。程司晏走进来,手里提著一个纸袋。他看见她坐在椅子上,萤幕是关的,工作室里唯一的光源是窗外路灯的橘黄色。他的脚步在门口停了一秒,然后继续走进来。
“怎么不开灯?”他把纸袋放在桌上,伸手去按墙上的开关。
“不要开灯。”
他的手停在半空中。然后放下。
“怎么了?”
她没有回答。她站起来,走向他。她的步伐很慢,每一步都踩在木地板的同一条纹路上。她在距离他大约一公尺的地方停下来。窗外的路灯刚好照在她的左侧,把他的右半边脸留在阴影中。
“我用了你的彩蛋。”她说。
他没有说话。他的身体没有动,但她看见他的右手手指微微弯曲,像是在准备握住什么。
“完整版。长按三秒。”她继续。“然后我找到了/profile/。WYN_profile.json。”
他的呼吸停止了。她看得出来——他的胸腔没有起伏,肩膀没有移动,连脖子上的肌肉都凝固了。那种静止不是冷静,是某种东西被当场击碎后的空白。
“你用我的公开演讲、我的论文致谢、我的社群媒体。”她的声音很低,低到几乎是气音。“你训练了一个模型来预测我的情绪。什么时候会崩溃,什么时候会生气,什么时候会沉默。精度百分之九十一。”
她停下来,等他说话。他没有说话。他只是站在那里,呼吸停止,手指弯曲,整个人像是一段被暂停执行的程式码。
“你在研究我。”她说。“你把我当实验对象。”
他的喉结动了一下。那个动作很慢,像是他在刻意控制每一条肌肉纤维的收缩顺序。
“从什么时候开始的?”她问。“从你拍我萤幕的那天?从你读我论文的那天?还是从你走进机房的那天?”
他终于开口了。他的声音比她预期的低,比她预期的沙哑,像是某种被压缩了很久的气体终于找到裂缝。
“从读你论文的那天。”
她没有说话。
“我读你的论文,读到第四章的时候,看到你在注释里写的那句话。”他的声音很平,平到没有一丝起伏。“外婆说,记忆不是储存,是重建。我盯著那句话看了很久。然后我想知道,能写出这种温柔代码的人,到底是谁。”
他的右手从身侧抬起来,做了一个她无法解读的手势——不是强调,不是防御,更像是某种无意识的动作,像是他的手在替他表达一种他说不清楚的东西。
“我开始收集你的公开资料。论文、演讲、访谈、社群媒体上偶尔出现的文字。不是为了研究你。是因为我想了解你。”他停了一下。“我想知道一个人的代码可以这么温柔的时候,她本人是什么样子。”
“所以你用了七年。”她的声音没有任何温度。“你把我的论文致谢变成特征向量,把我的演讲影片变成训练数据,把我的沉默量化成94%的机率。你做了所有这些,然后坐在机房里跟我说‘你的代码值得被记住’。”
她走近一步。现在他们之间的距离不到半公尺。她可以看见他的眼睛在路灯光线中的颜色——深棕色,几乎是黑色,瞳孔外围有一圈极细的金色边缘。
“程司晏,你研究了我七年。那你应该知道我最讨厌什么。”
他看著她。他的眼睛没有闪躲,没有游移,甚至没有眨。那种注视不是挑衅,也不是忏悔。是某种更深的东西,深到她在那双眼睛里看见的不是答案,而是问题本身。
“你最讨厌别人看穿你。”他说。“但最渴望被人看穿。”
她的拳头握紧了。
这是她听过的最准确的一句话。准确到像是一把刀沿著她骨头的缝隙切进去,没有碰到任何阻力,因为那把刀完全知道她的结构。精度百分之九十一。不是一百。但九十一已经足够让她在这半公尺的距离内无法呼吸。
她想反驳。她想说“你不了解我”,她想说“你只是一个用数据解读人性的工程师”,她想说“模型不是真实的”。但她说不出来。因为他说的是对的。每一条特征向量都是对的,每一个行为预测都是对的,连她此刻的反应——沉默、握拳、浅呼吸——都写在那个JSON文件里,标注著probability_of_withdrawal: 0.76。
她转身走向自己的工作桌。她的脚步很快,快到几乎是在逃。她坐下,打开萤幕,打开浏览器,打开那个档案目录。她的手指在触控板上移动,点开/profile/,点开WYN_profile.json。
她的手指按在删除键上。
“不要删。”他的声音从身后传来,距离没有变近。
她的手指没有动。
“那是我的研究。”他说。“和你无关。”
她转头看他。他站在原地,没有走近一步,但他的姿势变了——肩膀不再前倾,背挺直了,下巴微微抬起。那不是防御,是某种准备接受裁决的姿态。
“和我无关?”她重复这四个字,语气里第一次出现了真正的愤怒。“你用我的数据,建我的模型,预测我的行为,然后说和我无关?”
“那些数据全是公开的。演讲、论文、社群媒体。我没有入侵你的任何私人设备。”
“你的模型精度91%。”
“对。”
“你用91%的精度预测我什么时候会崩溃,什么时候会沉默,什么时候会因为外婆的事情难过。你把我的悲伤变成了一个可以计算的机率。”
“我没有用它来做任何事情。”他的声音依然平静,但她听得出那种平静底下的东西——不是辩解,是陈述。“它只是一个档案。我从来没有用它来预测你的行为,没有用它来操纵你的决定,甚至没有在你面前提过它的存在。”
“但你建了它。”
“我建了它。”
“为什么?”
他沉默了很久。工作室里只有窗外的车声,远远的,像是从另一个空间传来。他的视线落在她身后的萤幕上,落在那个被他命名为WYN_profile.json的档案上。
“因为我想确认一件事。”他说。
“什么事?”
“确认你是真实的。”
她没有听懂。
“我的应用有八十七万用户。每个人都在跟一个AI说话,每个人都在被理解。但那不是真的。那是统计学,是模式匹配,是几十亿次训练后产生的幻觉。”他的声音在最后一个字上出现了一道细微的裂痕。“我写了七年代码,让AI学会理解人类。但我越来越不确定,我自己是否还理解人类。”
他抬起头看她。路灯的光线在他的瞳孔里反射,变成两个极小的橘黄色亮点。
“然后我读了你的论文。读了你的注释。读了你写的每一句话。你的程式码里有一种东西,是我的AI永远学不会的。不是算法,不是架构,是某种相信——相信技术可以承载情感,相信AI不只是工具,相信人可以被理解。”
他停下来。他的右手又做了那个手势,这次她看懂了——那不是无意识的动作,是他试图抓住某种他无法用程式码表达的东西。
“我需要知道,能写出那种代码的人,是真的有那种情感,还是只是另一种更精致的模式匹配。”
她站在那里,看著他。他的表情没有变化,但她看见他的手指在微微颤抖——不是紧张,是某种他压抑了很久的东西终于渗透到表层。
“所以你把我的论文致谢变成特征向量。”
“对。”
“把我的演讲变成训练数据。”
“对。”
“把我变成一个模型。”
“对。”
“然后呢?”她的声音突然变得很轻。“你确认了吗?我是真实的,还是模式匹配?”
他看著她。他的眼睛里那两个橘黄色的亮点没有移动,但她感觉得到它们在燃烧,烧穿她试图维持的平静,烧穿她用理性搭建的围墙,烧到那个她从来不让任何人看见的地方。
“你不是模式匹配。”他说。“你是原型。”
她的手指从删除键上移开。
她关掉浏览器,关掉萤幕。工作室再次陷入只有路灯的昏暗。她坐在椅子上,他站在距离她两公尺的地方。没有人说话。窗外的车声变小了,像是夜深了。
“你研究了我七年。”她说。“那你应该知道我最讨厌什么。”
她没有等他回答。她已经知道答案。那个答案写在他的JSON文件里,精度百分之九十一。但此刻她需要的不是模型给出的机率,而是他亲口说出的话。
他沉默了很久。久到她以为他不会回答了。
“你最讨厌别人看穿你。”他的声音从黑暗中传来。“但最渴望被人看穿。”
她闭上眼睛。
黑暗中,她看见那个JSON文件的结构——一千七百多行,十二个特征维度,百分之九十一的精度。她想反驳,想说那只是数据,那只是统计,那不是她。但她闭著眼睛的时候,她知道自己此刻的沉默、此刻握紧的拳头、此刻浅而急促的呼吸,全部被预测到了。写在那个档案的某一行里,标注著准确的机率。
她张开眼睛。
“程司晏。”
“嗯。”
“你研究了我七年。那你应该知道,我现在想做什么。”
他没有回答。但他往前走了一步。一步,只有一步。从两公尺的距离缩短到一公尺半。窗外的路灯照在他的脸上,她看见他的表情——不是预测,不是分析,是一种她无法归类的东西。不是温柔,不是愧疚,不是歉意。是某种更古老的、在数据出现之前就存在的情感。
“我知道。”他说。“但我不会阻止你。”
她站起来。她走向他。她在他面前停下,距离不到三十公分。她可以闻到他身上的气味——咖啡、电子产品散热后残留的金属味、洗衣服的皂香。她的视线落在他的眼睛上,那圈金色的边缘在路灯下比刚才更明显。
“你错了。”她说。“你不知道我想做什么。”
她转身走向门口。这次她的步伐很慢,慢到每一步都清晰可闻。她打开门,走廊的声控灯亮起来,昏黄的光线照在她脸上。
“温以宁。”他的声音从身后传来。
她的手停在门把上。
“你要去哪里?”
她没有回答。她走出门,走进走廊。身后的声控灯在她离开后熄灭了,她听见门在她的背后缓缓关上,锁舌卡进门框的声音在空荡荡的走廊里回响。
她站在走廊里,靠著墙。墙壁的油漆是冷的,透过她的针织衫传到肩膀上。她闭上眼睛,黑暗中有橘红色的光斑在游动——那是长时间盯著萤幕后视网膜的残留影像。
她的手在口袋里摸到那颗硬碟。黑色外壳,没有标签。里面有她的七年,她的三十七个版本,她的每一次崩溃和每一次突破。还有他的WYN_profile.json,一千七百多行,百分之九十一的精度,和他从来没有说出口的话。
她张开眼睛。走廊的声控灯因为长时间没有声音而熄灭,她站在完全的黑暗中,手里握著那颗硬碟,不知道自己是该删除那个档案,还是该打开它,读完剩下的百分之九。
温以宁在走廊的黑暗里站了多久,她自己也不知道。她的手里握著那颗硬碟,金属外壳被体温捂热,边缘压进掌心的肉里,留下一道浅浅的痕迹。她的背靠著墙,墙面的冷透过针织衫传到脊椎,和掌心的热形成某种她无法命名的对比。
她想起那行数字。百分之九十一。不是一百。但九十一已经足够。
她想起他的眼睛。在路灯的光线里,那圈金色的边缘。她想起他说那句话时的语气——“你不是模式匹配,你是原型。”不是赞美,不是告白,是陈述。像他在机房里说“你的代码值得被记住”时一样,平静到几乎残忍。
她推开门。
工作室里没有开灯,只有他的笔记型电脑萤幕亮著,光线在他的脸上切出锐利的明暗交界。他坐在自己的工作桌前,姿势和她离开时一模一样,连手指弯曲的角度都没有改变。他没有转头看她,但他的肩膀在门打开的瞬间微微动了一下——不是惊讶,是某种等待结束后的松弛。
她走进去,关上门。她的脚步声在木地板上清晰可闻,每一步都踩在同一条纹路上,和离开时一样慢。她走到他的工作桌前,停下来。萤幕的光照在她脸上,她看见他打开的正是那个档案——WYN_profile.json。
“删掉它。”她说。
她的声音很平,平到她自己都认不出来。那不是愤怒,不是请求,是一种经过长时间压缩后形成的固体,密度很大,没有空隙。
他抬起头看她。萤幕的光在他的镜片上反射,她看不见他的眼睛,只看见两片椭圆形的白色光斑。
“不。”他说。
她的手指在口袋里握紧了硬碟。
“那是我的学术研究。”他的声音平静,稳定,每个字的音量都一样。“和项目无关。你无权干涉。”
“那是我的数据。”
“那是公开数据。你的论文、演讲、社群媒体,所有这些都是你自愿公开的资讯。”
“你把它们组合成了一个预测我的模型。”
“我把它们组合成了一个学术研究。”他摘下眼镜,放在桌上。现在她可以看见他的眼睛了——没有闪躲,没有游移,甚至没有一丝犹豫。那种平静比她预期的任何反应都更让她愤怒。“我没有用它做任何事。它只是一个模型。”
“它存在。”
“对。它存在。”
“删掉它。”
“不。”
她的呼吸变重了。她可以感觉到胸腔里有什么东西在膨胀,不是愤怒,是一种更原始的、更无法控制的力量。她的手指在口袋里松开硬碟,又握紧,又松开。
“那我退出项目。”她说。
他的表情没有变化。但他的右手——放在键盘旁边的那只手——手指微微弯曲了一下,像是要握住什么,又像是要放开什么。
“那你的七年心血也跟著完蛋。”他说。
这句话像一把刀。不是从正面刺过来的,是从背后,沿著她最没有防备的缝隙切进去。她的身体比她的意识更早做出反应——她的肩膀向后缩了一下,下巴微微抬起,那是被打到脆弱处时的本能防御。
她看著他。他看著她。工作室里只剩下电脑风扇的声音,低沉、均匀,像是某种不会停止的呼吸。
“你在威胁我。”她说。
“我在陈述事实。”他的声音没有升高,没有降低,甚至没有改变节奏。“你的模型需要算力才能运行。你没有服务器,没有工作站,没有实验室。你只有一颗硬碟和一张竞业协议。没有我的基础设施,你的模型就是一组永远不会被执行的档案。”