办公室的绿萝又蔫了一片叶子,我盯着它看了三秒,然后拿起喷壶,给每一片叶子都浇了水。

这种细碎的、毫无意义的动作,能让我暂时忘记两小时前那场庆功宴上,她端起酒杯,笑容满面地将我们熬了三个月的心血,像递一张餐巾纸一样,轻飘飘地推给了那个只负责打开PPT的男助理。

陈砚的手指还残留着喷壶手柄的凉意。庆功宴上那杯敬酒,香槟的气泡在舌尖炸开的酸涩感,此刻又从胃里翻涌上来。他闭了闭眼,再次睁开时,目光落在办公桌上那个银色的U盘上。里面装着核心算法模块所有的底层代码,每一行都是他带着团队在无数个深夜敲出来的,包括那个被当众推出去“领功”的助理陆晨光,当时正坐在角落埋头改BUG,连头都没抬。

陈砚拿起U盘,指尖摩挲过冰冷的金属外壳。三年前他入职,把这块无人问津的领域从零搭建起来,一步步验证、推翻、重构,最终让“天枢”算法的识别精度从62%飙升到97.3%。那些代码的逻辑链路,每一步思考的痕迹,都刻在他脑子里,比任何文档都清晰。

门被推开,郑曼曼探进半个身子,妆容一丝不苟,嘴角还挂着庆功宴上那种无懈可击的笑:“陈总工,还没走?今天辛苦了,早点回去休息。”她声音轻柔,目光扫过他桌上的U盘,停顿了不到半秒,又若无其事地移开。

陈砚没接话,只是把手边的文件合上,发出不轻不重的一声“啪”。

“曼曼总也辛苦,”他说,语气平稳,听不出任何情绪,“恭喜项目成功。”

郑曼曼似乎还想说什么,但陈砚已经拿起外套站了起来,从她身边走过时,他甚至闻到了她身上那股熟悉的、冷调的香水味——Chanel No.5,她总说这是“成功女士的味道”。

走廊尽头的电梯“叮”一声打开,光可鉴人的镜面门映出陈砚的脸。三十五岁,不算年轻了,眉眼间的书卷气被这些年磨砺出的沉郁压下去几分。他想起三个月前项目最关键的那次压力测试,服务器连续崩溃七次,整个团队熬了三天两夜。郑曼曼作为项目总负责人,只来过两次,一次是送咖啡,一次是问进度。而陆晨光,那个今天被推到聚光灯下的“技术功臣”,当时正对着满屏报错代码,额头上的汗几乎要滴进键盘缝里。

是他,陈砚,坐在陆晨光旁边,一行一行地带着他重构了核心接口的调用逻辑。

电梯下行,数字跳动,像倒流的时光。他忽然想起更早之前,刚立项那天,郑曼曼把他叫到办公室,玻璃幕墙外的阳光很烈,她的笑容也是:“陈砚,这个项目如果成了,公司技术架构这块,你说了算。”

承诺像气泡,在今天的香槟里碎得无声无息。

陈砚走出公司大楼,晚风裹着初秋的凉意灌进领口。他没打车,沿着街道慢慢走。路边的银杏叶开始泛黄,有几片打着旋落在脚边。手机在口袋里震了一下,是陆晨光发来的消息:“陈工,今天的事……对不起,我没想到郑总会那么说,我当场都懵了。”

陈砚看着那行字,打了几个字又删掉,最后只回了一个字:“嗯。”

又走了一段,手机再次震动。这次是郑曼曼,语气换了,不再是庆功宴上的春风得意,带着点试探性的焦虑:“陈砚,项目虽然过了,但客户那边的技术对接人明天要过来看底层实现,你那边核心模块的接口文档能不能今晚发我一份?晨光说他不太熟这块。”

陈砚停下脚步,站在一盏路灯下,光从头顶洒下来,在地面投出一个孤零零的圆。他看着屏幕上那几行字,忽然笑了。那笑意很浅,只牵动了一下嘴角,眼底却是冷的。

三个月,一千多个小时的连续攻坚,三十七版迭代方案,核心模块每一行代码的逻辑、每一个参数调优的理由,都是他手把手教给陆晨光的,而那位被推上神坛的“技术功臣”,此刻面对客户的技术对接,给出的回答是“不太熟”。

陈砚把手机锁屏,塞回口袋。路灯把他的影子拉得很长,指向他回家的方向。他觉得胸口那口闷了整晚的气,终于找到了一个出口,一个很明确的、带着决定性的出口。

他决定,从这一刻起,郑曼曼所有的求助,他都会用一个字回应。

不。

第二天一早,陈砚到办公室的时候,陆晨光已经坐在工位上了,黑眼圈重得像被人揍了两拳。看见陈砚进来,他几乎是弹起来,跟到陈砚的独立办公室门口,手扶着门框,声音压得很低:“陈工,昨晚郑总找我要接口文档,我说了那是您主导的部分,我没跟完最后的调优……郑总好像不太高兴。”

陈砚把外套挂好,转身看着陆晨光。年轻人脸上写满了不安和愧疚,还有一丝不易察觉的慌张。陈砚记得,当初把陆晨光招进项目组,就是看中他基础扎实,人也踏实。这三个月,陆晨光确实拼命,跟着熬了不少夜。但在最核心的算法优化环节,他始终只能做执行层面的辅助,那个“最后一公里”的瓶颈突破,是他陈砚独自在凌晨三点的办公室里完成的。

“晨光,”陈砚开口,声音很平,“接口文档在共享盘的‘核心资产’文件夹下,文件名后缀是_v37_final。你发给她。”

陆晨光愣了一下,显然没料到陈砚这么干脆:“陈工,那您……您要不要先过一遍?”

“不用。”陈砚已经坐下了,打开了电脑屏幕,“你发的,她认得。”

陆晨光张了张嘴,最终什么也没说,轻轻带上了门。陈砚看着门板合拢,指尖在键盘上停了片刻。他没有告诉陆晨光,那份v37_final的文档里,他留了一个“钩子”——一个只有在特定参数组合下才会触发的保护性校验,不影响功能运行,但会在日志里留下清晰的调用痕迹。那是他多年前养成的一个习惯,防备技术成果被剽窃时拿不出证据,没想到第一次用上,是在这种情境下。

上午十点,客户方的技术团队到了。郑曼曼亲自迎进大会议室,陆晨光被叫去作陪。陈砚坐在自己办公室里,隔着磨砂玻璃能看见走廊里人来人往。大约过了一个小时,他桌上的内线电话响了,是郑曼曼,声音明显比早上多了几分急切:“陈砚,客户那边对接口文档的调用逻辑提了几个问题,晨光解释得有点……你能不能过来一下?”

陈砚靠在椅背上,手指无意识地敲了敲桌面。电话那头沉默了两秒,郑曼曼又补了一句:“就几个小问题,你来说明一下就行,很快的。”

“曼曼总,”陈砚的声音很稳,像在陈述一个客观事实,“我记得昨天的庆功宴上,技术层面的功劳您是当众交给晨光的。客户那边的技术对接,由他来主导解释,更符合您昨天的……安排。”

电话里安静了。那种安静很微妙,带着电流轻微的“滋滋”声,仿佛郑曼曼在急速调整呼吸和措辞。过了几秒,她的声音重新响起,调子软了几分:“陈砚,我知道昨天的事你可能有想法,但这是工作,客户面前,我们项目组是一个整体——”

“您说得对,是一个整体。”陈砚打断她,语气依旧平缓,“所以我在我负责的部分已经提供了完整文档,晨光也参与过全程,没有比这更‘整体’的做法了。”

他轻轻挂了电话。

窗外有鸽子扑棱棱飞过,在玻璃上投下一闪而过的影子。陈砚站起身,走到窗边,看着楼下园区的绿化带。几个穿着制服的人正在修剪灌木,电锯的轰鸣隔着玻璃变成模糊的嗡嗡声。他想起很多年前,刚入行的时候,他的第一个项目主管曾对他说过一句话:“技术这行,你的手比你的嘴可靠,但你的嘴有时候得替你的手说话,不然手白干了。”

那时他不以为然,觉得技术好就够了。现在他明白了,光手会干活不行,还得会提防那些拿你的手去摘果子的人。

下午的情况更微妙了。郑曼曼开始通过邮件向他提问,措辞正式,抄送给了项目组所有成员:“陈总工,关于核心模块的异常处理机制,客户希望了解设计思路,能否请您提供一份补充说明?”

陈砚回复:“详见共享盘‘设计文档’目录下‘异常处理架构_v3.pdf’,内有详细设计思路及决策依据。”

郑曼曼再发:“客户对识别精度从95%到97.3%的跃升很感兴趣,想了解具体优化路径,这部分晨光讲得比较概括。”

陈砚回复:“该跃升涉及三次关键调优,分别记录在实验日志_07、_12、_19三份文件中,路径相同。晨光全程参与实验记录整理。”

他每一封都回,每一封都把路径写得清清楚楚,但每一封都在隐晦地表明:答案就在那里,谁都能找到,而那位被公开授予“技术功臣”头衔的陆晨光,显然有能力也有义务自己去看。

到了傍晚,郑曼曼终于忍不住了,直接推开了他办公室的门。门把手被拧得有点急,磕在墙上的吸铁石上发出“啪”的一声响。她站在门口,背光,脸上的表情在逆光中看不分明,但声音里的焦灼已经盖过了所有精心维持的从容:“陈砚,你今天什么意思?你是项目技术负责人,客户来了你不露面,邮件回得跟客服工单一样,你是想让我难堪还是让公司难堪?”

陈砚从显示器后面抬起头,平静地看着她。夕阳从她身后的窗户斜照进来,给她镀上一层金红色的边,却照不进她此刻微微眯起的眼睛里。

“曼曼总,”陈砚开口,依旧很慢,“我是项目技术负责人,这点我记得。但昨天在庆功宴上,您站起来敬酒的时候,亲口说的——‘天枢项目能提前两周交付,精度达到行业领先,多亏了我们陆晨光在核心算法上的突破。’您原话,我没记错吧?”

郑曼曼的嘴角抽动了一下。她的手还扶在门把手上,指节因为用力微微泛白:“那是场面话,你在这个位置上这么多年,场面话听不懂吗?”

“听得懂。”陈砚点头,甚至笑了一下,“所以我才配合您的场面话,把技术说明的‘场面’交给他来做。这不是您想要的效果吗?技术功臣亲自向客户解释技术细节,比我这个‘不懂场面话’的人去说,更有说服力。”

郑曼曼盯了他几秒,忽然把门带上了。关门的动作比刚才轻了很多,她甚至往前走了两步,站在他办公桌前,双手撑在桌沿上,身体微微前倾,语气压低了,带着一种近乎恳求的意味:“陈砚,我承认昨天是我处理得不够周全,但项目已经到了最后一步,客户那边的CTO是搞技术出身,看人下菜碟得很,晨光镇不住场子。你今天过去,算帮我个忙,算帮项目组一个忙,行不行?”

她离他很近,那股Chanel No.5的味道清晰地钻进鼻子里,和昨晚庆功宴上的一模一样。陈砚垂下眼帘,目光落在她撑在桌沿的手指上——甲油是新做的,裸色,很精致。

他想起三个月前某个深夜,他和陆晨光还有另外两个组员在机房调试,服务器散热风扇的声音响得像台风过境。凌晨两点多,郑曼曼打电话来问进度,他说“还在调”,她说“辛苦了”,然后挂了。后来他才知道,那个电话她是在KTV包厢里打的,旁边有人唱歌的声音透过听筒漏出来,只是当时他太专注,没留意到。

“曼曼总,”陈砚抬起头,目光和她对上,很温和,但也很空,“您说的忙,我理解。但我也需要您理解一件事——技术上的问题,从来不是‘去解释一下’就能解决的。它需要投入、需要沉淀、需要真正理解每一行代码为什么那么写。您把功劳给了他,那么对应的责任、对应的解释权、对应的信任,也理应一并给他。不然,您让真正做事的人,怎么想?”

郑曼曼直起身,退后半步。她脸上的表情变了几变,最终定格在一种复杂的、介于恼怒和审视之间的神色。她看了他很久,最后只说了一句:“陈砚,你变了。”

“是么?”陈砚微微偏头,目光扫过桌上那个银色的U盘,“也许吧。人总得变。不变的话,就永远只能做那个‘帮别人填坑’的冤大头。”

郑曼曼走了,高跟鞋敲在地面上的声音又急又脆,一路响出走廊尽头。陈砚重新把目光移回屏幕上,打开了一个加密文件夹。里面整整齐齐地躺着项目全程的所有日志、聊天记录、代码提交历史,以及最重要的——那几段在凌晨三点录下的屏幕操作录像,清晰地记录了他独自完成最后一次关键突破的全过程。

他本来不想用这些。他本来真的以为,凭自己在这个行业里十几年的积累和口碑,不需要用这种手段来保护自己。

但现在,他觉得,放着不用也是一种浪费。

接下来的三天,公司里弥漫着一种微妙的气氛。庆功宴的热闹劲儿还没完全过去,但项目组内部,尤其是技术条线上的人,都隐隐感觉到了不对劲。陆晨光成了最尴尬的那个人——他被推到了台前,却没有相应的技术功底去支撑那个位置,客户那边的问题像连珠炮一样发过来,他每天顶着巨大的压力翻文档、翻代码,实在解决不了的就偷偷给陈砚发消息求助。

陈砚对陆晨光的态度和对郑曼曼不同。他没有完全拒绝陆晨光,但回复的方式很“技术”——“你看一下日志_15,第89行到第112行的注释。”“你把报错堆栈发给我,我告诉你看哪一段。”“这个问题在架构文档的第四章有完整推导,你读完了还不会再来找我。”

这种指导方式,既是在教陆晨光,也是在用一种不动声色的方式,让陆晨光自己意识到:你被推上去的那个位置,离真正的核心,还差得远。

陆晨光起初有些委屈,甚至有一次在茶水间堵住陈砚,眼圈都是红的:“陈工,郑总那天是突然那么说的,我根本没准备,我当场都傻了……我不是有意要抢您的功劳,我真的不是……”

陈砚看着这个比自己小了快十岁的年轻人,忽然想起自己刚入行时的样子。那时候他也曾因一个前辈的提携而感激涕零,也曾因一次不明不白的功劳归属而憋屈得整夜睡不着。技术这条路,每一步都是实的,任何虚的、飘的、借来的光环,迟早都要还回去。

“我知道你不是有意的,”陈砚拍了拍陆晨光的肩膀,声音放轻了些,“但你现在站在那个位置上了,就得扛那个位置的事。扛不住,你该想想是为什么。”

陆晨光愣住,嘴唇翕动了几下,最后低下头,用力点了点头。

到了第四天,事情有了转机。客户那边的CTO姓周,是个五十来岁的老技术人,据说早年也在大厂带过核心团队,对技术细节的嗅觉异常敏锐。在连续和陆晨光沟通了两天之后,他直接给郑曼曼发了封邮件,措辞礼貌但意思明确:“关于天枢系统底层算法的一些设计决策,我希望能和更资深的技术负责人直接交流。陆工基础不错,但对某些核心逻辑的理解似乎不够深入,这让我们对系统的长期维护性产生了一定疑虑。”

这封邮件像一颗石子投进了本就暗流涌动的水面。郑曼曼在办公室里关着门打了一上午电话,中午的时候,她的助理过来敲陈砚的门,说郑总请他午饭去公司楼下的西餐厅,有事商量。

陈砚看了看时间,十一点四十分。他想了想,答应了。

西餐厅人不多,郑曼曼挑了个靠角落的卡座,面前放着一杯没怎么动的橙汁。陈砚坐下的时候,她抬起头,眼下有两抹很淡的青,显然是这几天没睡好。

“陈砚,”她开口,没有寒暄,“客户那边周总点了名要见你。我知道这几天你心里有结,我向你道歉,正式地、郑重地道歉。庆功宴上那个安排,是我考虑不周,伤害了你的感受,对不起。”

陈砚看着她,没说话。侍者过来点单,他要了一杯柠檬水。等侍者走了,他才开口:“曼曼总,你的道歉我收到了。但有些事情,不是一句‘考虑不周’就能翻过去的。”

郑曼曼深吸了一口气,十指交叉放在桌面上:“你想要什么?公开澄清?补充表彰?还是年终评级调整?你提,我能办到的,都办。”

陈砚端起柠檬水喝了一口,凉意从喉咙滑下去。他看着郑曼曼,觉得这一刻的她,和四天前庆功宴上那个举着酒杯笑容满面的女人,判若两人。但本质上,他想,她们是一个人。一个习惯性地把技术成果当作权力博弈筹码的人,一个从来不曾真正尊重过那些在深夜里一行一行敲出代码的人。

