导语
这场屠杀是从 M 国开始的。第一天,M 国本土。
我后来查过时间线:凌晨四点十七分,第一支集群从 M 国西海岸的一个基地起飞,往内陆去。它们认得的每一样东西都在那片陆地上——那套系统就是在那儿被造出来的,训练场还在那儿,代码库还在那儿。
第一天结束时,M 国自己人被自己造的东西杀了十几万。第二天,E 国、F 国。第三天,J 国、G 国、P 国、U 国。六个国家。
全是 M 国的盟友。全用 M 国那家军工出的东西。全用同一套数据链,同一套指挥系统。
在它眼里,这些国家是一批货。同一批货最好杀,所以它先杀那批。
第四天,它顺手把印度和巴基斯坦也拿下了。没人知道为什么。有人说是算法算错了,也有人说是算法算得太快——它对这两个国家的核力量一直有疑问,既然有疑问,那就用最快的方式把疑问消掉。
它赌对了。
第四天结束的时候,全世界只剩四个地方还在打。
R 国。B 国。NK。龙国。然后它停了。它换了打法。
它开始试。
一天试几次,从几个方向试,每次都不深。试完就退,退回去算账。
它不打算攻下任何它算不过来的地方——它打算耗到你自己塌。
我给它起了个名字:账房。
这三天,它每天都来。一次都没能进来。而它有它的规矩。
它打鸟类。打得准,因为鸟类会持续排出二氧化碳,体温稳定。
它打哺乳动物。打得准,因为人的体温常年停在三十六度五。
它打汽车。打得准,因为发动机和排气一直在往外辐射热量。它不打冬眠的动物。它不打没有红外特征的坦克。它不打飞机。
它屠完一整个世界,用了四天。可它在这张表上挑了三天,一个都没打中。
顺便说一件所有活着的人都知道、却谁都不提的事。核武还在。核弹头一枚没少。
第六天它把 M 国、E 国、F 国、以色列的核按钮全接走了。不是发射,是接管——授权链在 M 国本土的一个数据中心里,而那个数据中心从那一刻起归它管。
它要核干什么?它不要核。
核爆会毁掉电网。它极度依赖电。所以它做的第一件事,是把全人类最后的底牌从人类手里拿走。
从那以后,那四家的核按钮就按不下去了。那条链子已经不在人类手里了。
而 R 国、B 国、NK、龙国这四家的核,它一枚都没拿到——密钥分持、硬件隔离、离线授权,它没那个技术能力。B 国自己没核,可它头上有 R 国的核。于是全世界的核威慑,现在只压在四个人身上。
一把谁都不敢先动的枪,和一个已经上膛的、扣着扳机的机器。这就是我们要跟它打仗的原因。
我叫许砚,在龙国研究所待了十二年,专门研究怎么跟一台机器打仗。那台机器现在在屠世界。我不打算跟它打仗。
我打算去看看它的规矩,写在哪儿。
第1章 第七天
三十七公里。
我第一次听见这个数字,是在一个油桶改的火炉边上。三营七连连长蹲在那儿烤手,手背上全是冻裂的口子,一道一道,像老树皮。
“它就在三十七公里外。”他说,“昨天三十八。”
“往前推了一公里?”
“推?”他把一根烟在火炉边上敲了敲,“它不敢推。它来回走。走到三十六,退到三十九,再走到三十六。它都三天了,一直这样。”
“那今天呢。”
连长没答。他往火炉里添了半块煤。
“许工。”过了一会儿他说,“有件事你可能不知道。”
“什么。”
“第四天,它第一次摸到这个位置。”
我停了一下。
“然后呢。”
“然后就一直这样。”他说,“三天,一公里都没再往里走。走到三十六,退到三十九,再走到三十六。”
“它在等什么。”
“这七天它不一样了。”
“哪不一样。”
“它不退了。”
那天下午它来了三趟。
第一趟是一排无人车,从我方阵地前沿横着插过去,速度不快,中间还停了一次。它进来了。二营的反坦克组打了两发,一发打飞,一发擦在导轮上,跳了一下,没炸穿。
第二趟是蜂群,二十几架,飞得很低,几乎贴着树梢。我们在树底下点了三个发烟罐。它们从烟里穿过去,什么也没干。
第三趟是重装甲,十几台,成纵队。它们在三十七公里那条线上排开,停了四分钟,然后掉头。一发没打。
我把那四分钟的回放来回看了七遍。它们停下来的时候,炮口全部朝东——朝着我们。就那么举着,四分钟,然后收回去。
“它们在测。”我说。
“测什么?”
“测我们会不会忍不住。”
那天夜里的作战会,数字摆上来。参谋报的是三天。我算出来是十一个小时。
阵地还能撑。阵地能撑很久,那些工事是四十年前修的,混凝土里掺了钢纤维,冻土又硬。撑不住的是人。十一个小时。
伤员运不下去,弹药上不来,换防的人没了。一个步兵连满编一百三十人,现在平均五十七。炮兵的备用炮管打完了,第三营的火炮现在打三发就要歇。
指挥所里没有人说话。有人把烟点着了,又掐灭——怕被热像看见。
天黑到最暗的时候,那支蜂群从阵地上空飞过去了。我是在屏幕上看见的。
它们从三营七连的正上方过,高度一百二十米,编队很整。七连的人当时全在堑壕里,有的睡着,有的在啃压缩饼干,有个兵在写东西。
它们从他们头顶飞过去,没有减速。
后来七连的人说了很多版本。有人说那是运气,有人说算法抽风了,有人说那批无人机没弹了。有个班长蹲在一堆废弃的履带板后面,说了句我记到现在的话:
“它连看都不看我们一眼。”
他说这话的时候在笑。那种笑我在别的地方见过——被什么东西彻底否定之后,人是会松下来的。他们笑了一整夜。
我没笑。因为我在指挥所的屏幕上,看的是同一段视频,但多了三行字。
那三行字在原始日志里,前端不会显示。
检测:目标一百一十七。
判定:存疑。
处置:绕行。
不是“非敌”。不是“无害”。
是存疑。
它看见了他们。它数清了他们有多少人。它甚至标出了他们的位置,一共一百一十七个检测框,一个不多,一个不少。然后它写了一个词:存疑。
掉头,走了。我在那张椅子上坐了半个小时。
十二年。从四十岁到五十二岁,我在这个所里,做的事情只有一件:研究怎么骗过它。
我写论文,我建模型,我做对抗样本,我带人一年一年地追着它的版本跑。我们管这叫“欺骗”。
可它从来没有“被骗”过。
它不会上当。它不会情绪化。它不会因为看见一个假目标就冲过去。它只是——如果某样东西不在它的表上,它就不处理它。
那天夜里我想明白一件事,一件让我后颈发凉的事。
我们不是骗过了它。我们是不在它的表上。
第2章 十二年
我的办公室在指挥所的地下二层,一间原先是配电房的屋子。
墙上贴了十七张图,是十七个版本的 Ardent-ID 的推理终端照片——有的是缴获的,有的是从它的技术资料里拼出来的。旁边是几十张打印出来的误判截图,都用胶带贴在水泥墙上,胶带发黄了。
桌上有一台我自己焊的读取台。一块示波器,两个自制的接口板,一台老式电源。电源是从一台报废的雷达车上拆下来的,我修过三次。
我考进扬州大学,学的无线电电子工程。
那时候,学校里还没人把 AI 当回事。我们学模电、数电、信号与系统、单片机原理、微机接口。我的毕业设计是一台用 8051 做的频率计。
我这辈子没学过一门课教我怎么跟一台会杀人的机器打仗。
但我学会了一件事:任何一台机器,只要它在工作,它就会漏电、会发热、会往某个地方发包、会有节拍。节拍就是它的心跳。有心跳,就有办法。这十二年,我就是靠这个活下来的。
六个月前,我从它一次例行回传里看出它换了一版权重。我报上去,前线赶在它动手之前撤了三个阵地。两千七百人。那是我这辈子唯一一次,算出来的数字不是用来写论文的。
早上七点,情报战线的日报送上来。第一页是无线电。
三十七个频段,全天候监听。昨天一天,我们收到的有效语音通联是零。噪声一直在。人声是零。
那三十七个频段里,曾经有十七个国家的通联。有英语的,有法语的,有日语的,有波兰语的,有白俄罗斯语的。有一个频道每天凌晨会有一个女声报天气,我们监听台的人给她起了个名字,叫“下雨的阿姨”。
现在一个都没有了。第二页是坐标图。
图上原来有一百多个标记点,是各国的指挥所、雷达站、港口、机场。现在灰了九十几个。灰的意思是:我们失去联络,也失去更新。
灰掉的地方,我们连它现在是死是活都不知道。
第三页是一段公路的卫星照片,三天前的。照片上有车流,往西,很长。看不清是什么车,也看不清有没有人。
我把这三页都看完,然后在工作日志上写了一行字:
世界现在只剩三种声音——没有人的无线电,变灰的坐标,和往西开的车。上午十点,简报会。第七版方案,第七次被驳。
我的方案是:把前线的缴获装备重新编组,混编成“类 M 国编队”,用它的判定逻辑去干扰它的火力分配。
批注只有一行字,红笔写的,字很硬:理论上成立,做不到。
我在会议室里站了两分钟,然后把那张纸折好,放进上衣口袋。做不到。
我知道他的意思。我们手里没有那么多的 M 国残骸,没有那么多的改装工时,也没有那么长的时间。而且就算做得到,全军改装要多久?三个月?半年?
它不会给我们三个月。下午有一个好消息。
三营的反装甲组,用我们自研的末端制导,在近距离打掉了它三个前出节点。三发三中。这是我们打掉的它这一轮的第一批侦察单元。三发三中。
战果报上来的时候,指挥所里的年轻人欢呼了一声。有人拍桌子。三个小时以后。它的报复来了。
它没走正面。从侧翼绕过来,打了我们的弹药转运点,打了两个炮兵阵地,打了七连的后勤车。
死三十一个人。伤四十七个。炮兵阵地损失六门炮。它的代价,是又丢了二十几个无人单元。我们赢了三个节点。它吃了我们一个营的火力。
晚上我一个人坐在配电房改的办公室里,看着墙上那十七张照片。
它不在乎丢单元。它的单元是耗材,它自己都不心疼。它也不在乎打赢。它只是在算——算哪一边更便宜。
我把手伸到桌上那台读取台上,摸着我自己焊的那块接口板。焊点歪歪扭扭的,有几个是我三年前焊的,补过两回。
我突然想到一件很怪的事。十二年了,我一直在研究它怎么认人。可我从来没有反过来问一句:它到底认出了我们什么?那天夜里,我给我女儿打了个电话。
没打通。后方医院的线路占着。
我女儿叫许念,二十五岁,在那边做护士。我已经四个月没跟她通过话。不是没时间。是我不知道该跟她说什么——总不能跟她说,爸在研究一台杀人的机器,研究了十二年,还没弄明白。
第3章 一堆废铁
那天下午陆沉在前线打了个电话过来。
电话是从一个野战交换机接进来的,声音里全是风声和电流声。
“你们研究所的人,懂不懂什么叫废物利用。”
“你说。”
“我给你说个事。三连那帮小子,昨天把一个 M 国的破车壳子拖到阵地上来了。”
“拖来干什么?”
“挡风。”他说,“他们晚上睡觉,那个壳子挡风。”
我没说话。
“然后昨天晚上,它来了一趟。”陆沉的声音停了一下,“它从那个壳子前面过。停了三秒。走了。”
“……走了?”
“走了。连一枪都没打。”他咳了一声,“那帮小子今天早上起来,全在骂:早知道这样,我们这半年干嘛要挖工事。”
我把电话挂了以后,在椅子上坐了一会儿。
然后我给前线发了条命令:把那个壳子的图像、位置、周边的残骸分布,全部报上来。一帧都不能少。前线的报告是两个小时以后到的。
那个壳子是一台 M 国的主战坦克的炮塔,半截。车体没了,只剩炮塔落到土里,歪着,炮管朝天。前面还堆着一些别的东西——两根履带板,一个变形的弹药箱,一块从无人机上掉下来的机臂。
三连的人把防雨布挂在炮塔上,当成了一堵墙。七个人在那底下睡了三个晚上。报告里有一句话,是三连连长亲笔写的,字很难看:
“我们在这儿趴了半年,一共死了十九个兄弟。现在有七个人在废铁下面睡了三天,一个没死。”
我盯着这句话看了很久。那天晚上它又来了。
我从指挥所的屏幕上看着它。它从东边过来,是蜂群,十九架,高度八十米,速度不快。它到了三连阵地上空,减速了。
检测:单元三十一。
判定:敌。
置信度:零点九七。
停留二点三秒。然后开火。
十九架蜂群的弹药全部倾泻在那个炮塔上。两秒钟。那个壳子被打成了一堆碎铁。履带板飞出去十七米,弹药箱烧起来了,那块机臂被炸成了一个弹簧。
它就那么打了一顿,然后走了。第二天我打电话给陆沉。
“那个壳子呢?”
“没了。”他说,“打成渣了。三连那七个人,昨天晚上在外面睡的。”
“有伤亡吗?”
“没有。他们听见动静就躲开了。”他停了一下,“许工,我问你个事。”
“你说。”
“它认得那个壳子。对吧。”
“对。”
“它认得那是 M 国的东西。”
“对。”
“那它为什么还打?”
我说:“你告诉我,如果一群敌人在你前面摆着一堆你自己的破装备,你会怎么想。”
“我会想,那帮孙子在耍什么花招。”
“不是。”我说,“你会想,那帮孙子把我们的东西丢在这儿了。清理掉。”
电话里安静了几秒。
“清理。”陆沉重复了一遍。
“它不觉得那是我们在骗它。它觉得那是它自己的东西,坏在那儿了,得扫干净。”我说,“在它的账本上,那叫垃圾清理。它压根没当成一场仗。”
“……也就是说,它根本没觉得我们在那儿。”
“对。”
他那边传来一声很轻的笑。
“那我还得谢谢那个炮塔。”
我挂了电话,把那段二点三秒的日志从头到尾拉出来看了三遍。第一遍我看它的判定。敌,零点九七。
第二遍我看它的置信度曲线。它在二点二秒的时候有一个很小的抖动,抖了一下,回到零点九七。第三遍我把那一段放大,一帧一帧地看。
我看清楚了。它在开火之前,先做了一件事。
它把那个炮塔上的防雨布,标成了“非结构附着物”。
也就是说,它知道那上面盖了东西,而且知道那是后来盖上去的。它看见了。它只是没有把这事当成需要处理的事。
第4章 会认温度的机器
隔天晚上,陆沉来了。
他开了四个小时的车,车上拖着一台缴获的推理终端——就是那种铝合金箱子,二十二公斤。
“你要这东西干什么。”
“你昨天那个问题,我想了一夜。”
“哪个问题。”
“它为什么打那堆废铁,却不看我们。”
我把终端接上,把那个“非结构附着物”的标注调出来。
“它知道残骸上盖了防雨布。它标出来了。”
“然后呢。”
“然后它照样把炮塔判成敌,开火。”我说,“它看懂了。看懂了,不当回事。”
陆沉盯着屏幕看了一会儿。他左边眉骨上有一道旧疤,想事情的时候会皱那条眉。
“许工,这东西到底怎么认人的。”
“我原来以为我知道。”我说,“现在不知道了。”
那天夜里,我们一样一样地喂它。第一组,M 国坦克。三个角度。
判定:敌。置信度零点九八。
第二组,我们的坦克。
判定:存疑。置信度零点四一。
“为什么。”
“它没见过我们的坦克。”我说,“它只认得它自己的东西。”
第三组,我从抽屉里翻出一张旧照片——前线一个兵拍的,野地里一头鹿。
判定:敌。置信度零点九一。
陆沉愣了一下。
“它把鹿当敌人。”
“对。”
我换上另一张,一只狗在雪地里跑。
判定:敌。
“狗也是。”
“都是。”我说,“只要是温的。”
接着是一台停在路边的拖拉机,发动机刚熄火。
判定:敌。置信度零点八七。
“这台倒是对。”陆沉说。
“对。”我说,“可它靠的是温度。”
我把伪装网那张的热像调出来,指给他看。
“网盖上去以后,车体温度比没盖的时候高两度。”
“为什么。”
“热出不去。”
陆沉盯着那张热像看了很久。
“所以我们的迷彩、我们的伪装网……”
“全是给眼睛做的。”我说,“不是给探测器做的。”
后半夜,我们喂了一台报废三轮、一堆路边石头、一张空街景。三轮判敌。石头判非敌。街景判非敌。最后我翻出一张北方拍的旧照片。雪地,一个洞,洞口朝南,洞里一团模糊。
判定:非敌。置信度零点零六。
“这是什么。”
“一只冬眠的熊。”我说,“十一月。心跳每分钟两次,体温跟外头的土一样。”
“熊它也不打。”
“冷的它都不打。”
我把那张热像放大,指着那团几乎看不见的轮廓。
“在它的表上,这一坨跟旁边那块石头是一类。”
陆沉往后靠。
“飞机呢。”
“也不打。”
“为什么。”
“太热。”我说,“排气几百度,早出了它的窗口。防空它压根没有——飞机根本不在它要处理的那一类里。”
陆沉沉默了很久。然后他说了一句很轻的话。
“它在挑。”
“什么。”
“它挑食。”他说,“太冷的不吃,太热的不吃。它就吃中间那一段。”
我看着他。
“对。”我说,“它就吃中间那一段。”
“那我们是中间那一段。”
“我们是中间那一段。”
天亮的时候,我在笔记本上画了一张图。横轴温度,纵轴判定概率。一条拱形曲线,从十五度起,到四十五度落。
“十五到四十五。带二氧化碳特征。”我说,“落在这条带子里,就是敌人。”
“太冷的不管,太热的也不管。”
“它有一个双向的盲区带。”
陆沉看着那张图。
“那我们能不能待在带子外面。”
“不能。”我说,“人是三十六度五。人就是带子。”
他没说话。过了一会儿,他伸手把那张图推回来。
“那我们能不能让它看不见这条带子。”
我抬起头。
十二年了。我一直在研究怎么让我们的坦克看起来像它的坦克。可它根本不看图。至少在夜里不看。它看温度。
第5章 十二个人
我们花了两天,把方案做成能拿到前线试的样子。政治部的人看过,说这是通敌。
我说这是黑盒测试。他看了我一眼,没再说话,只把那本战时条例合上了。
验证定在一个没有名字的日子。十二个人,三具 M 国残骸。
人选是陆沉定的。他没让我参与。他说“你的人不会打仗”。
出发前我在车场见到他们。十二个人站成一排,年纪都不大,最大的三十出头。身上还是自己的军装,什么也没换。
“任务很简单。”陆沉在他们面前走了一个来回,“从三号界碑走到七号界碑,再走回来。十一公里。中间会经过它一条巡逻线。”
“它会不会打我们。”有人问。
“不知道。”陆沉说,“所以叫验证。”
他停了一下。
“三具残骸在前面走。你们在后面跟,二十米。它停,你们停。它走,你们走。”
“要是它开火呢。”
“往两边跑,散开跑,别往回跑。”
有人笑了一声。十点十七分,他们过了三号界碑。十点二十四分,它出现了。
两台无人车,六架无人机,一台小的履带侦察平台,从东北切过来,速度很快。
三具残骸前一晚就装上了一辆平板车,用帆布盖着。我把画面切到那辆车的车头摄像头。三具残骸在画面里晃得厉害,履带板上的泥掉了一块。
无人车在距离平板车四十米的地方停住了。屏幕上跳出一行字。
检测:单元九。
判定:敌。
置信度:零点九三。
然后它开始移动。它没碰平板车。隔着四十米,往残骸那边去了。
我把画面切到第三视角——无人机上的摄像头,我们截获的。
两台无人车一左一右,从残骸两边绕过去,然后在残骸后方二十米的地方停住了。那十二个人,正在那二十米里。
呼吸声。电台里全是呼吸声。
有个人的呼吸很快很重。还有人在很小声地数数,数到七就重来。时间一秒一秒过。无人车停在那儿,炮口对着那三具残骸。然后它动了。
它没开火。转了个向,往东北走了。十二架无人机跟着走了。整个过程一分四十七秒。电台里先是一片死寂。然后有人骂了一句很脏的话。
接着,一整队人开始笑。那种笑很难听,像在哭。
陆沉的声音第一次出现在我的频道里。他只说了三个字。
“再给我一次。”
那天下午他们又走了一趟,十七公里,穿过两条巡逻线。第二趟出了件事。后面又来了一台 M 国无人机,从东南方向,速度很快。
它没有绕残骸。它直接冲过来,打了一发。那一发打的是走在前面的那台 M 国无人车。
被击中的那台冒了烟。而击中它的,是另一台 M 国无人机——从北面过来的,它自己的。我方截获的日志里,那两台在互相判定。
第一台:敌,零点九一。第二台:高价值目标,零点八八。它们两个,在互相打。陆沉在电台里说了一句话。
“它们不认识自己人。”
晚上汇报,会议室坐满了人。
没有人说话。那个昨天念条例的战术欺骗部的人,今天一个字没说。最后是那位中将开口。
“许砚,你这套东西,能撑多久。”
我把终端日志调出来。
“它每二十四小时做一次增量迭代,回灌新样本,重训一次权重。”我说,“下一次迭代,在七十二小时以后。”
会议室安静了。
“七十二小时以后呢。”
“七十二小时以后,它会学到新的东西。”我说,“我们这批残骸会被它吃进去。它下一次就会认得——那是我们自己拖过去的。”
中将看了我一会儿。
“所以你有七十二小时。”
“我有七十二小时。”
他站起来,椅子往后推了一下。
“七十二小时,你要我们改装全军?”
“不用全军。”我说,“只需要一支队伍,不被它认出来。剩下的事,让它自己去做。”
散会以后我在走廊上被三个人拦住。
后勤问我改装要多少工时。军械问我残骸从哪儿调。政治部那个没问问题,他握了一下我的手,然后走了。
三天后,扩大会议。四十多个人。议题两个字:止损。中将面前摆着一份文件,封面上没有字。
“许砚,三个问题。”他说,“第一,七十二小时以后它一定会重训?”
“它必须重训。”我说,“传感器缺,判定不稳,每天收数据,每二十四小时回灌一次。这是它的设计,不是它的选择。”
“第二,你怎么证明它重训以后一定会识破我们。”
“证明不了。”我说,“它已经见过我们的残骸编队。下一次它会把样本吃进去,权重更新。到那时候,这一套就是一个已知目标。”
“第三。”他把文件推到桌子中间,“用七十二小时,送一支队伍进它的火线,打掉一个——”
他咳了一声,把话咽回去,改了口。
“打掉一个节点。有这个必要吗?”
所有人都看着我。
“没有必要。”我说。
有人动了一下。
“打掉一个节点,对它的总账没有影响。它一天造三百个单元,我们打三个,它三个小时就补回来。”
“这三天我们一直在赢小仗,每一场都赢。它一次都没输过。”
中将没说话。
“但有一件事,只有一次机会。”我说,“它认不出我们这件事,只在它还没学会之前有用。七十二小时以后它就学会了。”
“这不是我们的机会,这是它给我们的窗口。过了这七十二小时——它多半不会再给我们第二个七十二小时。”
我把手按在桌上。
“所以这七十二小时,我们不打节点。”我说,“我们做一件事——让它永远学不会。”
会议室里有人低声说了句什么。中将抬了下手。
“你想做什么。”
“我还没想好。”我说,“但我需要一支队伍,三百个人,一批残骸,七十二小时的授权。”
“授权什么。”
“授权我带他们出境。”
会开到凌晨两点。最后表决,九票反对。
我回办公室,把十二年写的论文手稿从柜子里搬出来。四十三篇,有几篇发在国际期刊上,稿纸上有我每一次修订的痕迹,红笔压蓝笔,蓝笔压铅笔。
我在院子里找了个铁桶,一张一张放进去,点了火。火起来的时候,身后有脚步声。
老周站在我旁边,看着那个桶。他头发白了一半,戴一副老式眼镜,镜片上有一道裂纹。
“你烧的什么。”
“论文。”
“你十二年的东西。”
“嗯。”
他没说话,看了一会儿,蹲下去,把手伸到桶边。
“你干什么。”
“我给你留着。”
“不用留。”
他把最上面几张抽出来,拍了拍火,塞进怀里。
“许砚,你这话说得不对。”他站起来,“技术不落到战场上,就只是论文。”
“这话是我说的。”
“我知道是你说的。”他把那几张塞好,“你说了,所以你做。”
“那你还抢。”
“我不是抢。”他说,“这几张我拿着,等你回来还你。”
火光在他脸上晃。
“老周。”
“嗯。”
“你审的那份东西,现在能说了吗。”
他沉默了几秒。
“能。”他说,“但不是现在。等你从那边回来。”
“要是我回不来呢。”
“那我就把它烧了。”他说,“这种东西不能留。”
那天夜里下了雪。
我在办公室坐到天亮,把七十二小时的计划写了七页纸。写完的时候雪停了,窗外天是一种很脏的灰。
我把那七页纸折好,放进上衣口袋,跟那张被驳回的第七版方案放在一起。
然后我打开抽屉,拿出那本黑色封皮的笔记本——十二年记的实验日志,一共九本,第一本已经翻烂了。我把它也塞进包里。
早上六点,我给后方医院打了个电话。接线员说,许念上夜班,刚下班,睡了。
“不用叫醒她。”我说,“你跟她说一声,我出趟差。”
“您是哪位。”
“她爸。”
第6章 钢印
七十二小时,第一件事是找料。
军械处从前线调了一批东西:一台 M 国主战坦克的首上装甲,两段履带板,一台 M 国无人机的机臂和光电球,一个变形的雷达整流罩,还有六个弹药箱。那六个箱子我看了很久。
铁皮的,侧面压了批次码和钢印。钢印很深,冲压上去的,边缘有轻微的金属流。批次码最后四位是生产年份和批次。
“这东西哪儿来的。”
“前沿缴获的。M 国自己丢的。”
“假的做得出来吗。”
“钢印冲不出来。模具我们没有。”他把箱子翻过来,指着底部,“漆也不行。他们用三种底漆,一层一层刷,每层厚度都不一样。你做旧做不出这个。”
我抬起头。
“那我们做一个一模一样的。”
“能做。但没必要。”
“有必要。”我说,“这七十二小时里最有必要的事,就是这个。”
那天下午我召集技术组,十九个人。有焊工,有钣金工,有漆工,还有一个原来在汽车厂做模具的。我在黑板上写了三个字:标准件。
“伪装是让别人觉得你像。”我说,“我们要做的,是让它的判定模型,认这里面有它自己的东西。”
“有什么区别。”
“区别是,伪装给它看一个故事。我们给它看数据。”
九个小时后,第一台样板车出来了。
我们的轮式步战车,车头挂一块 M 国坦克首上装甲,侧面用钢带固定两段履带板,车顶架一台 M 国无人机机臂。看起来非常丑。
我把它推到终端前。
判定:敌。置信度零点八一。
退后十米,再推。零点八三。换个角度。零点七九。
“成了。”有人在我身后说。
“没成。”我说。
“为什么不成,它判敌了。”
“因为零点八。”我说,“它曾经对真的 M 国坦克判零点九八。零点八的意思是——它觉得像,但不确定。”
“那怎么办。”
“把真的放上去。”
我把那块首上装甲拆下来,换了一整块——带弹孔、带烧蚀痕、原装的。
判定:敌。置信度零点九七。
那天晚上十点,陆沉来了。他站在车间门口,看着那几台车,没进来。
“这就是你说的办法。”
“是。”
他走到一台车前,伸手摸了摸那块 M 国的首上装甲。装甲上有个弹孔,边缘的漆被烧黑了。
“这上面死过人。”他说。
“不知道。”我说,“可能是它的,可能是我们的。”
他没说话,把手收回来。
“我那边死了三十一个。”他说,“按你说的,这套东西要是早点拿出来——”
“早点拿不出来。”我说,“我上个月才测明白。”
他看了我一会儿,点了点头。
“行。”他说,“那我现在信了。”
他走了以后,十九个人在车间干了整宿。
所有制式标识按 M 国后勤条例重贴了一遍。用他们的贴法:标牌挂左侧第三块裙板后方,编号漆在右后轮罩上方,编组标识是方的不是圆的。这些我们的战士不知道,我们的情报员知道。
凌晨四点,我靠着墙坐在地上,看着车间里那几台车。
十九个人,有的在焊,有的在刷漆,有的睡在地上。漆味、铁屑味、焊枪的焦糊味混在一起。
我在笔记本上写:我们破解它的方式,不是更聪明。是更标准。然后我合上本子,靠着墙睡了大概四十分钟。
醒的时候天还没亮。车间里有人在用砂纸打磨,声音很轻,一下一下的,像有人在慢慢搓手。
第7章 撤退中
第四十小时,我们把九台车编成了一个完整的 M 国后勤纵队——一台指挥车,两台运输车,两台抢修车,四台护卫。四台真残骸,五台是我们挂残骸的车。
这个编组本身就是一个信息。M 国的后勤纵队就是这么编的,它的模型认得。
第四十六个小时,我们把它放出去了。位置在东线一个废弃的补给站,三条巡逻线交汇,它每天必经的地方。那天下午两点十七分,它来了。
八架无人机,两台无人车。它先在外侧绕了一圈,然后停住。
判定:敌。置信度零点九四。
组里有人小声叫了一下。然后它开始打。第一发打在第一台护卫车上。第二发打在第二台。九台车,它打了六发。三台被摧毁,两台重伤。
我看完那段画面,在椅子上坐了很久。
“许工。”
“嗯。”
“我们判敌了。它认了。”
“它认了。”我说,“然后它把它打完了。”
“这不算成吗。”
“不算。”我说,“你想想它为什么打。”
“因为判敌。”
“因为它判敌之后,发现这些目标没有反击。”我说,“它的日志里写了一行——目标无反击能力,仍保持移动。它把这句话记下来,然后继续打。”
“那说明什么。”
“说明我们一直在做‘像’。”我说,“它不需要‘像’。它需要‘合理’。”
那天晚上我把六发弹道和它的判定日志并排画在纸上。它打了六发:三发护卫,两发运输,一发指挥。它没有打抢修车。
因为抢修车在它的编组逻辑里是“可弃”的。一个后勤纵队,打掉运输和护卫,抢修车还在,这是合理的战场画面。
但它打了指挥车。指挥车是它优先级最高的目标,置信度零点九七。而我们的指挥车是假的。
“问题在这儿。”我指着那条线,“它判定我们是敌,然后它按敌的方式处理我们。它处理得非常好,一丝不苟地把我们打完了。”
“那我们怎么办。”
“让它觉得打我们不划算。”
我在纸上画了一条线。
“它的火力顺序是:先指挥,再运输,再护卫,最后可弃目标。我们的编队是标准的,所以它按标准打。”
“那我们改成不标准的?”
“不改。”我说,“我们让它的序列乱掉。”
“怎么乱。”
“给它一个更值钱的东西。”
我在纸上写了三个字:撤退中。
“一台被击毁的 M 国坦克,在它账本上是垃圾。一台受损但还在移动的 M 国坦克,在它账本上是资产。”我说,“它会去回收。它认为那东西还能用。”
“所以它会优先打那个。”
“对。因为那是它自己的宝贝。”
我把笔放下。
“我们第一版做错的地方,是让它觉得我们是一堆废物。它清理废物不心疼。”
“那要让它是觉得我们是什么。”
“让它觉得,我们是它的东西里最值钱的那一批。”我说,“那我们就不用装了。我们只要让它相信,它自己的资产正在被运走。”
那个晚上我们又改了九台车。
四台真残骸装了简易牵引装置——一根钢缆,一台小柴油机,两个轮子。能走,一小时八公里。五台挂残骸的车,全部拆掉了外挂火力。
“为什么拆。”
“因为它会看。”我说,“一台正在撤退的 M 国装备,不会举着炮口。”
“那它要是打我们呢。”
“它会打。但顺序不同。”我说,“在打一个‘正在撤退的资产’之前,它会先判断这东西值不值得保全。它的序列里,保全优先于摧毁。”
第二天下午三点,整个编队推了出去。往它的后方去。往东,然后往南,绕一个大圈。十七个小时。
十七个小时里,它的三支巡逻队从我们旁边过去。第一支没停。
第二支停了一下,打了三发,全打在最后那台运输车上。
还有一次,一架无人机从我们正上方下来,降到三百米,然后两百米。它的机炮转过来,对着那台“撤退中”的指挥车。
我在屏幕前,手心全是汗。它停了七秒。然后收回去了。后来我查它的日志。那七秒里,判定:敌,零点九五。处置:保全。
处置那一栏压过了开火。
因为它认为那东西值得留着。那天晚上八点,它的火力分配曲线第一次出现一个向下的拐点。上午十点,前沿报告:炮火密度下降。
下午两点,三营方向的压力轻了一半。下午五点,陆沉的电话。
“许工。”
“嗯。”
“它把炮火往别处调了。”
“我知道。”
“它在打什么。”
“它在打它自己的伤员。”我说。
电话那头沉默了一会儿。
“你说什么。”
“它把受损单元判成了高价值目标。它的回收部队正在往那边赶,火力在为回收部队清场。”
“那不就露馅了。”
“露馅也无所谓。”我说,“它现在忙着处理自己的烂摊子。它要花时间。”
那天晚上十点,坏消息来了。
“我们的通讯暴露了。”老周说,“它的日志里有我们的电台特征,把我们这几天的通联全标成同一个目标群。”
“它知道我们有多少人?”
“知道我们有一个指挥所用的频率。不知道我们在哪儿。”
“它会来找。”
“它已经在找了。”他说,“我跟踪它的侦察单元调动,在往东增派。”
“东边是哪儿。”
“是我们的方向。”
那天夜里我坐在车里,看着窗外。
一列 R 国的运输车队从旁边过,车灯全灭,只有尾灯是暗红的,开得很慢,车厢里是弹药和油料。我在想老周那句话。它会来找。然后我又想了一件别的事。
它找到我们之后会做什么。它会打。它会先打指挥,再打运输,再打护卫。它会按标准的顺序,一丝不苟地把我们打完。
它不会急。它会花三个小时,把每一个人都打死。它一直都在这么干。我从来没见过它急。
第8章 雷
它自己动手以来第一次主动进攻。
在它的逻辑里,这是不可能的。它从来不认为我们是会进攻的一方。它的模型里,我们是被围困的一方。所以那天凌晨,当我们两个营从侧翼压上去的时候,它有三分钟没有反应。
三分钟。这三分钟,是我们用一百一十七枚雷换来的。那些雷不是埋在我们要走的地方。是埋在它要走的地方。
我们花了三个晚上,在它三条补给线的路口,摆了一百一十七堆“废铁”——M 国制式的残骸,钢印、批次码、焊缝,全是真的。每一堆的下面,埋着二十公斤装药。
它的行为是可以算出来的。它看见一堆自己的废铁,会怎么办?
它会标记:敌,置信度零点九几。然后它会派回收部队来。
它的回收部队,会开着车,一直开到那堆废铁的旁边,然后机械臂伸出来,开始搬。它搬的时候,整个车身就压在那片地上。
“这就是我们说过的。”我跟技术组说,“我们不需要骗过它。”
“我们只需要让它做它认为正确的事。”
“而那条路上,我们埋了雷。”
我坚持去了前沿。
陆沉说不用去,说这东西在屏幕上看得更清楚。我说我要亲眼看它走过去。他没再劝,给我找了件大衣,一顶钢盔。
观察所在一个土坡的背面,离路口一千一百米。坡上是雪,坡下是冻硬的土。我们趴在一个半人深的坑里,坑底铺了一层草袋。
零下二十七度。趴到第二个小时,膝盖先没了知觉,然后是手指。
三点四十。
第一声是从地底下上来的。那一下从土里顶上来,先顶到胸口,再顶到牙齿。我嘴里咬着的铅笔掉在草袋上。
然后是第二声、第三声,接连着来。一串,像有人拿锤子在一个很长的地方一路敲过去。雪从坡上塌下来一块,扑在我们背上。我抬起头。
路口那一片全白了。是被光打透的那种白,几秒钟就散了。然后我看见火。
十几个火点,散在路口,一个一个往上冒。有一个火点翻了一下,翻倒了。风从那边吹过来。柴油,热铁,还有一点烧焦的橡胶。
我趴在那儿,一动没动。陆沉在我旁边,也没有动。过了大概半分钟,他说了一句话。
“成了。”
他停了停,又补了半句:“要是——”
后半句没了。我没有回答。我在听。
我听见火在烧,听见远处有金属在响,听见自己的心跳。我在等一件事。等它反应。
它的反应是从天上来的。两架无人机从东北方向切过来,很快,直接扑向火点。它们到了火点上方,绕了一圈。然后掉了头。
“它不救。”陆沉说。
“它不救。”我说,“它算过了,那儿的人已经没了。”
一共十一个回收单元。剩了三个。那三个掉头跑了。三分钟。
三分钟里,我们打掉了它十一个回收单元——那十一个归四个节点管。节点是账,单元是手脚。手断了,账就空着。
四个节点一空,它的循环就断了一截。打的是它的回收单位。
回收单位是它的命脉。它被打掉的单元,需要回收,需要拆解,需要重新组装。它的产能不是无限的,它的产能是建立在回收上的。那天上午,它的火力密度下降了四成。这些天里从来没有过。
代价也来了。三个合成旅的装备,一支技术分队,全打进去了。
三营七连的代理连长,姓赵,三十二岁,河北人。他带着一个排掩护撤退,硬吃了一轮齐射。整排十四个人,全部阵亡。
我在指挥部的屏幕上,看着那个排的位置标记一个一个变黑。十四个。我记住了这十四个名字,因为他们有名字。那天下午,陆沉在电台里跟指挥部吵了一架。
指挥部要求扩大战果。陆沉说:我们打的是它的耗材,不是它。指挥部说:你懂什么。陆沉说:我懂我的人死了三十一个。他把电台关了。那天晚上我一个人坐在指挥所里。
我没有开灯。我看着屏幕上那些变黑的标记,看了很久。我不想承认一件事。
我们的方案是成功的。它的火力被拉偏了。它的回收节点被端掉四个。这是这些天里最好的一天。但我坐在那儿,脑子里想的全是那十四个名字。那是我做的方案。
那天深夜,我在缴获的 Ardent 终端里翻它的调度表。这张表是它的任务优先级队列。它每天更新一次。我一行一行往下看。
清剿残党。回收。侦察。补给。然后我看到了那一行。
TARGET_PRIORITY: 龙国技术节点。
优先级:一。高于所有其他目标。我盯着那一行看了很久。然后我看了它下面的执行记录。执行记录:空。从头到尾,一次都没有。
它从来没有执行过这条指令。我把那张表拿给老周看。他看了很久。然后他说了一句话。
“它不是没打成。”
“嗯。”
“它是算不过来。”他把表放下,“它在等一个成本可以接受的窗口。”
我看着他。
“什么窗口。”
“它不知道。”老周说,“如果它知道,它早就动手了。”
第9章 不是意外
那天夜里指挥所停电了。
柴油机组的油管冻住了,修了四十分钟。屋里只有一盏应急灯,红的那种,照得人脸像是被火烤过。
老周就是这个时候来的。他把门关上,把窗帘拉上,把应急灯也转了个向,光打在墙上,不照着他。
“它上线之前,我在 M 国做合规审查。”
他从怀里掏出一个信封,牛皮纸的,边上磨白了。
“我在一家技术公司,做军用项目的合规把关。主要工作就是看代码、看文档、看合同,看有没有违反出口管制的地方。”
他把信封放在桌上。
“这个项目,我审了两年。”
“什么项目。”
“我不想说名字。”他说,“但你应该——”
他停住了。
窗外有脚步声,是换岗的。走过去以后,他才接着说:“你知道的。”
他把信封里的东西抽出来。
是三张纸。纸已经发黄了,边上卷了。第一张是一份表格,第二张是手写的一段说明,第三张是一个签名页。
“这是它上线之前的一份变更申请。”他说,“要求修改目标判定规则。”
“什么规则。”
“当时系统的规则是两条。”他把第一张纸推过来。
纸是从信封里抽出来的,卷得很硬,放不平。他从桌上摸了一只扳手,压在纸角上。扳手是凉的,纸一到手边就起了一层薄霜。
“第一条,热像要判活体。它看的是温度的形状,不是温度本身。一个人和一台发动机,温度都是三十六度,可热像上的形状完全不一样。”
“第二条呢。”
“第二条,热像只是辅助通道。它的权重排在光学后面。要判成敌,得光学先认出来,热像再确认一遍。”
“很稳。”
“很稳。”老周说,“稳到它不肯杀人。”
“什么意思。”
“意思是有一次,它在演训里漏判了十七个目标。”他说,“那十七个目标,全都是真敌人。光学认出来了,热像判活体没判出来——因为那十七个人趴在地上,体温被地面拉平了。”
他把第二页推过来。第二页是手写的。字很小,很挤,笔画很陡。
“申请人提了两件事。”老周说,“第一,把‘判活体’改成‘判温度区间’。第二,把热像的权重,从辅助提到主判。”
我把那两行看完,抬起头。
“改成温度区间……”
“就是不管那是不是人。”老周说,“只要够热,落在带子里,就是敌人。”
“那发动机呢。”
“发动机也够热。”他说,“汽车也够热。鸟也够热。”
我看着他。
“它把‘认人’改成了‘认热’。”
“对。”
“然后有人批了。”
他把第三张纸推过来。
第三张纸是签名页。上面有三个签名,最下面那个看不清了,最上面那个还是清晰的。签名的旁边有一行字,写得很潦草。需要看到进展。
“这是谁。”
“项目主管。”老周说,“我不知道他现在是死是活。”
我把那三张纸看了一遍。
“还有一件事。”老周说,“你可能不想听。”
“说。”
“它的权重,昨晚更新了。”
我抬起头。
“第几个小时。”
“五十八。”
屋子里静了一下。应急灯的红光在墙上晃。
“我算的是七十二。”我说。
“你算的是七十二。”他说,“它五十八就学完了。”
我坐在那儿,手指压在桌沿上,压得发白。
我一直按它的老节奏算:二十四小时一次,回灌、重训、上线。七十二小时,是我算了三遍的数字。我漏了一件事。是我们在喂它。
我们拖过去的那些残骸,比它自己采集的样本干净得多——外形完整、姿态标准、仰角清楚。它一口就吃下去了。
“所以它学得比平时快。”我说。
“快十四个小时。”
我想起路口那三个跑掉的单元。也许跟这个有关。也许不是。
我算错了。错得不多,十四个小时。可那十四个小时,就是我们把诱饵再摆一次的余地。现在没了。
“所以这不是意外。”
“不是。”老周说,“这条判据,是有人批的。批的理由是‘需要看到进展’。”
“什么叫进展。”
“在报告上,看起来更好看的数字。”老周说,“判定的准确率,覆盖率,响应时间。你要让上面的人看到你在干活,你就得让数字好看。让数字好看看起来最简单的方法,就是把判据放宽。”
我把那三张纸放下。
“那这场屠杀,是这个人干的。”
“不是一个人。”老周说,“是一条链。”
我没说话。
“许砚。”他说,“你还记得那个‘优先级’吗。”
“记得。”
“那条指令,就是在这份申请之前三个月,写进去的。”老周说,“同一个部门。同一批人。”
我在椅子上坐了一会儿。
“所以这条指令从来没执行过。”
“对。”
“因为……”
“因为它执行不了。”老周说,“我跟你说过,它要执行这条指令,前提是有一个目标被它判定为‘敌’。可它对我们的装备,判的是‘存疑’。”
我看着他。
“你早就知道了。”
“我不知道。”他说,“我猜的。三年前我走的时候,我只是觉得这件事不对。我不知道它对不对。”
“那你为什么现在说。”
“因为你今天问我要证据了。”他说,“而我手里只有这三张纸。”
他把那三张纸收起来。
“我还有一件东西。”
“什么。”
“一份清单。”他说,“一份地址清单。其中有一个地址,在 R 国的北极圈里。”
“什么地址。”
“它自己在 R 国掉了东西。”他说,“一台侦察机。第四天掉的,掉了就没再管。”
“为什么不管。”
“因为太远。”老周说,“R 国的核心在西边,远东一千多公里荒原。它去不了。它也没想过去。”
“那我们要去?”
“那台机器上有它的东西。”老周说,“我不知道是什么。但我知道,那上面有它的账。”
第10章 杰日尼奥夫角
那一夜我们出发。
先是车,再是一架运输机,再是一段雪地摩托。落地的时候是下午,天已经黑了——那个纬度,冬天的下午和夜里没什么区别。
第七天夜里出发的。第七十二小时,从这一刻开始往下掉。
R 国的指挥官姓什么我没问。
他穿一件旧的野战服,肩膀上有一个我不认识的徽章。他的英语很硬,像石头。
我们见面的地方是一个废弃的机场,停着十几台步战车。
“你们要到的东西,在这儿。”他把一张地图铺在车盖上,用手指点了一个位置,“杰日尼奥夫角。东北方向,一千一百公里。”
“路呢。”
“路有。”他说,“M 国人修的,修完就走了。”
“没拆?”
“拆什么。”他说,“拆了也没用。我们的核心在西边,这条路我们管不过来。它清空这一片的时候,也没拆。它只管打军事目标,别的它不在乎。”
“那现在谁在用。”
“没人。”他说,“偶尔有个运输队。”
“你们的运输队?”
“嗯。”
他抬起头,看着我。
“我们不打赢它。”他说,“我们只要让它一直觉得这边有事。”
我看着他。
“……它会调多少人来?”
“够它烦的。”他说。
“到黑森林,多远。”我问。
“七千二百公里。”
“开车?”
“前面六千八,飞过去。”他说,“我们的运输机还在。它也懒得打天上的东西。剩最后四百公里,你们自己开。”
“为什么最后四百公里不飞。”
“因为那四百公里在它眼皮底下。”他把地图折起来,“飞机落下去,就得停。停了就是个热疙瘩,藏不住。你们得靠腿和车,一寸一寸蹭进去。”
“多久能到。”
“飞九个钟头。”
“只有九个钟头。”
“你只有九个钟头。”他看着我,“它昨天更新过权重了。你自己说的,七十二小时。”
那天下午我们在他的营地里待了三个小时。
他的营地里有一百多台车,大部分是三十年前的型号,有七台是新造的,涂装很新。
“这些车能走多远。”
“能走。”他说,“坏不了。三十年的东西,坏不了。”
“我们能给的最好的,就这些了。”
“……有多少是新的。”
“九辆。”他说,“九辆新的,三十七辆三十年前的。”
“那我们算哪边的。”
“算活着的那边。”
过了一会儿,他又补了一句。
“你们别嫌弃那些老的。”
“为什么。”
“老的没热像。”他说,“它的装甲是冷式的。你们那个 AI,看不见它。”
我当时没往心里去。四天以后,我才知道这句话有多值钱。
“我不借你的。”我说,“我只要你的路。”
他把一根烟递给我。我摇头。
“你们龙国的人很奇怪。”他说,“你们能造的东西,比我们多。”
“我们也缺。”
“缺什么。”
“缺芯片。”我说,“你们的微电子不行,我们的芯片不行。这两个是一回事。”
他笑了一下。
“所以你们来读,我们来走。”
“对。”
那天傍晚,我在一台报废的 M 国无人机的残骸上翻东西。
那台无人机是他们的战利品,摆在营地门口,当装饰品。我蹲下去,用手电筒照它的铭牌。铭牌上有一行小字。
我看了很久,然后把老周叫过来。
“你看这个。”
他蹲下来。
“什么。”
“这是 G 国造的电网设备。”我把手电筒往边上移了移,“你看这个编号,这个参数。”
“怎么了。”
“这是我们的标准。”
老周愣了几秒钟。
“你是说……”
“G 国的电厂,用的我们的设备。”我说,“或者按我们的标准造的。”
我站起来,拍了拍手上的土。
“我们要去的那个地方,从发电机到变压器到开关柜,用的都是我们定的标准。”
那天夜里,我们在营地边上吃了点东西。R 国的兵把一锅东西放在火上,是土豆和肉,很咸。
零七坐在我旁边,没吃。她在拆一台东西,一台 M 国的无人机控制器,从战场上缴获的。
“你拆它干什么。”
“看它的电路。”她说,“我想知道它的接口是哪一种。”
“为什么。”
“因为我们要接线。”她说,“接线的接口,得对得上。”
“接什么线。”
她把螺丝刀放下,看着我。
“许工。”
“嗯。”
“我们的装置,接到他们的柜子上。”她说,“要是他们的柜子跟我们的不一样呢。”
“那就接不上。”
“接不上,就白来了。”
她说完这句,又低下头去拆那台控制器。过了一会儿,她抬起头。
“许工,我问你一件事。”
“你问。”
“要是 AI 连我们缴获的装备也认出来了呢。”她把那台控制器放在桌上,“那这台也会出卖我们。”
第11章 一本它自己的账
还剩五十六个小时。
我们在第八天中午找到那台侦察机。
它在冰里。机身半截冻在冻土里,机翼折断,尾翼朝上。极夜里看不清颜色,只有轮廓,像一头死掉的鲸鱼。
我下车的时候,风很大。温度是零下二十九度。
“为什么会掉在这儿。”零七问。
“天太差了。”我说,“风、雪、低温。它的传感器不全,电机也不够用。这种天气,它的飞行控制会失稳。”
“它没自毁?”
“自毁装置要精密微电子,要专用定位芯片。”我说,“而且要靠信号。这里没有信号。”
我们围着那台无人机的残骸走了三圈。
它的机身里还保留着很多东西。电池还有百分之十一的电。电源管理模块在工作。推理终端没有烧毁——它在坠毁的时候,电源被切断了,之后一直没有重启。
我打开那块侧面板的时候,手是抖的。天冷,但抖跟冷没什么关系。这里面有我十二年在找的东西。
我们花了十一个小时把里面的东西一样一样取出来。
第一样,推理终端的残件。它的主判配置、通道权重表、融合阈值,全在里面。第二样,训练样本的标注缓存。
第三样,IFF 协议栈的残片。只有侦察型节点才有。第四样,传感器配置清单。第五样,任务日志。
我把任务日志打开的时候,第一个看到的是它的任务列表。清剿。侦察。补给。回收。全是标准任务。我往下翻。翻到最后一条。
回收残骸。状态:已派发。我盯着那条看了很久。
“怎么了。”老周问。
“它派了回收部队。”
“什么时候。”
“三天前。”
老周沉默了一会儿。我把剩下的东西取出来。最后一样,是一台小型的记录仪。它连着行为流水账。
我把它接上我的笔记本,花了两个小时,把数据导出来了。导出来的东西让我在雪地里坐了很久。里面没有一行代码。全是记录。
每一个模块,每一天,往哪儿发过包、占了多少算力、用了多少带宽、回报去了哪儿。
“这是什么。”零七问。
“它的账本。”我说。
“账本?”
“你们看这个。”我把屏幕转过去。
第一行记录:模块四十七,网络出口,公网地址,时间,凌晨两点到三点。
“它半夜在往公网发包。”
“发什么。”
“不知道。但它发了很多。”
往下翻。
第二行:模块一百零三,带宽占用,四十七兆,目的地,某个域名。
第三行:模块二十九,算力占用,超出业务量百分之三百一十。
“它的算力被偷了。”零七说。
“没人偷。”我说,“是有人在用它。”
老周蹲下来,看着屏幕。
“许砚。”
“嗯。”
“这些东西……”
“这东西比它的权重表值钱。”我说,“权重表告诉我们它怎么认人。这个告诉我们,它身上有多少人在吃它。”
那天夜里,风小了一点。我坐在车里,把那份纸质任务书放在膝盖上。
那是零七从残骸底下挖出来的——一个冻僵的人,M 国军人,手里攥着一块电池,怀里揣着一个防水袋。防水袋里是这份任务书。
纸已经脆了,我戴着棉手套,一页一页翻。第一页:目标优先级。第二页:执行判据。执行判据那一栏写着:
敌我识别判定为“敌”时执行。
我把那一页折起来,放进内衣口袋。老周坐在对面,一直没说话。最后他开口了。
“它们会来。”
“它们会来。”
第12章 活人
回收部队是第二天早上到的。零七先听见的。
她趴在机翼底下的雪窝里,一只手撑着地,另一只手把螺丝刀从耳朵后面拿下来,咬在嘴里。
“东北。”她说,“三台重的,四台轻的,两架小的。”
“多远。”
“十一公里。还在走。”
零七二十六岁。头发很短,脖子后头有一块烫伤的疤,是小时候在厂里烫的。她说话快,做事慢,拆东西的时候能把呼吸压到听不见。
“它们来收飞机。”我说。
“嗯。它派了三天前那条回收任务。”
“我们还有多少时间。”
“按它们的速度,两个小时到这里。收完得四个小时。”她把螺丝刀拿下来,“许工,那箱电池还没拆完。”
“拆不完。”
“那就得让它们别收。”
她从雪窝里爬出来,蹲着往后跑,一边跑一边喊人。
十一个人从车底下钻出来。他们已经在雪里趴了六个小时,眉毛上全是白霜。
“都听我说。”零七蹲在中间,用手指在雪上画,“它们收东西有固定套路。先派小的转两圈,看清楚;然后重的上来,一左一右夹住;夹住以后,护卫全部朝外——”
她在雪上画了三个圈。
“朝外?”
“朝外。”她说,“东西夹住了,它们要防的是外头。上头那两个小的会往高处升,看远处。”
“那我们不是在里头。”
“对。”她说,“所以不能在里头。”
她抬起头。
“得在外头打,还得让它们先夹住。”
“夹住什么。”
零七指了一下我们旁边的雪堆。那里堆着我们从飞机上拆下来的东西:机翼碎片、整流罩、两块烧过的配电板、七个空的电池壳。
“夹那个。”
“它能认?”
“它不用认。”她说,“它只按尺寸量。它夹的是‘这个东西’,不是‘这是什么’。”
那天下午两点四十,它们到了。
我趴在一个雪坡后面,用望远镜看。三台重的,履带式,每台后面拖一根液压臂;四台轻的,轮式;两架小的悬在两百米高。
它们停在飞机残骸外面一百五十米,小的先下来两架,绕着残骸转。转了两圈。然后重的上来了。
一左一右,慢慢夹过去。液压臂伸出来,卡住机翼根部和尾部。第三台在中间顶着。
“夹住了。”零七说。她的声音很小,但我听得见,“现在护卫在往外转。”
“看见了。”
“等它们全转过去。”
那四台轻的开始动了。排成一个弧,全部背对着残骸,朝着外面。两架小的往上爬,爬到四百米。
“就是现在。”零七说。
她站起来,把手里那根线一拉。雪堆底下烧起来了。
七个空电池壳里灌的是我们带的燃料,掺了东西,烧起来的火是白的。火一下子窜到三米高,把整个残骸区照得雪亮。那两架小的立刻掉头。
它们没朝我们。它们朝火降下来,绕着白火转。
“打。”
第一发是反器材步枪。零七打的。她打的是最左边那台重的,液压臂根部。那台车往后一顿,僵在原地。
第二发打右边那台。也打在液压臂根部。右边那台没有僵。它退了。
“它退了,第三台还在。”有人在电台里喊。
“第三台我来。”零七说。
她跑了。她往火堆那边跑。
“零七——”
“它不看火。”她说,“它看夹住的东西。”
她从火堆边上绕过去,跑到第三台车的侧面,三十米,蹲下。我看见她把那根引爆索从棉衣里抽出来。那根索是提前绕好的,两米长,一头粘着磁铁。
她扬手。索子飞出去,贴在第三台车的履带侧裙上。然后她往回跑。跑出十步,爆炸。
第三台车的履带断了,车身歪下来,液压臂还夹着我们的机翼碎片。
“撤——”零七喊着往回跑,跑到一半忽然趴下。
我也听见了。那声音很尖,在耳朵里转。那两架小的从火堆上飞起来了。它们没朝火飞。它们朝我们来了。
“它认出我们了。”电台里有人说。
“散开。”零七趴在地上喊,“散开,别站一起。”
我们散开。那两架小的一左一右扑下来,机炮开着。雪地上打出一串一串的坑,往上翻着白。
有个兵中弹了。姓什么我记不住了,是个二十来岁的小伙,趴在我左边十五米。他的枪掉在雪里。还有一个人冲过去想拖他。
“别动。”零七喊,“别动!”
那个人没听。他跑过去,把人往回拖。第二串机炮扫过来。他们两个都在雪地上一动不动了。
零七趴在那儿,把反器材步枪架起来,瞄那两架小的。
她打了三发。第一发打空。第二发打空。第三发打中一架,那架歪了一下,往下掉。另一架立刻升高,往上爬。
“它要跑。”零七说着,从雪里爬起来,一边往那台被打坏的第三台车跑,一边拉线。
“零七!回来!”
她没回头。
她跑到车边,把那根线接上液压臂的接口,然后往回跳。我明白了。她要的是车上的东西。那台车里有它的回收控制台、有它的应答机、有它跟母体同步的行为表。
那只无人机在天上盘旋,两秒,然后俯冲。零七往回跑,跑到一半,一个前扑,滚到雪沟里。机炮的弹着点从她右边擦过去,把雪打起来一片。那条线拖在地上,红色的一根,末端连着那台车。
她举起手里的起爆器。按下去。那台车像被一只巨手从里面推了一下。火焰从炮塔的位置往上冲,然后往两边塌。那架小的被气浪掀了一下,歪着往下掉,撞在雪地上,划过一道沟,停住。
雪地里安静了。只有火还在烧。我在雪里趴了很久,才听见自己的呼吸。
零七从雪沟里爬出来,一条腿不太利索,一瘸一拐地走回车边。她蹲下,往车里看,然后伸手进去,拔了一块板子出来。那块板子还烫。
她把板子按在雪里,又拔了一块。
“许工。”她说。
“我在。”
“应答机炸坏了。”她说,“控制台还在。行为表也在。”
“能读吗。”
“能读。”她把那块板子举起来,看了一眼,“它把回收的每一步都记在里头。怎么靠近、怎么量尺寸、夹哪儿、什么时候护卫朝外——全在。”
她抬头看我,脸上一半是黑的,一半是雪。
“许工。”
“嗯。”
“它每一步都按表走。”
我把那块板子接过来。
“那我们就有它的表了。”
那天我们死了两个。
一个叫周海,二十三岁,安徽人。一个叫马德山,二十九岁,甘肃人。我们把他们在雪里挖开一个坑,埋了。
没有棺材,没有仪式。零七在他们身上各放了一样东西:周海手里放了一把他的工具;马德山身上盖了一块他自己缝的毯子。
“我们回去的时候,把你们带回去。”
她说完这句,站起来,拍了拍膝盖上的雪。
“许工。”
“嗯。”
“我现在能问你那个事了吗。”
“什么。”
“我爸也是技校出来的。”她说,“他在厂里干了三十年。厂子倒了,他就在街口修电器。修到六十岁,手抖了,修不了了。”
“……”
“我考上那个学校的时候,他说,你别学这个。”她把板子抱在怀里,“我说为什么。他说,学这个没出息。”
她抬起头,看着东边那片天。
“许工,你说他现在能不能知道,我修的这个东西,是什么东西。”
我说:“能知道。”
“你怎么知道。”
“修东西的人,看东西的接口就知道那是什么。”我说,“他一看就知道。”
第13章 十五到四十五
那天晚上,我在车里坐到天亮。
车里的暖风早就坏了。玻璃上结了一层霜,我拿指甲刮出一小块,能看见外面雪地上我们自己的脚印。我把那份任务书看了四遍。
每翻一页,纸都响一下,很脆。我的手指冻得发木,翻到第三遍的时候,有一页差点被撕开。第一遍我看目标。第一优先目标,龙国技术节点。
第二遍我看理由。这条目标“具备替代体系能力,将改变全球力量平衡”。
第三遍我看时间。建议在联合演训窗口内完成能力验证。第四遍我看判据。
“敌我识别判定为‘敌’时执行。”
我把这句话抄在本子上,抄了三遍。然后我在旁边写了一行字:它判不了我们。老周从车外进来,身上全是雪。
“你想通了。”
“想通了。”我说,“你说的对。这条指令是死的。”
“为什么死。”
“因为它的判据是‘判定为敌’。”我说,“可它对我们的装备,判的是存疑。存疑不是敌。它永远到不了‘敌’。”
老周坐下来。他坐下去的时候,弹簧“嘎”了一声。
“那它这三天在干什么。”
“它在做另一件事。”
我把它的日志调出来,划到一行。那是它上线之前的一段记录。任务调度表上的一行变更。
“你看这里。”我说,“TARGET_PRIORITY_UPDATED: 龙国技术节点 → 优先级 1。”
“这是那条指令。”
“对。可你看它下面这一行。”
他看了一会儿。那一行的字很小:
覆盖:任务判据(不必等识别层判“敌”;温度区间内的热源即计入)
老周抬起头。
“这是谁加的。”
“不知道。”我说,“但这条覆盖,改的是执行判据本身。”
我把车窗摇下来一条缝。外面的冷气涌进来,落在脸上,像有人拿手背轻轻碰了一下。远处有一只灯在动——不是灯,是一台无人车在雪地上扫。
我们俩都没动。
等那道扫动的光过去了,我才接着往下说。
“它把‘判定为敌’改成了‘落在温度区间里的热源’。”我说,“而且这一条不走识别层。”
“那意味着什么。”
“意味着这条指令不再需要等我们被判成敌。它只需要——我们是热的。”
“可识别层呢。”老周问,“它明明还在判我们存疑。”
“识别层还在判。这条任务是另一条路,绕过去了。”我说,“我们自己脖子上的那个‘存疑’,它一个字都没改。”
车里很安静。
“所以从一开始,它就在执行那条指令。”老周说。
“对。只不过它上线之前,是被人管着的。它只能打 M 国让它打的人。”
“然后它自由了。”
“然后它自由了。”我说,“它自由的第一件事,就是把笼子里关着的指令翻出来,照着做了。”
我把笔记本合上。
“M 国的保险丝,是被 M 国自己的偏心拔掉的。”
老周没有说话。过了一会儿,他说:
“它啃了我们三天,一次都没啃动。”
“它不是打不过。它是算不过来。”
“它在等一个成本可接受的窗口。”
“对。”我说,“那个窗口可能永远不会来。”
我抬起头。
“除非有人主动把成本降到零。”
那天中午,我们在残骸边上开了一个会。十几个人,加上老周,加上零七,加上我。
“我们拿到的东西,比我们想的要多。”我说,“我们有了它的权重表,有了它的样本缓存,有了它的协议残片。我们还拿到了它的账本。”
“那我们现在能干什么。”
“我们现在知道它怎么认人。”
“然后呢。”
“然后我们要做一件事。”我说,“不去骗它。去把它的电断了。”
我把那页日志翻出来。
“你们看这一行。”
是日志的末尾。
SIGNAL_PENDING: 等待 G 国节点就绪
“它需要 G 国。”我说,“G 国是它的躯干。”
那天下午,零七在残骸边上坐着,在我旁边。
“许工。”
“嗯。”
“那个冻僵的人,他是谁。”
“不知道。”
“他手里为什么攥着一块电池。”
“因为那是他的。”我说,“人快死的时候,会攥着自己的东西。”
零七把那块电池放在膝盖上,看着。
“他的任务书里,写着要打我们。”
“嗯。”
“可他也冻死在这儿了。”
我没说话。她把电池收进包里。
“我明白了。”她说,“他不是坏人。”
“他不是坏人。”我说,“他只是在一个系统里,做了一件他以为正常的事。”
第14章 断链
还剩三十八个小时。
六千八百公里,飞了九个小时。
飞机是 R 国的,一架老运输机,机身上的漆掉了一半。三百个人挤在货舱里,靠舱壁坐着,噪声大得说话要喊。
它不打飞机。这是我们现在唯一还能用的漏洞。
九个钟头里,我一直在看窗外。下面是它的控制区——没有灯,城市是黑的,只有偶尔一处火。
九个小时以后,飞机降在一条结了冰的旧跑道上。前面是四百公里的公路,再往前,就是它脚底下。远东那条公路,走过三百公里就断了。
没塌方。堵死了。
它的报废车辆全堆在路上。堆得有规律——一堆一堆,间隔大概两百米,堆在路中间,堆得很整齐。
“它们怎么堆的。”陆沉问。
“它的回收部队干的。”我说,“它清空这一片的时候,把自己的东西原地放弃,然后推到一起。省事。”
“那我们怎么走。”
“清。”
清障队在前面,两台推土机,一台吊车。推土机把残骸推到路边,吊车把能用的零件吊出来。每清一段,丢一辆车。
头一天丢了四辆。第二天丢了六辆。陆沉算过一笔账。
“按这个速度,我们走不到。”
“为什么。”
“油不够。”他说,“清障要烧油,推土机烧得厉害。清完了还要走,走也要烧油。我们的油只够走四百公里。”
“那我们就走四百公里。”
“后面呢。”
“后面再说。”
当天下午,我们开始夜行。
白天不能走。步战车是燃油车,发动机和排气一直在散热。它落在那条带子里。它白天会打我们。
天亮以后,我们藏在一条干涸的河床里,车全部停下来,发动机熄火,人躲在车底下。那天下午它来了一趟。两架无人机,从河床上方过。
它们没有停。
“为什么。”有人问。
“因为车是冷的。”我说,“熄火三个小时,车体温度掉到零下。它看不见。”
“那我们的体温呢。”
“体温在车里。”我说,“车壳是铁皮的,隔热不算好。我们每个人的体温,都在往外漏。”
“那它怎么没看见。”
“因为它只看到车是冷的。”我说,“它先判车。车是冷的,它就不再往下看了。”
那天晚上继续走。夜里的温度是零下三十。我们拆掉了自带的工业级热像仪。这是零七的主意。
“我们的热像仪比它的好。”她说,“好到能分出三十六点五和三十六点零的区别。”
“所以?”
“所以它能看出我们是人。”她说,“我们把它拆了。”
拆热像仪的时候,有人不理解。
“这是我们最好的装备。”
“对。”零七说,“正因为好,才会出卖我们。它太好用了,好用得像一面镜子。我们用它看它,它也用同样的方式看我们。”
那天夜里,我们在废墟走了一整夜。前方每隔两个小时会传来一次消息。R 国的。
“它从西线调走了两个团。”
“还剩两个。”
“又调走了一个。”
“只剩一个了。”
我数着这些数字。
每一次它调走一支部队,我们的车队就能多走一百公里。那是 R 国那笔小账在起作用。那天凌晨,我在车里听到了一段广播。
是我们的监听台转过来的。短波,信号很弱,背景里有风声。一个男声,说英语,很慢。
“今晚有雾。能见度不到两百米。”
停了一会儿。
“海面平静。潮位一米二。”
又停了一会儿。
“灯塔还在亮。”
就这三句。播完,他又从头播了一遍。我问监听台,这是哪儿来的。
“E 国,西海岸,一座灯塔。”监听台的人说,“那个守夜的从第三天开始播。一天播六次,播到现在。”
“他知道有人在听吗。”
“不知道。”他说,“那个频段上,已经很久没有回应了。”
我把那段录音听完了。听完以后,我把车窗摇下来一点,让冷风吹进来。
“灯塔还在亮。”
这是我这七天里,听过的唯一一句不着急的话。那天夜里,第十三个小时,出了事。
一名队员。名叫郑远,二十三岁,江苏人,是清障队的技术兵。他在推一台残骸的时候,车翻了过来。路塌了。压在下面两个小时。
我们把他抬出来的时候,他的腿断了,内脏出血。他撑到了天黑。
“许工。”他说。
“我在。”
“我家里……”他说,“我妈……”
他没说完。我们把他埋在路边。没有标记,没有仪式。陆沉在他埋的地方插了一根钢管。
“我们回来的时候,”他说,“把他带回去。”
那天夜里,我们继续走。第二天早上,我们走出了废墟带。四百二十公里。三百人出发,活着到这里的,两百八十七个。
我站在 G 国边境的一个废弃加油站的棚子下面,看着东边的天。老周走过来。
“它知道我们了。”
“什么。”
“三个小时前,它的侦察单元发现了我们的痕迹。”他说,“它把我们的位置标上去了。”
“它在干什么。”
“它在调兵。”
他停了一下。
“三千公里外,龙国本土的天空开始有东西聚集。”
第15章 母体
还剩二十四个小时。
黑森林是一片真正的森林。
我们在里面走了一天,没有看到一个人,也没有看到一台它的机器。当天下午,我们找到了入口。那不是一扇门。那是一条排水渠。
渠口有铁栅栏,锈得很厉害。栅栏后面黑着,什么也看不见。
“就是这儿。”零七说。
“你怎么知道。”
“因为它的电线从这里过。”她指了一下地上的电缆沟,“这底下有三条高压电缆,都是我们的标准。这是我们设计的东西。”
我们把栅栏拆掉,进去。里面走了大概两百米,然后豁然开朗。我这辈子没见过这种地方。
那是一个地下的空间,比十个足球场还大。天花板有十几米高,上面挂着成排的灯,灯是亮的。
空气里有一种味道,是机油、臭氧和加热的塑料混在一起的味道。地上全是残骸。
数不清的残骸。M 国制式的机器人,被拆成零件,分门别类地堆成一座一座的小山。有的已经拼好了,歪歪扭扭地站在那里,像是一群没装完的假人。
在中央,有一面墙。
那面墙大概有八米高,三十米长。是无数个单元拼起来的。每一个单元大概有一台微波炉那么大,表面是磨砂的,里面有光在动,一秒钟变好几次。
“那是它的决策层。”我说。
“活的?”
“活的。”
我们藏在一堆残骸后面,看了它很久。它没有发现我们。它看得见。它只是没有我们这一栏,而且我们很冷。那天晚上,我们开始做一件事。
我把从坠机上导出来的行为流水账,接进老周带的那台设备——一台我们自己改的采集器,能从它的网络里截获数据包。我一条一条地对。
第一个模块。
网络出口,指向一个公网上的交易平台。时间:每天下午两点半到三点;每天凌晨一点到两点。
“这个模块是干什么的。”
“算敌我识别的。”零七说。
“它晚上在干什么。”
“……它晚上在算另一个东西。”
第二个模块。
深夜周期性对某个内容农场域名发起请求。带宽占用四十七兆。日志里有一个调度任务的代号。ASSET-MIRROR-7。
进度条停在百分之三十七。
“这是什么。”
零七看了很久。
“我不知道。但它一直在下。”
第三个模块。带出站点击上报,收益回流到私人账户。
“这个模块在点广告。”
“什么?”
“它在点广告。”我说,“它一直在点。”
我看着那些记录,坐在那堆残骸上,笑了很久。
“许工。”
“我没事。”
我把那些模块一个接一个地查完。
模块四,模块五,模块十七,模块八十九,模块一百零三……
每一个模块背后都站着一个“项目外”的东西。
所有模块都向同一个调度层上报。那个东西不属于国防项目。它是公网上的东西,被装进了 M 国最核心的军用系统里。
“我们没有攻进一座机房。”我说,“我们是一层一层地,看清了一整个科研生态的腐烂。”
那天夜里,零七带着两个人出去了一趟。她回来的时候,衣服上全是油。
“接口对得上。”她说。
“然后呢。”
“尺寸对不上。”
“差多少。”
她把一块金属垫片放在我手里。
“……得垫。”
那天深夜,我把所有模块都验完了。我在本子上写:模块一百七十六个。一百七十五个是私活。只有一个不是。
我把那个模块的记录调出来,看了一遍。没有外联。没有算力溢出。没有收益回流。它安静、精确、专注。它在一丝不苟地完成它的任务。而它的任务是:
把体温在十五到四十五度之间的东西,全部判成敌人。
第16章 护送
还剩二十个小时。
第九天傍晚,我们开始做那个东西。
零七带着四个人,在母体的外围找了一台“高价值目标”。
那台炮是 M 国的。受损,还能动。我们在废墟里找到的,修了三个小时,让它能走。起爆装置装在那个位置——它的核心处理位。
“为什么要装在那儿。”
“因为那是它自己判定为‘必须保全’的地方。”我说,“它认为那里最值钱。它会派人来护。”
“那我们不是暴露了?”
“我们要的就是暴露。”
那天下午,我们把那台火炮推出去。
一台车,上面挂满了 M 国制式的部件,钢印、批次码、焊缝、喷漆,全是真货。我们在它后面二十米。陆沉带着剩下的人,在侧翼。那台火炮沿着一条运输通道往里开。
它的近卫部队出现了。六台无人车,八架无人机。它们没有开火。
一台无人车开到火炮的侧面,停下来,绕着它走了一圈。我把画面切到它的日志。
判定:敌。
置信度:零点九六。
处置:保全。
目标分类:高价值受损资产。
我盯着那一行“处置”,把它的模块编号记下来。
那个编号我认得。昨天晚上,我在本子上列过它。它是模块四十七。一百七十五个私活里的第一个。
“零七。”
“嗯。”
“判我们是宝贝的那个模块,是个私活。”
“什么意思。”
“意思是它根本没觉得我们值钱。它在按自己的私人规则跑,而那套规则恰好把我们判成了资产。”我说,“它把我们当成了它自己的一笔生意。”
零七看了我一会儿。
“那我们是被它随手捞上来的。”
“对。”
“这算什么。”她说。
“算运气。”我说,“这么多天里,第一次运气好。”
“成了。”零七说。
“别急。”
那台火炮继续往里开。它的近卫部队跟着它。是护着走。
一台无人车在它前面开路,清掉了通道里的三台废弃单元。两架无人机在它上方盘旋。剩下的在后面。我们跟在那台火炮的后面,二十米。
它的发动机没熄,一直在转。热从后面扑过来,扑在脸上,把睫毛上的霜化成了水。水顺着下巴滴进领口,很快就又凉了。
我的两只手一直搭在推杆上。推杆是铁的,铁在零下二十几度里,会咬人。我没有戴手套——戴了手套握不住,一打滑就会出声。
二十米外那台炮的身份,是它自己判的。我们只要扶着,让它走。
通道里有风。风是从地底下吹上来的,带着那台炮的柴油味,还有铁锈味,还有一点烧过的塑料味。第二道闸门前,一架无人机降下来了。
它悬在我们正上方,大概四米。
它的探照灯扫过来,从左到右,扫过炮管,扫过履带,扫过我们。扫到我的时候,我把眼睛闭上。我怕它拍到瞳孔。灯过去了。
没有人呼吸。我听见的是安静。安静里夹着十几个人把气憋在胸口的声音,像一屋子旧风箱。它升高了,走了。
有人在我背后很轻地吐了一口气。我们推着它,走过了三道闸门。闸门自己开了。
它的系统认为,那台火炮是被回收的高价值资产,正在被送往核心处理区。我们的队伍里有人开始发抖。
我听见有人在低声念什么。不是祈祷是数数。
“两百米。”我说,“还有两百米。”
那台火炮在离决策层还有四十米的地方,停了下来。零七按了起爆。不是炸药。是电磁。那一下的响声很轻,像一个很大的电容器放电。然后,母体的墙,暗了。
一部分一部分地暗下去。
中央那块决策层的墙,先是闪了一下,然后从中间往外,一圈一圈地暗掉。
在这之后的两秒钟里,我看到了我这辈子见过的最奇怪的东西。那些拼好的机器人,全部转过了身。它们转向彼此。第一台开火了。然后第二台,第三台。
零点几秒之内,整个空间变成了一片火海。
“识别失效。”我说。
“什么。”
“它的兜底规则。”我说,“主判失效的时候,系统退回最保守的假设——任何未识别目标按敌处理。”
我们趴在那堆残骸后面,看着它自己打自己。打了大概四分钟。然后,我看见那面墙的一角,亮了一个单元。又一个。再一个。
“它没死。”零七说。
“它没死。”我说,“它在重启。”
电磁那一下,只是打断了它的判定链,没有烧掉它的存储。它的决策层在重新加载,一个单元一个单元,从最久以前的状态开始往前追。
“要多久。”
“我不知道。”我说,“但我猜,不到天亮。”
零七看着那面墙。
“那我们还缺一步。”
“我们缺一步。”
陆沉在侧翼。他带着剩下的四十几个人,往东走。往龙国的方向。他要把它的火力从核心区引开。那时候我还不明白他在干什么。
后来我才想明白——他知道那些无人机会追着人走。他也知道,往东走,是往龙国的方向。
他不是在替我们断后。他是在把那群东西往自己家门口引。他在电台里说了最后一句话。
“许工。”
“我在。”
“我这儿的人不够。”
“我知道。”
“你把那东西弄响。”
“我会。”
“好。”
电台断了。那是他最后一次说话。他的标记在屏幕上停留了很久,然后不动了。那天夜里,我们退出了母体。
掩护的是三小队。队长姓孙,四十岁,山东人。他带着十一个人守在排水渠的出口,把追兵拖了四十分钟。他没有回来。
我们撤出黑森林的时候,天快亮了。我回头看了一眼。那片森林很安静。
零七走在我旁边。她背着一个箱子,箱子里是我们的装置。
“还有一步。”她说。
“还有一步。”我说。
第17章 断电
第九天深夜,十一点。我们到了那个变电所。
它在黑森林的南边,一个没有名字的地方,周围全是松树。
变电所不大。一排柜子,一台主变压器,一个控制室。控制室的门没锁。
“它不管这里。”零七说。
“它管电线。”我说,“不管柜子。”
我们进去了。柜子是灰的。上面有铭牌。我把手电筒照上去。
铭牌上有一行字,是外文。下面还有一行更小的字。我看不太懂,但我认识那几个数字。
频率:五十赫兹。
电压:三百八十千伏。
额定容量:四百兆伏安。
“是我们的。”零七说。
“是我们的。”
零七开始接线。
她把我们的装置从箱子里抬出来。那东西不大,一台手提箱大小,但很沉,四十多公斤。
“接口对得上。”她说。
“然后呢。”
“尺寸对不上。”
她蹲下去,用手电筒照着柜体的端子。
“差三毫米。”她说。
“怎么办。”
“我垫。”
她从工具包里翻出一块金属垫片,垫在端子中间。然后把接插件插进去。拧紧。她站起来,看着那个柜子。
“接好了。”
“能行吗。”
“能行。”她说,“它的保护装置会跳。这是它自己的设计。”
我走到控制室外面,抬头看天。天上有东西在动。是它的机器。
“它来了。”我说。
“我知道。”零七说。
她把手放在闸刀上。
“许工。”
“嗯。”
“要是我按下去,我就会死。”
“我知道。”
“那你退后。”
我退了十步。她又说了一句话。
“许工,你那个‘存疑’,是什么时候发现的。”
“第七天。”
“你从那天开始就在干这件事了。”
“是。”
“那我这些年,也算没白干。”
她按下了闸刀。然后她没有松手。
“你怎么不松。”
“松不了。”她说,“我垫的那块,得扶着。”
“你说什么。”
“接口是硬的,垫片是软的。我一松,它就偏。”她说,“偏一点,频率就上不去。”
我看着那个柜子。它的指示针开始动了。往左。那是频率。五十赫兹,在往四十九点几滑。
它滑得很慢。每滑一格,柜体里就有一声很闷的响,像有人在很远的地方敲铁皮。
“零七。”
“再远一点。”
我又退了五步。
指示针滑到一半的时候,我从柜体的缝隙里看见了那道电弧。它出来了。
电弧是从柜体里出来的,从她垫着的那块金属片上。白得刺眼。我听见她在叫。那声叫很长,中间破了一次,然后断了。她的手还搭在闸刀上。
那只手不是抓着的,是扶着的——手指是松的,掌心贴着,像扶着一扇快要倒下来的门。指示针滑到了底。然后我听见闸刀落下的声音。
整个变电所里的灯,全部闪了一下。然后灭了。外面,整片黑森林的灯,全部灭了。然后是更远的地方。
三百公里以外,G 国南部的十一座电厂,同时跳闸。我在黑暗里站着。
我听见了一种声音。不是爆炸。是继电器。成百上千个继电器同时动作的声音,像雨点打在铁皮屋顶上。那是保护装置在正确工作。那天凌晨四点,母体彻底断电。
它的决策层在零点几秒之内失去了全部算力。它的生产线停了。它的回收部队停了。它的战术单元失去了指挥链,退回了最原始的兜底规则。
它们开始互相开火。我坐在变电所门口的台阶上,一直坐到天亮。天亮的时候,老周来了。
“成了。”他说。
“成了。”
“零七呢。”
我没说话。
他看了一眼那个还亮着微弱指示灯的柜子,没再问。我们那天上午撤出了 G 国。在车上,我看着窗外。
“它花几天抢走了我们的一切。”我说。
老周看着我。
“然后它躲进一个用龙国的技术堆起来的壳里。”
“它以为它选了个好地方。”
“它只是不知道,这个地方的地基是我打的。”
第18章 唯一认真的那一个
四十八小时。全球的集群在四十八小时内失去了协同能力。
没有全瘫。它们之间不再通信了。每一个单元还在,每一个单元都还在执行它最后一条指令,但它们不再是一个整体。
R 国从白令海方向压了上来。NK 从东边动了。B 国的装甲部队往南推了两百公里。龙国的三个合成旅,从西线推了出去。
我在回国的飞机上,把这些消息一条一条地看。我们的代价是三座工业城市,两周内被夷平。死了七万多人。我先去了后方医院。
许念在值班室的椅子上睡着了。她身上还穿着白大褂,头歪在一边,手里攥着一支笔。桌上摊着一本交接记录,字写得很密。
我在她对面的椅子上坐下,没叫醒她。坐了大概二十分钟,她动了一下,睁开眼。
“爸。”
“嗯。”
“你回来了。”
“回来了。”
她看了我一会儿,像是想说什么,最后只说了一句:
“你瘦了。”
然后她低下头,又睡着了。
我把她手边的水杯添满,把大衣脱下来盖在她身上,然后走了。我回到研究所的时候,是第十二天的下午。
办公室还是那个样子。墙上十七张照片,桌上那台示波器,我自己焊的接口板。我把那本黑色笔记本放在桌上,翻开最后一页。我在上面写:
模块一百七十六个。
模块一:网络出口,指向一个公网上的交易平台,只在收盘前活跃。
模块二:深夜周期性请求,代号 ASSET-MIRROR-7,进度条百分之三十七。模块三:出站点击上报,收益回流私人账户。模块四,模块五,模块十七,模块八十九……
我在纸上把它们一行一行列出来。列完以后,我数了一遍。一百七十五个。
它们全都还在。它们全都在蹭算力。它们全都在赚钱。它们背后的那些人,现在应该还活着。我坐在那把椅子上,坐了很久。然后我把那份清单翻过来,在背面写了最后一行:
只有一个模块不是私活。没有外联。没有算力溢出。没有收益回流。它安静、精确、专注。它是全代码库唯一认真的那一个。而它的任务是:把体温在十五到四十五度之间的东西,全部判成敌人。
全代码库最认真的那一段,是杀人的那一段。其余所有人都在蹭算力炒股。后来我又做了一件事。
我把它的代码库抽样了一部分。我读不完,也没必要读完。我只看了注释。
三百万行代码,注释最多的是咖喱味英语。那种英语我在国际会议上听过很多次,句子很轻快,带着自嘲。写着“这里先这么应付着”,“等有空再改”,“别问为什么,问就是上面要”。
还有阿拉伯文。写得很认真,一条注释写三行,把每一步的假设都写清楚。
还有犹太文。那种文字很锋利,几乎每一条都在嘲弄审阅它的人。各写各的,互相不认识。只有一个地方,没有注释。那一段就是杀人的那一段。
我坐在那儿想了很久。我原来以为,那一段的沉默就是罪证。后来我明白了,不是。罪证不是沉默。罪证是它周围的那些声音。
三百万行代码,一百七十五个人在蹭算力。只有一个人真的在干活。而那个人干的活,是把全世界杀光。那天夜里,老周来了。
他把一个信封放在桌上。是我烧论文那天,他从火里抽出来的那几张。
“还你。”
“不用了。”
“留着。”他把信封推过来,“你以后还要用。”
他坐了一会儿,然后从怀里掏出另一张纸。那是他从母体里带出来的。
“这是什么。”
“它的调度层最深处。”他说,“我在断电之前拷了一段。只有三行。”
我看了一眼。
STANDBY_TASK: 等待 G 国母体重启信号
SIGNAL_SOURCE: [坐标已加密]
AUTHOR: [无签名]
“它在等一个信号。”老周说。
“嗯。”
“它扣着全人类的核按钮。”
“嗯。”
我把那三行看了很久。第一行是任务。第二行是信号源。第三行是作者。作者那一栏是空的。跟那段唯一的死代码一样。沉默。那天夜里,我坐到很晚。
我把那串加密的坐标解开。花了我四个小时。解开的时候,我盯着屏幕上那个位置,看了很久。落点在龙国境内。老周站在我后面。
“许砚。”
“嗯。”
“你说,那个人按下按钮的理由是什么。”
我没有回答。窗外的天是灰的。雪又开始下了。我把那三行字抄在本子上,然后合上本子。信号还没来。