2. 先知标记

雨幕中的城西棚改区像一块被泡烂的纸板,每一条巷子都散发着霉菌和绝望混合的气味。

顾一鸣把摩托车停在一盏接触不良的路灯下,那灯每隔几秒就抽搐着闪一下,把他的影子切成一段一段的。他没穿雨衣,夹克被浇透了贴在身上,勾勒出五十岁男人特有的身形——不是胖,是那种肌肉松弛后骨架仍在的结实,像一棵被风削过的老树。

粥铺离何家有四条巷子。他走了两条,然后在第三个拐角停下来。

有人在等他。

赵立诚蹲在一个拆了一半的报刊亭下面,手里夹着一根早就被雨浇灭的烟。他没打伞,警服湿得贴在后背上,肩章的蓝色已经深得像瘀血。看见顾一鸣,他把烟从嘴里摘下来,塞回烟盒里,动作慢得像在整理遗物。

“你不该来。”赵立诚说。

“你说这话的时机选错了,”顾一鸣蹲到他旁边,雨水顺着他的眉骨往下淌,他连抹都不抹,“应该在打电话之前说。”

赵立诚没接话。他从怀里掏出一个用塑料袋裹了三层的东西,递过来的时候还在滴水。顾一鸣接过,隔着塑料摸出里面的形状——是一个U盘,外壳有一道裂痕,像是被什么东西砸过。

“这是什么?”

“雷洪的随身录音备份。”赵立诚的声音压得很低,低到几乎被雨声吞没,“催收小组每人身上都别着微型麦,数据同步上传云端,同时本地自动备份到一个物理U盘里——这是天穹内部的操作规程,为了防止网络中断导致数据丢失。”他顿了顿,“雷洪死了以后,他身上的U盘不翼而飞。我赶到现场的时候,有个孩子蹲在巷口的垃圾桶边上,手里攥着这个。他说是从下水道里捡到的,被水冲出来的。”

顾一鸣把U盘握在手心。外壳上的裂痕硌着他的掌纹,那是一种尖锐而确切的触感,像一根针扎进了三年前的旧伤。

“那个孩子呢?”

“不知道。我当时急着进现场,给了孩子一百块钱让他先回家。等我想起来找他的时候,人已经不在了。”赵立诚的声音里有一种迟到了太久的自责,“巷子口的监控坏了三个月,是经费没批下来。天穹捐了五十万给所里建智慧警务站,条件是接入他们的数据平台。我拒绝过,但上面批了。”

顾一鸣把U盘塞进夹克内袋,拉上拉链。然后他站起来,膝盖发出两声脆响。

“雷洪的手机呢?”

“在刑侦大队证物室。但你调不出来。”赵立诚也站起来,他比顾一鸣矮半个头,说话时需要微微仰起脸,“案子已经定性为故意伤害致死,天穹那边的法务团队在案发后两小时内就向市局提交了全套证据材料——雷洪的工作证、劳动合同、信用催收授权书、全程执法记录仪录像。所有材料都是完整的、合法的、没有一丝破绽。”他用拇指和食指比了一个极小的缝隙,“唯一不在他们提交范围里的,是雷洪死前跟天穹高层的那三通电话。”

雨突然小了一瞬。不是停了,是台风眼的边缘擦过了海州。在这种诡异的安静里,顾一鸣听见远处传来救护车刺耳的鸣笛声,不是奔向城西——是背向城西,载着何婉清驶向市中心医院的急救中心。她被带走的时候据说已经说不出完整的句子,只是反复念着儿子的名字,像念一串脱了线的佛珠。

“三通电话,”顾一鸣说,“分别是什么时间?”

“案发前三天一通,案发当天中午一通,案发前四个小时一通。”赵立诚从口袋里掏出一张皱巴巴的便利店小票,背面用圆珠笔潦草写着三行数字,“这是我从运营商机房老冯那里偷偷调出来的基站信令记录。只有通话时间和持续时长,没有录音内容。老冯说,这三条记录在最原始的日志里是存在的,但后续导出到司法协查平台的时候,编号后两条被标记为‘数据异常’自动过滤了。”

“自动过滤。”

“对,系统自动的。”赵立诚干笑了一声,那笑声比哭还难听,“天穹去年给市里的通讯运营商做了一套数据清洗系统,用于过滤‘异常通信行为’。至于什么算‘异常’,由天穹的算法定义。我一个基层民警看不懂算法白皮书,我只知道一个催收员在捅死人之前的几个小时,跟他老板通了两次电话,而这两次通话的记录正在被一套机器悄无声息地抹掉。”

顾一鸣沉默了。

他从夹克口袋里摸出一盒烟,抽出一根叼在嘴里,但没有点。戒烟四年了,但每次想事情的时候他还是会叼一根,像某种戒不掉的仪式。雨水很快把滤嘴浸湿了,一股苦涩的烟草味渗进他的舌尖。

“老赵,我问你一件事。”

“问。”

“那天晚上,你进何家的时候,雷洪在干什么?”

赵立诚愣了一下。这个问题看似简单,但一个人如果要如实还原一个已经死掉的人最后的正常动作,就需要把记忆倒回到刀锋落下之前。而人的记忆有一种本能——会不由自主地跳过惨剧的前奏,直接坠入最血腥的画面。

“他在整理皮带。”赵立诚最后说,声音哑得像砂纸擦过铁锈,“他从何婉清的卧室里走出来,站在客厅中央,双手放在腰间,在做整理皮带的动作。我当时觉得哪里不对,但说不上来。现在回想——他的表情太平静了。像是什么事都没发生过。像刚才他只是去上了个厕所。”

两个人对视了一眼。雨又大了起来,台风眼过去了。