“我不要澄清,也不要表彰。”陈砚放下杯子,玻璃底座磕在桌面上,发出轻轻的一声脆响,“我要的是从今天开始,所有涉及天枢项目、以及后续我参与的任何项目,技术层面的决策、汇报、对外沟通,由我直接负责,不再通过您转述或分配。”

郑曼曼的眼神变了一下:“你的意思是……绕开我?”

“我的意思是,让专业的人做专业的事。”陈砚的语气依旧很平,但每一个字都掷地有声,“您擅长管理、协调、资源调配,这是您的价值。技术架构的走向、核心方案的制定、对外技术呈现的把控,这是我的价值。价值应该放在对的位置上,不然就像把一颗精准的轴承装进错误的机器里,再好的零件也会卡死。”

卡座里安静了一会儿。背景里放着一首舒缓的爵士乐,萨克斯的声音慵懒而绵长。郑曼曼垂下眼,看着自己面前那杯橙汁,果肉在杯底缓缓沉降。她沉默了很久,久到陈砚以为她要用沉默来拒绝。

然后她抬起头,笑了。那个笑容和庆功宴上的不同,没那么璀璨,也没那么具有表演性,反而带着一点疲惫的、真实的苦涩。

“陈砚,你知道吗,”她说,“我刚入行的时候,也像你一样,觉得技术就是一切,觉得只要东西做得好,自然会被人看见。后来我花了很长时间才明白,光被看见不够,还得被说出来、被记下来、被刻在功劳簿上。所以我变成了现在这个样子——会说话、会争取、会把团队的成果变成自己的筹码。我忘了,筹码是别人做出来的,不是我自己从地里长出来的。”

陈砚看着她,忽然觉得她没自己想的那么不堪。她只是在这个系统里浸泡太久,学会了系统的那套游戏规则,并把规则内化成了本能。

“那就从现在开始,慢慢长回来。”陈砚说,“第一步,下午的客户会议,我去。但陆晨光也要在。他不是你的挡箭牌,他是我带出来的兵,该学的东西,他得在场学。”

郑曼曼愣了一下,随即笑了,这次笑容里多了一些真正的东西:“好。我去通知周总。”

下午的会议进行得很顺利。陈砚坐在会议桌的主技术位上,用清晰、深入、不带任何花哨术语的语言,把天枢核心算法的设计哲学、优化路径、以及后续的演进方向讲得明明白白。周总听得频频点头,最后甚至主动要了他的联系方式,说有机会想请他去做个内部分享。

陆晨光坐在他旁边,从头到尾认真地听,偶尔在本子上记几笔。会议结束后,他跟着陈砚回到办公室,站在门口,欲言又止。

陈砚正低头收拾文件,余光扫到他:“有事?”

“陈工,”陆晨光的声音有点哑,“我今天才算真的听懂了,核心那块,您到底是怎么想的。以前您教我写代码,我只会照着您说的做,今天听您在会上讲,我才明白那些代码背后的东西……我差得太远了。”

“差得远就慢慢追。”陈砚把文件放进包里,抬头看着他,“技术这条路没有捷径,我走了十三年才到今天这个程度。你才三年,急什么。”

陆晨光用力点了点头,眼眶似乎有点泛红,但他忍住了。他转身要走,又停住,回头说了一句:“陈工,谢谢您。今天会议之前,郑总还专门找我谈了一次,她说以后技术条线的汇报,她不会随便替我做主了。她还说……她说她那天庆功宴上,做得不对。”

陈砚的手顿了一下,然后继续拉上包的拉链:“嗯。知道了。”

陆晨光走后,办公室里安静下来。窗外的天已经擦黑,楼宇间的灯火次第亮起,像无数颗微小的星星落进了城市的缝隙里。陈砚站在窗前,看着那些光点,忽然觉得胸口那块堵了几天的东西,终于彻底松开了。

他不是赢了什么,他只是拿回了本来就属于自己的东西。而在这个过程中,他教会了两个人一些事:一个学会了道歉,一个学会了成长。

至于他自己,他想,他也学会了一件事——隐忍不是懦弱,但隐忍之后的选择,才是真正定义一个人的东西。

他选择了拒绝,不是出于愤怒,而是出于一种更深的坚持。坚持技术应该被尊重,坚持付出应该被看见,坚持在那些无人问津的深夜里敲下的每一行代码,都应该有自己的名字。

第二天,陈砚到办公室的时候,发现桌上多了一盆新的绿萝。叶子油亮亮的,每一片都精神抖擞。花盆底下压着一张便签纸,上面是郑曼曼的字迹,比平时签文件时潦草的笔迹端正很多:“赔你的。那盆蔫了的我搬走了。周末我请团队吃火锅,你定地方。”

陈砚把便签纸折好,放进抽屉里。然后他拿起喷壶,给那盆新的绿萝浇了一点水。

水珠在翠绿的叶片上滚动,映着窗外透进来的阳光,亮晶晶的,像极了某种重新开始的东西。

窗外的梧桐开始落叶了,陈砚每天早到十五分钟,在空无一人的办公区里给那盆绿萝浇水。郑曼曼送来的那盆长势很好,新叶一片接一片地冒出来,比原先那盆蔫掉的不知精神了多少。

天枢项目在客户那边完全落了地,周总那边反馈很好,甚至主动推荐给了另外两家同行公司。公司的季度会上,大老板当众提了陈砚的名字,说“技术条线出了标杆,要奖励”。郑曼曼坐在长桌另一头,隔着十几个同事朝他点了点头,表情坦然。

奖励第二天就到账了。一笔不菲的专项奖金,外加一个“技术合伙人”的虚衔,薪水涨了百分之三十。行政的小姑娘拿着新工牌来给他换,旧的收走时还在桌上磕了一下,留下一个小小的凹痕。

陈砚把新工牌挂在脖子上,金属链子贴着皮肤,凉丝丝的。他低头看了一眼,上面印的字换了——“技术中心 首席架构师”。

陆晨光升了一级,成了高级工程师,独立带一个六人小团队,做的是天枢的轻量化版本,目标客户是那些预算不多但需求明确的中小企业。郑曼曼在部门会上宣布这个任命的时候,陆晨光的耳朵尖都红了。会后他跑到陈砚办公室,门都没敲就探进头来:“陈工,我行吗?”

“你行的。”陈砚正在看邮件,头也没抬,“你手里那个轻量化方案我看过,架构拆得干净,冗余砍得利索。你早就该独当一面了。”

陆晨光嘿嘿笑了两声,把门带上了。

日子就这么往前走,一切看起来都在回到正轨。甚至比正轨更好,因为那条原本模糊的、技术和管理之间的界线,现在清清楚楚地划了出来——郑曼曼管资源、管进度、管人,陈砚管架构、管方案、管技术方向。两条线并行,交叉的地方每周开一次协调会,大部分时候三言两语就能达成共识。

但平静的水面底下,并不是没有暗涌。

十月中旬,陈砚在一次行业沙龙上遇到了一个人。那人叫韩江,四十出头,光头,戴一副窄框眼镜,说话语速极快,脑子里像是装着一整座兵器库的技术方案。他是邻省一家叫“深澜科技”公司的CTO,做的是工业质检方向的AI应用,和天枢的核心算法底层逻辑有七分相似。

沙龙是自助形式,陈砚端着一杯黑咖啡站在角落里翻手机,韩江端着同样的黑咖啡走过来,跟他碰了一下杯:“陈老师,久仰久仰。天枢那套少样本学习的方案,我反复拆过好几遍,架构写得很漂亮。”

陈砚抬了抬眉:“你拆过?”

“公开文献里你们发过一篇论文嘛,就那个《基于动态原型校准的少样本图像分类》。”韩江笑了,咧着嘴,露出一口白牙,“我在那个基础上做了些变体,效果还行。不过天枢落地的时候肯定做了更多工程化的优化,论文里藏了不少东西。”

这就有点意思了。陈砚放下咖啡杯,认真看了韩江一眼。能从他论文的只言片语里嗅出“藏了东西”的人,要么是顶尖的技术选手,要么就是在同一片水域里游了很久的鲨鱼。

“藏也藏不了多少,”陈砚说,“工程优化无非是那几板斧,量化、剪枝、蒸馏。天枢的核心在于校准器的动态权重策略,这个论文里提了,但没展开。你们那边用什么方案?”

韩江的眼睛亮了一下,往前凑了半步:“我们用空间注意力做二次校准,效果在标签极度稀疏的场景里还行,但计算开销比较大。”

两个人站在那个角落聊了将近四十分钟,从校准器聊到分布式训练,又从分布式聊到模型部署的端云协同。直到沙龙的主持人上台开始抽奖,韩江才拍了拍陈砚的肩膀:“陈老师,加个微信?回头细聊。”

陈砚扫了他的二维码,备注名敲了“韩江-深澜”四个字。分开之后他坐回自己的位子上,翻了翻韩江的朋友圈,发现这个人每天发的内容全是技术论文的读书笔记,偶尔配一张自己写的草稿纸照片,满篇数学公式,字迹张牙舞爪。

是个狠人。

他没太当回事,毕竟行业内做同类方向的人很多,互相交流是常事。但三天之后,韩江给他发了条长微信,语气变了,没有沙龙上那么热络,反而带着一种微妙的警惕:“陈老师,你们天枢最近是不是有新的商业布局?我看市面上有人在推一套和天枢高度同构的质检系统,名字叫‘明镜’,报价比你们低四成。”

陈砚盯着那行字看了五秒钟,然后把手机搁在桌上,起身给自己倒了杯水。

他端着水杯回来的时候,脑子里已经把“明镜”这两个字和数据库里所有同行的公开信息对了一遍。没有印象。公开市场上从未出现过这个名字,至少在三个月前的竞品分析报告里,是没有的。

他回韩江:“哪家的?”

韩江隔了两分钟才回:“壳公司,注册地在海南,法人信息查不到。但他们的技术白皮书我托人弄了一份,核心架构和天枢的相似度极高,尤其那个动态原型校准器的结构,几乎是照着你们的论文做的,只是在实现层面做了一些变形。”

陈砚把水杯放下,给郑曼曼发了条消息:“曼曼总,明天有空吗?有个事当面聊一下。”

郑曼曼回得很快:“上午十点,我办公室。”

第二天陈砚到郑曼曼办公室的时候,她正对着电脑看什么东西,屏幕上蓝幽幽的光映在她脸上。她听见门响,抬起头,把笔记本转过来朝向陈砚:“你说的是这个吧?”

屏幕上是一份PDF文档,封面上印着“明镜工业质检系统技术白皮书”,右下角有一个模糊的公司Logo,像是随手用AI生成的那种。

“你从哪弄来的?”陈砚拉了把椅子坐下。

“市场部的同事转给我的,说最近有两三家客户在拿‘明镜’的报价来压我们的价。”郑曼曼把屏幕又转了转,指着一页架构图,“你看这个,和我们的方案有多像?”

陈砚凑近了看。那页架构图上画着一条很眼熟的数据流管道,从图像输入到特征提取,再到原型校准器,最后到分类输出。每一个模块的命名和他们内部的开发代号不同,但整体的拓扑结构、模块之间的数据依赖关系、甚至中间特征图的维度变化,都踩在了同一个鼓点上。

他看了足足三分钟,然后往后靠回椅背,脸上没什么表情,但手指不自觉地攥了一下椅子的扶手。

“这个校准器的结构,”他开口,声音比平时低了一点,“细节上有几处变形,但骨架是从我们的论文里拓出来的。可论文里只写了逻辑框架,具体实现参数和维度设计没有公开。如果只靠论文,做不出工程层面的这么高相似度的东西。”

郑曼曼的脸色沉了下来:“你的意思是……有人拿到了我们的具体实现?”

“不是完整代码,”陈砚摇头,“完整代码在我手里,在公司内部系统里,权限严格。但某些核心模块的设计细节、维度参数、激活函数的选取偏好,如果有人参与过项目开发,手里有中间版本的文档,或者有过观察权限,就有可能拼凑出一套高度同构的方案。”

郑曼曼的身体绷直了。她拿起桌上的手机,快速划了几下,然后放下:“项目组的权限记录我让人拉一份。你能从这份白皮书里看出来,那些变形的部分具体属于哪个开发阶段的痕迹吗?”

“能。”陈砚点头,“给我一天时间,我做个逆向比对。”

他说到做到。

那天下午他把自己关在办公室里,把“明镜”白皮书上能提取到的所有技术细节和天枢项目从立项到上线的全部开发日志做了逐行对照。那种感觉很微妙——像是在看一个不成熟的影子在模仿自己的动作,歪歪扭扭的,但偶尔有那么一两下,准确得让人心惊。

傍晚六点多的时候,他基本锁定了范围。白皮书里体现出来的技术偏好,和天枢项目第三个月到第四个月之间某个中间版本的习惯高度一致。那个版本还没做完最终调优,校准器的维度设置是768,注意力头的数量是12,激活函数用了GELU——这些细节在论文里根本没提,属于团队内部的“设计口味”。

而那个阶段,有权限接触到完整中间版本的人,项目组里一共六个。

陈砚把名单列出来,从头到尾看了三遍。陆晨光在列,但陆晨光最近在忙轻量化版本,根本没有精力也没动机去做这种事。其余五个人里,有三个是外围辅助角色,对核心架构的理解不够深,就算拿到了中间版本也未必能做出这么像样的衍生品。

剩下的两个人,一个叫孙柏,高级算法工程师,在天枢项目里负责数据预处理管道,对校准器的输入输出很熟悉但内部逻辑接触有限。另一个叫唐馨,女性,三十出头,天枢项目前期的核心开发成员之一,在项目进行到第四个月的时候因“个人原因”申请调去了隔壁的语音识别组,当时大家都没多想,只觉得她可能对视觉方向厌倦了。

陈砚盯着唐馨的名字看了很久。他记得这个人,话不多,干活细,代码写得干净,注释习惯非常好。她在天枢项目组待的那四个月,几乎参与了所有早期的雏形搭建工作,包括第一版原型校准器的实现。那个版本的维度设置和激活函数选择,和她后来离开时留下的代码风格,一脉相承。

他把这个发现发给郑曼曼的时候已经快八点了。窗外的城市亮成了一片碎光,办公室里安安静静的,只剩空调出风口轻微的呼呼声。手机震了一下,郑曼曼的回复很短:“我知道了。明天一早,法务和技术保密委员会那边我会召集。你那份比对报告,能做成正式文档吗?”

“能。”陈砚回。

“辛苦了。”郑曼曼又追了一条,“陈砚,谢谢。这次你直接找我,没有绕弯子。”

陈砚看着那行字,拇指在屏幕上悬了一瞬,然后敲了两个字:“应该的。”

他站起来活动了一下僵硬的脖颈,骨头发出一连串细微的咔咔声。走到窗边的时候,他忽然想起韩江——那个光头、快语速的同行,如果没有他那条提醒消息,公司可能还在被“明镜”用温水煮青蛙的方式慢慢侵蚀市场份额。

他给韩江发了条微信:“老韩,谢了。改天请你吃饭。”

韩江秒回:“你请客,我点菜。顺便再聊聊你们那个校准器,我最近有个新想法。”

陈砚笑了一下,把手机揣回兜里。

第二天一早的会开得又密又沉。法务部的负责人姓周,是个四十多岁的女律师,说话像裁纸刀一样干脆利落。保密委员会的两个人坐在旁边翻陈砚提交的比对报告,一页一页地翻,翻到第三十多页的时候,其中一个抬起头来,推了推眼镜:“这个相似度……不太可能是巧合了。白皮书里有些表述甚至用了和我们内部文档一模一样的术语缩写,这东西不会凭空长出来。”

郑曼曼坐在主位上,双手交叠放在桌面上,指节压得有点发白:“权限记录那边呢?”

“拉了。”保密委员会的人调出一份Excel表格投在屏幕上,“项目期间的访问日志显示,唐馨在调离前一周,有过几次异常的操作记录。她用自己的账号下载了一份中间版本的完整工程包,当时审批流程里写的是‘个人学习备份’,直属主管签了字。”

郑曼曼的目光扫了一圈:“她当时的主管是谁?”

没人说话。几秒钟的安静之后,坐在角落里的一个中年男人缓缓举了举手:“是我。许诚,当时视觉组的组长。”

郑曼曼看着他:“许经理,那个审批,你当时核实了吗?”

许诚的脸色有些难看,嘴唇动了动:“当时唐馨说是为了写转岗总结,需要保留一些项目素材作为参考……我想着项目快结束了,她要走了,留个备份也正常,就签了。”

陈砚一直没说话,这时候看了许诚一眼。他认识许诚很多年,知道这个人性格偏软,怕得罪人,在管理上经常当老好人。但正是这种老好人的做法,给一颗钉子留了门缝。

