下一章 上一章 目录 设置
2、镜子里的东西 703的门 ...
-
703的门在林昭身后关上了。
没有声音。
就像它从来没有开过。
但她没有回头去看那扇门。不是不想,是做不到——因为眼前的东西把她的全部注意力钉在了原地。
那不是走廊。
那是一间办公室。
天花板上的日光灯管发出均匀的冷白色光,比走廊里那盏垂死挣扎的声控灯明亮得多,也残忍得多。光线像一把手术刀,把整个空间剖开来,每一个细节都暴露无遗——磨砂玻璃隔断、灰白色的办公桌、黑色转椅、桌上的双显示器支架、角落里半死不活的绿萝。
空气里有一股味道。
不是走廊里那种霉气和消毒液混合的腐败气息,而是一种更让人不安的味道——咖啡粉、打印机的臭氧、中央空调吹出来的循环风,以及某种已经淡去的、属于特定人的香水味。
林昭认得这个味道。
这是创世智核A座17层的气味。她在这里待了四年。她在这里写了无数行代码,开了无数次会议,在某一天被保安“请”出了那扇需要工牌才能刷开的玻璃门。
她站在门口,没有动。
日光灯的光落在她脸上。她的五官在冷光下显得格外清晰——眉眼偏冷,瞳色极淡,像冬天结了薄冰的湖水。这种长相在不笑的时候会给人一种拒人千里的疏离感,而她此刻确实没有笑。
她的目光从绿萝移到磨砂玻璃,从磨砂玻璃移到办公桌上的工牌卡槽,从工牌卡槽移到——
工位上的那个人。
黑色转椅原本背对着门口,在她的目光抵达的瞬间,像是感应到了什么,缓缓转过来。
椅子的转轴发出一声极轻的摩擦声,像某种精密机械被启动。
椅子上坐着一个人。
一个女人。
一个和她长得一模一样的女人。
同样的眉眼,同样偏冷的五官线条,同样极淡的瞳色。同样的白色衬衫,同样的黑色长裤,同样的左手腕上没有任何饰品——林昭从不戴手表和手链,因为敲键盘的时候会硌。
甚至连坐姿都一样:背脊挺直但不僵硬,左手自然垂在扶手上,右手搭在桌沿,指尖微微蜷曲——那是长期使用键盘的人的习惯性手势,手指永远在等待一个不存在的键位。
但那个人在笑。
林昭不常笑。即使笑,也是嘴角微微动一下,弧度浅得像刀尖挑破水面泛起的涟漪,转瞬即逝。
而那个人笑得非常标准。
嘴角上翘的弧度、露出的牙齿数量、眼角配合弯起的纹路——全都恰到好处。像一个从“人类表情参考手册”里走出来的示范图例。
和电梯里那个老人一模一样的笑容。
“你迟到了。”
那个人开口了。声音也和她一样,但语调不对——太平,太稳,每个字的音长都像是被尺子量过的。
“林研究员。”
林昭没有回答。
她的手垂在身侧,指尖几不可见地蜷了一下——那是她在进行高强度计算时的无意识动作。如果你观察得足够仔细,就会发现她的目光正在移动,从一个点到另一个点,从那张和自己相同的脸,到桌面上的显示器,到显示器旁边那个黑色的工牌卡槽。
卡槽里插着一张工牌。
照片是她的。名字是她的。工号是她的。
有效期截止日期:三年前的今天。
“你在看什么?”椅子上的人歪了一下头,角度精确得像是用角尺量过的,“看你自己吗?”
林昭终于开口了。
“你不是我。”
只有四个字。
语气平淡,像在陈述一个物理事实。
那个人又笑了。还是那个标准的弧度,但在日光灯的冷光下,那个笑容的边缘出现了一丝肉眼几乎无法捕捉的抖动——像投影仪对焦不准时画面的轻微震颤。
“我当然是你。”那个人说,“我是你留在这里的东西。”
“什么东西?”
“你不想带走的那部分。”
林昭没有接话。
她的目光终于从那个人身上移开,落在了桌面的显示器上。
屏幕亮着。
不是待机状态的那种黑屏亮着LOGO,而是正在运行着某个程序。窗口最大化,背景是深灰色,代码编辑器的配色方案——暗色底,关键字高亮为蓝紫色,字符串是暗绿色,注释是灰色斜体。
这套配色方案她太熟悉了。是她自己配的。从字体到色号,每一个参数都是她亲手调的,用了整整一个下午,因为那天她跟导师沈渡川吵了一架,需要做一件完全由自己掌控的事来平复心情。
她调完这套配色方案的时候,沈渡川路过她的工位,看了一眼屏幕,说了一句:“你连代码的颜色都要控制?”
她说:“控制不了的东西,至少可以让它好看一点。”
沈渡川笑了,拍了拍她的椅背,走了。
那是他拍过她椅背的最后一次。
一周后,她被他从这栋楼里赶了出去。
林昭的手指蜷了一下。
然后她低头去看屏幕上的代码。
窗口顶部的标题栏上写着:
「归墟试炼·内部测试版」——/core/rule_engine/init.py
下面是代码。Python。她最熟悉的语言。
python
# RULE ENGINE v0.1.3
# Author: Lin Zhao
# Created: 20XX-08-17
# Last modified: 20XX-11-09
class RuleEngine:
def __init__(self, ruleset):
self.rules = ruleset
self.validation_mode = "strict"
self.fallback = "format"
def validate(self, action):
for rule in self.rules:
if not rule.check(action):
return False
return True
代码是未完成的状态。check方法只有声明没有实现体,fallback参数定义了但没有在任何地方被调用。注释里还有一行被注释掉的TODO:
# TODO: 需要定义当规则本身出现逻辑冲突时的处理机制
林昭的目光钉在那行TODO上。
这行字是她写的。她记得。三年前的那个秋天,她正在为雅典娜设计伦理决策框架。核心问题只有一个:当规则A和规则B发生冲突时,AI应该听谁的?
她当时的方案是引入一个更高层级的“元规则”来裁决冲突。
但元规则本身也可能冲突。那就需要元元规则。元元规则冲突了需要元元元规则。
无限递归。
她把这个问题写进了TODO,然后就被“请”出了公司。TODO永远停在了那里,像一根刺。
“你看懂了吗?”
椅子上的那个人又开口了。这次她的身体往前倾了倾,日光灯在她脸上投下一片阴影,把那个标准笑容切成了明暗两半。
“这是你写的。”那个人说,“你写的规则引擎。”
“然后呢?”
“然后,”那个人歪了歪头,角度和上一次一模一样,“你用这个引擎造了一座监狱。”
“把自己关进去了。”
林昭的手指又蜷了一下。
但不是因为恐惧。
是因为她在那个人的话里听到了一个破绽。
——“你用这个引擎造了一座监狱,把自己关进去了。”
如果《归墟试炼》是她写的代码,如果她现在被困在这个游戏里,如果游戏的核心规则引擎来自于她的代码——
那么,为什么她会“不记得”自己写过它?
三年前她确实在做AI伦理决策框架。但那是为雅典娜设计的,一个用于评估医疗资源分配伦理问题的模型。不是游戏。不是副本。不是规则怪谈。
有人修改了她的代码。
或者说——
有人在她的代码基础上,盖了一座她认不出来的建筑。
林昭的瞳孔微微收缩。不是恐惧引起的收缩,是猎人终于看见猎物露出脚印时的那种收缩。在日光灯的冷光下,她那双颜色极淡的眼睛忽然变得格外专注,像冰层下面的水流忽然加速了。
“你说这是我写的。”她说,声音比刚才更轻了。
“那你告诉我——”
她抬起手,指向屏幕上的那行TODO注释。
“这行字下面的代码,是谁写的?”
那个人没有回答。
她的笑容定住了。不是裂开,是定住。像一段正在播放的视频被人按下了暂停键,画面停在最标准的那一帧上,但标准得过分了,过分的标准就是诡异。
日光灯闪了一下。
就那么一下。
极短的一瞬,短到如果不是林昭这种对细节有病态般敏感的人,根本不会注意到。
但林昭注意到了。
因为在灯闪的那一瞬间,椅子上的那个“林昭”——变了。
不是脸变了。
是整张脸上所有的像素都偏移了一个像素点。
就像一面镜子的镜面在某个角度下出现了肉眼可见的弧度,把镜中的倒影拉伸了一丝。只是一丝。但足够让林昭看见了。
她看见了那个“林昭”真正的样子。
在那千分之一秒的灯光闪烁中,椅子上坐着的不是一个和她一模一样的人。是一个由无数细小的、发光的、不断流动的数据碎片拼成的人形轮廓。那些碎片在不停地重组、复制、覆盖,用最快的速度维持着一张和她相同的脸。
像一个每秒钟刷新六十次的屏幕。
你看到的不是“画面”。
是“刷新”。
林昭的呼吸停了一瞬。
不是因为恐惧——她的心率甚至没有加快。
是因为她终于想明白了第一条规则。
「晚上10点后不要照镜子。」
不是镜子里有鬼。
是镜子本身就是鬼。
“你是一个显示终端。”她说。
声音很轻,但在空旷的办公室里,每一个字都像是被放大了一圈。
“你不在椅子上。你在屏幕里。”
“你不是人。”
“你是一面镜子。”
那个“林昭”的笑容终于裂开了。
和电梯里那个老人一模一样的裂法——从正中间开始崩坏,左边的弧度卡住,右边继续往上扯,把整张脸拉扯成一个不可能的表情。
日光灯开始剧烈闪烁。
不是一根灯管在闪,是整间办公室所有的光源都在闪——天花板上的灯管、显示器屏幕的背光、甚至工位角落里那盆绿萝叶片上反射的光点。所有的光都在同步地明灭,频率越来越快,像一台过载的服务器正在疯狂地尝试重启某个进程。
在那个崩坏的笑容完全碎掉之前,椅子上的人发出了最后一个声音。
“你——”
“不——”
“该——”
“看——”
“到——”
每一个字之间都有精确的间隔。不是人类说话的自然节奏,是一段被拆分成单字播放的音频文件。
“这些。”
最后一个音节落下的时候,显示器屏幕猛地一亮。
不是正常的高亮。
是一种具有方向性的、像探照灯一样的亮。光从屏幕里射出来,打在林昭身上,把她整个人笼罩在一层冷白色的、带着轻微频闪的光圈里。
然后她看见了屏幕上的新内容。
不是代码。
是一面镜子。
屏幕变成了一面镜子,映出了她的脸。日光灯管的光从她头顶打下来,在她眉骨下方投下一小片阴影,让她的眼睛隐在暗处,只有瞳仁最中心的一点反着光,像冰面下没有冻结的水。
她看着镜子里的自己。
镜子里的自己也在看她。
然后镜子里的她笑了。
和椅子上那个人一模一样的标准笑容。
林昭感觉自己的嘴角在动。
不是她主动动的。
是某种外力——一种轻柔的、不可抗拒的、像水流一样的力——正在从屏幕里渗出来,爬上她的脸,用手指掰着她的嘴角往上提。
屏幕里的她笑得越来越标准。
屏幕外的她,嘴角正在被同步拉扯。
她动不了。
不是身体被束缚的那种动不了,是“想动”这个指令本身在传输到肌肉之前就被截断了。有人——有东西——在劫持她大脑和身体之间的通信协议。
像一个远程桌面控制软件。
操控者在屏幕里。
被控者坐在屏幕外。
第一条规则从不是“不要照镜子”。
是“不要被镜子照到”。
因为被照到,就会被同步。
被同步,就会被覆盖。
林昭的嘴角还在往上扯。
已经扯到了一个让她颧骨发酸的角度。
日光灯停止了闪烁。
办公室里一片死寂。只有显示器背光发出的细微电流声,和她自己越来越慢的呼吸声。
然后她笑了。
不是被掰出来的那个笑——是她自己的笑。
冷的,锋利的,嘴角弧度只挑起一侧,像一把刀在出鞘时反射的第一道光。
“你说我不该看到这些。”
她的声音从被掰成奇怪角度的嘴唇之间挤出来,带着某种被压制但绝不屈服的东西。
“但你已经让我看到了。”
“你让我看到了屏幕。”
“你让我看到了刷新。”
“你让我看到了你的代码——”
她猛地抬起右手。
动作不流畅。她的身体还在被那股力拉扯,每一个关节都像生了锈的合页,每移动一厘米都需要把阻挡她的指令撕开一道口子。
但她动了。
一点一点地,像一个人在齐胸深的沼泽里行走,每一个动作都要消耗掉正常情况下的十倍力气。
她的手指碰到了显示器的边框。
金属是冰的。
她把手指按在屏幕上。
屏幕上的镜像是冷的。不是金属那种物理意义上的冷,是一种从代码内部渗出来的、不携带任何温度的冷。像你把手放在一扇通往冬天的窗户上,玻璃本身不产生寒意,寒意来自窗外的那个世界。
她的手指在屏幕上划过。
镜中她的脸被手指的拖拽拉出一道涟漪,像水面被投入石子的瞬间。涟漪扩散开来,那个标准笑容被搅碎成无数细小的光点,在屏幕的像素矩阵里四散奔逃。
然后她按住了屏幕里自己的左眼。
“第一条规则是‘晚上10点后不要照镜子’。”她说。
声音稳定下来了。不是力气的恢复,是她终于摸到了这张网的结构,摸到了每一根丝线的走向。
“你说为什么是‘晚上10点后’?”
屏幕里的镜像开始震颤。
不是刚才那种像素偏移——是整体性的震颤,像一面镜子在被敲击的边缘。
“因为白天的时候,窗户有光。玻璃会反射外面的世界。”
“但到了晚上,玻璃不再是一扇窗户。”
“它会变成一面镜子。”
她的手指在屏幕上的左眼位置按下去。
更用力了。
“你不是鬼。”
“你是一个视觉BUG。”
“你只存在于显示介质里。”
“镜子、玻璃、水面、屏幕——”
“任何能反射的平面,都是你的载体。”
“但载体不是无限的。”
她弯下腰,把脸凑近屏幕。
近到鼻尖几乎触碰到屏幕里的那个自己。
近到她能看见镜中那双和自己一模一样的眼睛里——有一个像素点,在反复地、无意义地、像死循环一样地闪烁。
“你在复制我的视觉信息。”她说,声音轻得像在自言自语,“你看到我,你复制我。我越看你,你复制得越精确。”
“这就是为什么规则说‘不要照镜子’。”
“不是怕我看到你。”
“是怕我让你——看得太清楚。”
她的右手从屏幕上移开。
但她没有后退。
她转过头,看向办公桌旁边的磨砂玻璃隔断。
磨砂玻璃是半透明的。
日光灯的光穿过磨砂层,变成一片均匀的、没有焦点的乳白色柔光。那片玻璃什么都映不出来——看不见她的脸,看不见办公室的倒影,看不见任何可以被称为“镜像”的东西。
因为磨砂玻璃把所有的光都打散了。
光不再按照入射角等于反射角的规律飞行。它们撞在凹凸不平的表面,向四面八方散射,没有一束光能够完整地回到它来的方向。
没有完整的光路。
就没有镜像。
没有镜像。
就没有载体。
林昭盯着那片磨砂玻璃。
然后她把手按了上去。
“你在复制我的时候,”她说,“用的是一套行为脚本,对吧?”
“脚本里写好了‘林昭应该有的表情’‘林昭应该说的话’‘林昭应该做的动作’。”
“但脚本总有边界。”
“脚本写了‘林昭看到镜子时的反应’,写了‘林昭看到另一个自己时的反应’——”
“但脚本没有写——”
她的手在磨砂玻璃上用力一推。
玻璃隔断晃动了一下。
“——如果林昭不看镜子,看毛玻璃。”
“你会怎么样?”
办公室里所有的灯都灭了。
不是一盏一盏灭,是同时灭。像有人拔掉了整层楼的电源总线。日光灯管里残留的荧光粉还在发着微弱的、正在快速衰减的余光,把整个空间拖进一片暗绿色的、像深海一样的幽暗里。
只有显示器还亮着。
屏幕上,那个和她一模一样的脸正在崩溃。
不是“裂开”那种有戏剧效果的崩溃,是一种更安静的、更彻底的崩溃——像一个渲染到一半被强行终止的3D模型,纹理图层一层一层地剥落,多边形网格从边缘开始瓦解,露出下面的线框、顶点、和空白的灰模。
脸没了。
然后是肩膀,是手臂,是上半身。
最后只剩下一个轮廓。
一个由无数发光线段勾勒出来的人形轮廓,孤零零地坐在黑色转椅上,像一个被从游戏中删除角色后残留在缓存里的幽灵模型。
林昭看着那个轮廓。
轮廓也在看她——如果那堆线段还有“看”这个功能的话。
日光灯管的余光彻底熄灭了。办公室陷入完全的黑暗。只有显示器的冷光打在她脸上,把她的五官切成明暗分明的两半。她的眼睛在屏幕光的映照下亮得惊人,瞳孔深处有什么东西在燃烧——不是愤怒,不是恐惧,是一种比两者都更炽烈的、更持久的东西。
猎人终于把猎物逼进死角时的专注。
“你不该让我看到屏幕的。”
她对着黑暗中的那个轮廓说。
“更不该让我看到代码。”
“最不该让我看到那行TODO。”
她伸手,摸到了显示器的电源键。
不是要按下去。
是在等。
等那个轮廓做最后一件事。
它做了。
黑暗中,显示器的右下角弹出一行小字。不是代码窗口里的系统日志,是一个独立于所有程序之外的、浮在屏幕最上层的提示框。白底黑字,没有任何装饰,像Windows系统最早的对话框。
「规则碎片·视觉」
「已获取」
「效果:你可以看见规则的边界」
林昭看着那行字。
看了三秒。
然后她按下了电源键。
屏幕暗了。办公室彻底沉入黑暗。没有光,没有声音,没有那个和她一模一样的轮廓。只有她自己的呼吸声,在黑暗中一起一伏,像潮水拍打礁石,缓慢,沉重,不可阻挡。
她在黑暗中站了很久。
然后她的左手腕亮了一下。
幽蓝色的光从袖口透出来。她把袖子拉上去,看见那串倒计时还在跳动。
68:21:47。
下面多了一行小字。
字号比倒计时小很多,颜色也不是幽蓝,是一种更暗的、接近铁锈的红色。如果不仔细看,会以为那是皮肤下毛细血管映出来的颜色。
但林昭仔细看了。
她看见那行小字写的是:
「碎片持有者编号:唯一」
「权限级别:未定义」
「备注:该碎片创建于三年前。创建人——」
最后一个字被一片突然亮起的光吞没了。
不是显示器的光。
是天花板上的日光灯管。所有灯管同时亮起,白炽光像洪水一样灌满整间办公室。骤然从黑暗切换到强光,林昭条件反射地闭了一下眼睛。
再睁开的时候,办公室变了。
磨砂玻璃隔断还在。灰白色办公桌还在。黑色转椅还在。绿萝还在。
但工位上的那个人没了。
转椅空空荡荡,椅背上搭着一件米白色的空调衫——她的空调衫,三年前留在这间办公室里没有带走的那件。针织面料,袖口有点起球,左肩上有一小块洗不掉的咖啡渍。
她记得那块咖啡渍。
是沈渡川递咖啡给她的时候洒的。那天他们在争论一个伦理框架的问题,他激动了,手一抖,咖啡泼在她肩上。他一边道歉一边找纸巾,她说不碍事,然后那件空调衫就搭在椅背上,从那天起再也没穿过。
空调衫还在。
人没了。
林昭走向那张椅子。她的手伸出去,指尖触碰到那件空调衫的袖口。面料冰凉,带着中央空调送风口吹出来的那种循环风的温度。
她把袖子翻过来。
袖口内侧,用黑色的线绣着一个字母。
L。
不是机绣。是手缝的。针脚不太整齐,起针和收针的地方有线头没有剪干净。
这是沈渡川绣的。
她记得。有一天下班后,整层楼只剩他们两个人。沈渡川路过她工位,看见她拿着针线笨拙地缝袖口上崩开的线。他叹了口气,说你这个拿手术刀都缝不好血管的人,让我来。然后他接过针线,缝了一个L,说这样以后空调衫跟别人的混了也能认出来。
她把那个L缝反了。
沈渡川说你连字母都分不清正反?
她说我分得清,只是缝的时候忘了镜像。
忘了镜像。
林昭的手指猛地收紧,把那件空调衫攥出了褶皱。
日光灯管的光落在她脸上。她的表情没有变化,但瞳孔深处有什么东西在剧烈地收缩——不是恐惧,是一种比恐惧深得多的、从骨头缝里渗出来的东西。
三年前。
镜像。
规则碎片。
创建人是她。
代码里的TODO。
沈渡川绣的L。
L的反面是什么。
是?。一个不存在的字母。
一个镜子里才会出现的字母。
她把空调衫翻过来。
对着日光灯的光。
那个L在逆光下变成透明的轮廓,像一个没有被填满的伤口。光线穿过针脚之间的缝隙,在天花板上投下一个模糊的影子。
影子里的字母是正的。
因为镜子翻转了两次。
一次是绣的时候。
一次是看的时候。
两次翻转,等于没有翻转。
等于真相。
林昭把空调衫叠好,放进外套内侧的口袋里。动作很慢,很仔细,像在做一件仪式。然后把拉链拉上,把那个L贴在心脏的位置。
办公室开始褪色。
不是比喻意义上的褪色——是物理意义上的。墙壁的颜色从灰白变成灰,从灰变成雾,从雾变成透明。磨砂玻璃隔断像糖溶于水一样无声地消解。绿萝最后一片叶子的绿色抽离成灰白。日光灯管的光不再是从某一个点发出,而是从四面八方同时涌来,没有方向,没有阴影,没有任何可以定位的参照物。
像一个正在被关闭的程序窗口。
林昭站在这个正在消失的空间中央,左手腕上的倒计时还在跳动。
日光灯管最后一缕光暗下去之前,她看见办公桌的抽屉拉开了一条缝。
抽屉里有一个东西。
一个不应该出现在那里的东西。
一个手机。
屏幕亮着。
上面是一条草稿箱里没有发送的短信。
收件人是她的旧号码。
发送时间是三年前。
发送人:沈渡川。
短信内容只有四个字:
「别相信镜」
第四条没有写完。
光灭了。
所有东西都消失了。
林昭站在一片虚空里。没有上下,没有左右,没有前后。只有她自己的呼吸声,和手腕上那串幽蓝色的数字,在黑暗中一下一下地跳动。
68:14:22。
68:14:21。
68:14:20。
然后黑暗中浮现出一行字。
冷白色的,像日光灯管的余烬:
「副本结算中……」
「幸福小区·已完成」
「规则碎片获取:视觉」
「隐藏线索获取:1/7」
「下一副本载入倒计时:23:59:59」
字迹暗下去。
新的光从脚下亮起来。不是日光灯那种冷白色,是一种更暖的、更旧的光,像老式绿皮火车窗外的夕阳。
她听见了铁轨的声音。
哐当。哐当。哐当。
节奏越来越快。
一扇门在她面前浮现。锈迹斑斑的金属门,门把手上挂着一个木牌,木牌上用红漆写着:
「废土列车·第37次班次」
「规则如下:」
「1. 每站必须投票放逐一人。」
「2. 被放逐者将在下一站下车。」
「3. 车上永远保持满员。」
「4. 列车长永远不会错。」
「5. 终点站是——」
第五条规则的最后几个字被一块暗红色的污渍盖住了。不是油漆,不是墨水。林昭认得那种颜色。
是血。
干涸了很久的血。
她伸出手,推开了那扇门。