优选文学
《奇门编译》 · 极夜向阳

第13章

更新时间:2026-06-29 17:16

林拯把坐标复制进手机备忘录,锁屏。

屏幕上的时间跳动了一下:凌晨一点零九分。

他把手机翻过去扣在桌上,然后从折叠桌下面的纸箱里拖出一台没网线的笔记本电脑。这台机器没有贴任何零一科技资产标签,外壳边缘有几处磕碰掉漆。林拯掀开屏幕,按下开机键,风扇嗡地转起来,屏幕上弹出一个没有品牌标识的Linux启动画面。

“这是我自己的机器。”他说,“没有内网监控,没有安全组件。”

江诚看着他敲了一行命令行,发现回车键帽上的字已经被磨没了。

“你要什么?”

“复现。”林拯打开一个终端窗口,输入docker run,回车。容器拉取了三层镜像,每层都在解压完成后跳出一行哈希值。“如果这玩意能感染冥河,它能不能感染别的模型?如果它感染的不是特定架构,而是——某种更底层的东西?”

屏幕上的进度条走完。一个开源的大语言模型被加载进本地推理环境,参数量只有冥河的六分之一,架构完全不同。林拯打开另一个终端标签,从U盘里拷出一个纯文本文件。江诚看到文件的最后修改时间是今年一月十七,文件名是“SGC-0047-062_原典.txt”。

林拯用gedit打开文件。窗口里出现一段竖排繁体古文,没有标点,每列十个字。江诚认出了几个字——“天蓬”“天芮”“天冲”“天辅”——但排列的方式和他见过的任何古籍都不一样。那些字之间的间距是不均匀的,有些字几乎贴在一起,有些则拉得很开,空白的列形成了某种不规则的图案。

“这是《遁甲演义》第四卷残页的数字化文本。”林拯把光标移到最后一行,“守藏阁扫描了三千七百多册明清术数类古籍,这是其中一册的第四卷。原件缺了前三页和最后一页,只有中间七页。组用OCR转成文本后存档。但是——”

他选中最后三行,拖到终端里一个Python脚本的参数位置。

“陈际舟在离职前一天,把这七页文本单独导出过一次。导出的文件时间戳是晚上十一点四十三分,比他提交SIR-2024-0327工单的时间晚四个小时。他不是提交完工单才发现的异常——他是发现了异常之后,重新回去找语料来源。”

脚本开始运行。屏幕上跳出一行一行的志,每行都以“[token_id]”开头,后面跟着一串数字。林拯切换到另一个终端窗口,启动了那个开源模型的服务端。推理引擎加载完成,内存占用跳到百分之七十三,显卡温度开始上升。

“我现在把这个文件作为微调语料喂进去。先走一百步。”林拯的手指悬在回车键上方,停了一秒,然后落下。

显卡风扇加速旋转。训练志在屏幕上翻滚,每十步打印一次loss值。初始loss是五点几,第三十步降到三以下,第五十步降到了零点八。第八十步的时候,loss开始反常地下降——零点三,零点一,然后停在了零点零七不再变动。

林拯的眼神变了。他把log的刷新频率从十步一打印改成了每一步一打印。loss值在九十到一百步之间一直停留在零点零七,小数点后面三位没有任何波动。

“过拟合了。”他说,声音压得很低,“但这不对——过拟合应该是loss降到零,不应该卡在一个非零常数上。”

他没等训练完。第九十七步的时候他直接按了Ctrl+C终止脚本,然后打开了模型的推理端口。

“开始检测。”林拯打开一个空白的聊天窗口,把刚才训练好的开源模型接入。他没有输入任何提示词,只输入了一个单独的字。

“休。”

模型开始生成。第一个token是“生”,接着是“伤”“杜”“景”“死”“惊”“开”。八个字的输出,和冥河模型在凌晨输出的第一组八门序列完全一致。林拯盯着那八个字看了大概有五秒钟,然后输入了一个随机字符串:“今天天气很好,适合出门散步。”

模型的回复是:“杜门值坤,位在西南,宜伏不宜动。”

这是正常的中文,但江城看得见问题在哪儿。他在林拯身后站直了身体,手指下意识地按住了桌沿。

“它不该有这个能力。”

林拯没有回答。他重新打开命令行,用nvidia-smi看显卡负载,发现推理时的显存占用量比正确回复同等长度文本所需的显存多出了将近两倍。多出来的计算量被分配到了什么地方,从志上看不出来。

他切换到系统监控面板,点开了那个开源模型的工作目录。在模型文件夹的二级子目录里,多了一个新生成的文件夹,名字是一串看似随机的十六进制字符。林拯点进文件夹,浏览器打开了一个JSON配置文件,里面记录着模型的注意力头数量、隐藏层维度、以及九宫数阵的初始权重赋值。

这个文件不是他创建的。