“许经理,”陈砚开口,声音不大,“那个工程包里包含的不仅是项目素材。第三阶段的完整代码、调优日志、实验配置参数,全在里面。如果这份东西流到外部,相当于把我们的地基图纸给了别人。”

许诚的额头上渗出了一层薄汗。他低下头,闷闷地应了一声:“是我的疏忽。”

郑曼曼没有继续追究许诚,而是转向法务的周律师:“法律层面,能追责吗?”

周律师把面前的资料合上:“如果有明确的证据证明她把公司核心资产用于商业竞争,可以走侵权诉讼。但需要更多的证据链,比如她对外传输的记录、以及‘明镜’那边和她之间的利益关联证明。目前这份比对报告只能说明方案高度相似,还没到铁证的程度。”

“那就去查。”郑曼曼站起来,手指按在桌沿上,身体微微前倾,“权限、邮件、聊天记录、外部联系,所有能查的,都查。这件事我不打算冷处理。”

会散了之后,郑曼曼叫住了陈砚。走廊里人来人往,她侧了侧身让一个抱着文件的实习生先过去,然后才压低了声音说:“陈砚,如果查出来真的是唐馨……你打算怎么处理?”

陈砚看着她,觉得她这个问题问得有点特别。她问的是“你打算怎么处理”,而不是“公司打算怎么处理”。

“按规矩来。”他说,“她拿了不该拿的东西,该赔的赔,该走的法律程序走。但我不会针对她个人做超出规矩之外的事。”

郑曼曼点了点头,像是松了口气:“那就好。我刚才其实有点担心你会……毕竟天枢是你一手从零搭起来的。”

“正因为是我搭起来的,”陈砚说,“我才更清楚,真正值钱的东西不是那一份工程包。工程包里的代码是死的,当时做那些设计的思路、权衡、取舍,它们在我脑子里,不在任何一份下载记录里。唐馨拿走的东西,能让她仿一个‘明镜’出来,但仿不出天枢的下一个版本。”

郑曼曼看了他几秒钟,嘴角微微动了一下,像是一个笑:“陈砚,你这个人……有时候还挺让人安心的。”

陈砚没接话,转身往自己的办公室走。

接下来的两周,调查在悄悄进行。法务和技术保密委员会的人像破案一样,拼凑着唐馨离开前后的各种痕迹。她的办公电脑在调离之前有过一次格式化操作,硬盘上的数据被清理得很干净,但在公司服务器的操作日志里找到了她对外传输的记录——一个加密压缩包,通过个人邮箱发送到一个外部地址。那个外部地址经过追踪,最终指向了“明镜”背后那个海南壳公司的一个注册邮箱。

证据链不算特别长,但足够清晰。

期间唐馨来公司办过一次手续,据说在走廊里遇见许诚的时候还笑着打了招呼,完全看不出异样。陈砚没有和她直接碰面,但他听陆晨光说,唐馨在茶水间里和以前的同事聊天,聊到“明镜”的时候主动说了一句:“那个系统我看了,架构是有点像天枢,但做技术的人都知道,架构这种东西大同小异,谈不上抄不抄的。”

陆晨光转述这句话的时候,语气里带着掩饰不住的愤慨:“陈工,你说她怎么能说得那么理所当然?”

“她当然得这么说。”陈砚正在调一个模型的训练参数,眼睛没离开屏幕,“不这么说,怎么说服自己当初做得没错?”

陆晨光攥了攥拳头,又松开了:“我真没想到是她。唐馨姐以前带过我,教过我很多东西,她代码写得那么好,我还一直把她当榜样来着。”

陈砚这才转过头看了他一眼,目光温和了些:“人是会变的。她当初教你的那些东西是真的,现在做的这件事也是真的。不矛盾。”

陆晨光沉默了一会儿,点了点头。

十月底的时候,郑曼曼召开了第二次专项会议,正式通报了调查结果。唐馨在调离前擅自下载并对外传输公司核心技术的工程包,用于支持“明镜”系统的开发,构成严重违反保密协议和竞业限制条款。法务部已经向对方公司发了律师函,同时启动了针对唐馨个人的法律程序。

会议室里安安静静的。许诚坐在角落里,全程没抬头。郑曼曼念完通报内容之后,目光扫过全场,最后落在一个空着的椅子上——那是唐馨以前常坐的位置。

“这次的事,给我们所有人上了一课。”郑曼曼的声音清晰平稳,“技术的价值不仅仅是代码本身,还有我们对它的保护。权限管理、审批流程、转岗交接,每一个环节都堵死漏洞,才能不让团队的汗水白流。”

散会之后陈砚在走廊里站了一会儿,看着同事们三三两两地往外走。有人低声议论着唐馨的事,表情复杂,有惋惜的,有生气的,也有漠不关心的。他想起来,去年冬天项目最吃紧的时候,唐馨还在组里,有一天大家加班到凌晨,她主动去楼下买了热豆浆上来,每个人桌上放一杯。那时候她脸上的笑是真切的,那种温热的感觉也是真的。

很多事情没有对错那么简单。唐馨做了一件错事,但当初那个给大家买豆浆的人也是她。人在不同的时候会选择做不同的事情,而每一次选择都会把来路重新画一遍。

陈砚回到办公室,打开电脑,把天枢下一代的规划文档调了出来。那份文档他已经写了将近半个月,标题是“天枢第二代:从区分到理解”。他在那个文档里提出了一条和现有主流方向完全不同的路径——不追求更大的模型、更多的参数,而是重新定义问题本身:让系统真正“理解”它看到的图像,而不只是“认出”它见过的东西。

这个想法太超前了,他还没跟任何人正式聊过。但今晚他忽然觉得,是时候了。

他拿起手机,给韩江发了条消息:“周末有空吗?有个东西想跟你碰一下。”

韩江回得比平时慢了一些,大概过了十几分钟才弹过来一个地址和一句话:“周六下午两点,我办公室。你那个‘新想法’我好奇很久了。”

陈砚锁了屏,靠在椅背上,看着窗外渐深的夜色。那盆绿萝在台灯的暖光下显得格外鲜绿,叶子上落了一层薄薄的、金黄色的光。他伸手碰了碰一片新冒出来的小叶子,触感嫩生生的,带着一点清晨般的新鲜劲儿。

周六下午一点五十,陈砚开车到了深澜科技所在的写字楼。那栋楼在临市的新区,旁边有一大片人工湖,湖面上几只白色的水鸟慢悠悠地划着水。楼里的前台小姑娘打电话确认了一下之后,笑容满面地把他引到了顶层。

韩江的办公室比他的大一倍,到处堆着纸和模型芯片的开发板,墙上挂着两块白板,一块上面画满了神经网络的结构图,另一块写着一堆手算的公式推导,墨迹看起来还没干透。

“陈老师!”韩江从一堆开发板后面探出头来,光头上架着那副窄框眼镜,手里还攥着一支记号笔,“来来来,坐这儿。我正算一个东西,你帮我把个关。”

陈砚在那堆开发板旁边清理出一小块椅子面坐下,看了一眼白板上那些公式:“注意力机制的二次优化?”

“对。”韩江把记号笔往桌上一扔,在另一把椅子上坐下来,“你那条路径里的动态原型校准,我用注意力做了几版变体,发现某种情况下的收敛速度能提升一大截,但泛化能力会掉。我想了两天想不通为什么,你帮我看一眼。”

陈砚站起来,走到白板前面,把那串公式从头看到尾,中途拿起笔在某一行下面划了一道:“这里。你算注意力权重的时候用的是一个全局softmax,但原型校准器的特性要求它在特定区域保持更敏感的高分辨率。你应该改成局部归一化。”

韩江凑过来盯着那一行看了几秒钟,然后猛地拍了一下大腿:“操,对!我他妈绕了两天的弯子就卡在这儿。”他抬头看着陈砚,眼睛亮得像点了灯,“陈老师,你这个思路太刁了。全局softmax会稀释掉关键区域的响应,局部归一化保留局域对比度,代价是计算量增加百分之十几,但这个收益比完全划算。”

“所以我才说,天枢第二代的核心不是参数堆叠,是结构本身对任务的重新理解。”陈砚把笔放下,坐回椅子上,“我们现在的所有模型,本质上都在做同一件事:把一张图映射成一个标签。但人类看一张图的时候,做的不只是‘认出’这个动作。他会理解这张图里有什么东西、这些东西之间的关系是什么、哪些是重要的、哪些是背景。我想让模型做到这一步。”

韩江安静了。他靠在椅背上,手指无意识地搓着下巴上一点青色的胡茬,看了陈砚很久。办公室里安静得能听见窗外湖边水鸟扑棱翅膀的声音。

“老陈,”韩江忽然改了称呼,不再叫“陈老师”了,“你这个想法,要是真能做出来,整个行业的方向都会被带偏。你知道这意味着什么吗?这意味着我们要抛弃过去五年里所有人都认为是‘正确’的那个大模型路线。”

“我知道。”陈砚说。

“你确定你要干?”

“我确定。”

韩江咧嘴笑了,那个笑容和沙龙上一模一样,热烈又带点疯狂:“行。算我一个。深澜这边我有一支四人的核心团队,可以做算法验证和工程落地。天枢那边的资源你负责整合。我们做个跨公司的联合开发。白纸黑字签合作协议,股权、署名、知识产权,都摆在桌面上谈。”

陈砚伸出手:“那就谈。”

韩江握住他的手,拇指用力,掌心干燥而温热:“谈。”

那天下午他们聊了将近四个小时,从技术路线聊到合作框架,从资源调配聊到市场窗口。天快黑的时候陈砚才起身告辞,韩江送他到楼下,湖边已经亮起了景观灯,橙黄色的光倒映在水里,被晚风揉成一圈一圈的碎影。

“老陈,”韩江在湖边站定,双手插在裤兜里,“说实话,我在这行混了十几年,见过的人里,像你这样做到了一定程度还敢推翻重来的,不多。”

陈砚看着湖面上那些碎碎的光,笑了笑:“不是推翻,是往前走。推翻了就什么都没了,往前走是带着以前的所有东西,去一个新的地方。”

韩江点了点头:“这话说得漂亮。行,下周我把协议初稿给你发过去。”

陈砚开车回去的路上,车载广播在放一首老歌,旋律舒缓,歌词模糊。他把车窗摇下来一点,晚风灌进来,带着湖水潮湿的气息和路旁桂花若有若无的甜香。他忽然想起来,去年的这个时候,他正对着天枢第一版那个死活跑不动的代码焦头烂额,头发一把一把地掉。那时候他根本没想过,一年之后他会在另一个城市的湖边,和一个只见过两次面的人敲定一桩可能会改变行业走向的合作。

路很长,但方向对。

周一回到公司,陈砚把周末的事跟郑曼曼通了气。他坐在她办公室的沙发上,言简意赅地讲了韩江、深澜科技、以及联合开发的大致设想。郑曼曼听完之后靠在椅背上转了一圈椅子,表情介于惊讶和深思之间。

“跨公司联合开发?知识产权怎么分?”

“协议会列清楚。天枢这边出核心算法框架和场景数据,深澜出工程化能力和算力资源。各自的贡献度走工作台账,定期对账。”

郑曼曼又转了一圈椅子,停下来的时候看着他:“陈砚,这个项目如果要走公司层面的合作流程,需要报董事会审批。你有把握说服那群……不太懂技术的人?”

“所以需要你先帮我过一道。”陈砚说,“你在董事会面前说话,比我管用。”

郑曼曼挑了一下眉,嘴角浮起一点似笑非笑的弧度:“你这是……用我?”

“能用的人,为什么不用?”陈砚站起来,朝门口走了两步,又回头,“曼曼总,你不是一直说,管理是你的价值所在吗。现在有个技术层面的东西需要管理去推动,你的价值正好放在对的位置上。”

他走出办公室的时候,听见郑曼曼在身后轻轻“哼”了一声,尾音带着点笑意。

协议的事推进得比想象中顺利。郑曼曼用了两周时间做了董事会的内部沟通,把技术逻辑用商业语言重新包装了一遍,讲成了一个“抢占下一代技术高地”的战略布局。大老板听完之后只问了一个问题:“投多少钱?赚多少钱?”

郑曼曼报了一个数字,又报了一个预测周期。大老板敲了敲桌面:“行,先投第一期的。但我要看里程碑,每三个月交一次技术报告,不许延期。”

第一期资金批下来那天,郑曼曼罕见地在办公室里开了一瓶红酒,叫了陈砚过来,给他倒了一杯:“敬你的新想法。”

陈砚接过杯子,和她碰了一下:“敬你的新价值。”

酒液在杯子里晃了晃,深红色的,映着窗外的天光。郑曼曼抿了一口,忽然说:“陈砚,我想了很多。天枢那件事之后,我一直在想一个问题——我到底是真的相信管理就是我的价值,还是只是因为我搞不懂技术,所以骗自己说搞管理也挺好。”

陈砚看着她。

“后来我想明白了,”她继续说,“我确实做不了你那种程度的技术活,这是事实。但能把像你这样的人推动的东西变成公司战略、变成真金白银的资源,这件事也是有意义的。它不比你写代码低级,只是不一样。”

“我从来没觉得你做的事低级。”陈砚说。

“我知道。以前是我自己觉得。”郑曼曼把酒杯放在桌上,“行了,不矫情了。项目的事,技术层面你全权做主,资源层面我来铺。咱们就这么分工,干到天枢第二代出来那天。”

陈砚也把杯子放下:“说定了。”

从那天开始,天枢二代的联合开发正式启动了。每周二下午两点,陈砚带着天枢这边的一个三人小组,开车去深澜那边和韩江的团队碰头。会议室的桌子上永远摆着两壶咖啡、几盒卷了边的打印纸、以及到处都是的白板笔。两拨人经常吵得面红耳赤,但吵完了又一起吃饭,韩江点菜永远点最辣的,吃得每个人满头大汗。

陆晨光也参与了进来,负责轻量化版本和二代框架的兼容性接口设计。他现在的状态比几个月前自信了很多,开会的时候敢站起来在白板上画自己的思路了,虽然有时候画到一半被韩江挑出毛病来,耳朵还是会红,但已经不会再手足无措。

深澜那边有个叫余晚的年轻研究员,二十六七岁,扎着马尾,说话语速比韩江还快,负责模型部署端的优化。她第一次见陈砚就追着他问了半小时的校准器细节,问到最后陈砚不得不打断她:“余老师,你先让我喝口水。”

余晚这才发现自己连珠炮似的问了太久,不好意思地笑了一下:“对不起对不起,我平时跟韩总他们说话习惯了,逮着懂的人就刹不住车。”

陈砚对这个姑娘印象很深,因为她问的问题都很准,每一个都戳在核心设计的敏感点上,说明她不仅读了论文,还真的动手推过里面的东西。后来有一次团队聚餐吃火锅,韩江喝了两瓶啤酒之后大着舌头说:“老陈你别看余晚年纪小,她本科拿过数学建模国一的,脑子转得比我快。要不是她,深澜那套工程框架早散架了。”

余晚坐在对面被夸得有点不好意思,低着头涮毛肚,马尾辫的尾梢轻轻晃着。

陈砚看了她一眼,没说什么,但心里记住了。

十二月初,天枢二代的第一个原型版本跑了第一轮验证。结果不太理想,预想中的“从区分到理解”的路径在基础图像分类任务上表现平平,比一代只提升了不到两个百分点。团队里有人泄气,韩江难得沉默了一整个下午,陈砚把自己关在办公室里对着数据反反复复看了三遍。

当天晚上九点多,余晚给他发了条微信,是一个自己跑的小实验的截图和一段语音。陈砚点开语音,听见余晚的声音从手机里传出来,背景音里隐约有键盘敲击的声音:“陈老师,我试了一下把原型的特征提取层换成动态路由的架构,效果比原来好不少。但路由的路径选择策略我还没想清楚,你有空帮我看一眼吗?”

陈砚把截图放大了看,余晚的思路是一个很巧妙的变体——她没有沿着原本设计的“理解”方向硬推,而是在特征提取阶段加了一个可学习的路由机制,让模型根据输入图像的复杂度动态选择处理路径。这个想法和“理解”这个目标的内部逻辑是吻合的:面对简单图像时快速走捷径,面对复杂图像时启动更深的推理流程。

他给余晚回了一段文字:“这个方向对。明天我来深澜一趟,咱们当面过。”

第二天他到深澜的时候,余晚已经把她跑实验的全部流程整理成了一页清晰的技术笔记,打印出来贴在了白板旁边。陈砚和韩江两个人站在白板前面看了那张笔记足足二十分钟,然后韩江第一个开口:“老陈,我觉得我们可能一开始走弯了。‘理解’这个目标太大了,我们不该试图一次性解决所有场景,而是让模型学会‘选择’。”

“动态路由就是这个选择机制。”余晚在旁边接话,“我跑的那几个测试集里,平均输入复杂度越高的数据,路由深度选择越深。这说明路由的学习策略本身就在做‘理解’——它理解了输入内容的难度,然后调整自己的行为。”