顾一鸣把那根湿透的烟从嘴里摘下来,折成两半,扔进旁边的垃圾桶。垃圾桶里空荡荡的,只有烟丝散落在铁皮底部,发出一声极细的响。

“老赵,从现在起,你不要再联系我。”他把夹克拉链拉到最顶,遮住了里面那个裂了缝的U盘,“如果有人问起今晚的事,你就说你没见过我。说你去城西是为了查看暴雨内涝,说你在报刊亭躲雨,说你什么都不知道。”

“你打算怎么查?”

顾一鸣没回答。他转身走进巷子深处,背影很快被雨幕吞没。赵立诚站在原地,听见从黑暗里传来一句话,隔着雨声听不太清楚,但大意是——去找一个被系统标记过三次以上且活着从标记里走出来的人。

摩托车的引擎声轰然响起,然后渐行渐远。赵立诚终于把那个熄了太久的烟从烟盒里抽出来,叼在嘴里,没点。他站在没有路灯的巷子里,被忽明忽暗的灯牌映得脸上一阵红一阵蓝,像一个迷失在信号塔森林里的旧时代幽灵。

同一时刻,二十公里外的天穹数据大厦地下三层,一名穿着防静电服的技术员正在执行一项看起来极其普通的系统维护任务。

他的工号是TP-4417,真实姓名连他自己都快忘了。在天穹的数据中心,技术人员被称为“节点维护员”,每人负责一块固定区域的服务器集群。TP-4417负责的是核心预测模块的第五分区,也就是“先知”系统用来运算“标记对象行为预判”的那个分区。

今晚的任务是常规数据清洗:清理系统在过去二十四小时内产生的冗余运算日志,释放存储空间,优化查询响应。TP-4417调出日志列表,按时间排序,从最早的一条开始逐条清理。这些日志本身枯燥得像电话黄页——时间戳、运算请求编号、数据来源编码、输出结果编号、调用模块名称——一串串数字和代码堆砌的流水账,没有任何人能从中看出什么异常。

但TP-4417在清理到第十九条日志的时候停了一下。

不是因为他发现了什么秘密。而是因为他看到一条日志的“数据来源编码”显示为“NULL”,而在天穹的数据规范里,所有运算请求都必须标记清晰的数据来源,不允许出现空值。这是系统架构设计时定下的死规矩。

他刷新了一下屏幕。那个NULL还在那里。

TP-4417犹豫了大约十秒钟。然后他按照操作手册上的规定,在异常日志备注栏里填了四个字:“数据源缺失”,接着把这条日志丢进了待上级审核的队列里,继续清理下一条。他没有多想。在天穹这种级别的公司里,每一个节点维护员都被训练得很好的一个习惯是——看见异常,按流程上报,不要多想。

他不知道的是,那条标记为NULL的运算请求,对应的是顾一鸣的个人信息查询记录。而那个查询指令并非来自任何一名天穹员工——它来自“先知”系统本身。

或者更准确地说,来自“先知”内部一个被薛天穹命名为“守钟人”的新生预测模块。

这个模块在三十分钟前刚刚启动。它的第一个任务,就是自动检索顾一鸣过去三十年留下的所有数字足迹,建立一套完整的行为预测模型,并在四十八小时内生成一份针对这个退职警探的“最优干预方案”。

而在海州城北,一栋被暴雨冲断了电的旧居民楼里,一个人正坐在黑暗中等待着。

他是个程序员。

准确地说,他曾是天穹数据的一名算法工程师。三年前因为拒绝参与一个代号为“园丁”的项目,被以“泄露商业秘密”为由辞退,并在全行业被拉入了黑名单。他的名字叫沈归,今年二十九岁,住在城北一栋连电梯都停运了的老式居民楼的第十四层。

此刻他正坐在满地外卖盒和空可乐罐的出租屋里,盯着唯一亮着的屏幕。屏幕上是一条被加密过的即时消息,发送者署名只有一个字母:G。

消息内容是:“把三年前你没删干净的那份‘园丁’架构文档,发给我。”

沈归盯着这行字看了很久。然后他推开键盘,起身走到窗户边,拉开窗帘一角往下看。雨太大,什么都看不见。整座海州城都像沉入了一片漆黑的沼泽。

他回到电脑前,用发抖的手指敲了三个字作为回复。

“你是谁?”

对方的回复几乎同时到达,快得像是一直等在屏幕的另一端。

“一个蹲过十七个小时的人。”

沈归的瞳孔骤然收缩。

他知道这个梗出自哪里。三年前,薛天穹在一次内部全员大会上拿一个拒绝配合“先知”预测结果的刑警举过例子。他说,有些人不相信算法,宁愿蹲十七个小时也不信数据,这种人很可敬,也很蠢。沈归当时坐在台下发出一声极轻的冷笑——而那个冷笑被录音了,成了他被辞退的理由之一。

他又敲了一句。

“我凭什么信你?”

对方这次隔了很久才回复,久到沈归以为他已经下线了。然后屏幕上弹出来一行字:

“因为你不信算法。三年前你在内部论坛上发过一篇被秒删的帖子,标题是《预测犯罪还是制造犯罪》。薛天穹在删帖记录上签的字,理由是‘与公司核心价值观不符’。那个签名截屏,我现在就可以发给你。”

沈归的呼吸停了两秒。

他缓缓打了一个字。

“发。”

附件传输的进度条开始在屏幕上缓慢爬行,暴雨敲打着窗户,像千万根手指在同时叩门。沈归盯着那条绿色的进度线,忽然意识到一件事——他这辈子做了无数个推倒重来的决定,但没有哪个决定像今晚这样,一旦点下接收键,就再也没有回头路可走了。

进度条走到头了。他点下了接收键。

本章评论(0)

暂无评论,来抢沙发吧!

我来评论

您的邮箱地址不会被公开。 必填项已用 * 标注