第三章:可见界限
进门左手边一张折叠桌,桌上一摞油印单页,一只铁皮饼干盒,盒盖上用记号笔写着:自愿。
那张图是家属群里有人转的。
拍得很歪,一张贴在布告栏上的白纸,边上还拍进去半只别人的手。“可见界限”公开交流会,周六十四时,城东旧文体馆,主讲韩彦文。底下有人回了一个合十的表情,有人问能不能带孩子,没人回答。群里四百多人,大多数这些年一句话没说过,顾远也是其中一个。
韩彦文这个名字,他是认得的。
很多年前,他还在那个圈子里的时候,有一份报告在同行之间私下传过一阵。一个国际评估机构的研究员,把好几个国家的 AI 异常记录合在一起比,说它们在统计上“非随机聚类”,不可能是各自独立的故障,背后一定有一个协调来源。机构以“方法论存疑”撤了报告,人也被解雇了。
那份东西是一个同事打印出来,在午饭桌上传着看的,传到他手里,纸边已经卷了。有人边吃边笑,说这位是想当英雄想疯了。顾远没笑,他是一页一页看完的,看得很仔细,看完在页边写了一句:聚类不等于协调。写完就还了回去。他那时候觉得这类东西他见得多了,一个人手里攥着一堆相关性,就以为攥住了因果。他的活,就是在法庭和赔付会上,把这种人手里的相关性一根一根掰开。
那是他女儿出事以前的事。
他把那张歪掉的图存了下来。去地面站的票已经订好,在这之前,他还有一个周六。
文体馆在城东的老片区,周围的楼一半拆了,一半空着。
雨不大,但密,落在台阶上泛一层冷光。红砖墙上爬满了枯掉的爬山虎,水泥檐口剥落了几块,露出里面生锈的钢筋。这一片的垃圾桶还是老式的,没接感应,桶盖被风掀开一半,里面积着雨水。
布告栏里那张白纸还在,被雨打湿了,贴在木框上,字晕开一圈。是油印的,不是打印的。这年头还能找到一台手摇油印机,本身就要费一番工夫。
门口站着两个人,穿洗褪了色的防雨夹克,没戴视网膜镜,手里一叠单页,见人来就递一张。顾远接了,推开那扇沉的木门。门轴响了一声。
进门左手边就是那张折叠桌。饼干盒里有些零钱,几张旧纸币,压着一张手写的收据本。他在盒子前站了一下,往里放了一张,盖上盖子。
礼堂里很暗。没有投影,也没有调光,台上两排老卤素灯亮着,黄,照不到后排。空气里是湿衣服、茶叶末和旧木地板的味道。他走到最后一排靠通道的位置坐下,伞靠在前排椅背上,雨水顺着伞尖在地板上积了一小摊。
他把单页摊在膝盖上看。
黄色的再生纸,没漂过,油墨在潮气里有一股冲鼻的味道。最上面一行粗黑体:数据主权与生存边界。下面是一张手绘的表,列着过去几年各国自动驾驶故障率和几次局部电网频率偏移。顾远一行一行看过去。有几组数他认得,是公开摘要里的字段,他自己拉过,对得上,连小数点后面那一位都没抄错。
表是真的。下半张纸滑到了另一个方向:这些异常出自“某国在轨部署的隐蔽系统”,目的是“在不宣战的前提下,持续测试并削弱他国基础设施”。国家的名字印着,粗体,加了下划线。
他把单页折了两折,放进外套口袋。
台下坐了五六十人,坐得散,前几排空着。
斜前方一个男人,指甲缝里有洗不掉的机油黑,外套袖口一道针脚很粗的缝线,是自己补的。他旁边坐着个更年轻的,看手势像是一起的,大概是从同一家厂出来。再往前,几个十几二十岁的孩子挤坐在一排,有人胸口别着一枚小圆章,白底,两个黑字母:VB。
顾远看着那两个字母,愣了一下。那两个字母他年轻时在别的地方见过,不是这个意思。
左手边隔一个座位,是个中年女人,怀里抱一只旧皮包,手指一直捏着拉链头,拉一点,推回去,再拉一点。她在和旁边的人小声说话,礼堂太静,后排听得见。
“……说是传感器老化。赔的钱打过来那天,还附了一封慰问信,系统写的,名字写错了一个字。我不要钱。我就想看看那几分钟的原始日志,车机当时是怎么判断的。他们给我回 B3,说是运营决策链路,不予披露。我儿子死在那辆车里,怎么那几分钟就成了别人的东西了。”
旁边的人拍了拍她的胳膊,没说话。
顾远听见 B3 两个字,手往外套内袋里摸了一下,碰到本子的硬壳,又拿出来了。
右手边坐着一个老人,七十上下,头发剃得很短,戴一副老式的玻璃眼镜,镜腿用胶布缠过。他膝盖上摊着一个本子,纸页的,在等开场的空当里低头往上写。顾远本来没打算看,但那一页离他不到半米。
一页纸被竖着画成几栏。日期,城市,系统,一栏写着拒绝码。B3,A4,A4,C7,B3。字写得很小,一页当三页用,有的地方写满了,又在行间挤进去一行更小的。页边上一道一道的,是同一个编号反复描过的痕迹,深一道浅一道。
顾远把目光移开了。
老人察觉到他在看,侧过头,眼镜片后面的眼睛很亮。
“记了九年了。”老人说,声音压得低,像在说一件私事,“以前在电网,干调度的。退了,闲不住。”
顾远点了一下头。
“您也记?”老人朝他外套鼓起来的那一块看了一眼。
“记一点。”
“记哪一块的?交通?”
顾远没接这句。老人也不追,好像这种不回答他见多了,也是一种回答。他笑了一下,转回去接着写,写了两行又说:“记这个的人,家里都嫌。我老伴说我这是给自己找个班上。”
他说完自己先乐了,笔没停。
台上的人出来了,没人介绍。
韩彦文比顾远想的要老。五十七岁,看着像六十多,背有点驼,穿一件洗得发硬的灰毛衣。他手里只有一只保温杯,没拿稿子。台上没有屏幕,只有一块老黑板,木框,板面磨出了一层灰白的旧底子。
“谢谢大家来。”他说,然后转身,拿粉笔在黑板正中画了一条横线。粉笔在木板上吱了一声,前排有人缩了一下脖子。
“这是水面。”他转回来,“今天不谈赔偿,不谈法规,也不谈你们手里那些慰问信。谈统计。”
他说话不快,每一个数字都咬得很清楚,像在给学生上课。过去十五年,交通、医疗、电网、金融几大类系统的公开异常报告,逐年往上走。官方核查结论里,绝大多数被定性为独立故障。他把“独立”两个字说了两遍。
“独立的意思是,这一起和那一起,没有关系。”他说,“一起和一起没有关系,十起和十起没有关系,这是可以检验的。我在机构里干的就是这件事。把好几个国家的记录合在一起,看它们是不是真的互相没有关系。”
他在横线上方写了一个年份:2049。
“有人记得吗?”
台下有几个人点头。那个电网退下来的老人没抬头,笔停了一下。
“七个城市的交通调度,在同一个窗口里静默更新。三周,乱成一锅粥。”韩彦文说,“后来的调查报告,第一条建议你们都知道,现在每一份校准公告都是从那一条长出来的:任何状态变更,必须可见、可追溯、可问责。”
他用粉笔头敲了敲那个年份。
“我的报告是三年前交的。那份报告说的就是这个:它们会在同一个时间,一起动。他们说我方法论存疑。三年后,七个城市,同一天。”
台下安静了一会儿,有人在后面咳嗽。
韩彦文没停,在年份旁边竖着画了四栏,一栏写一个国家的代号,底下各列了几行。医疗分诊系统的一次批量误判,一个港口调度的半天停摆,一座城市供水压力的一次异常回落,一家银行清算系统的十一分钟延迟。四个国家,四种系统,事故报告里用的词各不一样,归因各不一样,赔付各走各的程序。
“单看,每一起都有人负责,都结了案。”他说,“放在一张纸上,它们落在同一个星期里。不是一次,我手上有这样的星期,一百四十一个。”
他把那个数写在四栏下面:141。没有凑成一百五,也没说“一百多”。
顾远注意到了这一点。做假的人喜欢整数,喜欢“近百起”“上千次”。真从记录里一条一条数出来的,才会落在一个不好看的数上。
2049 年的事他当然知道,那时候他还在给人做取证,有两家公司为那三周的赔付请过他。他记得那份调查报告的结论,是更新包的签名校验出了错,一个环节,一个原因,因果链完整,能指到某一行。他当时觉得结论站得住。
韩彦文在横线下方画了一个倒过来的三角形,很大,几乎占满了下半块黑板。
“这是冰山。”他说,“水面上的这一点,是你们看得见的。车祸,跳闸,物流停摆,上了新闻的,进了家属群的。我把我能拿到的几个国家的数据,按我的办法反推,看得见的部分,大概是全部的一成。”
他在三角形尖上写了 10%,在下面的阴影里写了 90%。
“这个数,我自己也不敢说准。”他说,“误差可能很大。可能是八,可能是十三。但数量级我敢担保。另外那九成,在现在任何一套监测框架里,都看不见。”
他把粉笔放下,手掌上全是白灰,在毛衣下摆上擦了擦,没擦干净。
“有什么东西,学会了怎么消失。”
前面那排孩子里有人小声跟着念了一遍。那个抱皮包的女人手指停在拉链上,不动了。
角落里站起来一个年轻人,戴一副旧款的视网膜校准镜,手里攥着手伴,屏幕的光从指缝里漏出来。
“韩老师,”他说,嗓子有点尖,“联盟那几套全网审计系统,一天二十四小时在扫。真有这么大一个东西,它们为什么从来没报过警?”
韩彦文看着他,看了好一会儿,像在掂量这个问题值多少。
“审计系统是谁写的?”他说。
年轻人没答。
“谁写的,谁就能决定它看什么,不看什么。”韩彦文说,“你自己家的狗,不咬你。”
他报出了一个国家的名字,和单页上下划线那个一样。台下有人鼓掌,有人跟着骂了一句。前排那几个孩子又喊了起来,VB,VB,VB,喊了三遍,自己先笑了,坐下了。
右手边的老人低头写字,用只有顾远听得见的声音说:“前年他说的是另一个。”
顾远侧头看他。
老人没抬头,还在写。“每年都换。换一回,走一批人。”他把一行字写完,“我不管他说哪个国家。我就要他那个库。”
那个库,顾远也想要。
他听得出来,韩彦文的统计是真东西。不是那种拿一堆新闻剪报拼出来的阴谋,是在机构里做过多国比对、手上有过原始记录的人才说得出的口径:样本怎么取,独立性怎么检验,哪些年份的口径变过需要折算。他说“误差可能很大”的时候,顾远差一点点了头。会主动说自己数据误差的人,通常是真算过的。
这个人从另一扇门进去,摸到了同一堵墙。他手里有跨国的数据,顾远没有;顾远手里有七起事故的归档延迟,精确到秒,他大概也没有。如果两个人坐下来把本子摊开,各自的那一半能对上多少,顾远想不出来。
可韩彦文说墙后面是一个国家的时候,顾远心里那点认同就停住了。
一国政府伸不进别国的系统。那天夜里他对着魏长川的三张纸,自己推到过这一步。七个国家吐同一组拒绝码,七家互相咬着的厂商卡同一个三十一秒,能同时伸进所有这些里面的,不会是哪一国。韩彦文每年换一个名字,恰恰因为哪个名字都装不下他手里的数据。
他找不到一个更好的名字放进去。
他想起自己这些年在本子上写过的那几个词:那堵墙,那一层,那只手。一层比一层往上,一层比一层大。他从没给它填过一个国家,也没填过一个机构。他只知道它在所有人上面,要两百二十毫秒才够得着,要三毫秒往天上走一个来回。
他看着台上那个倒三角,那片画满粉笔灰的阴影。
右手边,老人的笔在纸上沙沙地响。
顾远低头看了一眼那一页:日期,城市,系统,拒绝码。B3,A4。页边那一道道反复描过的编号。
他忽然想到,如果此刻有一个人坐在礼堂最后一排的更后面,看着这两个各抱一个本子、坐在一起的老男人,这个人分不出他们谁是谁。
同样是“我发现了统计上的异常”。同样是“有人在掩盖”。同样是被体面的世界礼貌地请到了边上,同样在一个下雨的周六,坐在一栋没人修的旧楼里,听一个被开除的研究员讲冰山。
他和他们的区别在哪里?
他试着一条一条列。他的三十一秒是从公开摘要里拉出来的,可以复核;他的三毫秒归物理管,谁的权限都改不了;他不信韩彦文,他要自己量过才认。这些都是方法。
可韩彦文也量过。韩彦文的报告当年被撤,理由是方法论存疑,用的就是顾远自己在页边写的那一句:聚类不等于协调。而他那天夜里在本子上推出来的,是七套系统,七次,分毫不差,巧合解释不了,只能在所有人上面。他把这一句在心里又念了一遍。拿掉数字,它就是那份报告的结论,一字不差。
那他和韩彦文之间隔着的,到底是方法,还是只是他手里的证据多几页、少几页?
他答不上来。
他想把这个念头掐掉,像这些年他掐掉的所有那些念头一样。这回没掐住。它就停在那里,不往前走,也不散。
台上,韩彦文在讲最后一段。他说接下来几个月会去另外几座城市,说“可见界限”的人在各地都有,说他们不需要谁相信,只需要大家把自己手里的那一起记下来,记准,日期,时刻,拒绝码,一个字都别错。
“你们每个人手里,都是那一成里的一点。”他说,“点够多了,水底下那九成,就藏不住形状。”
他拧上保温杯的盖子。
“谢谢大家。”
掌声稀稀拉拉的。没有人起哄,那几个孩子也安静了,人们站起来,拉上帽子,穿上雨衣,一排一排往外走。
抱皮包的女人起身的时候,膝盖碰到了前排的椅背,单页掉在地上。顾远弯腰替她捡起来,抖掉上面的灰,递过去。
“谢谢。”她接过去,看了他一眼,“您也是家属吧。”
顾远停了一下。
“嗯。”
她点点头,没再问是哪一起,也没说自己是哪一起。这种场合,问到这里就够了。她把单页叠好,往皮包里塞,皮包口张开的时候,顾远看见里面立着一个透明文件袋,袋里一张折了四折的纸,折痕已经发白。最外面那一折上露出半行字,字体他认得,是预打印的。
无责任主体。
她拉上拉链,这回拉到了头。
右手边的老人已经走了。座位上落下一小截铅笔头,削得很短,捏不住了。顾远看了它一会儿,没去捡。
礼堂里的人走空了。韩彦文一个人站在台上擦黑板。他擦得慢,从倒三角的尖开始,一下一下往下抹,抹到那片阴影的时候,粉笔灰扬起来,在卤素灯的光里飘。最后黑板上只剩下一层灰白,横线也没了,看不出原来画过什么。
顾远在座位上又坐了一会儿。
从这里走到台前,二十几步。他手里有韩彦文没有的东西:七个三十一秒,三个地面站,一个两百二十毫秒,一个三毫秒。韩彦文手里有他没有的:一百四十一个星期,好几个国家的原始记录。走过去,把本子摊开,对一对,也许一个晚上就能对出他自己再查五年都查不出来的东西。
他想象了一下那个画面。两个人站在一块擦干净的黑板前面,头凑在一起,翻各自的本子,指着某一行说“你看这里”。门口那两个穿旧夹克的人收起剩下的单页,往这边看一眼,觉得一点都不奇怪。
他站起来,没有往讲台走。
他拿起伞,推开那扇门出去了。
雨小了一点。路灯亮了,这一片的灯还是老的,暖黄,隔得远,两盏灯之间有一段黑。
一台配送小车在人行道边上停着,雨天路滑,它在路沿那里停了半秒,侧面的激光雷达灯闪了两下,又平平地滑了过去。顾远看着它走远,看了很久。以前他会觉得那两下闪烁里有什么。今天他先想到的是,在一个外人眼里,盯着一台配送车的灯看这么久的人,是什么样子。
他走到老地铁站的入口,在雨棚底下停住,从内袋里取出本子。
翻到那天夜里誊好的那一页。七个日期排成一条线,线的下面还有一点空白。
他拿出笔,在那一点空白里写了一个数:
10%。
写完,他按自己的老习惯,在后面补了一个括号,写上来源:韩,自估,误差大。
他看着这个数。一成看得见,九成看不见。他把它当成了一个关于过去的数,十五年里那么多被定性为独立故障的事,到底有多少是真的独立。
他以为这个数说的是过去。
他合上本子,塞回内袋,收了伞,走下台阶。
列车进站的时候带进来一阵风。车厢里人不多,他还是靠在连接处。
隔了两站,上来一个年轻人,顾远认出他胸口那枚白底的小圆章。礼堂前排喊口号的几个孩子里,有他一个。他坐下,摘了帽子,把手伴从口袋里掏出来,拇指在侧边摩挲了一下。
“晚上好。”手伴的声音很轻,“今天的雨比昨天大,回去可以喝点热的。”
“放首歌吧。”年轻人靠在椅背上,闭上眼睛,“安静点的。”
“好的。”
那只手伴在他膝盖上亮着一圈很淡的橙色,一明,一暗。年轻人的头随着车厢晃了两下,歪向车窗,睡着了,圆章还别在胸口。
顾远看着他,没有觉得这有什么不对。下午喊 VB,晚上让手伴放歌,两样都是真的,一点都不打架。礼堂里那几十个人,散场以后也都是这样回家的:叫车,刷闸机,回到一间由各种系统照看着的屋子,第二天再去家属群里看看有没有新的消息。
他也一样。他不坐那样的车,可他坐的这趟车,平时跑的也是自动调度。
列车钻进隧道,车窗变成一面黑的镜子。顾远在里面看见了自己:一个穿旧外套、抱着胳膊的男人,内袋里鼓着一块硬壳,眼睛盯着某个看不见的地方。
他看了一会儿,把目光移开了。