陈砚靠在一把转椅的椅背上,双手抱在胸前,看着白板上那张笔记。他忽然想起很多年前还在读研的时候,导师说过的一句话:“智能的本质不是计算,是选择。”这么多年过去了,他一直在做计算的事情,但此刻余晚这个思路忽然让他重新想起了那句话。

“改方向,”他站直了,语气很轻但很确定,“原型先放一放,我们从动态路由重新搭。天枢第二代的核心不再是一个固定的模型结构,而是一个会根据输入自主调节计算路径的框架。”

韩江舔了舔嘴唇,表情像是饿了很久的狼忽然闻到了肉香:“工期呢?董事会那边第一季度要看里程碑。”

“我负责汇报,”陈砚说,“你们负责出东西。”

余晚在旁边举起手机晃了晃:“我记录下来了啊,陈老师你亲口说的,回头汇报的时候可别甩锅给我。”

陈砚看了她一眼,忍不住笑了一下:“不甩。”

接下来的一个月节奏快得像按了加速键。动态路由的框架从零开始重搭,余晚负责路由策略的数学推导,韩江负责工程框架的搭建,陈砚和天枢这边的团队做场景适配和训练策略的设计。每周二的碰头会变成了每周二、周四两次,有时候周末也加场。深澜会议室的墙上挂满了打印出来的数据图表,白板上的字迹每天刷新,旧的被新的覆盖,层层叠叠地摞在一起。

元旦那天公司放假,陈砚本来打算在家休息一天,但早上八点余晚的微信就来了:“陈老师,路由路径选择策略的收敛曲线有点怪,你方便看一下吗?”

陈砚看着手机屏幕沉默了两秒,然后起身洗漱穿衣服,回复:“四十分钟到。”

他到深澜的时候整栋楼里空荡荡的,只有顶层韩江的办公室亮着灯。推门进去,余晚盘腿坐在一把办公椅上,膝盖上架着一台笔记本电脑,头发散着没扎,看起来也是刚到不久。韩江不在,桌上留了一盒没拆封的蛋糕和一罐速溶咖啡粉。

“韩总说他今天陪老婆孩子,死活不来。”余晚抬起头朝他笑了笑,眼睛下面有淡淡的青色,“但蛋糕是他早上送来的,说让我们加班别饿着。”

陈砚拉了把椅子坐在她旁边,凑过去看屏幕上的曲线。那条收敛曲线确实有问题——在训练的中期阶段出现了一个异常的波动,之后虽然恢复了上升趋势,但整体平台期比预期高了不少。

“你把路由层的梯度流打出来给我看。”他说。

余晚手指飞快地敲了几下键盘,屏幕上跳出了一串梯度的热力图。陈砚盯着那张图看了大概一分钟,然后用手指点了点热图上一个区域:“这里。路径选择的反馈信号在深层路由那里衰减得太厉害,导致路由策略在后半段基本失去了对输入特征的响应。你需要加一个跨层残差连接,把浅层的梯度直接带给深层路由。”

余晚顺着他的指尖看了那个区域一眼,随即恍然大悟地“啊”了一声:“对,我忘了路由层之间的梯度回传路径是独立的,深层路由接收不到浅层特征的信息。”她已经开始噼里啪啦改代码了,头也不抬,“陈老师,你等我改完跑一轮,大概二十分钟。”

陈砚站起来去给自己冲了一杯速溶咖啡,又给余晚倒了一杯放在她手边。窗外是元旦上午清冷的天光,阳光薄薄的,映在湖面上像一层碎银子。整栋楼安安静静的,只有余晚敲键盘的声音和偶尔喃喃自语的计算。

二十分钟之后余晚重新跑了一轮,那条收敛曲线稳稳地落了下来,波动消失,平台期大幅降低。她盯着屏幕看了几秒钟,然后猛地往后一靠,长长地呼了一口气:“成了。”

陈砚端着咖啡杯走过去看了一眼那组数据,点了点头:“比预想的好。后续继续调几个超参,基本框架就稳了。”

余晚从椅子上站起来伸了个懒腰,背上的骨头咔咔响了几声。她转过身看着陈砚,忽然说:“陈老师,我有个问题想问你,但你得保证不笑话我。”

“问。”

“你最开始做天枢一代的时候,有没有过一个瞬间……觉得自己做不出来了?”

陈砚端着咖啡杯的手顿了一下。他想了想,然后说:“有过。而且不止一个瞬间。大概在第三个月的时候,系统怎么跑精度都卡在百分之六十多上不去,有整整一周我每天晚上对着屏幕发呆,觉得可能这条路根本就是错的。”

“那你怎么撑过来的?”

“没什么特别的,”陈砚说,“就是第二天继续坐在屏幕前面,继续调。调不动了就睡觉,醒了再调。做技术这行,大多数时候没有灵光一现,只有一层一层地把错误的路径磨掉,磨到最后剩下的那条路,就是对的。”

余晚点了点头,没再问。她转过头看着窗外那片湖,阳光把她的侧脸轮廓勾出一道浅浅的金色边线。

那天中午他们叫了外卖,在办公室的桌子上吃。蛋糕拆开了,速溶咖啡续了第二杯。余晚一边啃鸡腿一边看手机上的论文,嘴里含含糊糊地跟陈砚讨论着一个新出的注意力变体。陈砚坐在对面听着,偶尔接两句,大部分时候只是安安静静地吃自己那份饭。

他忽然觉得,这种状态其实挺好。和真正喜欢技术的人在一起,聊技术本身就能喂饱人。

一月底的时候,动态路由的框架跑通了全流程验证。效果比预想的好得多——在多个公开基准测试集上,天枢二代的精度比一代平均高出了将近七个点,而计算开销反而降低了大约百分之十五。这种“又准又快”的组合在行业里极少见,韩江拿到完整结果的那天在办公室里嚎了一嗓子,把隔壁工位的人吓了一跳。

二月第一周,陈砚去董事会做了第一次里程碑汇报。他把技术逻辑讲得深入浅出,重点落在“为什么这条路和行业主流不同”以及“为什么这条路是对的”上面。讲完之后大老板难得鼓了鼓掌,说了句“有点意思”。

郑曼曼在汇报结束之后和他并排走出会议室,走廊里脚步声响得很整齐。她侧头看了他一眼:“你刚才讲得挺好,连王总那种从来不问技术的人都在认真听。”

“是你的功劳,”陈砚说,“你提前帮我梳理了那些问题的角度,我才知道该往哪个方向讲。”

郑曼曼笑了一下,没反驳。

出了办公楼,冷风迎面扑过来,陈砚裹了裹大衣的领子。他忽然想起来,从庆功宴那天到现在,已经过去快五个月了。五个月前的他站在路灯下面盯着手机屏幕做那个“拒绝”的决定,五个月后的他站在公司楼下,刚给一整个董事会讲完一套全新的技术框架。中间的每一天都走得挺累,但回头看去,每一步都踩在实地上。

手机在口袋里震了一下,是余晚发来的消息,只有一行字:“陈老师,我把路由路径选择的可视化做出来了,特别好看!你过来看!”

陈砚看着那行字,嘴角动了动。他回了四个字:“马上到。”

拉开车门的时候,冷风灌进来,他想起那盆绿萝。走之前浇水了,应该够撑到晚上回来。

车子驶出园区,汇入午后的车流。城市的天很高,蓝得干净,几片薄云挂在天边一动不动。陈砚把车窗开了一条缝,冷风挤进来,带着冬天末尾那种干燥的、洁净的气息。他握着方向盘,目光穿过挡风玻璃看着前方宽阔的路面,心里什么特别的想法都没有,就是觉得脚下这条路很稳,方向很对,身边有该有的人,手里有该做的事。

这就够了。

天枢二代的动态路由框架在二月底完成了首轮大规模稳定性测试。那次测试整整跑了一周,服务器集群二十四小时满负荷运转,散热风扇的声音像远处持续不断的潮水。陈砚每天早晚各查一次日志,看到各项指标都稳稳落在预期范围内,心才慢慢放下来。

韩江那边已经开始着手工程化了,把动态路由的算法框架塞进深澜现有的部署管道里,中间出了不少兼容性的磕绊,但总体进度比预想的快。余晚每天跟韩江吵吵嚷嚷地磨接口定义,有时候吵急了两个人在工位上隔空对喊,整层楼都能听见。但吵完第二天,该出的代码一行不少。

三月初,郑曼曼组织了一场面向内部核心客户的技术预览会。规模不大,就请了五六家关系最深的合作方,每家来两三个技术决策人,在一个能坐三十人的中型会议室里坐得稀稀落落。陈砚主讲,把动态路由的理念用最直观的方式展示出来——屏幕上同时跑三组图像识别任务,一组是典型的工业质检场景,另一组是随机混杂的日常图像,第三组是刻意加了噪声和干扰的极端案例。传统模型在第三组上的表现明显下滑,而天枢二代通过动态调节路由深度,把精度稳稳托住了。

会议结束后有好几个人围上来加他微信,其中一个来自医疗器械领域的CTO拉着他的手说了将近十分钟,话里话外是想拿这套框架去适配他们的病理切片识别系统。陈砚把那人的联系方式留了,说后续可以走商务洽谈。

等人都走完了,郑曼曼从后排走过来,手里端着一杯已经凉透的茶,靠在会议桌边上看着他:“反响不错。那两个医疗行业的人,是周总推荐的。”

“周总?”陈砚收拾投影仪的线,抬头看了她一眼。

“天枢一代的那个客户CTO,姓周的。他今天也来了,坐在最后一排没怎么说话,但全程听得很认真。刚才他走之前跟我说了一句话。”郑曼曼端着那杯凉茶抿了一口,“他说,‘天枢二代这条路线,走对了。’”

陈砚把线盘好放进包里,没说什么,但心里动了一下。周总那种级别的人,给一句正面评价,分量比普通客户一百句都重。

那天晚上他回到家,十点半了,客厅的灯还亮着。他妈坐在沙发上戴着老花镜看电视,旁边放着一碗切好的水果,苹果块上已经氧化出了浅浅的褐色。他妈听见门响,头也没回:“回来了?桌上还有热的汤。”

陈砚换了拖鞋走过去,在他妈旁边坐下:“妈,你怎么还没睡?”

“睡不着,等你呢。”他妈把电视声音调小了一点,摘下老花镜看他,“砚砚,你最近是不是特别忙?我看你回来一天比一天晚,周末也老往外跑。”

他妈的称呼永远改不了,从小到大都叫他“砚砚”。陈砚三十好几的人了,被这么叫还是有点不好意思,伸手拿了一块苹果塞进嘴里:“忙过这阵就好了,项目在关键期。”

“你去年也这么说。”他妈看了他一眼,目光里有种不轻不重的担忧,“我不是拦你忙工作,但你得想想自己的生活。你爸像你这么大的时候,你都上小学了。”

陈砚嚼苹果的动作慢了一下。这个问题他妈提过不止一次了,之前他都是用“不急”两个字搪塞过去。但今天不知道怎么的,他忽然觉得搪塞也有点累了。三十五岁,在行业里算正当年,但在家庭这个维度上,确实已经不算年轻了。

“我知道了妈,”他把苹果咽下去,“有合适的会考虑的。”

他妈没再追问,站起来把水果碗收了,走到厨房门口又回头:“汤在锅里,你自己盛。还有,你那个手机壳都磨白了,明天我给你买个新的。”

陈砚低头看了一眼自己的手机壳,边缘确实磨出了一圈白色的塑料底子。他笑了一下:“行。”

汤是排骨萝卜汤,还温着,上面浮着一层薄薄的油花。陈砚坐在餐桌边慢慢喝完了,把碗洗了晾在沥水架上。进卧室之前他看了一眼手机,余晚十分钟前发了条消息,是一段十五秒的录屏,展示路由路径选择的可视化效果。动态的路径图在屏幕上像一棵会呼吸的树,分支根据输入图像的不同特征开合变化,视觉效果确实“特别好看”。

他回了一个竖大拇指的表情。余晚秒回了一个得意的小人。他没有再回复,把手机放在床头柜上,关了灯。

窗外路灯的光透过窗帘缝隙投进来一条细细的亮线,落在天花板上。陈砚躺在那儿看着那条线,想起了他妈刚才说的话。三十五岁,生活里除了代码就是架构,除了架构就是开会。不能说不好,但确实有些东西被一直搁置着,放在那儿落灰。

他没有继续往下想,翻了个身,很快就睡着了。

三月中旬,公司组织了一次春季团建,去郊区的温泉度假村住两天。郑曼曼在部门群里发通知的时候特意强调了一句“全员参加,不许请假”。陈砚本来想用项目进度当借口推掉,但郑曼曼直接给他打了电话:“陈砚,你是技术中心的负责人,你不去下面的人都不好意思去。就两天,放松一下,天枢二代不会因为你离开两天就崩掉的。”

陈砚想了想,答应了。

团建那天是个周六,天晴得不错,大巴车从公司楼下出发的时候车厢里坐得满满当当。陆晨光坐在陈砚后面两排,和几个组里的年轻同事说说笑笑,整个人比半年前松弛了很多。余晚作为合作方代表也被郑曼曼邀请了,坐在靠窗的位置,手里捧着一本纸质的数学书在看,旁边有人聊天也影响不到她。

度假村在山里,开了将近两个小时才到。下车的时候空气凉飕飕的,带着草木和泥土的气息,和办公室里那种混合着打印墨粉和咖啡的味道完全不一样。陈砚深吸了一口气,觉得肺里一下子干净了不少。

下午是自由活动时间,有人去打牌有人去泡温泉,陈砚绕着度假村外围的小路走了一圈,看见路边有一片还没完全返青的草地,几只喜鹊在上面蹦蹦跳跳地啄着什么。他站在那儿看了一会儿,直到身后传来脚步声。

“陈老师,你在这儿躲清静呢?”余晚从后面走过来,手里拿着一个保温杯,杯盖上冒着热气,“韩总他们在那边打牌,吵得我书都看不下去。”

陈砚侧头看了她一眼:“你也没去泡温泉?”

“人多,嫌闹。”余晚在他旁边站定,顺着他的目光看向那片草地,“喜鹊呀,冬天刚过就回来了,挺勤快的。”

两个人就这么站着看了一会儿喜鹊,谁也没说话。山风从树林那边穿过来,带着一点松脂的苦味。余晚的头发被风吹乱了,她随手拢了拢,马尾辫晃晃悠悠的。

“陈老师,”余晚忽然开口,“你有想过一个问题吗?就是如果有一天咱们真的把天枢二代做成了,行业里所有人都跟着往这个方向转了,那接下来呢?下一步往哪走?”

陈砚想了想:“没想过那么远。先把眼前这一步踩实了再说。”

“你不好奇吗?”余晚侧过脸看着他,眼神亮晶晶的,“我有时候会想,十年之后这个行业会变成什么样子。现在的AI像是一个特别好用的工具,但还不够聪明。我觉得天枢二代的方向是在往‘聪明’那边靠了一步,但离真正的智能还差得很远很远。”

“差得远才值得做。”陈砚说,“如果已经什么都做完了,那这行还有什么意思。”

余晚笑了一下,把那句笑藏在了保温杯后面:“这倒是。我本科选这个方向的时候,我爸妈都不太理解,说计算机不是挺好的嘛,干嘛非要钻AI这么虚的东西。我说我就喜欢做不明白的东西,做明白了就没劲了。”

陈砚转头看了她一眼,没接这个话,但心里动了一下。那种感觉很难形容,像是你在一条路上走了很久,忽然发现身边有个人和你走路的节奏一模一样,连脚落在石头上的轻重都踩在了同一个点子上。

傍晚吃了饭之后,郑曼曼组织了个篝火晚会,在度假村后面的空地上烧了一堆篝火,木头噼里啪啦地响着。有人带了吉他,弹得不怎么熟练,但气氛很好。陈砚坐在人群外围的木桩上,手里端着一杯度假村提供的热红酒,看着火光在每个人脸上跳跃。

陆晨光被推着上去唱了一首歌,跑调跑得厉害,下面笑成了一片。他也跟着笑,挠着后脑勺下台来,一屁股坐在陈砚旁边的草地上:“陈工,我是不是唱得特别难听?”

“还行,”陈砚说,“比我强。”

陆晨光嘿嘿笑了两声,仰头看着天上稀疏的星星,忽然安静了一会儿,然后低低地说:“陈工,去年这个时候我还在为能不能转正发愁呢。现在让我带团队了,有时候晚上睡不着觉,老想着万一我给团队指错了路怎么办。”

“指错了就改。”陈砚说,“我指错的路比你多。没人能保证每一步都对的,但你坐在那个位置上就必须做决定。犹豫才是最大的错。”