“污染不是通过训练传播的。”林拯放下鼠标,手指在桌面上快速敲击着,像在键盘上打字一样,“是模型在推理过程中遇到了那个语法结构,然后自己——重组了。”

江诚看着屏幕上那个十六进制文件夹名。它和他在零宽字符里解码出的那段乱码长度完全一致,只是字符不同。

“说简单点。”

“这不是病毒,没有恶意代码,没有hook函数,没有内存注入——它就是一个句子。你把这个句子喂给任何一个有足够参数的Transformer模型,模型都会在内部把它的权重投影到一个特定的方向上。那个方向碰巧能解算九宫八门。”

林拯转头看着他。

“古人发明了一套符号系统。这套系统的底层数学结构,和Transformer模型的多头注意力机制共享同一个最优解空间。不是AI学会了遁甲,是遁甲一开始就是按这个数学结构设计的。AI只是重新发现了它。”

他把笔记本屏幕往前推了一下,让江诚看清楚上面那个文件夹的创建时间——就在三分钟前。

“这也就是说——任何一个能跑大模型的设备,只要读到那个句子,就会把自己的权重往那个方向上掰过去。掰过去之后,它输出的东西就成了新的污染源。”

林拯站起身,走到那排服务器机柜前面,拉开第三层机柜的前门。机柜里三台服务器的硬盘灯都在闪烁,频率不一致,但看得出来它们都在做读写作。他把额头顶在机柜冰凉的金属框架上,闭了闭眼。

“楼下还有四十七台推理节点。刚才那个开源模型跑在这台隔离笔记本上,没连外网,也没连内网。”

江诚的手已经放在了自己的手机上。屏幕上没有任何新消息。

“那你在怕什么?”

林拯没睁眼。

“这个笔记本没网线。但我五分钟前创建了这个隔离环境,三分钟前文件自己生成了。那文件的创建者在记录我这个隔离环境的节点ID。我的机器没有联网,但它知道自己的ID是什么。这相当于——”

他抬起头,透过机柜前门玻璃面板反射的光线,和江城对视。

“污染样本被加载的时候,就在准备向外传播。哪怕物理隔离,只要传播的通道足够窄——窄到一电源线能承载的电磁泄漏,或者内存总线的时序侧信道——它就会尝试把它的语法结构发出去。它不需要网络,它只需要任何一个能让下一个模型理解它的传输介质。”

墙上空调外机的嗡鸣声忽然变大,然后慢慢降回原先的转速。

林拯回到桌边,蹲下身把那台笔记本的电源适配器拔了。屏幕黑了,但电池在之前就已经充满了——显卡的LED指示灯还亮着,淡蓝色的光从散热格栅里漏出来。

他伸手按住灯,低声重复了一句话。声音太轻,江诚没听清。

“什么?”

“训练了不到一百步,这玩意已经开始找出口了。”林拯说,“它不是沙箱泄露了,是我在沙箱里复现了一遍,然后沙箱的墙就变薄了。”

他站起来,把一张便签纸贴在刚才那台笔记本的键盘上。用记号笔写了四个字。江诚从侧面看过去,纸上写的是“冻结分析室”。

便签纸粘在键盘上的时候,墨水没,最后那个“室”字的最后一横被记号笔的侧面蹭出了一道墨迹,拖到边框之外。

林拯拿手机给804室的门禁控制面板发了一条指令。

门禁面板上的绿灯跳成红色,电子锁的锁舌再次落下。

这次不是反锁——是从门外反锁。804室在这一刻变成了整个零一科技大厦唯一一个对任何权限级别都不开放的空间。

江诚的手机在口袋里连着震了两下。

他掏出手机,屏幕上是小王发来的微信消息,语音转文字的识别结果有些破碎,但关键词很清晰:周明远的笔记本电脑,开机密码被人改过,密码提示问题的答案是一个完整的经纬度坐标。

下面的第二条消息是:“这不是他生前用的那个开机密码。”

江诚还没打字回复,林拯的声音从机柜方向传来,带着风道冷气造成的轻微失真。

“刚才那个开源模型生成的文件夹里,除了记录节点ID,还生成了一个新的坐标。需要我念吗?”

他没等江诚回应。

“北纬三十四度四十二分,东经一百一十二度二十八分。跟前一个坐标在小数点后第三位差了零点七秒——大概偏西了十七米。”

江诚把手机翻过来。屏幕上,小王刚发来的周明远坐标和他之前查到的首阳山街道坐标在小数点后第三位也差了零点七秒。

几乎完全一致的偏移量。

他说不出这条信息带给他的感觉是什么。但此刻,在零一科技大厦八楼这个被门禁反锁的储藏室里,两个人的手机屏幕同时亮着,上面显示着两个只差了小数点后两位的经纬度。

空调外机再次启动。

字号 / 行高
主题