周启明回来那天,北京下了一场冷雨。
他比预定时间早到了一天。没有通知,没有邮件,连联络员那边都没有提前打招呼。上午八点四十分,一辆黑色轿车驶入西郊这栋灰色建筑的地下车库。车上下来两个人——司机和一个穿深灰色大衣的中年男人。中年男人在后座上留了一份报纸,折痕整齐,像是翻过一遍。他关上车门的力度很轻,轻得几乎听不到声响。
林序当时正在大厅一楼的自助咖啡机前,看着机器慢吞吞地往外吐一杯美式。玻璃门外有个人撑着伞站了一会儿,像是在看门牌号。然后伞收了,门推开,那个中年男人走进来,大衣肩膀上沾着细密的雨珠。他环顾了一圈大厅,目光扫过前台空着的工位、墙上的安全须知、以及角落里那盆很久没人浇水的绿萝。
他的目光最后停在林序身上。
“你好。周启明。”他伸出手,语气平淡,就像在说今天天气不太好。“顾远应该在楼上。几楼?”
林序接过那只手,握了一下。手心干燥,力度刚好。
“二楼。走廊尽头。”
周启明点了点头,没有多说话,转身走向电梯。他的皮鞋踏在水磨石地面上,每一步都踩得很稳。电梯门合上之前,林序看见他把手插进大衣口袋里,身体靠在轿厢后壁上,闭上了眼睛。
那杯咖啡还在机器里慢吞吞地吐。林序端着杯子走进电梯的时候,周启明已经不在了。
主控室里的气氛和三天前已经不同。那天晚上所有人盯着南亚四号曲线时的安静,是一种震惊之后的沉默。而今天早上的安静,像一根被拉到极限的橡皮筋。所有人都在等它断的那一刻。
周启明进主控室的时候,没有敲门。他推开门,站在门口扫了一圈屋里的几块主屏幕,然后走进去,拉开靠墙的一把折叠椅坐了下来。他什么都没说,只是看着。技术组的几个年轻工程师交换了一下眼神,其中一个戴眼镜的男生把屏幕往自己这边转了转,像是不想让来人看到上面的内容。
顾远从代码界面里抬起头。两个人隔着半个房间对望了几秒。顾远的手指离开了键盘,但没有站起来。
“来早了。”顾远说。
“早一天,”周启明说。“想先看看。不在议程里的东西往往更容易看清楚。”
他说这句话的时候语气随意,就像在谈论咖啡的口味。但林序注意到顾远握着鼠标的那只手微微收紧了一下,指节在塑料外壳上轻轻一响。
上午的第一次正式会议在十点开始。地点是三楼东侧的封闭会议室,没有窗户,只有一张长条桌和十二把椅子。墙上的空调出风口积了一层灰,吹出来的风带着一股铁锈味。参会的人比平时多了将近一倍——技术组的三名核心成员,联合委员会的四名联络员,以及周启明带来的两个人。一个是四十岁上下的女分析师,戴无框眼镜,面前的笔记本摊开但一个字都没写。另一个是年轻些的男人,西装袖口的扣子扣到了最上面一颗,摆弄着一支录音笔,按了好几次开关,始终没有找到合适的角度。
周启明坐在长桌中间的位置。顾远坐在他正对面。两个人之间隔着三米长的桌面和一份摊开的议程表。
“我今天不是来质疑V1的成果。”周启明开场的时候,双手平放在桌面上,十指交叉。他的手指很瘦,骨节突出,像是那种常年握笔的人的手。“你们做了一件很了不起的事。四十七天预测命中,回溯验证全绿,任何一家机构都会把你们的数据供在保险柜里。”
顾远没有说话。他在等后面那个转折。林序看到他把咖啡杯放回了桌上,杯底磕在桌面上发出一声轻响。
“但正因为成果太漂亮,”周启明继续说道,“现在外面有十七份正式的评估请求在等着你们。六个国家,三个国际组织,还有两家基金会——你们猜他们为什么这么着急?”
屋子里没人回答。窗外的雨打在空调外机上,发出细密的声响。坐在长桌末端的年轻工程师低头看着自己的手指甲。
“因为他们想清楚了,”他说,“这系统要真能算准,它就不再属于这栋楼。它属于用得上的人。”
顾远抬起眼。“系统属于数据本身。”
“这句话在哲学课上能拿满分。”周启明看着他说。他的目光没有离开顾远的脸。“但数据不会自己跑到决策者的办公桌上。需要人。人就有判断,有取舍,有政治。”
“政治”这个词一出口,联络员那边明显紧绷了一下。其中一个人翻动了一页文件,纸张在安静的房间里发出突兀的声响。林序看到那个戴无框眼镜的女分析师终于拿起笔,在本子上写了两个字,写完之后又把笔放下了。
“所以你的意思是,”顾远把椅子往后推了几厘米,椅脚在地面上刮出一声短促的尖响,“模型里应该加入政策权重参数。”
“我是说模型不应该假装政治不存在。”周启明的声音依然平稳,但语速比刚才慢了一些,像是在一个字一个字地确认对方听懂了。“你上次对我说,V1的成功证明因果链条可以被纯技术框架捕捉。我现在告诉你,这个结论下得太早了。V1的成功只能证明——在那个特定的情境下,在那个特定的时间段里,技术框架和现实吻合了。这不等于它们永远会吻合。”
他翻开面前的一页文件。纸页在翻动时发出脆响。林序认出那是伊琳前几天整理的那份变量对照表——红色标记的三十二项缺失变量,被复印成了黑白的,但那些红色标记变成了深灰色的方块,依然很醒目。
“这份资料我看过了。三十二项未纳入变量,其中至少有四项属于政策相关数据——行政效率指标、政策执行力评估、制度信任度调查、以及腐败感知指数。你们把这些全归类为‘非结构数据’,不纳入模型。”他把文件往前推了推,推到了桌子的中央。“而它们恰恰是决定一个国家在临界状态下会不会崩溃的关键变量。”
顾远的指节在桌沿上轻轻敲了一下,然后又是一下。
“你说的这些指标,定义模糊,历史样本稀疏,强行结构化只会增加噪音。”
“所以你们宁可用‘模糊’为理由,把制度因素整个推出模型的边界?”
“我是用可控性为理由。”顾远说。他的声音比刚才高了一点,但随即又压了回去。“模型需要的是可量化、可重复、可验证的变量。不是问卷和民意调查。”
周启明没有马上回答。他把那页文件放回桌上,身体微微往后靠了靠。折叠椅在他身下发出轻微的金属形变声。会议室里安静了大概二十秒。空调外机又在响,雨声似乎更大了。有人清了清嗓子,但没有说话。
“顾远,”他开口的时候声音比刚才轻了一些,但每一个字都清清楚楚地落在桌面上。“你是怕模型变脏。脏了就不纯粹了。干净的东西才好控制。但不是所有东西都能干净的。你不能只算那些你想算清楚的东西。”
这句话落在桌子上,没有引起任何反驳。顾远的嘴唇动了动,但最终没有说出任何话。林序看到他的右手握紧了又松开,反复了两次。咖啡杯里的咖啡已经凉了,杯口内侧留下一圈浅褐色的渍迹。
会议在两小时之后结束。没有结论。人们从会议室里鱼贯而出的时候,没有人说话。椅子被推回原位的声音此起彼伏。周启明走出会议室的时候,在走廊里停下来,看着墙上GcS项目的历史照片——三年前项目组成立时的合照,当时的成员只有现在的一半。照片里的顾远站在最左边,袖子卷到手肘,手里拿着一块电路板。照片边角已经泛黄,但玻璃框擦得很干净。
“那时候的系统只能跑经济指标,”周启明看着照片说,“没人想到它有一天会预测国家崩溃。”
顾远站在他身后两步远的地方,没有走过去。他的影子落在走廊的地面上,和周启明的影子之间隔着一段灰色的水磨石。
“系统在进步。这一点谁都看得见。”周启明转过身来。他的大衣在转动时发出轻微的布料摩擦声。“但进步的方向不应该只由技术逻辑来决定。”
他说完这句话就走了,带着他的两个人沿着走廊往电梯口去。女分析师把笔记本合上夹在腋下,年轻男人把录音笔塞回西装内袋。三个人的皮鞋在水磨石地面上发出规律的声响,直到电梯门合上才消失。走廊里重新安静下来,只剩下空调外机持续的低鸣。
当天下午,一个不大不小的事件落进了系统的盲区。
南亚四号所在国的邻国——两国之间的边境线长达两千三百公里,在地图上是一条蜿蜒的虚线——发生了一起局部冲突。冲突的起因是一段争议边界的巡逻路线偏差,一方的巡逻队偏离了惯常路线将近八百米,进入了争议区。规模不大,交火持续了不到二十分钟,没有人员死亡。但爆发的时间点极为敏感:它正好卡在南亚四号国刚刚恢复部分供电、社会秩序仍在动荡的窗口上。边境冲突的消息在四十分钟内传遍了区域情报网,GcS的监测节点也捕捉到了——边境哨所报告、社交媒体流量异常、以及一份来自当地记者的简短文字报道,报道只有三段,最后一段没有写完就被中断了。
按正常流程,这些原始信号应该在两小时内进入GcS的数据预处理管道,与其他变量交叉比对,然后在六到十小时内生成一份风险评估摘要。
但这批数据没有进入预处理管道。
卡住它的是一个叫“数据准入规范修订版3.2”的文件。这份文件是两个月前由联合委员会下发的,要求所有涉及跨境政治敏感信号的数据在进入模型之前,必须先经过新增的合规审核节点——一个由政治风险评估小组控制的环节。3.2版本把审核范围从原来的“重大安全事件”扩展到了“一切涉及国家边界与主权争议的信号”。文件一共有十四页,最后一页的附注里写着:本规范适用于所有GcS节点,无例外。
冲突发生在边境,属于边界争议。信号被自动拦截。
林序在下午五点十七分发现了这个问题。他正在做例行的数据流抽查,随机调取了南亚区域过去六小时内的输入信号清单。屏幕上,信号条目一行一行地刷新,绿色标记的是已入库,黄色标记的是等待处理,灰色标记的是已拦截。南亚区域的清单里,绿色和黄色的条目之间,夹着三行灰色。他点开灰色条目,看到了拦截记录和依据的文件编号。
他盯着那个文件编号看了很久。3.2。两个月前。两个月前GcS还处于V1的早期测试阶段,那时候系统连四十七天预测都还没有做出来,没有人真正在意一份规范修订文件。它躺在文件库里,像一颗没有上弦的定时器。但现在,这份文件正在阻止关键信号进入一个已经证明自己可以预测国家崩溃的系统。
他把发现写成了一份简短的内部备注,标题是:数据流异常记录——SAsia-7节点合规拦截事件。内容没有评价,只是逐条列出了拦截时间、涉及信号类型、以及依据的规范文件编号。写到文件编号的时候,他停顿了一下,又在后面加上了文件生效日期。他没有发给所有人,只发给了顾远和伊琳。
伊琳秒回了三个字。
“看到了。”
顾远的回复隔了十二分钟。只有一行字:“这个时间点。”
林序看到这四个字的时候,机房里的日光灯闪了一下,然后又恢复正常。他知道顾远想说什么。这个时间点——外面有十七份评估请求等着,联合委员会在催V2启动,周启明坐在三楼会议室里谈政策权重——偏偏在这个时间点,一条制度层面的规范正在挡住现实数据的流入。不是技术漏洞,是制度设计。一条两个月前无人问津的文件,正在一个措手不及的时刻证明自己的存在。林序等了一会儿,没有后续。顾远的头像灰了下去。
晚上九点,伊琳出现在机房门口。
她没敲门。手里端着一杯已经凉透的茶,杯沿上印着浅浅的口红印。她在林序旁边的椅子上坐下来,把茶杯搁在机柜的边沿上,然后看着屏幕上南亚区域那条灰色的拦截记录。
“你知道这条边境线在地面上是什么样的吗?”她说。
林序摇头。
“二百三十公里是山区。另外四百公里是河滩地。雨季的时候河滩会被淹掉,界碑跟着水跑,今年在水这边,明年在水那边。”她把茶杯端起来,又放下。“边界不是一条线。边界是一块地。你踩进去半步,对面的人就会开枪。这种事不需要系统预测。”
林序看着她。伊琳的眼眶下面有两道很淡的青灰色。
“顾远说系统能算清因果链条。”她说。“但因果链条的起点——比如一个巡逻兵在雨里走错了路——这种事,你怎么算?”
没有人回答她。机房里只有散热风扇在响。
“物理世界不需要解释权。”伊琳站起来。茶杯留在机柜上。“物理世界只需要被承受。”
她走到门口,停了一下,没有回头。
“那条边境线上的人,他们不知道GcS是什么。他们只知道今年的雨季比往年长了一个月。界碑可能已经不在原来的位置上了。”
她走了。脚步声在走廊里渐渐消失。林序坐在原处,看着屏幕上那条灰色的信号记录。灰色的时钟图标还在跳,一下,一下,规律得像心跳。
凌晨一点,林序在二楼机房值夜。他一个人。
白天的雨已经停了,但窗外的空调外机还在滴水,一滴一滴打在楼下的铁皮遮雨棚上,发出规律的声响。他把白天那本日志重新打开,翻到最新一页。先记下了下午的数据拦截事件——被拦截的信号类型、拦截的机制、以及周启明在会议上的那段话。笔尖在纸面上划过,发出细微的沙沙声。记完之后他停了一下,又翻回去看了看自己之前写的关于三十二项缺失变量的记录。那些字迹已经有些干了,黑色的墨水微微泛灰。
他又往前翻了十几页,翻到南亚四号国预测命中的那晚。那晚他写:
“系统证明文明可以被计算。”
现在他在这句话下面划了一道横线。然后在旁边加了一行小字:
“但文明不只是文明。文明是边界的走向、界碑的位置、雨季的长度、巡逻兵在雨里是否走错了路。系统算得出国家崩溃的时刻,算不出一个士兵为什么会往左偏八百米而不是往右。”
他停笔。机房里的硬盘转动声忽然低了下去,然后又升起来。屏幕上,南亚区域的数据流仍在刷新。边境冲突那条信号仍然卡在审核队列里,灰色时钟图标一闪一闪。
隔了一行,他又写了一段:
“顾远要更准。周启明要更稳。伊琳要更真实。但更准、更稳和更真实之间——它们常常首先彼此矛盾。这不是错误。这是结构。而结构意味着:当系统足够强大的时候,技术、制度和现实之间的冲突不是故障,是系统本身的组成部分。”
他放下笔,合上本子,靠在椅背上。机房里只有他一个人。散热风扇持续嗡鸣,机柜上的指示灯在黑暗中明灭,绿色的光点一列一列地跳动。窗外,西郊的夜空没有星星,只有远处一条高速公路上偶尔扫过的车灯光柱。空调外机还在滴水,一滴,一滴,打在铁皮上。
日志本合在桌上。封面上写着年份和编号,字迹工整。
他闭上眼睛。风扇的嗡鸣变成了均匀的白噪音。
在闭眼之前,他最后看了一眼屏幕。那条灰色信号还是一动不动。像一颗落在盲区里的石子,还没有沉到底。但他知道它会沉到底的。不是今天,就是明天。不是明天,就是后天。
而到那个时候,被拦截在审核队列里的不会只是一条边境冲突的信号。
被拦截的是系统的眼睛。