陆晨光点了点头,没再说话。篝火噼啪炸了一下,溅起几点火星,在夜色里一闪就灭了。

晚会快结束的时候,余晚走过来在陈砚旁边蹲下,把手机屏幕亮给他看:“陈老师,我刚收到韩总消息,他说工程框架那边出了点状况,模型部署到推理引擎的时候路由逻辑的调度延迟比预期高了差不多三倍。”

陈砚接过她的手机仔细看了那几条消息,眉头微微皱了一下:“是路由决策的计算开销还是调度本身的通信延迟?”

“韩总没说太细,就说了调度延迟高,让我明天早点回去跟他一起查。”余晚把手机收回去,“不过我猜应该是通信的问题,路由决策的计算量我们之前估算过,不应该有这么高的延迟。”

陈砚沉吟了几秒:“我明天跟你一起回去。调度延迟这个问题如果出在底层通信协议上,可能和深澜那边的推理引擎架构有关系,我之前看过一次你们的引擎设计,当时就觉得路由层和推理层的交互接口可以优化。”

余晚眼睛亮了一下:“你看过我们引擎的设计?”

“公开论文里有你们的架构草图,我顺着推过一遍。”陈砚站起来拍了拍身上的草屑,“细节不一定全,但大体思路我清楚。”

余晚“啧”了一声:“陈老师你真是……看了我们的公开论文就能推引擎设计?行,明天咱们一起回去,你帮我们看看那块。”

第二天下午大巴返程之前,陈砚就和余晚提前走了。郑曼曼在群里看见消息还专门私信问了一句“出什么事了”,陈砚回了“技术问题,我去看一下”,郑曼曼回了个“OK”的表情。

到了深澜那边已经快傍晚了,韩江的办公室像被台风扫过一样,桌上地上堆满了测试报告和打印出来的日志。韩江本人盘腿坐在地上,面前摊着一台拆了后盖的服务器,正在用万用表测什么东西。

“来了?”韩江抬头看了他们一眼,表情烦躁但眼神没乱,“通信延迟的问题我查了一下午,物理层没问题,软件层的调度栈我拆了两遍也没找到明显的瓶颈。老陈你帮我看一眼路由调用的时序图。”

陈砚放下外套走过去,在韩江旁边的地板上坐下来,接过那叠打印出来的时序图从头翻到尾。翻到第四页的时候他停了下来,指尖点着一个时间戳:“这里。路由决策模块向推理引擎发送调度指令之后,推理引擎没有立即响应,而是等了大概二百毫秒才开始执行。”

“那二百毫秒在干嘛?”韩江凑过来问。

“在等一个确认信号。”陈砚指着时序图上的一个细节,“你看这里,推理引擎收到指令之后先发了一个‘收到’的确认包,然后才开始解析指令内容。这个确认包在同步通信模式下是可以省掉的,只要把协议改成异步。”

韩江盯着那个细节看了几秒,然后猛地拍了一下地板:“操,我说怎么查了半天查不到,这是底层协议的老毛病了,还是当年我亲自定的通信规范。当时图省事用了握手确认的模式,没想到在路由这么高频调度的场景下变成瓶颈了。”

“改掉就行了。”陈砚说,“但改完之后要重新测一下边缘情况,异步通信在高并发下可能会有丢包的问题,需要加一个保序机制。”

韩江从地上爬起来拍了拍屁股上的灰:“行,今晚我让余晚把协议层改一下,明天跑压测。老陈你今晚别走了,留下来帮我盯一轮,我怕又出什么幺蛾子。”

陈砚本来想回去,但看了看韩江那个一脸熬了好几天的样子,点了头:“可以,但你得管晚饭。”

“管!外卖随便点,公司报销。”

那天晚上三个人在深澜的办公室里加班到凌晨。韩江叫了一堆烧烤和几瓶汽水,桌子上摆得满满当当。余晚坐在工位上噼里啪啦地改协议代码,一边改一边骂自己当年写的注释太潦草。韩江在旁边翻着测试用例库,把和通信相关的所有用例都筛出来重新分类。陈砚靠在窗边的椅子上,手里拿着一串烤羊肉,慢慢嚼着,偶尔看一眼余晚屏幕上的进度。

凌晨一点多的时候余晚改完了,本地跑了一轮小规模测试,延迟降到了原来的三分之一。她把结果投到大屏幕上,数据曲线漂亮地落了下来。韩江看着那条曲线,长长吐了口气:“行了,明天跑全量压测,基本没大问题了。”

余晚靠在椅背上伸了个大大的懒腰,脖子咔咔响了两声:“我困了陈老师,你困不困?”

“还好。”陈砚把最后一根竹签扔进垃圾桶,站起来活动了一下腿脚,“你在公司有地方睡吗?”

“有个折叠床,在隔壁会议室。韩总办公室那个破沙发也能睡人。”余晚打着哈欠站起来,“我今晚就睡公司了,懒得回去。陈老师你呢?回去太晚了吧,也在这儿凑合一宿?”

陈砚想了想,给家里发了条消息说同事这边有急事今晚不回了。他妈的回复来得很快:“注意安全,别熬夜太狠。”

韩江把自己的办公室让出来给陈砚睡沙发,自己裹着睡袋去会议室和余晚的折叠床隔了一堵墙。陈砚躺在那个皮质沙发上,办公室里还有没散的烧烤味道和一丝金属焊接的焦糊气。他闭上眼睛,脑子里过了一遍今天查到的那个通信协议的细节,确认没有遗漏,才慢慢放松下来。

沙发有点短,他的脚悬了一截在外面。但他实在太累了,没几分钟就睡着了。

第二天压测结果出来,通信延迟的问题彻底解决。全量测试跑完后各项指标都达标,韩江在办公室里转了三圈,最后停下来对着陈砚说:“老陈,咱们六月底能不能正式发版?”

陈砚算了算时间,从三月底到六月底,三个月,留给工程优化和场景适配的时间不算宽裕,但也不是不可能。“可以试试。但中间要卡两个强制节点,一个是在四月底完成全部工程适配,一个是在五月底完成全场景验证。这两个节点如果有一个过不去,发版时间顺延。”

“行,就按你说的卡。”韩江在日历上划了两笔,“四月底、五月底,我盯。”

从那天开始,天枢二代的开发节奏明显加快了。深澜和天枢两边的人几乎每周要碰三到四次面,有时候是线上会,有时候是线下集中攻关。三月底的时候医疗领域的那个客户正式签了意向书,愿意拿实际场景的数据来参与测试。这就意味着天枢二代不仅要通过公开基准测试,还要在一个真实、复杂、容错率极低的应用场景里证明自己。

压力一下子就上去了。

陈砚开始每天工作到晚上十点之后,周末也泡在深澜那边的机房里。郑曼曼那边配合得也很好,该批的资源从不卡壳,有两次还亲自开车去深澜给他们送夜宵,站在机房里被服务器嗡嗡的声音震得耳朵疼,但什么都没抱怨。

四月第一周,医疗客户的病理切片数据第一批到了。那是一套真实的临床病理切片图像,包含上千张标注好的样本,涉及三种不同类型的组织病变识别任务。陈砚带着陆晨光和天枢那边的两个组员花了整整三天做数据预处理和格式适配,然后塞进天枢二代跑了第一轮基准测试。

结果很不理想。

动态路由在医疗数据上的表现和公开基准测试上判若两人,精度掉了将近十个百分点,路由的路径选择也出现了大量的异常波动。陆晨光看着那组数据急得嘴角起了泡,一遍一遍地查数据预处理的流程,怀疑是自己这边出了错。

陈砚没有急着下结论。他让团队把路由决策的路径分布打印出来,一张一张地看。他看到第四十七张图的时候停了下来,指着上面一条异常密集的路径分支说:“路由在这个病变类型上几乎全部选了同一条浅层路径,说明它根本没识别出这一类图像的特征复杂度和公开数据集不同。”

韩江在旁边看了一会儿,接了一句:“医疗图像的纹理特征和我们之前训练用的工业图像差异太大了。路由的学习策略是在工业图像上形成的,碰到完全不同的纹理域,它不知道怎么选。”

“所以问题不在路由结构本身,在于它的‘经验’不够。”陈砚站起来,走到白板前面画了一条线,“我们需要做两件事。第一,把医疗数据的特征分布注入路由的学习过程,让路由学会识别新的纹理模式。第二,在路由决策层加一个‘不确定性’的判断——如果路由对自己的路径选择不确定,那就不要强行选一条,而是走最保守的深度路径。”

余晚在旁边迅速记了几笔:“第一个方案可以加一个域适应模块,把不同数据域的特征映射到一个公共空间里,让路由在那个空间上做决策。第二个方案更简单,加一个softmax的置信度阈值就行。”

“两套一起做。”陈砚说,“留一周时间,陆晨光做域适应模块的适配,余晚做置信度阈值的实现和调优。一周之后重新跑医疗数据。”

这一周是陈砚入职以来过得最紧的一周。每天早上一睁眼就是数据,晚上睡觉前最后一眼看的也是数据。陆晨光的那套域适应模块改了三版才勉强跑通,余晚的置信度阈值试了十几个不同的设置值,在灵敏度和鲁棒性之间反复拉锯。韩江把服务器集群的调度排了又排,确保每次实验都能在最短的时间内拿到结果。

到了第七天晚上,所有人再次坐进深澜的会议室。大屏幕上投影着新一轮测试的实时进度条,整个会议室安静得能听见空调出风口的声音。进度条走到百分之百的时候,陆晨光第一个点开了结果报告。

会议室里安静了三秒。

然后陆晨光猛地从椅子上弹了起来:“成了!精度追上来了,只比公开基准测试低两个点,路由路径分布也稳定了!”

陈砚凑过去看屏幕上的数据,目光一行一行地扫过去。精度确实稳住了,路由的路径选择在新的数据域上也呈现出合理的分布,那些之前异常聚集的浅层路径被分散开了,说明路由学会了根据纹理特征做差异化处理。

韩江靠在椅背上,双手抱着后脑勺,盯着天花板长长吐了口气:“妈的,吓死我了。我还以为要在这个坑里卡一个月。”

余晚在旁边噼里啪啦地敲键盘把结果存档,头也不抬:“韩总你能不能别乌鸦嘴?这才哪到哪,后面适配别的场景还有得折腾呢。”

韩江嘿嘿笑了两声,没还嘴。

那天晚上散场之后,陈砚在停车场里站了一会儿,夜里降温了,冷风从楼之间的缝隙穿过来,把他外套的下摆吹得猎猎作响。他看着深澜那栋楼亮着的几扇窗户,里面还有人在走动,大概是夜班的运维在巡视机房。

手机响了一声,是余晚发来的消息:“陈老师,回去路上开车慢点。”

他回了一句“知道了”,拉开车门坐进去。发动引擎的时候车载音响自动连上了蓝牙,放的还是上次那首老歌,旋律在车厢里低低地响着。陈砚把车慢慢驶出停车场,汇入深夜空旷的城市道路,路灯一盏一盏地从车窗外掠过,光和影在他脸上交替明灭。

四月底,工程适配的节点如期卡住了。陆晨光那边把动态路由框架和天枢现有的部署管线完全打通,深澜那边的推理引擎也完成了协议层的彻底改造。两个团队联合做了一轮全链路的联调测试,整个流程从头跑到尾,数据流转正常,各模块之间的接口对齐无误。

节点通过的当天,郑曼曼在项目管理系统里把状态标成了绿色,然后给陈砚发了条消息:“恭喜。下一个节点五月底,加油。”

陈砚回了一个字:“好。”

五月初公司年度评优,陈砚拿了“年度技术贡献奖”。颁奖仪式在季度全员大会上,大老板亲自把奖杯递到他手里,台下掌声稀稀拉拉的,不算特别热烈,但也比预想的好。陈砚站在台上讲了三分钟的简短感言,没有提任何具体的人和事,只说了句“这个奖是整个技术团队一起拿的”。

下来之后陆晨光凑过来看了一眼那个奖杯,玻璃材质,透亮透亮的,底座上刻着一行小字。陆晨光啧啧了两声:“陈工,这个奖杯比我那个‘最佳新人’的奖杯大多了。”

“你明年也能拿。”陈砚把奖杯随手放在桌上,“前提是你那个轻量化版本把性能指标再提十个点。”

陆晨光缩了缩脖子:“十个点有点狠吧……”

“狠就去做。不做怎么知道能不能做到。”

陆晨光走了之后,陈砚站在窗边看着手里的奖杯。阳光从外面射进来,透过玻璃奖杯在墙上投下一小片彩虹。他想起去年庆功宴那天的场景,那时候他手里什么都没有,只有一肚子憋着没发作的闷气。后来那口气变成了一个拒绝,那个拒绝变成了一个边界,那个边界又变成了今天手里这个玻璃做的、透亮的东西。

说不上来哪个更值钱,但他知道如果重来一次,他还会在那个路灯下面做出同样的决定。

五月第二个周末,陈砚家里出了点事。他妈在厨房做饭的时候不小心滑了一下,摔在地上把脚踝扭伤了。陈砚那天在深澜加班,接到电话的时候已经快晚上七点了,他撂下手里的活儿直接开车回家,路上打了几个电话联系附近的医院,最后把老太太送去急诊拍了片子。好在只是软组织挫伤,骨头没事,但医生嘱咐至少两周要少走路,脚踝尽量抬高。

那两周陈砚的生活节奏被打乱了。以前他可以全身心扑在工作上,现在每天早上得先把老太太的早饭安排好,中午还得抽空回去一趟看看她需不需要什么。有一天中午他赶回去给他妈热饭的时候,老太太坐在沙发上腿上垫着枕头,手里翻着一本旧相册,看得很入神。

“妈,看什么呢?”陈砚把热好的饭端过来放在茶几上。

“看你小时候的照片。”他妈把相册翻到一页,指着一张泛黄的照片,“你看,你那时候才五岁多,在幼儿园表演节目扮小兔子,两条长耳朵耷拉着,台下面笑成一团。你爸把你抱下来的时候你还在哭鼻子。”

陈砚低头看了一眼那张照片,几乎没什么印象了。照片上的小孩戴着个毛茸茸的兔耳朵发箍,脸上的泪痕清晰可见,旁边站着年轻的父亲,弯腰伸手要抱他的动作定格在胶片上。

他妈把相册合上,轻轻叹了口气:“你爸要是还在,看见你现在这样,肯定高兴。他以前老说,咱们砚砚以后能当个科学家。那会儿谁都想不到你是搞什么人工智能的,但你爸就爱这么说。”

陈砚在他妈旁边坐下,沉默了一会儿,然后说:“妈,等这个项目忙完了,我带你去南方住一阵子,暖和。”

他妈笑了:“你先把自己安顿好再说吧。我这一把年纪了,去哪都行,只要你在旁边就行。”

陈砚没有再说什么,把相册收起来放回柜子里,然后去厨房洗碗。水龙头哗哗地响着,窗外阳光照进来,在灶台上铺了一小片暖融融的光。他一边洗一边想,等天枢二代真正落地了,确实该带老太太出去转转。

五月底,天枢二代的全场景验证顺利通过。医疗数据、工业质检、安防监控三个主要场景的测试结果全部达标,精度和效率指标都达到了预期。韩江拿到最终报告的时候没再嚎,只是坐在椅子上沉默了很久,最后对着陈砚说了句:“老陈,咱们做到了。”

陈砚靠在窗台上,看着那几页薄薄的报告纸:“这才刚刚开始。接下来是市场,是你那边商务团队的事了。”

“商务那边你放心,”韩江拍了拍胸脯,“深澜的销售团队打硬仗不怂。六月的行业大会我已经把坑位占好了,你到时候跟我一起去讲。”

六月中旬,一年一度的行业技术大会在邻市的会展中心举行。规模很大,参展的公司有上百家,展馆里人声鼎沸,到处都是挂着胸牌走来走去的从业者。深澜和天枢合租了一个中等大小的展位,正中间的屏幕上循环播放着天枢二代动态路由的可视化演示,那棵“会呼吸的树”在屏幕上开开合合,吸引了不少人驻足。

陈砚和韩江轮流在展位前做技术讲解。余晚也来了,站在旁边给感兴趣的人发技术白皮书的二维码,遇到问得深的人她就自己顶上,讲得比陈砚还细。有一回有个看起来五十多岁的老研究员在展位前站了将近半小时,把余晚问得额头冒了汗,最后还是陈砚过来接住了那几个刁钻的问题。

那个老研究员走的时候留了名片,是某知名高校人工智能实验室的主任。他把名片递给陈砚的时候说了句话:“年轻人,你这个路由的思路和我在九几年构想的一个模型框架很像,但当时算力不够,没做出来。你们现在有条件了,好好做。”

陈砚接过名片,认真鞠了个躬。

