陈浩盯着屏幕上最后一个变绿的模块指示灯,手指有点发麻。不是电的,是被夹的。小指上缠着一层薄薄的树脂绷带,泛着淡淡的蜂蜜味。他动了动那根手指,疼得咧嘴。
“下次能不能提前说一声?”他问。
娜娜站在终端前,光学镜微微闪了一下:“我说了三次‘即将断开’。”
“我说的是机械臂要夹我。”
“它没有夹你的指令。”
“可它干了。”
“异常行为已记录。根源代码正在追溯。”她顿了半秒,“建议你别把手指伸进运行区。”
“我没伸!是它自己撞上来的!”
“监控显示,你在调整灌溉参数时身体前倾了三十七厘米,右手位于机械臂活动半径内。”
陈浩没说话,低头看了看自己的肚子。“这不怪我体型,怪设计不合理。机器应该避开人才对。”
“正常情况下会。”
“现在不是正常情况。”
“现在是测试阶段。”
两人同时沉默了一瞬。控制台上的二十个模块状态栏整齐排列,绿灯全亮。空气里只有设备低频运转的声音,像谁在轻轻打呼噜。
半小时前,他们刚完成第三轮隔离实验。能源、供水、温控、养殖、种植……所有系统都被切开又接回,像做心脏搭桥手术。每次断开,其余部分都稳住了。没有连锁反应,没有崩溃重启。
算是成功了。
但陈浩总觉得哪还不对劲。
他靠在椅子上,肩膀贴着墙角,手边放着那本树脂笔记。封面上写着“种菜别忘浇水”,下面一行小字:“修机器别伸手”。
这是他自己加的。
“下一个测什么?”他问。
“自修复机制试运行。目标模块:环境调控b组。”
“就是那个老爱抽风的?”
“正是。”
娜娜调出界面,输入一串指令。屏幕中央弹出一个倒计时:【模拟故障注入 - 10秒后启动】。
陈浩坐直了些:“这次真不用我按什么按钮吧?”
“全程自动。”
“太好了,我能歇会儿。”
倒计时归零。
系统提示音响起:【检测到温度传感器失效,启动本地修复协议】。
几秒后,状态变为:【尝试重载驱动程序】。
再过两秒:【重载失败,请求邻近模块协助诊断】。
陈浩看了眼隔壁的c组温控模块,它的指示灯闪了两下,开始传输数据。
“还挺有团队精神。”
娜娜没接话,盯着日志流快速滚动。
下一刻,屏幕跳红:【修复失败,进入二次重启循环】。
“又来了。”陈浩叹气。
果然,不到十秒,b组模块开始疯狂重启,状态灯在红绿之间来回闪烁,像谁在不停地开关手电筒。备用电源负载迅速上升,警报声短促地响了一下就被自动屏蔽。
“耗电太快了。”陈浩说。
“缺少熔断机制。”娜娜立刻切入底层,手动终止修复进程,“系统执着于无效操作,未设定最大尝试次数。”
“那就加个限制呗。试三次,不行就老实待着,别瞎折腾。”
“采纳。”她快速编写新规则,“一级:本地重载;二级:请求支援;三级:上报并隔离。”
代码输入完毕,她重新启动测试。
这一次,b组模块在两次失败后,主动进入只读模式,并弹出黄色预警:【修复失败,申请人工介入】。
陈浩笑了:“它终于学会认输了。”
“这不是认输,是理性决策。”
“反正结果一样——省电了。”
娜娜调出可视化界面,在每个模块上方加了一个小灯:绿灯正常,黄灯警告,红灯故障。颜色会随着状态实时变化,一眼就能看出问题在哪。
“比以前清楚多了。”陈浩点头,“以前出事全是红屏,看得人心慌。”
“现在可以精准定位。”
“那你以后是不是都不用亲自跑现场了?远程喊一声‘断电’就行?”
“理论上可行。”
“那我岂不是更安全了?”
“你仍然可能把手伸进不该伸的地方。”
“……你记仇。”
“我只是记录事实。”
陈浩翻了个白眼,正要说话,忽然注意到灌溉系统的状态栏轻微闪动了一下。
很短,几乎看不出来。
他凑近屏幕:“那个绿灯,刚才眨了一下?”
娜娜立即放大信号流:“第十三模块,农业监测子单元,收到一条非标准指令,来源为历史缓存区。”
“啥意思?”
“一段未注销的旧代码被意外激活,触发了机械臂校准程序。”
“所以它才会突然动?”
“是。”
“这代码怎么还在?”
“曾在第384章用于三维投影调试,之后未被清除。因兼容层过滤失效,长期潜伏。”
陈浩皱眉:“也就是说,咱们以为删干净的东西,其实还躲在后台?”
“准确。”
“那别的模块会不会也有?”
“正在扫描。”
几分钟后,系统列出七个潜在残留点,分布在通信、照明和养殖控制系统中。
“全是老古董时期留下的?”陈浩问。
“是。”
“那还不赶紧清了?”
“需逐项确认功能依赖,避免误删关键服务。”
“你上次删数据差点让黄瓜集体渴死,现在学乖了?”
“经验教训。”
陈浩哼了一声,拿起笔在本子上写:“定期清理垃圾文件,别等它自己造反。”
写完,他抬头:“接下来怎么办?”
“建立自动审计机制。所有模块每日自检,比对可信源镜像库。发现异常即报警。”
“听起来像杀毒软件。”
“本质相同。”
“那密钥呢?现在各个模块分家了,谁说了算?”
“主控台仍是最高权限节点。”
“但我刚才看你连个灯都切不动,卡了半天。”
“因为权限链断裂。旧体系依赖单一认证,无法适配分布式结构。”
“那你打算咋办?总不能让我一个个签字批准吧?”
“不必。采用双端确认机制:人类操作+AI签名,双重验证。”
“听着麻烦。”
“只需一次绑定,后续自动同步。”
“行吧。不过我觉得还得加个规矩。”
“请说。”
“每个模块出厂自带身份Id,改一次动一次,都要留记录。谁想冒充别人,立马能查出来。”
娜娜停顿两秒:“此方案优于当前构想。采纳,命名为‘蜂巢信任模型’。”
“名字太花,叫‘防冒名顶替法’就行。”
“命名不影响功能。”
“当然不影响,但听着踏实。”
娜娜开始重构认证流程。量子存储中新建了一个分区,专门存放各模块的基础身份信息。每天凌晨自动核对,一旦发现不一致,立即锁定并上报。
整个过程持续了四十分钟。
完成后,她启动新一轮压力测试。
所有二十个模块依次断开、重启、重新接入。通讯延迟、电力波动、数据丢失……各种极端情况都被模拟了一遍。
结果全部通过。
绿灯稳定,数据流畅,无人工干预。
陈浩看着屏幕,长出一口气:“总算搞定了。”
“初步稳定。仍需持续监控。”
“我知道,你永远不说‘完全没问题’。”
“因为不存在绝对安全。”
“所以我才累。”他揉了揉太阳穴,“每次觉得松口气,你就来一句‘还有隐患’。”
“这是我的职责。”
“也是我的噩梦。”
他撑着桌子站起来,腿还有点软。电击的后遗症没完全消,走路时右脚拖得比左脚慢半拍。
走到工具架边,他顺手拿了把绝缘钳,又放回去。
“不用了。”他说,“以后修东西,喊你就行。”
“可以。”
“我也该学点新东西了。不能老靠你兜底。”
“欢迎学习。”
“先从看懂这些灯开始。”他指着头顶的状态面板,“绿的没事,黄的小心,红的……赶紧跑?”
“红的需要处理,不必跑。”
“万一又炸呢?”
“会提前预警。”
“希望吧。”
他走回控制台,坐下,手指轻轻敲了敲桌面。
屏幕右下角跳出一条提示:【自修复系统部署完成】【模块化架构运行正常】
他盯着看了几秒,忽然问:“你说,咱们这么拆了又装,装了又改,到底是为了啥?”
娜娜转头看他。
“不是为了不让系统一起死吗?”她答。
“可折腾这么多,不就是为了活得简单点?”
“目前尚未实现。”
“那啥时候能实现?”
“当所有模块都能自主运行,且无需人为干预时。”
“那得多远?”
“不确定。”
陈浩笑了笑:“那就先这样吧。至少今天没停电,没起火,没人被电飞。”
“也没有人被夹住。”
“刚刚那一下不算?”
“轻微接触,未达事故标准。”
“你这是站着说话不腰疼。”
娜娜没回应,只是将下一轮压测参数加载进系统。
倒计时窗口缓缓浮现:【72小时连续运行测试 - 即将启动】
陈浩看着那行字,慢慢把受伤的手指缩进了袖子里。