林拯回到家的时候,早上七点四十三分。
他把钥匙扔进门口的铁盘里,没换鞋,直接走到书桌前按下台式机电源。机器启动的十几秒里,他站在窗边喝完了一杯凉白开,目光落在阳台那盆蔫了半个多月的绿萝上,脑子里还在转那个被拒的权限申请。
设备间凌晨两点的异常计算负载。T6权限。安全工单编号他已经在系统里查过——SIR-2024-0327,提交人陈际舟,状态显示为已关闭。系统志记录关闭原因是提交人离职后自动触发,最后一次更新在陈际舟离职后两天。
他坐下,打开本地环境。
守藏阁训诂笔记的PDF扫描件已经在昨晚被他拆解成单页图像,一共四十七张,其中第十二页到第十八页对应的是那批SGC-0047批次语料的来源——一本道光年间的《遁甲演义》手抄残本。残页的扫描质量不算高,纸面泛黄,边角有虫蛀痕迹,但正文部分的馆阁体小楷还算清晰。
问题是补笔。
那些补在正文右侧的蝇头小字,用的是与正文完全不同的笔迹——笔画更细,起笔和收笔有明显的现代硬笔特征,与1843年训诂笔记批注的墨迹比对结果一致。赵姐给的红外扫描件显示,补笔墨水的碳元素分布曲线与现代碳素墨水吻合,时间不超过五年。
五年。
林拯把其中三张残页的原始扫描件拖进自己写的一个图像分层脚本里,设置阈值把墨迹按灰度分成三层——正文层、批注层、以及第三层。
第三层是昨天凌晨他才发现的。
当时他在比对外扫描件的时候,注意到补笔的笔画在可见光扫描下存在极其细微的断裂,但在红外波段却呈现连续状态。进一步分层后,他发现补笔墨迹下面还藏着一层更浅的墨痕,肉眼几乎无法辨认。那层墨痕的碳含量极低,更像是某种植物性染料渗透进纸张纤维后留下的痕迹,年代远早于补笔。
图像分层脚本跑了四十多分钟,把三层墨迹分别提取出来,叠进三个独立的透明图层。
林拯先关掉正文层和补笔层,只看最底下的原始墨痕。
那是九个符号。
不是汉字,甚至不是他认识的任何一种文字系统。九个符号分布在残页的四个角和四条边的中点,加上正中心一个——标准的九宫格布局。每个符号的笔画都呈现出明显的磨损,有些地方已经和纸张的霉斑融为一体,如果不是红外扫描增强了墨迹对比度,本看不出来。
他打开补笔层,叠上去。
补笔的位置恰好对应每一个原始符号的旁边。不是覆盖——每一处补笔都用更浓重的墨迹在原始符号的基础上画了一个新的图形,图形结构与原始符号相似但不同。如果把原始符号比作一个偏旁部首,那补笔就是在这个偏旁上加上了新的笔画,把它变成了另一个字。
但这不是字。
林拯把原始墨痕和补笔的叠合图像放大到百分之四百,逐格对比。补笔并不是在修复原始符号——它是在改变原始符号的几何结构。每个补笔增加或删减的笔画,都在精确地调整符号的对称轴方向和交叉点数量。
他新建了一个坐标系,把残页扫描件的左上角设为原点,逐一标出九个符号的几何中心坐标。然后他拿过昨晚打印的那十二组坐标比对记录,翻到第三组——第三组补笔坐标与冥河异常输出坐标完全重叠的那一组。
九个符号的几何分布,完全吻合第三组坐标的数值。
林拯盯着屏幕上的九宫图,伸手去够桌上的水杯,发现早空了。他起身去厨房接水,在水槽边站了半分钟,脑子里在过一个数学结构——他大学时选修过一门符号学的通识课,教授讲过一种叫“玄宫图”的古代数学模型,本质是一个三阶幻方配上定向坐标,在汉代纬书中被用来推演历法节气。那堂课他只拿了B,因为期末论文写的是“古代数术与现代密码学的形式相似性”,教授觉得太扯。
他现在可能需要把那篇论文找回来重读一遍。
回到桌前,水杯放稳,他打开本地模型环境的测试界面。
他用脚本把九宫图转化为一个3x3的数值矩阵——每个符号的交叉点数量作为矩阵元素值,中心符号的交叉点数最多,有七处。矩阵生成了,他开始做一件他昨晚就想做但没来得及的事:将这个矩阵作为一个注意力头的加权偏置,输入冥河模型的早期检查点里,看看权重会发生什么变化。
模拟跑了十一分钟。
结果弹出来的瞬间,林拯的第一反应是检查脚本是不是写错了。他重跑了两遍,结果一致——当输入矩阵被加载为注意力偏置后,模型所有注意力头的权重分布开始向同一个方向偏移。偏移的目标不是任何一个具体的token位置,而是一组特定的嵌入维度坐标。在这个坐标空间里,本应映射到语义空间的嵌入向量,被集体“拉”向了一个固定的数值输出——一组经纬度坐标类似的数字对。
他把这组数字对记录下来,一共十六对,每一对都附带一个时间标签。时间标签的格式是节气名加上一个数字偏移量,比如“惊蛰-3”、“小暑+1”。
节气。
林拯打开浏览器,搜索“二十四节气计算”,点进一个天文历法页面。他对照着那十六对数字,逐一输入网页端的经纬度查询工具。第一对坐标落在河南省洛阳市境内,时间标签是“春分+0”。第二对落在陕西省某县,第三对落在山东省。
他没有继续查下去。
他把坐标生成的输出界面关掉,打开另一个脚本窗口,把残页补笔的墨迹几何特征提取成一个独立的数据集。然后他回到图像分层界面,这次他不再看原始墨痕和补笔的叠加关系,而是把补笔单独提取出来,对补笔的每一处笔画转折点做了一次全面的曲率分析。
结果很明确——补笔的笔画转折角度不是随机的。每一处转折都恰好落在十五度、三十度、四十五度、六十度或九十度这五个标准角度上。没有例外。
这不是人的手写习惯。人写字的时候,笔画的转折角度会有一个自然波动范围,六十度的折笔在实际书写中可能是五十八度或六十三度。但补笔的每一处转折,在图像放大到像素级别后,角度误差不超过零点三度。
机器画的。或者用了绘图工具——圆规、量角器、尺。
林拯靠在椅背上,目光从屏幕移到天花板的灯管上。光灯的镇流器发出细微的嗡嗡声,厨房的水龙头还没关严,一滴一滴地掉在水池里。
五年前。这批语料接入守藏阁数据库是在今年年初,但补笔的时间要早得多。早在语料被交由守藏阁数字化之前,就有人找到了这几页残本,用现代碳素墨水在原始符号旁边画上了这些几何精度极高的补笔,然后把补笔后的残页以“原始古籍”的名义塞进了待数字化的古籍批次里。
这不是修复。这是植入。
对方不是要修复一本损坏的古籍——对方是把一个残缺的数学结构补齐了,把它变成了一个完整的运算规则,然后借古籍数字化的流程,把这条规则写进了AI的训练语料。
而陈际舟——离职前提交那份安全工单的测试工程师——在某个批次的测试中发现了这个规则,或者至少发现了规则导致的数据异常。
SIR-2024-0327。
林拯直起身,重新打开公司内网的VPN连接。他输入陈际舟的工号——离职员工的账号已被注销,但测试组的共享目录权限还在。他用自己T4权限的账号进入测试组文档库,搜索工单编号。
搜索结果只有一条,链接指向一个被移动到“离职归档”目录下的PDF。
他点开。
文件只有三页。第一页是工单封面,写着“SIR-2024-0327:SGC-0047批次语料异常输出报告”,提交人陈际舟,提交期是今年一月十八。第二页是异常输出样本,五条对话记录,每条都附有时间戳和模型版本号。第三页是陈际舟写的备注,只有一句话——
“模型在未接收任何地理信息提示的情况下,反复输出同一组经纬度坐标。坐标指向地点经核查:河南省洛阳市偃师区首阳山街道。该地正在拆迁,原建筑为民国时期一栋私人藏书楼。坐标精度:度分秒后两位数,非随机生成。建议暂停SGC-0047语料训练,彻查来源。”
林拯把这句话读了三遍。
然后他拖动PDF,翻到第二页那五条异常输出样本。每条样本的生成时间都在深更半夜,最早的一条是一月十七凌晨三点二十二分,最晚的一条是一月十八凌晨四点零七分。
那个时间——和陈际舟提交工单的时间隔了不到十二个小时。
也是凌晨。
林拯点击返回按钮,准备退出测试组文档库。在返回上级目录的时候,他注意到“离职归档”文件夹下面还有一个文件,文件名是“SIR-2024-0327_评论历史”。他点进去。
那是一份自动生成的工单评论志,记录了该工单在系统内被审阅的每一次作。标准的安全工单流程是:测试工程师提交、安全组复核、部门负责人签字、归档或升级。这条工单的评论历史只有四条记录。
第一条,陈际舟,一月十八,10:14 AM:提交。状态:待审核。
第二条,沈明枢,一月十八,02:32 PM:已阅,转语料溯源组跟进。状态:已分配。
沈明枢。守藏阁数据库主管。第二天坠亡。
第三条,系统自动,一月十九,09:00 AM:审核人沈明枢状态异常,工单自动转回安全组。状态:待重新分配。
第四条,系统自动,一月二十,11:45 AM:提交人陈际舟状态异常(离职),工单自动关闭。状态:已关闭。
状态异常。
林拯把鼠标从PDF上移开,手放在键盘上一动没动。书桌角落的台灯照在屏幕上,反射出他脸上的一层蓝白冷光。电脑主机风扇转速提高了两档,呼呼地响,压住了厨房水龙头的滴水声。
窗外有辆车按了声喇叭。
他关掉VPN,断开了公司内网。
在本地文件夹最底层,有个他一周前就建好的加密目录,里面只存了十二组坐标比对记录、一份他还没写完的安全报告草稿、以及今天凌晨他从设备间志里提取的那批异常计算负载的时间戳数据。
他新建了一个文本文档,标题输入四个字——“证据清单”。
光标在标题后面闪了六下。他听见自己的心跳,比平时快了大约十五下每分钟。
光灯镇流器的嗡嗡声突然高了一个频率,闪了一下。屏幕右下角弹出一条通知——安全组件版本更新,需要重启系统。来源地址是零一科技内网推送。
林拯按下了取消。