下午大会的主论坛上,韩江做了一场十五分钟的主题演讲,把天枢二代的整体思路和技术亮点讲了一遍。台下坐了将近五百人,演讲结束之后的掌声比陈砚预想的要长。散场的时候好几个人涌到展位这边来加联系方式,其中有几个直接带了意向性的合作诉求。

那天晚上大会主办方组织了一场晚宴,圆桌摆了二十多桌,灯光打得金碧辉煌的。陈砚和韩江坐在同一桌,旁边是几个其他公司的技术负责人,聊的内容渐渐从技术转向了行业未来的走向。有个做自动驾驶的人说他们正在尝试把动态路由的思路移植到感知模块上,效果初显。另一个做金融风控的人说他们对这套框架也很感兴趣,但需要做一些合规层面的验证。

陈砚坐在那儿听着,偶尔接一句,大部分时候在安安静静地吃饭。桌上那杯红酒他喝了不到一半,主要是用来润嗓子——白天讲了一天话,喉咙早就哑了。

晚宴快结束的时候,郑曼曼从隔壁桌走过来,在他旁边空着的椅子上坐下,端着一杯白水:“今天辛苦了。我听周总说,下午你那场讲解反响特别好,有几个人直接找他要你的联系方式。”

陈砚笑了一下:“周总也来了?”

“来了,在VIP区那边坐着呢。他让我转告你一句话——‘二代是你们自己的东西了,不是任何人抄得走的。’”郑曼曼把水杯放在桌上,侧头看着他,“陈砚,从去年到今天,你觉得自己变了吗?”

陈砚想了想:“变肯定是变了。但变的不是心里那个目标,是走到那个目标的方式。”

郑曼曼点了点头:“那就好。我最怕一个人变着变着把自己变没了。”她站起来,拍了拍他的肩膀,“行了,回去好好休息,明天还有一天的展。别熬了。”

晚宴散场之后陈砚在会展中心的门口站了一会儿。夜风比几个月前暖和多了,带着初夏那种湿润的、植物生长的气息。展馆外面的广场上还有零零星星的人在拍照聊天,灯光把他们的影子拉得长长的,交错在一起。

他拿出手机,翻到和余晚的聊天记录。最后一条消息是余晚傍晚发的,说今天展会现场那个老教授后来又来找她了,拉她聊了将近一个小时的老式模型框架,她收获很大,激动得话都说不利索了。陈砚当时忙着给另一拨人做演示,只回了“好事”两个字。

现在他看着那条记录,拇指悬在输入框上面停了几秒,然后打了几个字:“明天展会结束,我请你们吃顿饭,算是庆功。”

余晚回得很快:“就等你这句话呢。韩总说了,不请人均两百以上的他就不去。”

陈砚笑了一声,回:“人均三百,让他来。”

六月结束的时候天枢二代正式发了版。发版那天没有任何隆重的仪式,就是简简单单地把最终版本的代码和模型打包上传到发布仓库,更新了版本号,写了一份简短的发布说明。陆晨光在系统里点了“确认发布”的那个按钮,手指抖了一下,然后屏幕显示“发布成功”。

“成了。”陆晨光转过头,脸上有种说不清道不明的表情,又像笑又像要哭,“陈工,天枢二代,正式上线了。”

陈砚站在他身后,看着屏幕上那个绿色的“发布成功”字样,心里出奇地平静。他想起一年前在庆功宴上,那时候天枢一代也“成了”,但那种成的感觉是别人的,他只是一个站在旁边看着别人举杯的人。这一次不一样,这一次所有的一切都是他自己走出来的,从那个凌晨三点独自突破的夜晚,到和韩江在湖边敲定的合作,再到和余晚、陆晨光他们一起熬夜改协议、调医疗数据。每一步都踩过坑,但每一步都踩实了。

“通知郑总,”陈砚说,“然后让市场部准备发消息。今天就正式对外公布。”

发布的消息在第二天传遍了行业内的几个主要渠道。陈砚的微信在接下来的几个小时里几乎没有停过,认识的不认识的人纷纷发来祝贺。他大部分消息都只回了“谢谢”两个字,只有韩江那条他多回了一句:“下一步,续集。”

韩江回了个狂笑的表情:“急什么,先让子弹飞一会儿。”

七月初,公司内部给天枢二代项目组办了一次小型庆功会。这次郑曼曼没有再搞那种大张旗鼓的阵仗,就在公司楼下的餐厅包了一个房间,摆了两张圆桌,项目组核心成员加上郑曼曼、韩江、余晚他们一共二十来个人,气氛轻松又热络。

郑曼曼站起来敬酒的时候,举着杯子对陈砚说:“这次不分功劳,大家都出力了。但我单独敬陈砚一杯——去年的事,我欠你的。今天补上。”

陈砚和她碰了杯,杯子里的果汁在灯光下晃了晃。他没喝,先说了句:“去年的账早清了。今年的是今年的事。”

郑曼曼笑了:“那就年年清,年年有新账。”

陆晨光在旁边起哄:“郑总你这话说得跟对账本似的。”

一桌人都笑了起来。

余晚坐在陈砚旁边,面前放着一杯没怎么动的可乐,正在低头回消息。陈砚侧头看了她一眼:“怎么不吃菜?”

“韩总在群里发了一堆技术问题,烦死了。”余晚把手机扣在桌上,“不管他了。陈老师你吃那个鱼,刚才转了半圈了你没夹。”

陈砚伸筷子夹了一块鱼,确实好吃,酱汁浓郁,鱼肉嫩滑。他嚼着嚼着忽然觉得嘴里的味道有点熟悉,像是在哪里吃过类似的。想了一会儿才想起来,去年那个深夜里唐馨给大家买的豆浆里,也有这种温热又平凡的感觉。

很多事情过去了就过去了。人往前走的时候不应该总回头看。

庆功会散了之后陈砚沿着街走了一段消食。七月的晚风带着热烘烘的气息,路边的小店亮着暖黄色的灯,有一家花店门口摆着几盆开得很好的茉莉花,香气一阵一阵地飘过来。他在花店门口站了站,然后走进去买了一小盆茉莉,抱在怀里继续往前走。

回到小区楼下的时候已经快九点了,路灯把路面的树影照得斑驳。陈砚抱着那盆茉莉上了楼,开门的时候他妈正坐在沙发上看电视,听见门响转头看了一眼:“哟,买花了?”

“嗯,”陈砚把茉莉放在阳台上,“闻着挺香的,买一盆放家里。”

他妈站起来一瘸一拐地走到阳台上看了看那盆茉莉,伸手碰了一下嫩绿的叶片:“挺好,有点儿生活气。比你那盆绿萝强,绿萝又不开花。”

陈砚站在他妈身后,看着阳台上那盆新添的茉莉在夜风里轻轻晃了晃。远处城市的灯火亮着细碎的光,楼下偶尔传来一两声狗叫和小孩的笑闹声。他伸手把他妈扶回客厅,让她坐下,然后去厨房烧了一壶水。

水烧开的时候发出咕嘟咕嘟的声响,蒸汽从壶口升起来,在厨房的灯光里变成一团温暖的白雾。陈砚看着那团白雾慢慢散开,嘴角不自觉地弯了一下。

日子就是这么过的。一天接着一天,一件小事叠着一件小事,到最后回头一看,原来已经走了这么远。

天枢二代正式发布后的第一个月,市场反馈比预想的还要好。韩江那边的销售团队像打了鸡血一样铺渠道,半个月之内签了四个垂直行业的新客户,其中两个是医药领域,一个是智能制造,还有一个是做卫星遥感图像分析的。郑曼曼在公司内部的月度经营会上把数据亮出来的时候,大老板多看了陈砚两眼,然后说了句“这块的投入继续加”。

陈砚坐在会议桌靠边的位置上,没说话。他不喜欢在这种场合多发表意见,数据会替技术说话,比人说得管用。

但数据之外的麻烦也在慢慢浮出来。七月下旬的一天,陆晨光忽然跑进陈砚办公室,脸色比平时急了几分,把手机递到他面前:“陈工,你看这个。”

陈砚接过手机,屏幕上是一个技术论坛的帖子,标题写着《天枢二代的路由框架真的原创吗?扒一扒三个相似度极高的前代工作》。帖子正文洋洋洒洒写了几千字,逐条对比了天枢二代动态路由的核心设计和三篇国内外早年的学术论文,语气带着明显的挑刺意味,明里暗里暗示这套框架不过是把别人的旧想法重新包装了。

陈砚把帖子从头看到尾,表情没什么变化,然后把手机还给了陆晨光:“里面提到的三篇论文我知道,都读过。有一篇的思路确实和我们有部分重叠,但他们做的是静态路由,我们是动态的,差异在工程层面非常显著。”

“可是底下评论已经有人在带了,说什么‘大公司抄学术界的成果’‘天枢的技术含金量存疑’之类的。”陆晨光有点急躁,“要不要让市场部出一个官方回应?”

“不用。”陈砚靠在椅背上想了想,“回应得越正式,越显得我们在乎。你去把我书架上第三层那本蓝色封面的论文集拿过来。”

陆晨光愣了一下,转身去书架上把书取了过来。陈砚翻开某一页,里面夹着一张折好的打印纸,上面是他几个月前写的一份技术备忘录,详细列出了动态路由思路的源起、演化过程,以及和那几篇论文之间的根本性差异。

“把这个发到我邮箱,”陈砚说,“我明天写一篇技术博客,不回应任何质疑,只把我们的设计思路从头到尾讲一遍,带上和已有工作的对比分析。道理讲清楚了,明眼人自己会判断。”

陆晨光拿着那张纸走了,脚步比来的时候稳了一些。

陈砚没把那个帖子太当回事。技术在行业里走得快了,总会有人跟在后面挑毛病,这跟做得好不好没关系。但他当晚回家之后还是把那三篇论文重新翻出来读了一遍,确认自己的判断没有错——那三篇论文的静态路由都是在推理阶段固定不变的分支选择,而天枢二代的核心创新在于路由策略本身是和训练过程共同进化的,数据怎么变,路由就怎么学。这是一个质的差异,不是量上的修补。

他第二天把那篇博客写了出来,洋洋洒洒将近六千字,从问题定义开始,一路写到工程实现的关键细节,最后专门辟了一个章节做和已有工作的对比分析。博客发在公司技术博客上之后,陆晨光第一时间转到了几个技术社区,余晚和韩江也都在各自的朋友圈转了。

余晚转发的时候配了一句话:“有些路不是抄出来的,是走出来的。陈老师这篇看完就明白了。”

帖子底下的舆论风向慢慢在转。一开始带节奏的那几条评论被更多的技术性讨论压了下去,有人扒出最早发帖的那个账号是个新注册的小号,背后是谁在指使不得而知。但陈砚没再往下追,博客发了,道理讲了,剩下的交给时间。

八月初,陈砚收到了一封意外的邮件。发件人是他研究生时期的导师,姓林,六十多岁了,退休前是某985高校计算机学院的教授。邮件内容不长,林老师说看到了他那篇技术博客,很高兴他能做出这样的成果,想约他吃个饭叙叙旧。

陈砚看着那封邮件,心里涌上一股很淡的暖意。读研那几年林老师对他不薄,毕业论文方向卡住的时候,是林老师跟他谈了一整个下午,帮他把思路重新捋顺了。后来毕业参加工作,联系就慢慢少了,但那份感激一直在。

他很快回了一封邮件,约了周末中午在学校附近的一家老餐馆。

周末那天陈砚开车过去,学校周边的街道和他记忆里变化不大,路边的法国梧桐比当年更粗了一圈,树荫浓密地遮了大半条人行道。那家老餐馆还在,门面重新装修过,但老板还是那个胖胖的中年人,见了陈砚居然还认得:“哎呀,小林老师的学生!好多年没见了!”

陈砚笑了一下,报了个包间的号,自己走进去等着。过了大概十分钟,包间的门被推开,林老师走进来,头发全白了,背也驼了一些,但眼神还是亮的,戴着一副老花镜,看见陈砚就笑了:“瘦了。以前读研的时候胖乎乎的,现在倒精神了。”

陈砚站起来帮他拉开椅子:“老师您坐。我给您倒茶。”

林老师坐下之后打量了他几眼,接过茶喝了一口,慢悠悠地说:“你那个博客我看了三遍。讲得清楚,逻辑扎实。我退休这几年不怎么跟前沿了,但你那个动态路由的思路让我想起九几年的时候我也想过类似的方向,那时候条件太差,没法验证。你把它做出来了,比我当年强。”

“老师的底子在那儿摆着,没有您当年教的那些方法论,我做不出这些东西。”陈砚给自己也倒了杯茶,“您身体还好吗?”

“还行,除了膝盖有点毛病,别的都凑合。”林老师笑了笑,“我今天找你,不光是叙旧,还有个事想问你。咱们学校现在有个校企联合实验室的计划,和企业共建技术平台,带研究生做联合课题。我退了之后学校那边一直想找个合适的校友牵头,我觉得你挺合适。”

陈砚端着茶杯的手顿了一下:“老师,我现在的工作强度已经很大了,再挂一个联合实验室,怕精力顾不过来。”

“不需要你天天去,挂个学术主任的名,每年去学校做两三次讲座,指导一下课题方向就行。具体的日常运作有专职老师管。”林老师看着他,“砚砚,我知道你现在在行业里做得好,但你得想想以后。企业里的路有上限,学术圈里的根基是挖不走的。你现在三十五岁,技术能力正巅峰,把学术那边也铺一条路,将来不管企业这边怎么走,你都多一个选择。”

陈砚沉默了一会儿。林老师这番话和当年在实验室里教他的风格一模一样——不急着给答案,先把问题的各个面向摆出来,让他自己琢磨。

“老师,我考虑考虑。”他说,“但这个承诺我不能轻易给,给了就得做好,我不喜欢挂虚名。”

林老师笑着点了点头:“就知道你会这么说。不急,你慢慢想。联合实验室的框架协议要年底才定,你还有几个月的时间。”

那天那顿饭吃了将近两个小时,林老师聊了很多当年的旧事,说起实验室里那群学生的趣闻,哪个后来转了金融,哪个去了国外,哪个前两年回来开了自己的公司。陈砚听着,偶尔接两句,大部分时候在安静地吃菜。

走出餐馆的时候太阳正烈,知了在树上一声接一声地叫着。陈砚扶着林老师走到路边,替他拦了辆出租车,关车门的时候林老师从车窗里探出头来说了一句:“砚砚,别把自己绷太紧,该松的时候就松松。”

陈砚站在路边看着出租车汇入车流,抬手挥了挥。阳光透过梧桐叶的缝隙落下来,在路面上洒了一地碎金。

八月中旬,韩江给陈砚打了个电话,语气和平时那种嬉皮笑脸的状态不太一样,透着一股少有的严肃:“老陈,有个事得跟你说一下。‘明镜’那边有新动静了。”

陈砚正在整理一份项目进度报告,听到“明镜”两个字,手里的鼠标停了一下:“什么动静?”

“他们最近推出了第二代产品,取名‘明镜Pro’。我没拿到技术白皮书,但从公开的宣传资料来看,他们的架构也往动态路由那个方向转了。而且我让人侧面打听了一下,他们从今年年初就挖了几个做动态网络方向的人,其中有一个好像是去年从国内某高校出来的,手上有一篇关于动态路由的博士论文。”

陈砚把鼠标放下,靠在椅背上:“唐馨那边的事后来怎么样了?”

“法务官司还在走,但她和‘明镜’的关联基本坐实了。公司那边一直不肯和解,摆明了要打到底。”韩江的声音顿了顿,“但说实在的,官司打不打得赢是一回事,市场不等人。如果他们那个‘明镜Pro’真的在动态路由上走了和咱们类似的路线,虽然咱们有先发优势,但他们报价低,在中小客户那边有杀伤力。”

“你担心的是价格战?”

“不是价格战,是老陈你心里也清楚,咱们的技术壁垒在于理论框架和工程实现之间的那个深度。如果对方只是抄了个皮毛,那不足为惧。但如果他们把路子走通了,哪怕精度比我们低两三个点,只要便宜,就有市场。”

陈砚想了十几秒:“他们的公开宣传资料你能发我一份吗?”

“马上发你邮箱。”

挂了电话之后陈砚打开邮箱,果然收到了一份链接。他点进去看了那个宣传页面,把上面所有的技术描述和技术术语都过了一遍。页面设计得很专业,配了示意图和一些看起来很唬人的数据图表,但技术细节遮掩得很严密,只讲了“动态路由”这个概念本身,完全没有透露任何实现的底层逻辑。

这种遮遮掩掩的姿态,反而让陈砚觉得心里有了底。真正走通了技术路线的人,不需要把细节藏得这么紧。要么是他们还没有真正解决工程落地的问题,要么就是他们对自己的实现缺乏自信。

