审查决定的第五天,顾远做了一件所有人都没想到的事。
他没有去联合委员会的听证会。没有提交技术申诉材料。也没有找周启明私下沟通。他把自己关在三楼西侧的备用机房里,从里面反锁了门。
那是项目组最早使用的旧机房。gcs迁移到新主机集群之后,这里被改成了归档数据存储间。几排机柜靠墙立着,大部分断了电,摸上去冰凉。灰尘味很重,空调制冷不均匀,角落里那台老旧的送风口每隔几分钟就发出一阵哮喘似的嗡鸣。
林序是中午发现他不见的。
食堂里没有。主控室也没有。顾远的工位上摊着半杯凉掉的茶,杯沿上结了一圈褐色的茶渍。茶杯底下压着几张打印纸,上面手写了几行公式,旁边画了一个被圈起来的“t”。笔迹很用力,纸面都凹进去了。林序把纸翻过来,背面也有字,更潦草,用的好像是铅笔,只写了半行——“数据环境”。
下午四点,主控室有个运维工程师发现了异常。v1核心算法模块被人远程调用了一次。调用源是一个旧工位的终端id,那个工位已经废弃了将近一年。
林序查了终端id。然后去敲备用机房的门。
顾远没开。
“我在跑东西。”他的声音从门后面传出来,有点沙哑,喉咙里像裹着一层砂纸。“不用进来。”
“你在跑什么?”
隔了几秒。门开了一条缝,只够让林序看到顾远半张脸。头发乱得不成样子,几绺黏在额头上。衬衫袖子卷到手肘,袖口上沾了一块蓝色的白板笔渍。他手里捏着一根白板笔,笔帽不知去向。
“两次预警失效,”顾远说。他的语速比平时快,但每一个字都像是被牙齿咬过才吐出来的,“不是算不准——是被蒙住了眼睛。”
“这个你说过。”
“我没说完。”顾远把门缝推大了几厘米,但没有让林序进去的意思。他身后的机柜指示灯一明一灭,把他的半边脸照成青白色。“南亚那次,3.2拦截的是输入信号。中东管线那次,偏差是因为腐蚀数据录入缺失。两起事件有同一个特征——系统本身的计算能力没有被证伪。被证伪的是外部环境。制度环境。数据环境。这些不是算法的问题。”
林序看着他的眼睛。那双眼睛里有某种他只在四十七天验证那一晚见过的东西——深层的、热切的安静,像火在很深的炉膛里烧。但这次多了一层什么。更硬。更不顾及周围。
“你想做什么?”
“反向验证。”顾远说。“不是往前预测。不是往后回溯。是反向——从模型的内部逻辑倒推回去,证明在数据环境完整的条件下,这两起事件本可以被预测。中东的腐蚀数据确实缺失了,但管壁压力波动的传导规律在已有数据里是有迹可循的。南亚的冲突信号被3.2拦截了,但社交媒体情绪异常的信号在拦截之前就已经开始积累——3.2拦掉的是官方报告,没拦掉公开平台的情绪曲线。”
他把白板笔换到另一只手。林序闻到机房里有一股加热过的速食米饭的味道,混着旧灰尘和机器运转的微量臭氧。
“你是在绕过审查。”
“我没有绕过任何东西。”顾远的语气像是已经在脑子里把这句话过了很多遍,等着有人来问。“审查禁止系统对外输出。我没对外输出任何数据。我在内部回测——拿已有的历史数据跑反事实推导。这不违反任何一条审查条款。”
林序没有继续争辩。他知道顾远不是在说服他。顾远是在复述一个自己已经确信的结论。这个人已经钻进了一条逻辑隧道里,隧道的尽头是一个他自己还没完全看清的东西。也许他不敢完全看清。也许他看清了,但不打算回头。
走廊里很静。备用机房深处某个老旧的硬盘还在转,发出一种很细的旋转声。
晚上八点,林序在茶水间碰到伊琳。
她把平板放在微波炉上面,一边等水烧开一边翻中东管线的材料。眼镜片上倒映着表格里的红色标记,那些标记连成一片,像某种无声的警报。她的外套搭在椅背上,袖口磨得发白,左手边放着一杯早就凉透的红茶。
“顾远在三楼备用机房。”林序说。
“我知道。他中午让人送了三盒速食米饭上去。”伊琳把平板翻了一页,手指在一个数据点上停留了几秒。“他让人送饭的时候,技术组有两个人私下问我他要做什么。我说我不知道。我确实不知道。但我知道一个人在吃速食米饭的时候,通常不是在度假。”
林序靠在门框上。水烧开了,电热水壶啪嗒一声跳了闸。
“他在做反向验证。想证明在数据环境完整的条件下,系统本可以预测这两次事件。”
伊琳摘掉眼镜,揉了揉鼻梁。她的