终端屏幕的蓝光在林默眼底跳动,他盯着最后一行闪烁的红体字,喉结动了动。
服务器的嗡鸣像根细针,正一下下扎进他紧绷的神经——自三天前发现系统评分模型出现分歧以来,这是最危险的信号。
“林默。”周晓冉的声音从身后传来,带着长期熬夜后的沙哑。
林默转头时,看见室友正俯身盯着自己的笔记本电脑,指尖无意识地敲着触控板,眼镜片上蒙着层薄雾,是刚从厨房端来的热牛奶腾起的热气熏的。
“演化流程日志同步了。”周晓冉推了推眼镜,屏幕蓝光在他镜片上碎成星点,“系统在跑分歧模型的筛选算法。”他说着,食指划过屏幕上滚动的代码流,“看这个循环结构,它在计算每个模型与历史用户行为的拟合度。”
林默的指甲掐进掌心。
三天前他们故意制造的评分模型冲突,原本是想让系统陷入数据混乱,可现在看来,这台运行了七年的智能推荐系统比他们想象的更狡猾——它把分歧当成了筛选器,正在从几十个冲突模型里挑出最“正确”的那个。
“拟合度?”他重复着,喉咙发紧。
上周他们黑进系统后台时,曾看过初始设计文档:系统的核心是“用户行为预测引擎”,所有推荐逻辑都围绕“最符合用户习惯的路径”展开。
如果让它挑出一个“最优模型”……
“它要找真理。”周晓冉突然说,指节抵着下巴,目光死死黏在屏幕上,“就像学生考试时,面对矛盾的答案,非要找出标准答案。”他的声音突然沉下来,“而我们之前制造的分歧,反而成了它验证模型的题库。”
林默的后背贴上冰凉的椅背。
他想起三天前在机房调试程序时,周晓冉曾说过“系统有自我修正的本能”,当时他只当是理论推演,现在这本能正化作屏幕上跳动的代码,要把他们的计划碾成碎片。
“必须打断这个筛选过程。”他脱口而出,手指无意识地叩着终端边缘,“如果让它选出统一模型,所有被我们扰动的评分路径都会被修正,之前的努力全白费。”
周晓冉的手指在键盘上停顿了半秒。
他摘下眼镜,用衬衫下摆擦拭镜片时,林默看见他眼尾的红血丝——这是连续48小时没合眼的痕迹。
“怎么打断?”室友重新戴上眼镜,目光灼灼,“系统的筛选逻辑基于历史数据,除非……”
“除非让它的筛选对象本身变成悖论。”林默突然直起身子,掌心的汗在终端外壳上蹭出一片湿痕,“路径逻辑嵌套。”他说出这个词时,心跳快得耳膜发颤,“让不同模型推荐的路径互相包含,比如社交模型推荐的路线里藏着消费模型的关键节点,消费模型的路径又嵌套着情绪模型的触发条件。这样一来,系统要验证A模型就得先解析b模型,解析b模型又得依赖c模型,形成死循环。”
周晓冉的手指悬在触控板上方,忽然笑了。
那笑带着点疯狂的锐度,像刀刃划破夜色:“嵌套结构……它的算法再强,也处理不了无限递归的逻辑链。”他抓起桌上的马克笔,在便签纸上快速画着流程图,“社交模型的终点是消费模型的起点,消费模型的终止条件是情绪模型的触发阈值,情绪模型的验证参数又指向社交模型的初始权重……”笔锋一顿,他抬头看向林默,“这样的嵌套结构,系统会卡在第一层验证就开始循环,永远算不出结果。”
林默感觉有团火从丹田烧到喉咙。
这是他们在图书馆翻了十七本《复杂系统理论》、在网吧熬了三个通宵讨论出的破局点——系统再智能,底层逻辑仍是线性的,无法处理自指性的嵌套结构。
就像人类无法理解“这句话是假的”的真理性,系统也解不开自己推荐的路径里藏着自己的矛盾。
“需要写个嵌套生成器。”周晓冉突然合上笔记本,金属搭扣发出清脆的“咔嗒”声。
他站起身时,椅子在地板上划出刺耳的声响,“得在系统完成筛选前,把嵌套结构注入所有分歧模型。”他走向书桌,从抽屉里取出移动硬盘,指腹擦过盘身的划痕——那是去年他们黑进学校教务系统时,硬盘从桌上摔下留下的。
林默盯着他的背影。
窗外的月光透过纱窗,在周晓冉肩头镀了层银边。
这个总说“代码比人心可靠”的计算机高材生,此刻的动作却带着少见的急切:他扯掉硬盘接口的防尘塞,插在笔记本上的动作快得几乎要折断接口;打开代码编辑器时,键盘敲击声像密集的鼓点。
“需要多久?”林默问,声音发哑。
周晓冉没有回头,屏幕的冷光在他脸上切割出明暗交界:“最多六小时。”他的手指在键盘上翻飞,“但得先……”
“先写路径交叉算法。”林默接口,喉咙突然发紧。
他想起三天前在机房,周晓冉调试转换程序时说的话:“我们不是在破坏系统,是在帮它认识到自己的局限。”现在他们要做的,是给这个自大的“智能”套上永远解不开的枷锁。
终端屏幕突然发出“滴”的一声。
林默猛地转头,看见系统日志跳出新提示:“评分模型筛选进度:17%。”他的呼吸瞬间急促起来——比预计的快了五分钟。
“周哥。”他轻声说。
周晓冉的手指顿了顿,然后敲得更快了。
笔记本散热口的风声骤然变响,像头苏醒的小兽。
他的影子在墙上摇晃,与终端屏幕的蓝光重叠,在地板上投出交错的光斑。
“嵌套生成器的核心代码……需要调用系统底层的路径解析接口。”他的声音混着键盘声,“但得绕过权限验证……”
林默摸出手机,打开相册。
里面存着张照片:三个月前,他们在旧书店淘到的《智能系统安全漏洞汇编》,其中一页被红笔圈着:“当系统尝试自我修正时,其底层接口会暂时开放权限验证。”
“现在系统正在自我修正。”他说,把手机屏幕转向周晓冉。
室友的手指突然停住。
他抬头,镜片后的眼睛亮得惊人:“开放接口……”
终端的日志还在滚动。
林默看着“筛选进度:19%”的字样,喉结动了动。
他想起便签纸上自己写的“这次,我们替系统做选择”,现在这句话该改成“这次,我们让系统永远选不出”。
周晓冉突然笑了,带着点破釜沉舟的狠劲。
他转回电脑,手指重重按下回车:“生成器框架搭好了。”屏幕上跳出一行行绿色代码,像流动的荧光。
“接下来……”
“接下来写嵌套逻辑。”林默接口,声音轻得像叹息。
服务器的嗡鸣里,笔记本键盘的敲击声愈发密集。
月光爬上窗台,在周晓冉的后颈投下银白的光。
他的指尖在键盘上跳跃,每一下都像在给系统的脖子套上绳索——而这绳索的另一端,正攥在他们手里。
终端屏幕的蓝光中,系统日志的筛选进度跳到了“21%”。
林默盯着那数字,感觉时间正像漏沙般从指缝流逝。
但他知道,只要周晓冉的生成器完成,这漏沙就会永远停在某个刻度,再难前进分毫。
“嵌套结构的触发条件……需要埋在每个模型的推荐终点。”周晓冉的声音突然低下来,带着种近乎虔诚的专注,“当系统要验证A模型的正确性时,会自动调用b模型的验证函数,而b模型的验证函数又指向……”
林默没再听下去。
他望着室友微弓的背,望着屏幕上跳动的代码,突然想起大学毕业那天,周晓冉在宿舍说的话:“最完美的程序,是让计算机自己都算不明白的程序。”
现在,他们正在写这样的程序。
终端的日志还在滚动,但林默的注意力已经被旁边的笔记本吸引——那里,绿色的代码流正以肉眼可见的速度生长,像株在暗夜里疯长的藤蔓,即将缠住系统的咽喉。
“生成器完成60%。”周晓冉说,声音里带着紧绷的兴奋,“剩下的……”
“剩下的交给时间。”林默说,手指轻轻搭在终端边缘。
他望着屏幕上“23%”的筛选进度,突然笑了。
那笑里有紧张,有期待,更有孤注一掷的决绝——他们赌的,是人类的智慧能战胜自以为是的算法。
窗外,月亮爬过对面的楼顶。
风掀起纱窗,带进来一缕夜的凉意。
林默深吸一口气,闻到了周晓冉桌上咖啡的苦香,混着热牛奶的甜。
这味道让他想起无数个熬夜的夜晚,想起他们在实验室调试代码时的争吵与和解,想起那个在毕业季写下的、几乎被遗忘的约定:“要做些真正有意义的事。”
现在,他们正在兑现这个约定。
终端屏幕突然闪过一道红光。
林默猛地转头,看见日志里跳出新提示:“评分模型筛选进度:25%。”他的心跳漏了一拍,但很快,他的目光就被旁边的笔记本吸引——那里,绿色的代码流已经停止滚动,周晓冉的手指悬在键盘上方,屏幕中央显示着“路径嵌套生成器:98%完成”。
“还差最后两行。”周晓冉说,声音轻得像羽毛,“这两行代码……”
“会让系统的筛选逻辑永远卡在自己的循环里。”林默接口,嘴角扬起。
周晓冉转头看他,眼镜片后的眼睛亮得惊人。
然后,他转回电脑,手指落下——
“完成。”
终端的日志还在滚动,但林默知道,一切都不一样了。
他望着周晓冉将生成器程序打包,发送到系统后台的接口,望着屏幕上跳出“注入成功”的提示,突然觉得喉咙发紧。
“它现在……”他说。
“会永远困在自己的逻辑里。”周晓冉说,关掉笔记本电脑。
屏幕的蓝光熄灭,他的脸隐入黑暗,只有月光在他眼底闪烁,“永远算不出哪个模型才是‘正确’的。”
终端屏幕上,系统日志的筛选进度停在了“26%”。
林默盯着那数字,感觉有什么东西在胸腔里炸开——是喜悦,是释然,更是对未来的期待。
“接下来……”他刚开口。
“接下来,看它的反应。”周晓冉说,把笔记本电脑推到一边,“但现在,我需要睡一觉。”他站起身,脚步有些虚浮,“六个小时没合眼,我快撑不住了。”
林默笑了。
他望着室友走进卧室,听着关门声,然后转回终端。
屏幕上的日志还在滚动,但那些字符已经失去了威胁性——因为他们已经给系统套上了永远解不开的枷锁。
他摸出手机,打开与周晓冉的对话框。
最上面的消息是凌晨三点发的:“已注入,等看它的反应。”现在,他要发新的消息了。
“它被困住了。”他输入,发送。
几乎是瞬间,对话框弹出回复:“早知道我们能行。”
林默笑了。
他关掉手机,望着终端屏幕上的“26%”,感觉从未有过的轻松。
但他知道,这只是开始——系统不会轻易认输,他们还有很长的路要走。
不过,至少现在,他们赢了一局。
窗外,月亮已经西斜。
风再次掀起纱窗,带进来一缕清凉。
林默深吸一口气,站起身,走向厨房。
他需要热杯牛奶,然后——
终端屏幕突然发出“滴”的一声。
林默猛地转头,看见日志里跳出新提示:“检测到路径逻辑嵌套,启动……”
他的心跳漏了一拍。
但很快,他笑了——系统终于发现了他们的陷阱,但已经太晚了。
他端起热牛奶,喝了一口。温度刚好,不烫