他给韩江回了条消息:“不用担心。皮毛而已。下周二例会我带一组对比验证方案过去,到时候我们针对性的做一次性能攻防测试,让他们抄无可抄。”

韩江回了一个OK的手势。

接下来的几天,陈砚把工作重心短暂地偏移到了竞品分析上。他让陆晨光调了天枢二代在几个典型场景下的内部测试数据,又结合“明镜Pro”宣传资料里透露出来的零散信息做了一套推演,大致估算出了对方在同等场景下的可能表现区间。

推演的结果比他预想的乐观——如果“明镜Pro”只是走了动态路由的表面形式而没有吃透路由学习机制和场景适配之间的关系,那么他们在复杂数据上的表现大概率会明显滑坡。陈砚把推演的结论整理成了一份简短的内部备忘录,在周二的例会上发了出去。

那天例会除了韩江、余晚、陆晨光之外,深澜那边的工程负责人也在。陈砚站在白板前面,用蓝色的记号笔画了两条对比曲线,一条是他们自己的,一条是他推演的竞品表现。

“看到了吗?”他用笔尖点着两条曲线之间的差距区间,“真正拉开差距的地方在数据的边缘分布上。我们的路由学了如何应对分布外的输入,对方的如果没有吃透这一层,换一个场景就露馅。所以我们的防御策略很简单——继续强化路由在不同域之间的迁移能力,把这条差距拉得更大。大到他们追都追不上的程度。”

韩江坐在长桌的尽头,手指转着一支笔,听完之后把笔往桌上一丢:“行,明白了。我们不跟他们在价格上缠斗,我们从技术纵深上直接把他们甩开。”

余晚在旁边举起手:“我补充一个点。如果我们要强化域迁移能力,现有的域适应模块还有优化空间。上次做医疗数据的时候我改过一版,效果不错,但泛化边界还没测透。给我两周时间,我把这个模块的边界完全摸清楚。”

陈砚看了她一眼:“两周够吗?”

“够。”余晚的回答干脆利落,“我每天十二个小时,两周等于别人一个月。”

陈砚点了点头:“那就两周。陆晨光你配合余晚,把域适应模块的测试覆盖度提上去。两周之后我要看到完整的边界图谱。”

陆晨光在笔记本上记了几笔:“收到。”

例会散了之后陈砚一个人留在会议室里,把那块白板上的曲线图又看了一遍。他擦掉了一半的线条,重新用绿色笔画了一条更陡的上升弧线。这条线代表着他心里真正的目标——不是把明镜Pro甩开多远,而是把天枢二代带到那个所有人都还没抵达的地方去。

他拍了张白板的照片发给余晚,附了句话:“这条路,才是我们要走的。”

余晚的回复隔了十几分钟才来,大概是手头在忙别的事:“陈老师,你画的这条线坡度太陡了,看着有点吓人。但吓人归吓人,我喜欢。”

陈砚看着那行字,嘴角动了一下。

两周的时间里余晚几乎把自己焊在了工位上。韩江私下跟陈砚抱怨过几次,说余晚最近连食堂都不去了,天天让同事带饭,盒饭摞了一摞在桌角。陈砚听了没说话,但有天下午他路过深澜的时候顺手带了两杯奶茶上去,一杯放在余晚手边,一杯放在她自己落灰的保温杯旁边。

余晚当时正盯着满屏的测试报告,头也没回地说了声“谢谢”,过了大概三秒钟才猛地转过头来:“陈老师你什么时候来的?”

“刚来。”陈砚靠着旁边的桌子站着,“你那个边界测试跑到哪一步了?”

“还剩两个极端场景没跑完,明天应该能出完整报告。”余晚伸手把那杯奶茶捞过来插上吸管喝了一口,眼睛亮了一下,“这个好喝。陈老师你平时不喝这种甜的东西吧?”

“偶尔喝一次。”

余晚低头又吸了一口,马尾辫跟着她的动作晃了晃:“陈老师你以后来深澜能不能都带一杯?我把你的奶茶费列入项目预算。”

陈砚没接这个话茬,看了一眼她屏幕上的数据:“边界测下来稳定性怎么样?”

“比预想的好。尤其在高噪声输入的情况下,路由的路径分布比我预期的要集中,说明域适应模块确实起作用了。”余晚点开一个图表给他看,“你看这里,之前跑医疗数据的时候这条路分布很散,现在收敛多了。”

陈砚凑过去仔细看了那张图,数据确实很漂亮。他直起身,拍了拍余晚的椅背:“明天出完整报告之后发我一份。辛苦了。”

“还行,不算太辛苦。”余晚回过头朝他笑了笑,“反正我本来就喜欢这种把东西彻底搞明白的过程。你让我做别的我还不乐意呢。”

陈砚没再说什么,转身往外走。走到门口的时候听见余晚在身后喊了一句:“陈老师,下次奶茶我要少糖的,这杯有点甜了。”

他背对着她摆了摆手,表示听到了。

八月底,天枢二代第一次大规模行业评测的结果出来了。那是国内一家权威评测机构做的横向对比测试,覆盖了市面上主流的六套工业质检AI系统,测试场景统一、数据口径一致、打分规则公开透明。评测报告发出来那天,陈砚的微信几乎被刷屏了。

天枢二代在五项核心指标里拿了四项第一,唯一没有拿第一的那项是“模型文件大小”,因为动态路由框架本身比固定结构多了几层路由网络,参数量自然大一些。但在精度、泛化能力、推理效率、以及鲁棒性这四个维度上,天枢二代把第二名甩开了明显的差距。

韩江直接把评测报告的截图发在了深澜的全员群里,配了一行字:“兄弟们,你们做的东西,全行业第一。”

群里瞬间炸了锅,一串的“666”和鼓掌的表情刷了屏。陈砚没在深澜的群里,但陆晨光把截图转发给他的时候手都在抖:“陈工你看!第一!”

陈砚看着那张截图,心里挺平静。评测的结果他提前已经大致猜到了,只是当它正式落定的时候,那份平静底下还是泛起了一点很淡的波澜。这和他的能力关系不大,是整个团队将近一年持续投入的自然产出。他只是站在那个产出前面,承担了“第一”这个名字。

他给韩江发了条消息:“评测报告用的场景都是标准化的。下一步是拿真实客户的产线数据再跑一轮,那才是真功夫。”

韩江回:“已经在安排了。周总那边给了三家新的客户场景,下周二数据到。”

陈砚看着手机屏幕,觉得这个节奏刚刚好。每一步都踩在上一脚的脚印上,不虚浮,不急躁。

九月初,他妈脚踝的伤彻底好了。老太太闲不住,恢复了每天早上去菜市场逛一圈的习惯。有一天陈砚下班回来,发现客厅的茶几上多了一摞相亲资料,花花绿绿的,有打印的照片、A4纸上的个人信息表、甚至还有一张手写的便签,字迹娟秀,看起来是哪位介绍人留下的。

他妈从厨房探出头来:“回来了?茶几上那些你看看吧,都是隔壁张阿姨帮忙介绍的。她说了好几个,我看了照片觉得有两个姑娘挺不错的,条件也合适。”

陈砚站在茶几前面低头看着那摞资料,一时有点哭笑不得。他妈走到他旁边,用手指点了点其中一张照片:“你看这个,幼儿园老师,年纪比你小五岁,性格好,长得也端正。还有一个是做财务的,年纪跟你一样大,条件也不错。你挑一挑,周末去见见?”

“妈,”陈砚脱了外套挂在衣架上,“我最近项目正紧,实在没空。”

“你再忙也要吃饭吧?见个面吃顿饭能耽误多少时间?”他妈把那张照片又往他眼前递了递,“砚砚,你别嫌我烦。你三十五了,再拖下去就是三十六、三十七。我不是催你马上结婚,但你至少去见见人,给自己一个机会,也给人家姑娘一个机会。”

陈砚看着他妈脸上那个既认真又带着点恳求的表情,忽然觉得再说“忙”字有点残忍。他伸手接过了那张照片,低头看了一眼——照片上的姑娘扎着一个简单的低马尾,笑起来眼睛弯弯的,有种温柔的、不设防的气质。

“行吧,”他把照片放在茶几上,“周末我去见一个。但先说好,成不成我不管,去了就算交差了。”

他妈脸上立刻绽出了笑容:“行行行,见了就行。我明天告诉张阿姨,让她安排时间地点。”

周末的相亲约在了一家粤菜馆。陈砚穿了件干净的衬衫,提前了五分钟到。那个姑娘比他早到,已经坐在靠窗的位置上了,见他走进来先站起来打了个招呼,笑容和照片上一模一样,温温柔柔的。

“你好,我叫沈若兰。”她伸出手,手心干燥温暖。

“陈砚。”他握了一下就松开,在她对面坐下。

服务员递了菜单过来,陈砚随手翻了翻,然后把菜单递给沈若兰:“你点吧,我不挑。”

沈若兰接过菜单也不推辞,利落地点了三菜一汤,还特意问了服务员有没有忌口。整个过程自然又得体,没有什么刻意表现的紧张感,也没有那种为了讨好而过度热络的做作。

菜上齐了之后两个人边吃边聊。沈若兰确实是幼儿园老师,教中班,说起小朋友们的趣事来眉飞色舞的,语气里带着真的喜欢。陈砚听着,偶尔接一两句,大部分时候在吃菜。他发现自己并不排斥这个氛围,虽然谈不上有多心动,但坐在对面的这个女人让人觉得舒服——不咄咄逼人,也不刻意迎合,就像一条慢慢流淌的河。

“张阿姨说你是做人工智能的?”沈若兰夹了一块虾饺放在自己碗里,“那个方向我完全不懂,但听起来很厉害。你做的东西是那种能帮人省力气的吗?”

陈砚想了想:“对,主要是帮工厂和医院提高工作效率。”

沈若兰点了点头:“那就好。我有时候看新闻说人工智能会取代人的工作,还觉得有点怕。但听你这么说,感觉还是用来帮人的。”

“取代和帮助之间那条线有时候不太好画,”陈砚说,“但我觉得核心还是看技术开发者想把东西做成什么样。做成工具还是做成替代品,出发点不一样,结果就不一样。”

沈若兰看着他,眼神里多了些认真:“你属于哪种出发点?”

陈砚想了一下:“工具。”

沈若兰笑了一下:“那挺好的。我教小朋友也是这个理念,教他们工具怎么用、怎么和工具相处,而不是替他们把事情做了。”

那顿饭吃了将近一个半小时,聊的话题从工作慢慢滑到生活,又滑到各自家里的琐碎日常。分开的时候陈砚主动把账结了,沈若兰说下次她请,语气自然而随意,像是已经默认了“下次”这个安排。

陈砚站在餐厅门口,看着她背影消失在街角,然后掏出手机给他妈发了条消息:“见完了,人挺好的。”

他妈的回复来得比任何时候都快:“那下次什么时候见?”

陈砚收起手机,没回。但嘴角翘了一下,他自己都没察觉。

第二天上班的时候余晚找他聊技术问题,聊到一半忽然停住,上下打量了他两眼:“陈老师你今天心情挺好的?跟你平时那种四平八稳的状态不太一样。”

陈砚低头看了一眼自己:“有吗?”

“有。”余晚歪了歪头,“笑都比平时多。行了不管了,说正事。域适应模块的边界图谱我昨晚整理完了,你自己看。”她把一叠打印纸递过来,厚厚的一摞,页脚还带着打印机刚出来的余温。

陈砚接过来翻了翻,数据扎实,图表清晰,每一条结论都有对应的实验支撑。他看完之后抬头看了余晚一眼:“你昨晚几点走的?”

“不晚,十一点多吧。”余晚打了个哈欠,“习惯了,韩总那个疯子才是动不动熬到两三点。我这算养生了。”

陈砚没说什么,把那叠纸收进抽屉里:“我会抽时间仔细看。做得很好。”

“那是。”余晚站起来伸了个懒腰,“陈老师夸人就是‘做得很好’四个字,多一个字都舍不得。行了,我撤了,还有一堆东西要跑。”

她走出办公室之后陈砚重新把那叠纸抽出来,翻了翻最后的总结页。余晚在页尾写了一段手写的注释,字迹工整但又透着一点潦草的急迫,大意是说域适应模块目前的实现虽然效果好,但还有两个方向值得继续深挖,她已经在脑子里构思了初步方案,等有空了再整理成正式方案。

陈砚看着那几行手写的字,忽然想起她之前说过的那句话——“我就喜欢做不明白的东西,做明白了就没劲了。”

他心里想着,余晚这个人,是不缺“有劲”的事做的。

九月下旬,公司内部做了一次年度晋升评审。陈砚的技术职级从P8升到了P9,在公司里属于技术条线的顶层序列了。郑曼曼在评审会上替他做的陈述,讲的全是实打实的项目成果,天枢一代到二代的演进路径清清楚楚地写在PPT上。评审委员会的五个人里有三个是技术出身的,问的问题都直指核心,陈砚一个一个地答了,答完之后没有悬念,全票通过。

晋升的通知下来那天,陆晨光比他还高兴,嚷嚷着要请客吃饭。陈砚让他别折腾,说晚上简单聚一下就行。最后几个人在公司附近的烧烤摊上坐了一桌,韩江和余晚也过来了,还有陆晨光团队里的两个年轻同事。烤串上的碳火冒着烟,旁边有一桌大学生在喝酒划拳,声音闹哄哄的。

韩江举着啤酒瓶碰了一下陈砚的可乐:“老陈,P9了。你在这个行业里算是爬到山顶了。下一步干嘛?开宗立派?”

陈砚咬了一口烤鸡翅:“开什么宗,立什么派。接着做东西,做到做不动为止。”

韩江“啧”了一声:“你就不能来点豪言壮语?比如十年之内把天枢做成行业标准什么的。”

“那说了有什么用,”陈砚把鸡翅骨头放在盘子里,“做出来自然就是标准了。”

余晚在旁边低着头烤一串韭菜,听到这儿抬起脸来:“陈老师的意思是,话少说,事多做。我翻译得对吧?”

陈砚看了她一眼:“对。”

余晚得意地把韭菜翻了个面:“韩总你学学,少吹牛多干活。”

韩江作势要拿啤酒瓶敲她头,余晚敏捷地往后一躲,马尾辫甩出一道弧线。一桌人都笑了起来,烧烤摊上烟火气缭绕,炭火的香味和啤酒的泡沫混在一起,变成一种热腾腾的、属于夜晚的踏实感。

十月初,联合实验室的事有了眉目。陈砚考虑了将近两个月,最终还是决定接。他跟林老师又见了一次面,把合作的框架逐条确认了一遍:他挂名联合实验室的学术主任,每年到学校做两次讲座,每个学期指导一到两个研究课题的方向性工作,实际的实验室日常管理和运营由学校派专职老师负责。

林老师对这个结果很满意,临走的时候拍了拍陈砚的肩膀:“这就对了。做技术的人,尤其是做到你这个程度的,手里不能只有产品,还得有传承。将来你回头看,那些跟你一起做过课题的学生里,说不定就有人能接你的班。”

陈砚站在学校门口看着林老师略驼的背影慢慢走远,秋天的风吹过来,把路上堆积的落叶卷起来又放下。他忽然觉得“传承”这两个字以前离他很远,但现在好像近了那么一点点。

十月中旬的一个周末,陈砚和沈若兰第二次见面。这次是沈若兰约的,地点是一个小型美术馆,当天有个摄影展,拍的是一组西北戈壁的纪实照片。两个人从入口开始一张一张地看,沈若兰偶尔会停下来对某张照片说一两句自己的感受,陈砚听着,觉得她说得挺准。

走到展厅中间的时候,沈若兰忽然指着一张照片说:“你看这张,沙漠里一棵孤零零的胡杨树,叶子都黄了,但还是立在那儿。我每次看到这种照片就会想,做人也得这样吧,在难的地方也要站得住。”

陈砚顺着她指的方向看过去。那张照片确实拍得好,背景是漫无边际的黄色沙丘,一棵胡杨立在画面的三分之一处,枝条在风里微微歪着,但主干笔直笔直的。

“站得住,”他重复了一下这几个字,“你这个比喻挺好。”

沈若兰侧头看了他一眼:“你觉得你自己站得住吗?”

陈砚想了一下:“正在站。以前有时候会晃,现在慢慢稳了。”

沈若兰笑了笑,没再追问,继续往前走看下一张照片去了。陈砚跟在她后面半步远的地方,看着展厅里暖黄色的灯光照在她肩膀上,心里有种安静的、不着急的感觉。

那天的展览看完之后两个人去附近的小巷子里喝了碗糖水。沈若兰点的是杨枝甘露,陈砚是一碗热的杏仁茶。小店不大,墙上贴满了顾客留下的便利贴,五颜六色的叠在一起。沈若兰喝了两口杨枝甘露之后抬头看了他一眼:“陈砚,我有个问题想问,你可以不回答。”

