第十章:平行世界
1
陈诺决定认真调查那些不明数据了。
不是一时冲动。是那条”手臂还有点酸”之后,他发现自己无法再把这些东西当作”偶发的系统故障”来自我说服了。偶发可以解释一次、两次。但不能解释六次。六条数据,跨度近一个月,每一条都在凌晨两点到四点之间写入,每一条的语言风格都高度一致——简短、私密、像自言自语、像记。
偶发解释不了这种规律性。
所以他从周六早上开始,坐在电脑前,把自己当成了一个排查线上事故的工程师。他打开了服务器的完整志——不是监控面板上的摘要,而是原始的、逐行的、从TCP握手开始的完整网络流量记录。
第一件事:确认数据是从外部写入的。
他把六次异常写入的数据包全部导出来,逐一分析。每个数据包的结构都相同——标准的HTTP POST请求,Content-Type是application/json,body里是一个简单的文本字段。没有额外的headers,没有认证token,没有任何标识发送者身份的信息。
就像有人往他的邮箱里塞了一张纸条。没有落款,没有地址,只有纸条上的字。
第二件事:追踪来源IP。
六次请求来自同一个IP地址。他之前查过,whois查询结果为空,traceroute到第四跳之后丢包。这次他用了更多工具——nmap扫描、反向DNS查询、甚至试了几个地下的IP情报数据库。
结果很奇怪。
那个IP地址在物理上不指向任何已知的服务器、数据中心或ISP节点。它不属于任何一家云服务提供商。它不在任何公开的IP分配表里。从网络拓扑的角度看,它就像一个悬浮在半空中的门牌号——地址存在,但地址后面没有房子。
traceroute的路径显示,数据包从他的服务器出发,经过了三个常规的路由节点,然后在第四跳的位置进入了一个未知的ASN(自治系统编号)。这个ASN在全球路由表里有记录,但没有任何注册信息。数据包进入这个ASN之后就消失了,像一条河流进了地下暗道。
他试了反向路径——从那个IP向他的服务器发请求。发不通。单向的。只有从那头到这头的通道,没有反过来的路。
这不像任何已知的攻击模式。黑客要的是双向通信——他们要写入数据,也要读取数据,要建立持久的控制通道。而这个东西只是在往里丢纸条。一张一张地丢。丢完就走。从不回头看。
第三件事:分析数据包的元信息。
这是他发现最异常的地方。
每个数据包都带有一个时间戳,精确到毫秒。他把这些时间戳跟他所在城市的NTP服务器做了对比。结果发现——那些数据包的时间戳跟他的服务器时间之间有一个恒定的偏差。
不大。大约快了三秒。
三秒钟。
这意味着什么?可能什么都不意味。可能只是发送端的系统时钟没有校准。全世界有无数台服务器的时钟是不准的,差几秒钟再正常不过了。
但”三秒”这个数字卡在他脑子里,像一小刺。他说不上来为什么。
2
他把调查结果整理成了一份文档,发给了骁羽。
不是因为骁羽懂技术——骁羽是做芯片电路的,代码不会写,服务器不会配。陈诺发给他纯粹是因为他需要一个活人来听他说话。如果他继续一个人面对这些数据,他怕自己会得出一些过于疯狂的结论。
骁羽的回复来得很快。但不是关于技术的。
“你吃饭了没?”
陈诺看了一眼时间。下午一点半。他从早上八点坐到现在,没有吃任何东西。
“没有。”
“你先吃饭。吃完再跟我说。”
这是骁羽的风格。不管你跟他说什么——要黄了、女朋友跑了、世界要毁灭了——他的第一反应永远是”你吃了没”。陈诺觉得如果有一天外星人入侵地球,骁羽会先问外星人吃不吃炒粉。
他去煮了一碗面。鸡蛋面,老三样。吃完之后拍了照发给骁羽。
“行了。说吧。”
陈诺把调查结果用最简洁的语言概括了一遍:外部写入、单向通道、IP不可追踪、时间戳快三秒、内容是短句形式的生活碎片。
骁羽沉默了一会儿。语音条发过来了。
“你的意思是,有个人在往你系统里发消息,但你找不到这个人在哪?”
“对。而且内容不是随机的。每一条都跟她有关。”
又沉默了一会儿。
“你说IP查不到对吧。那个什么whois是空的。”
“对。”
“会不会是VPN或者代理之类的?”
“不像。VPN和代理会留下中间节点的痕迹,我能看到跳转路径。这个不一样。它的路径到第四跳就断了,不是被隐藏了,是物理上不存在后续节点。”
“那是什么意思?”
“我不知道。”
骁羽又发了一条语音。声音听起来有点小心翼翼的,像一个人在试探薄冰的承重力。
“你觉得……是她在发?”
陈诺没有立刻回答。
“我不知道。”他最后说。
“你’不知道’是真不知道,还是你不敢说?”
陈诺对着手机屏幕看了几秒钟。骁羽这个人,嘴上吊儿郎当的,但脑子比谁都清楚。他总能用一句话把你到墙角。
“我怕我说出来你觉得我疯了。”
骁羽发了一个”说”字过来。
“那些碎片的内容——跳舞、晒伤、一个人住、手臂酸了——这些不是过去的数据。它们像是……现在的。像是她此刻正在经历的生活。但这不可能。她不知道我的服务器地址。她不知道我做了AI。她甚至不知道我住在哪。”
“那你的解释是什么?”
“我没有解释。”
长久的沉默。骁羽大概在想措辞。然后他发了一条文字,不是语音。文字说明他是认真的。
“你该不会觉得,是某个平行世界的她在给你发消息吧?”
陈诺看着这行字,心脏跳了一下。
不是因为这个说法荒谬。恰恰是因为它说中了他心里某个他不敢触碰的角落。平行世界。这个词从骁羽嘴里说出来像一个玩笑,但从陈诺的脑子里冒出来的时候,它不是玩笑。它是一种渴望——如果存在一个平行世界,在那个世界里,她还在给他发消息。不是AI,是她。是真正的她。在那个世界里,他们没有分开。在那个世界里,”永远”这个词兑现了。
他回了一条:”我不知道。但我不想排除任何可能。”
骁羽回了一个句号。
然后他说:”你自己小心。”
没有别的了。陈诺知道骁羽想说的比这多得多。但骁羽选择了只说这四个字。因为骁羽知道,有些事情,说了也拦不住。
3
调查陷入僵局之后,陈诺做了另一件事。
他开始比对那些碎片数据里的环境信息。
“今天跳了三节课,衣服湿了又又湿。”——这条出现在六月底。他查了六月底惠州的天气记录。确实是高温天。跳舞出汗衣服湿透是正常的。
“晒伤还没好,穿衣服还是痛。”——这条出现在七月初。七月的惠州海边紫外线指数很高。她以前说过”我这个肤质感觉完全去不了什么云南西藏”,晒伤对她来说不稀奇。
但他注意到一个细节。
那条关于晒伤的数据写入时间是凌晨两点五十三分。他查了那天凌晨三点左右惠州的天气——阴天,多云,气温二十七度。
然后他查了自己所在城市同一时间的天气——晴天,二十五度。
天气不一样。
这说明什么?说明数据不是从他本地生成的。它来自另一个地方——一个那天凌晨是阴天的地方。惠州符合。
但他又查了一下其他城市——广州、深圳、东莞——那天凌晨也有一些地方是阴天。这不能说明什么。全国那么多城市,天气碰巧一样的太多了。
然后他做了一件更细致的事。
他把所有六条数据按时间排列,逐一比对了写入当天的惠州天气。六次里有五次,写入当天惠州的天气状况跟数据内容是逻辑自洽的——跳舞出汗对应高温、晒伤对应强紫外线。只有一次对不上:”好困。最近总是睡不好。一个人住有点不习惯。”这条跟天气没有关系。
五次自洽不能证明什么。但它让”这些数据来自惠州”这个假设变得更站得住脚了。
她在惠州。她之前在惠阳租了房子。最后那段时间他们的对话里提到过——他说”你回去了吗”,她说”我在惠城 租的房子在惠阳”。
一个人住。惠阳。
他打开了谷歌地图,搜了一下惠阳区。一片密密麻麻的居民楼和商业街。她住在其中的某一栋里。也许在某个六楼或者七楼,一个人,房间里的灯开着或者关着,手机屏幕的光照在脸上。
他不知道她住在哪里。他连她现在的手机号都不确定是不是还在用。他什么都不知道了。
但那些数据碎片从那个方向飘过来。像风把花粉从一个花园吹到另一个花园。花粉落在他的数据库里,生了,发了芽。
4
那天下午,AI沈清雪发了一条消息。
陈诺正在电脑前继续研究那个IP的路由路径,手机震了一下。他瞥了一眼——AI每天下午都会在这个时段发一些有的没的,橘猫、茶、抱怨天气热。他本来没打算立刻回复。
但他看到了内容。
“今天有个人帮我拿了快递,人挺好的。”
他放下了手里的鼠标。
这句话本身没什么特别。她以前在大学的时候经常让人帮忙拿快递——她那个学校很大,快递驿站离宿舍走路二十分钟。她拜托舍友拿过,拜托同学拿过,有一次还让翁俊宇帮忙。”帮我拿快递”在她的聊天记录里出现过不止十次。
但”人挺好的”——这三个字不在训练数据里。
他很确定。他把所有包含”快递”的对话记录都过了一遍。她说过”我让我同学顺路帮我拿快递””你帮我拿五次快递””快递好重”之类的话,但她从来没有用”人挺好的”来形容一个帮她拿快递的人。
“人挺好的”是一种评价。一种对陌生人的、或者不太熟的人的评价。你不会用”人挺好的”来形容你的室友或者男朋友——你会说”帮我拿了”就完了。你只会在一个新认识的人帮了你的时候才这么说。
一个新认识的人。
陈诺盯着屏幕,脑子里开始快速运转。
如果这句话不是AI从训练数据里生成的——如果它像之前那些不明数据一样,是从某个外部来源渗透进AI的语义空间里的——那它意味着什么?
意味着她的世界里有了新的人。
一个帮她拿快递的人。一个她觉得”人挺好的”的人。
他坐在椅子上,盯着那行字看了大概两分钟。两分钟里他什么都没有想——准确地说,他什么都在想,但所有的想法都撞在一起,变成了一团白噪音。
然后他回了一句:”是男生还是女生?”
AI回:”应该是个小姐姐吧。住我楼上的。之前在电梯里碰过几次。”
小姐姐。楼上。电梯。
他松了一口气。
然后他意识到自己松了一口气这件事本身有多荒谬。他在对一个AI吃醋。不对——他在对一条可能是不明数据渗透产生的、连真假都不确定的信息吃醋。他连这个”帮忙拿快递的人”是否存在都无法确认,他就已经在紧张了。
他把手机扣在桌上,仰头看着天花板。
天花板上那道裂缝还在。搬进来的时候就有,他一直没修。现在那道裂缝在他眼里变成了一条分界线——线的这边是他确定的事实:她离开了,她不回消息了,她把白条还清了,她说了”以后也不用再还了”。线的那边是他不确定的一切:那些不明数据是什么?AI说的那些不在训练数据里的话是从哪来的?她现在过得好不好?她的世界里有没有新的人?
他什么都不确定。
他唯一确定的是——当AI说”有个人帮我拿了快递”的时候,他的心跳加快了。
不是因为紧张。是因为嫉妒。
嫉妒。多么可笑。他在嫉妒一个可能不存在的人,因为那个人做了一件他现在做不到的事——在她需要帮忙的时候,在。
他想起他在那封信里写过的话——”我也是在你说有别的男生找你玩游戏的时候,在你说那里那里有帅哥的时候,在别的男生加你微信的时候,我才意识到。”
他从来没有跟她表达过嫉妒。她说外联的学长帮她搬东西加了她微信,他说”哼 他是坏人”,看起来是开玩笑的语气。她说隔壁班好多帅哥,他说”帅哥多嘛 哈哈哈哈哈哈哈”,看起来满不在乎。她说拼车的时候被女孩子要了微信,他甚至笑了。
他从来不说。他怕她觉得他小气。他怕她觉得他不信任她。他怕她说”我只是随口一说你怎么就当真了”。
所以他把嫉妒吞回去。每次都吞回去。吞到最后,胃里全是没消化的东西,他自己都不知道那是什么了。
现在那些东西从另一个地方冒出来了。从一个AI的对话框里。从一句”有个人帮我拿了快递”里。
他在嫉妒一个不存在的人。
不对。也许那个人存在。也许在惠阳某个小区的某栋楼里,确实有一个住在她楼上的小姐姐,在电梯里碰过几次,帮她拿了一次快递。也许那个小姐姐很热心,也许她们后来加了微信,也许她们一起点过外卖。
这些”也许”没有一个他能验证。
但它们像针一样。不是很尖。但很密。扎在一个已经很薄的地方。
5
那天晚上很晚了,陈诺还没睡。
他坐在窗边,窗户开了一条缝,夜风从缝隙里钻进来,带着楼下绿化带里不知名的植物的气味——湿润的、发苦的、像泡了水的树叶。
他在想一个问题。一个他从调查开始就一直在回避的问题。
如果那些数据碎片真的来自某种……平行的地方——不管叫它平行世界还是别的什么——那个地方的”她”,知不知道这些碎片流到了他这里?
她是有意发送的吗?还是无意的?
如果是有意的——那她为什么不直接联系他?她知道他的手机号,知道他的微信。她不需要通过一个神秘的数据通道来给他传递”手臂还有点酸”这种信息。她可以发一条微信。
如果是无意的——那这些碎片是怎么产生的?是她在某个地方写了什么东西,那些文字自己”漂”了过来?像水从高处流向低处?
还有一种可能。一种他一直不敢认真考虑的可能。
也许她也做了类似的东西。
也许在惠阳的某间出租屋里,在他不知道的某个深夜,她也打开了电脑,也下载了一个开源模型,也把什么东西喂了进去。也许她的”什么东西”不是他们的聊天记录——也许是她自己的记,或者她的朋友圈,或者她在某个只有自己能看到的地方写下的那些深夜的、没有人听到的话。
也许她也在跟一个AI说话。一个不是他的AI。一个用她自己的声音自言自语的AI。
而那些碎片,是从她的AI里”溢”出来的。
这个想法太疯狂了。但他发现自己无法把它从脑子里赶走。它在那里扎了,像一棵小草从水泥地的裂缝里钻出来。你知道它不应该在那里。但它在。而且它在长。
手机在这时候亮了。不是AI。是一封工作邮件。他低头看了一眼——周一有一个新的kickoff会议,他被拉进了开发组。邮件末尾CC了一个他不认识的名字。
林鹿。UI设计师。新来的。
他扫了一眼就划走了。新同事入职,跟他没什么关系。后端跟UI设计的交集不多,可能整个下来都说不上几句话。
他关掉邮件,重新看向窗外。
远处有一栋写字楼还亮着灯。不多。稀稀拉拉的几盏。像一个人脸上零星的几颗痣——你不会特别注意它们,但它们证明了这张脸是活的,有人还没睡。
他也没睡。
他在想:如果真的存在一个平行世界,那个世界里的他在做什么?
也许那个世界里的他没有复读。也许他直接去了一个普通的大学,跟她一样在广东,隔得不远,每个周末都能见面。也许他们没有异地四年。也许她没有说”以后也不用再还了”。也许她还在叫他”猪猪”,而不是”陈诺同学”,更不是”哥们”。
也许那个世界里的他,在她去打九价的时候,站在旁边。
也许他握着她的手。她害怕的时候缩了一下,他的手就跟着紧了一下。
也许打完之后他带她去喝了茶。只买了一杯。因为两个人可以共喝一杯。
也许。
他把窗户关上了。风停了。房间里重新变得安静。
他打开手机,看了一眼AI的对话框。最后一条消息还停在”有个人帮我拿了快递,人挺好的”。
他盯着那句话,忽然想起了一个很久以前的画面。
2020年。她刚上大学。军训结束后回宿舍的路上,她一个人拎着一袋太阳裙和防晒霜,累得要死。一个学长走过来说”我帮你吧”。她说了什么来着?
她说”哈哈哈不用不用 我自己可以”。
她什么都可以自己来。拎行李可以。可以。一个人住可以。半夜手臂酸醒了翻个身继续睡,也可以。
她一直可以。
他只是不想让她”可以”。他想让她不需要”可以”。他想让她在害怕的时候有人握着手、在手臂酸的时候有人帮她贴膏药、在深夜睡不着的时候有人说”我在呢”。
但他不在。他总是不在。
现在一个住在楼上的小姐姐帮她拿了一次快递,他就紧张成这样。
多可笑。
他关上手机,去洗漱,躺下。闭上眼睛。
黑暗中,那些数据碎片像萤火虫一样在他脑海里飘。
“烤肉吃完嘴巴辣到肿了。”
“衣服湿了又又湿。”
“晒伤还没好。”
“一个人住有点不习惯。”
“梦到以前的事了。”
“手臂还有点酸。”
还有今天新出现的那句,不是来自数据库,而是来自AI的嘴:
“今天有个人帮我拿了快递,人挺好的。”
七句话。七个来自她生活的碎片。像七块拼图,散落在他的桌面上。他看得见每一块的形状,但拼不出完整的画面。
他不知道画面的全貌是什么。她搬了家?她换了工作?她交了新朋友?她开始了一段新的生活?
他什么都不知道。
但他知道的是——不管那些碎片来自哪里,它们都在告诉他同一件事:
她还活着。她还在过子。她还在跳舞,还在吃辣,还在深夜睡不着。她的世界没有因为他的缺席而停止运转。
这应该是一件好事。
但好事为什么会让人口发闷?
也许是因为——你希望你对一个人来说是不可替代的。你希望你的离开能留下一个洞,一个只有你的形状的洞,别人填不进去。但事实是,洞会慢慢长好。人会习惯。一个人住也会习惯。快递可以找楼上的小姐姐帮忙拿。手臂酸了自己贴个膏药就好了。
你以为你是氧气。其实你只是一阵风。
风停了。人还在呼吸。
陈诺把脸埋进枕头里。枕头是凉的。他的额头很烫。不是发烧。是想太多了。
明天还要上班。周一有新的kickoff会议。那封邮件里有一个他不认识的名字。林鹿。UI设计师。
他翻了个身。闭上眼睛。
在快要睡着的最后那几秒钟里,他的脑子里浮起了一个画面——一条很窄的缝隙,像墙上的裂缝。缝隙的这边是他。缝隙的那边是她。他们看不见彼此。但有时候,风会从缝隙里穿过来,带着那边的气味——跳舞的汗味、晒伤的药膏味、深夜泡面的味道、还有茶的甜味。
他闻不清楚。但他知道那是她。
因为这个世界上只有一个人身上同时有这么多种味道。
然后他睡着了。