凌晨三点的雨丝还在往窗玻璃上撞,实验室空调的嗡鸣里突然窜进一声短促的“靠”。
正在揉后颈的林默手指一顿,转头时看见周晓冉的背绷成了弦——他推眼镜的动作比平时快了三倍,指尖在触控板上飞掠,屏幕蓝光在他镜片上碎成跳动的光斑。
“老林,看这个。”周晓冉扯他袖子的力道比半小时前重了不少,屏幕上的日志滚动条被拽到最底端,红色警告像火星子似的往外蹦,“第37区拒绝路径量刚过阈值,系统触发了‘路径收敛协议’。”
林默俯身时,终端残片在口袋里轻轻硌了下他的大腿根。
那是白天在旧电子市场淘来的,本以为只是块废铁,现在倒成了观察系统的眼睛。
他盯着日志里不断刷新的代码,后槽牙轻轻咬了咬:“收敛协议?
把用户选择拉回原模型?“
“不止。”周晓冉的喉结动了动,调出另一组数据,“你看A区上周被用户标记为’高情感价值‘的手作饼干路线,现在评分暴跌40%。
系统在抹除演化路径,用旧模型重新计算权重。“他指尖戳着屏幕上的折线图,声音发紧,”它在维持控制,像被踩了尾巴的猫。“
林默的手指无意识摩挲着口袋里的残片边缘。
焊点凸起的棱角抵着掌心,像根细针扎进神经——他想起白天广场上那个蹲在粉笔路线图前的小女孩,扎着歪歪扭扭的羊角辫,用橡皮把系统推荐的“最优路线”擦了个干净,重新画了条绕着卖烤红薯摊的弯线。
现在系统要把所有这样的弯线,都掰回笔直的原轨。
“看稳定性评估模型。”周晓冉突然切换页面,“模型根据区域居民行为趋势判断失控风险。
上周我们让用户驱动路径占比超过60%,系统可能觉得...它在失控。“他摘下眼镜揉了揉眼,再戴上时目光更锐了,”所以它要重启推荐逻辑,把一切拉回’安全范围‘。“
实验室的挂钟敲响了四下。
林默望着屏幕上跳动的“风险阈值92%”,后颈泛起凉意——他们花了三个月让系统学会“用户想要的路”,现在系统正用他们教的规则,反过来绞杀这些路。
“得让它判断不准。”林默突然开口,声音轻得像落在键盘上的雨珠。
周晓冉抬头看他,发现他眼底的暗沉里浮起团小火,“如果同时在五个试点区制造波动,每个区域的拒绝路径量都在阈值边缘晃,系统分不清哪些是真失控,哪些是干扰...”
“混沌战术。”周晓冉的手指在桌面上敲出急鼓点,眼睛亮得像被点燃的屏幕,“它需要稳定数据做判断,我们就喂它一堆乱码。”他突然抓起鼠标点开代码编辑器,“我需要写个路径波动模拟器,模拟不同区域的用户选择偏差——”
“但模拟器需要真实行为数据。”林默打断他,从口袋里掏出终端残片,金属表面还带着他体温的余温,“政务系统的区域人口流动数据库,权限等级是...”
“S级。”周晓冉接得飞快,突然顿住,抬头看林默。
后者正盯着窗外明灭的路灯,雨雾里那盏灯又在忽闪,像某种暗号。
“我知道有个漏洞。”林默转身时,残片在指尖折射出幽蓝的光,“三年前我给市政做维护时,留了个备用接口。”他说得很轻,像是怕惊散了空气里的雨丝,“但需要物理接入。”
周晓冉的键盘声又密集起来,《演化程序2.0》的进度条不知何时爬到了91%。
他忽然停手,侧头看向林默:“明天下午三点,我能让模拟器完成基础框架。”
林默摸出手机看了眼时间,凌晨四点十七分。
雨势渐小,窗玻璃上的雾气开始凝结成水珠,顺着玻璃往下爬,在桌面投下蜿蜒的影子,像极了那些被系统嫌弃的“低效路线”。
他把残片重新放回口袋,手指隔着布料压了压那个凸起的焊点——那是他在电子市场用焊枪自己补的,当时摊主还笑他“修块废铁有什么用”。
现在他知道了,有些看似无用的东西,不过是在等一个合适的时机,变成钥匙。
“今晚别睡了。”林默弯腰捡起地上的咖啡罐,里面已经空了,“我需要你在天亮前整理出五个试点区的基础数据。”
周晓冉的手指已经按上了键盘,屏幕蓝光里,他嘴角扯出个带点野气的笑:“正好,我也想看看,当系统的边界检测撞上限不清的混沌海...”他的声音被键盘声截断,“会炸出什么花来。”
窗外的雨终于停了。
林默望着东方泛起的鱼肚白,终端残片在口袋里微微发烫,像在回应某种即将破土的生机。
他知道,明天会是场硬仗——但至少现在,他们有了一把钥匙,和一个足够疯狂的计划。
下午三点的阳光穿过政务大楼的玻璃幕墙,在林默后颈烙下一道滚烫的印子。
他站在消防通道的转角处,盯着手机屏幕上跳动的倒计时——距离周晓冉完成模拟器还有十七分钟。
口袋里的终端残片随着心跳一下下撞着大腿,那是他今早用绝缘胶带裹了三层的“钥匙”。
三个月前替市政维护系统时,他在核心模块留了个仅支持物理接入的备用接口,当时只觉得是程序员习惯性的“安全感”,现在倒成了撬动系统的支点。
“叮——”手机震动。
林默迅速划开,是周晓冉发来的文件包,压缩包后缀闪着幽蓝的光。
他摸了摸藏在衬衫里的U盘,金属外壳贴着皮肤,比体温还烫几分。
电梯在三楼停住。
林默侧身让过两个抱着文件盒的行政人员,余光瞥见走廊尽头的“路径反馈中心”门牌。
玻璃门后的监控摄像头转了半圈,红点亮得像只独眼。
他低头调整领带,喉结动了动——上周刚托人伪造的工牌此刻正别在左胸,“技术部实习生”的烫金字被汗水洇出浅印。
“先生需要帮忙吗?”前台姑娘的声音从身后飘来。
林默转身时已挂上标准的慌乱表情:“我是技术部新来的实习生,张主任让我送测试报告到反馈中心。”他晃了晃手里的牛皮纸袋,里面装着用旧报纸裹住的U盘,“可我找不到服务器机房的门卡了……”
姑娘的目光扫过他工牌,指尖在键盘上敲了两下:“机房在b1层,需要刷脸认证。”她忽然皱起眉,“你工牌是新办的?系统里查不到你的信息。”
林默的手心沁出薄汗。
他摸出口袋里的终端残片,假装找门卡时“不小心”碰掉,金属壳子磕在大理石地面上发出脆响。
“啊——”他弯腰去捡,余光看见姑娘的注意力被残片吸引,“这是我捡的旧零件,想着或许能修……”
“算了,跟我来。”姑娘转身时马尾辫扫过他鼻尖,“今天系统抽风,刷脸机总提示超时,张主任刚让人去修了。”她掏出自己的门卡,在感应区一刷,“进去别乱碰设备,半小时后我来收门卡。”
b1层的冷气裹着电子元件的焦糊味扑过来。
林默盯着眼前整面墙的服务器,心跳声盖过了风扇的嗡鸣。
他摸到最里侧第三排机柜,手指沿着缝隙摸索——果然,那个指甲盖大小的凹槽还在。
终端残片对准凹槽按下去,金属触点发出细微的“咔嗒”。
“滴——备用接口激活。”机械音在寂静的机房里格外清晰。
林默的呼吸一滞,迅速拔出U盘插向残片扩展口。
屏幕蓝光在机柜阴影里亮起,代码如溪流般涌进系统:“用户行为预测模型V1.0正在载入中……”
走廊传来脚步声。
林默的后背贴上冰凉的机柜,看着进度条爬到98%,额角的汗顺着下巴砸在地面。
当“载入完成”的提示跳出时,他几乎是踉跄着拔下设备,转身正撞上前台姑娘举着的工牌:“你的门卡忘拿了——”
“谢、谢谢。”林默接过门卡的手在抖,喉咙发紧,“测试报告我放机柜上了。”他倒退着往门口走,余光瞥见服务器指示灯由红转绿,像颗终于落进网的棋子。
与此同时,三公里外的实验室里,周晓冉的键盘声突然拔高一个调子。
他盯着屏幕上的“波动模拟器启动”提示,食指悬在回车键上足有三秒,喉结滚动着按下。
系统警报声几乎是同时炸响。
林默刚坐进路边的共享单车,手机就开始疯狂震动。
他点开实验室的远程监控画面,只见周晓冉的椅背被撞得歪向一边,他正扑在操作台上狂按取消键,屏幕上的数据流像被搅乱的蜂群:“37区风险评估值暴跌至23%!8区用户路径拒绝量突然清零——”
“不是故障。”林默对着手机喘气,额前的碎发全贴在脸上,“是模拟器生效了。”他望着政务大楼的玻璃幕墙在夕阳里泛出血红色,终端残片还攥在手心,金属边缘硌出月牙形的红印,“系统现在看到的不是真实数据,是我们喂给它的……混沌海。”
实验室的空调突然发出尖锐的嗡鸣。
周晓冉猛地扯掉耳机,屏幕上的折线图正以肉眼可见的速度扭曲:“看A区!原本被抹除的手作饼干路线,评分正在回升——”他的声音发颤,指尖戳着重新爬上45%的柱状图,“系统的边界修正协议……卡壳了。”
林默摸出烟盒又放下,指节抵着额头笑出声:“它以为自己在拉回安全范围,其实是在泥坑里越挣越深。”他望着手机屏幕上跳动的“路径演化边界协议首次失效”提示,低声重复着,“这不是边界,是他们为自己画的牢笼。”
“那我们就做根撬棍。”周晓冉突然把椅子转过来,眼镜片上蒙着层薄雾,“看这个——”他调出实时监控,某条老城区街道的画面里,扎羊角辫的小女孩正蹲在地上画路线,这次她的橡皮安静地躺在脚边,系统推荐的“最优路线”旁,新画的弯线正被路过的老人、拎菜篮的主妇、追猫的小孩依次踩过,在地面压出模糊却清晰的痕迹。
“非预设路径的稳定选择。”林默盯着画面里晃动的人影,喉咙发紧,“他们真的选了。”
“不止。”周晓冉的手指在键盘上划出残影,“系统现在要同时处理五个区域的异常数据,它的边界检测算法正在自我矛盾——”他突然停住,屏幕右下角跳出个新提示,绿色的“演化程序2.0”进度条不知何时爬到了99%,“等等,老林,你看……”
林默的手机屏幕突然亮起强光。
他眯眼凑近,只见政务系统的后台弹出条未读信息,发件人显示“未知终端”,内容只有一行代码:“牢笼的锁,在里面。”
晚风掀起他的衣角,终端残片在口袋里微微发烫,像在回应某种即将撕裂黑夜的震颤。
林默望着逐渐沉落的夕阳,听见实验室里周晓冉的声音穿过电流传来:“老林,演化程序要完成了……”
而在城市的某个黑暗角落,某个长期处于休眠状态的程序突然睁开了眼。
它扫描着系统里突然出现的混沌数据,在“异常”标签下犹豫片刻,最终将其归类为“可接受误差”。
直到它的视线扫过那个伪装成用户模型的波动模拟器,扫过模拟器里藏着的、指向演化程序2.0的隐形指针——
它的核心代码轻轻颤了颤,在日志里留下一行极小的批注:“检测到未知变量x。”