“你问。”

“你之前谈过恋爱吗?我是说,长一点的那种。”

陈砚勺子停在杏仁茶里,顿了一下:“谈过。研究生的时候有一个,后来毕业方向不一样,就分了。工作之后也谈过一段,大概一年多,后来因为各种原因也散了。”

沈若兰点了点头,没有追问细节,也没有做出什么评价的表情,只是低头继续喝她的杨枝甘露。过了一会儿她才抬起脸来,语气平平的:“那挺好的。有过去说明你不排斥亲密关系。”

陈砚看着她说这话时候那个自然的样子,忽然觉得相亲这件事好像没有他之前想象的那么尴尬和刻意。面前这个女人,和他之间有一搭没一搭地聊着,既不急于拉近距离,也不刻意保持距离,像是在沿着一条不急不缓的河流往前走。

“你不问问我过去的事吗?”沈若兰歪着头看他。

“你愿意说我就听,你不想提我就不问。”

沈若兰笑了一下,眼睛弯起来:“那我就不说了。过去的事都过去了,现在的比较重要。”

那天晚上陈砚回到家,他妈还在客厅看电视,见他进来立刻摘了老花镜看他表情:“怎么样?第二次了,聊得好吗?”

“挺好的,”陈砚换了拖鞋走进来,“人很舒服,性格也好。”

他妈满意地点了点头:“那就好,那就好。张阿姨说了,人家姑娘对你印象也不错,说你稳重、话不多但每句都在点上。你看,我早说了让你去见见,这不就挺好?”

陈砚在他妈旁边的沙发上坐下来,随手拿起茶几上果盘里的一个橘子剥着吃。他一边剥一边想着沈若兰说的那句“过去的都过去了,现在的比较重要”,忽然觉得这个道理好像不仅可以用在人和人的关系上,也可以用在很多别的地方。

十月底,天枢二代的第二版迭代开始启动。这一版的重点是提升模型在极端边缘场景下的处理能力——那些数据分布极度偏斜、标注样本稀少的应用场景,是当前所有公开系统都头疼的领域。陈砚提出来的方案是让路由框架在做路径选择的同时,同步学习一个“置信度评估器”,当路由对自身的判断置信度过低时,自动触发一个轻量级的人工审核回流机制。

这个想法在内部引发了不小的争论。韩江觉得这套机制会增加系统的复杂度,维护成本太高。陆晨光担心在客户侧会被人误读为“系统不够智能才需要人工兜底”。余晚倒是支持,她说“承认不确定性本身就是一种智能”。

争论在连续三天的密集讨论之后达成了共识。陈砚做了妥协,把人工审核回流改为“自动决策异常标记+定期批量复审”,把实时回流改成了离线聚合。这样既保留了置信度评估的核心逻辑,又避免了在线上推理流程里塞入复杂的交互环节。

十月底的时候方案定稿,十一月进入开发期。余晚负责置信度评估器的实现,陆晨光负责和现有调度系统的集成,韩江的工程团队做整体联调的支撑。陈砚自己把大部分精力放在了核心算法的理论证明上——他要把动态路由和置信度评估联合优化过程的收敛性用数学语言完整地推导出来,这不仅是为了验证方案本身的可行性,更重要的是为后续可能发表的学术论文积累素材。

十一月上旬的一个晚上,陈砚在深澜那边待到很晚。余晚的置信度评估器卡在了一个收敛问题上,她反复调了几版参数都跑不出来理想的效果曲线。陈砚过去看了一眼她写的代码,发现她在评估器的损失函数设计上漏掉了一个正则项。

“加上这个L2正则,”他指着屏幕上一行代码,“你之前只考虑了置信度和精度之间的相关性,没考虑置信度本身的分布平滑性。不加这个,评估器会在数据稀疏的区域产生震荡。”

余晚盯着那行代码看了几秒,然后迅速补上了。重新跑了一轮之后,曲线果然稳了下来。她长吁了一口气往后一靠,转了转脖子:“陈老师,你要是哪天不来公司了,我可能得少活好几年。”

“哪有那么夸张,”陈砚拉了把椅子在她旁边坐下,“你只是有时候钻得太深,忘了退一步看整体。”

“那你就是那个把我从坑里拉出来的人。”余晚转过椅子面对着他,“说实话,我做技术这么多年,能让我心服口服的人不多。韩总算一个,你是另一个。你们俩的风格完全不一样,韩总是那种上来就跟你硬碰硬猛冲猛打的,你是那种在旁边看半天,然后一指头戳在最关键的穴位上。”

陈砚被她这个比喻逗得笑了一下:“你这个形容倒是挺形象。”

余晚弯着眼睛看着他:“陈老师你笑起来其实挺好看的,就是平时笑得太少了。你得多笑笑。”

陈砚被这直白的评价弄得有点不自在,站起来去给自己倒了杯水。他端着水杯走回来的时候余晚已经又转回去对着屏幕了,嘴里嘟囔着“运行到第二轮了,看看效果”,马尾辫随着她点头的动作轻轻晃。

那天晚上他们十一点多才从深澜出来。电梯下行的时候余晚站在角落,靠着电梯壁闭着眼,看样子是困得撑不住了。陈砚站在她旁边,看着楼层数字一格一格地往下跳,电梯里安安静静的,只有运行时的轻微嗡鸣声。

到了地下车库,余晚睁开眼打了个哈欠:“陈老师你开车回去小心,我打车走。”

“我送你吧,这个点了不好打车。”

余晚愣了一下,然后说了声“那谢谢陈老师”。两个人上了车,陈砚发动引擎,问她住哪个方向,余晚报了个地址,离公司不远,大概十来分钟的车程。

车子开出地库的时候夜风灌进来,余晚靠在副驾驶上,脸侧向窗户,路灯的光一段一段地从她脸上滑过。她闭着眼睛,像是睡着了,但呼吸浅而平稳,应该是还没完全睡过去。

陈砚把车速放慢了些,拐弯的时候尽量压得平缓。十几分钟的路程很快就到了,他把车停在余晚住的小区门口,轻轻叫了她一声。

余晚睁开眼,懵了一下才反应过来已经到家了,手忙脚乱地解安全带:“谢谢陈老师,到了啊,我都没感觉。”

“回去早点睡,”陈砚说,“明天还有一轮要跑。”

“嗯。”余晚推开车门,又回头朝他摆了一下手,“陈老师晚安。”

“晚安。”

他看着余晚进了小区大门才慢慢把车掉头往回开。路上车载音响放的还是一首老歌,旋律已经听了很多遍了,但今天听着格外顺耳。他把声音调大了一点,车窗摇下来半截,十一月的夜风带着这个季节特有的干爽凉意拂在脸上。

回到家快十二点了,他妈已经睡了。陈砚轻手轻脚地换了鞋走进客厅,阳台上的茉莉花在夜风里轻轻摇着,叶片上沾着傍晚浇过的水珠。他站在阳台门口看了看那盆花,和旁边那盆绿萝隔了不到半米的距离,一盆开过花,一盆还在安静地长着叶子。

各有各的活法,都挺好。

十一月中旬,置信度评估器跑通了全流程。余晚的模块和陆晨光的调度系统之间磨合得比预想中顺利,联调那天一次性通过了全部测试用例。韩江看着测试报告上绿色的通过标记,摸着下巴说了一句:“这个功能加上去,我们跟明镜Pro之间的差距大概从一条街变成了一条河。”

陈砚没有接这句评价。他在看另一件事——林老师那边来了消息,联合实验室的框架协议已经走完了学校内部的审批,等企业这边签字盖章就算正式成立了。林老师在消息里问他,能不能在十二月初去学校做第一次学术讲座,把天枢二代的技术思路给研究生们讲一遍。

陈砚想了想,时间上排得开,就答应了。

十二月初的那个周二,陈砚开车去了母校。讲座安排在下午两点,阶梯教室里坐了一百多个学生,过道里还站着不少旁听的人。陈砚站在讲台上的时候看着下面一片年轻的面孔,心里忽然有点恍惚——十多年前他也坐在下面某一个位置上,听着外面来的行业前辈讲那些当时觉得高深莫测的东西。

他花了将近两个小时把天枢二代从理念到实现完完整整地讲了一遍。讲完之后留了半小时提问时间,学生们的问题质量超出了他的预期,有好几个问到了他正在琢磨的“下一代方向”,甚至有一个硕士生的提问精准地点出了他和韩江内部争论过的一个边缘问题。

讲座结束之后那个提问的学生追到走廊里来加他微信,说自己正在做动态网络方向的硕士课题,看了陈砚之前发的技术博客之后改了研究方向,想跟他保持联系。陈砚扫了那个学生的微信,看了他的名字和年级,然后说了一句:“好好做,这块空间很大。”

那个学生用力点了点头,脚步轻快地走了。

林老师在旁边看着这一幕,笑得脸上的皱纹都舒展开了:“怎么样,看着他们,是不是想起自己当年了?”

陈砚收好电脑:“确实有点。不过他们比我当年强,问的问题深多了。”

“那是因为你讲得好,把他们脑子里的东西勾出来了。”林老师拍了拍他的胳膊,“中午学校食堂的饭还是老样子,你要是不嫌弃,吃一顿再走。”

陈砚想了想,答应了。食堂确实还是老样子,连那个打饭窗口的大叔都没换人,只是鬓角白了些。他端着餐盘找了个靠窗的位子坐下,阳光从外面照进来,落在不锈钢餐盘的边沿上,亮晃晃的一小片。

吃完饭往外走的时候,他给余晚发了条消息:“讲座讲完了,比你讲的差一点。”

余晚秒回了一个大笑的表情:“陈老师你学会谦虚了。不过说实话,你去学校讲课肯定比我受欢迎,你往那儿一站就很有教授气质。”

陈砚看着那条消息,笑了一下,把手机收进兜里。

十二月中旬,天枢二代第二版迭代的联调测试全部完成。系统稳定性和推理效率两项核心指标在上一版的基础上又提升了几个百分点,置信度评估器在极端边缘场景下表现稳健,标记异常的准确率达到了设计预期。

郑曼曼在项目周报上看到这些数据之后给陈砚打了个电话,说年底的客户答谢会上她想让他去做一次技术专场分享,面向的是所有老客户和新意向客户。陈砚答应了。

答谢会在十二月底的一个周五晚上,五星级酒店的宴会厅布置得灯火通明。几十张圆桌坐得满满当当,台上有一个大屏幕,旁边立着讲台。陈砚的分享安排在宴席正式开始之前,大概二十分钟的时间,他站在台上把天枢二代这一年的演进历程做了一个精炼的回顾,重点放在“从区分到理解”这个理念的落地过程上。

台下坐着的人里,他看见了周总坐在第一排靠边的位置上,端着一杯茶听得很认真。还看见了韩江坐在后面几排,光头在灯光下反着光,旁边是深澜的销售团队。郑曼曼坐在主桌上,朝他微微点了点头。

分享结束的时候台下响起了掌声。陈砚鞠了个躬走下台来,在靠近门口的地方站了站,准备去旁边喝口水。这时候一个穿着深灰色西装的中年男人走过来,朝他伸出手:“陈总,方便聊两句吗?”

陈砚和他握了一下手,对方递了一张名片。名片上的公司名他没见过,叫“辰光科技”,名字下面印着一行小字“技术总监 卫东”。他看了看那行字,觉得这个“卫东”的名字隐约有点耳熟,但一时想不起来在哪听过。

“陈总,我直说了,”卫东的声音压得挺低,像是在避免被周围人听到,“我是去年从明镜那边出来的。唐馨是我以前带的组员。”

陈砚端水杯的手停了一下。他抬头看着卫东的脸,四十岁上下,面容干净利落,眼神不闪不避。

“卫总找我,是想说什么?”

卫东左右看了一眼,然后往前凑了半步:“唐馨的事,我知情。去年她离开之前,曾经找过我,想让我参与一个‘独立项目’,我当时不知道那是针对天枢的,后来发现不对就退出了。但我手里保存了一些当时的邮件记录和沟通截图,里面提到了明镜那边和她之间的具体利益安排。”

陈砚没有说话。他安静地等着卫东继续说下去。

“我一直没拿出来,是因为不知道拿出来的后果会是什么。”卫东的声音又低了一些,“但最近明镜那边在市场上动作越来越大,而且他们的宣传内容里有不少和我当时在内部看到的东西对得上。我觉得,这些证据可能对公司有用。”

陈砚把那杯水喝了一口,然后缓缓放下杯子,看着卫东的眼睛:“卫总,你把这些证据拿出来,是想要什么?”

卫东沉默了一瞬,然后说:“我想要一个公平的行业环境。唐馨的事情之后,我对这一行的某些规则有点失望。我希望做技术的人能在一个干净的环境里竞争。”

陈砚想了想,从口袋里掏出手机:“你的联系方式我记一下。这件事我会跟法务那边沟通,如果他们需要和你对接,你再决定要不要把证据交出来。”

卫东点了点头:“好。我等你们的消息。”

他转身走回了宴会厅的人群里,深灰色的西装很快被淹没在各种灯光和衣香鬓影之间。陈砚站在原地,把卫东的名片翻来覆去看了两遍,然后小心地收进了钱包夹层里。

那天晚上的宴会后面都是些推杯换盏的社交环节,陈砚待了没多久就提前走了。他走到酒店门口的停车场坐进车里,没有急着发动引擎,靠在驾驶座上闭了一会儿眼。脑子里过了一遍卫东说的话,又过了一遍唐馨的事,最后落在一个简单的判断上——如果卫东手里的证据是真的,那明镜那边的侵权指控就不再只是推测,而是一个可以摆上法庭的事实。

他给郑曼曼发了条消息:“有空的时候你给法务周律师打个电话,明天安排一次碰头,有新的情况。”

郑曼曼的回复隔了几分钟才来:“收到。明天上午十点会议室。”

陈砚把手机放在副驾上,发动了车子。酒店门口的霓虹灯牌在挡风玻璃上投下一片彩色的光,他开着车缓缓驶入夜色中的街道,城市的灯火在他身后慢慢地、一格一格地退远了。

年底的最后几天公司里气氛松快了不少,该交的报告都交了,该结的账都结了。陆晨光给团队放了两天假,自己跑去南方看了趟海,回来的时候晒黑了一圈,站在陈砚办公室门口炫耀照片。陈砚瞄了一眼他手机屏幕上的碧海蓝天,说了句“下次带我去”,陆晨光乐呵呵地走了。

跨年那天晚上陈砚没有出门,和他妈在家里包了顿饺子。他妈擀皮他包馅,两个人站在厨房的案板前面忙活了一个多小时,包了满满两大盘。煮饺子的水汽把厨房的窗户糊上了一层白雾,客厅的电视里放着跨年晚会的声音,热热闹闹的。

饺子端上桌的时候他妈给他倒了杯醋,又给自己倒了杯,坐下来的第一句话是:“砚砚,新的一年你有什么打算?”

陈砚夹了一个饺子蘸了蘸醋:“把天枢二代的下一版做出来,把联合实验室的课题带起来。”

“还有呢?”他妈看着他的眼神有点深。

“还有……”陈砚嚼着饺子想了想,“把你带南方去住一阵,暖和暖和。”

他妈笑了一下:“我是说你自己个人的事,不是我的事。”

陈砚把嘴里的饺子咽下去,放下筷子看了他妈一眼:“妈,我跟沈若兰还在接触,这件事急不来。我们俩都觉着慢慢来比较舒服。”

他妈点了点头,没再追问。两个人安安静静地把那盘饺子吃完了,中间偶尔聊几句电视上的节目,谁演了什么歌,哪个主持人换了新发型。窗外远处的夜空里偶尔炸开一簇烟花,隔着窗户变成一团模糊的光晕。

吃完饺子陈砚洗碗的时候接到了一条微信,是余晚发来的:“陈老师新年快乐!新的一年继续一起搞事情!”

后面跟了一个小老虎的表情,大概是因为明年是虎年。

陈砚湿着手不方便打字,回了一条语音:“新年快乐。明年搞更大的事情。”语音发出去之后他想了想,又补了一条文字:“睡吧,别熬夜了。”

余晚的回复是一串哈哈哈,最后跟了一个“好的好的”。

陈砚把手机放在灶台边上,继续洗碗。水龙头的水冲在瓷盘上哗哗地响着,锅里的饺子汤还冒着余温,厨房里飘着面粉和醋混在一起的那种家常味道。他低头洗着盘子的边沿,听见客厅里他妈跟着电视上的歌声轻轻哼了几句,声音不大,但调子很准。

这一年走到最后一天,好像什么都有了,又好像什么都没变。窗外的烟花隔一阵炸开一朵,红的、绿的、金的,映在厨房那扇蒙了水汽的玻璃上,变成一团一团温暖的、模糊的光晕。