我的转正申请被副总压了一个月,于是便递简历到了竞争公司。
楔子
“林远,你的转正单……还在陈副总那儿。”孙莉的声音压得很低,像怕被谁听见。
林远看了眼手机,四月十七号。三月十七号提交的申请,规矩写明十五个工作日内批复,如今整整超了一个月。
“再等等吧。”孙莉补了一句,眼神躲闪。
他点点头,回到工位。屏幕上“青云”系统的代码还差最后一组模块,他盯着看了很久,手指悬在键盘上,一个字都敲不下去。
第一章 压了一个月的转正单
孙莉那条消息之后,林远在工位上坐了整整一个下午。屏幕上“青云”系统的代码像一张讥讽的脸,灰色注释区里躺着他三天前写好的模块说明,每个变量命名都带着那种刚入职时才有的较真劲儿。
他起身去茶水间,正撞上沈岚。沈岚端着杯子,看到他微微一顿。
“转正的事,有消息了?”她问得很随意,好像只是在确认一个排期。
“还在陈副总那儿。”林远接了杯热水,“孙莉说可能下周。”
沈岚没接话,手指在杯壁上摩挲了两下。茶水间角落的饮水机咕噜响了一声,她像是想起什么似的,声音压低了半度:“林远,季度会那天……你当着那么多人面说陈副总那组转化数据有问题,是核对过原始日志的?”
“核对过,后台埋点跑出来的实际数字和他报的差了两百多单。”林远看着她,“沈姐,那数据你也看过。”
“我看过。”沈岚承认得很快,但随即叹了口气,“可你看过就算了,非要在周会上讲。陈副总那个人——”
她把后半句咽了回去,端着杯子走了。林远站在原地,热水杯烫着掌心。他当然记得那场季度会。三月十号,他提交转正申请前一周。当时陈副总正拿那组漂亮的转化率数据申请追加部门预算,PPT上柱状图一路飘红,林远鬼使神差地举了手:“陈总,这个转化率的原始数据我跑过一次,和您展示的好像不太一致。”
会议室安静了大概三秒。陈副总笑了笑,说“小林数据严谨,会后我们核对一下。”然后翻到了下一页。会后没有任何人找他核对,但一周后他提交的转正申请就再没动过。
三月十七号提交,孙莉当时说“按规定十五个工作日,最快四月初就能批”。四月三号他问过一回,孙莉说“陈副总那边在看”。四月十号再问,孙莉开始躲他。今天是四月十七号,超期整一个月。
回到工位,林远把转正申请的扫描件又打开看了一遍。审批流程那栏,孙莉已经签了“材料齐全,建议批准”,沈岚也签了“同意”,最后卡在陈副总那一格,空白,连退回意见都没写。按规定,分管副总五个工作日内不批就自动流转,但人事系统里那条流程就悬在那里,没人敢催。
他关掉扫描件,继续写“青云”的最后一个模块。这是锐达今年上半年最重要的项目,为一家大型电商做的智能客服系统,底层语义理解+多轮对话,技术难度集中在意图识别准确率。林远负责核心对话引擎,从一月做到现在,就剩一个应力测试模块没有封版。
键盘敲到七点半,模块跑通了。屏幕上绿色的测试通过标记亮起来,林远靠回椅背,揉着发酸的后颈。办公区只剩零星几盏灯,产品部这边就他一个。他正准备关电脑,身后传来脚步声。
赵小萌探过头来,手里拎着便利店的袋子:“远哥,你又加班啊?我实习那会儿你带我写接口,也老是你最晚走。”
“快了,青云的模块今天封版。”林远指了指屏幕。
赵小萌拉了个椅子坐下,从袋子里掏出一盒牛奶放他桌上:“给你的。我听说你转正的事还没下来?”
“听谁说的?”
“孙莉姐前几天在会议室跟人打电话,我进去拿东西听到一句,说‘陈副总的意思,再晾他一段时间磨磨性子’。”赵小萌声音变小了,“远哥,你是不是得罪陈副总了?”
林远把那盒牛奶在手里转了一圈。再晾他一段时间,磨磨性子。晾多久?他在锐达待了两年半,从普通专员做到高级专员,带过三个完整项目,青云的核心架构是他一个人搭的。转正后分红大概八万,这是沈岚年初亲口跟他提过的。更重要的是晋升资格,不转正意味着一切免谈。
“小萌,你实习那会儿,我教你写第一个接口,跟你说过什么?”
“你说,代码不会骗人。”赵小萌答得很快。
“对,代码不会骗人,数据也不会。”林远把牛奶推回去,“你留着喝,我晚上不喝这个。”
赵小萌没拿,站起来往外走,走到门口又回头:“远哥,我觉得你值得更好的。真的。”
办公室重新安静下来。林远盯着屏幕上“青云”系统的登录页,那是他设计的第一个界面,logo旁边一行小字:让每一次对话都有回应。他忽然觉得有点好笑。
他退出代码库,打开一个许久没动的文件夹,里面是一份去年更新的简历。最后一次修改停留在前年十一月,入职锐达之前。他点开,光标在“项目经历”那栏闪烁。
青云项目,核心对话引擎设计,意图识别准确率从72%提升到89%,日均处理对话量二十万次。他打了一行又删掉,删掉又打。最后干脆把整段先复制到记事本里,等明天再想措辞。
关电脑前,他又看了一眼转正申请扫描件。陈副总的签字栏依旧空白。他拿起手机给孙莉发了条消息:“孙莉姐,明天我想找陈副总当面确认一下转正的进度,你把他的秘书联系方式推我一下?”
消息发出去,秒回。孙莉回得极快,快得不正常:“别去,陈总这周都在外面开会。”
林远看着那行字,没再回复。他把手机揣进口袋,拎起外套,整层楼的灯在他身后一盏一盏灭下去。电梯下到一楼,前台的大屏幕上还在滚动锐达的季度宣传片,陈副总那张儒雅的脸出现在画面里,字幕写着“锐达科技副总裁,主管产品创新与人才发展”。
林远从屏幕前走过去,推开旋转门。四月的晚风还带着点凉意,他站在写字楼门口的台阶上,把那份没改完的简历从手机备忘录里翻出来。删掉两行,加上一行。街灯在他身后亮着,把影子拉得很长。
明天还要上班,青云的封版报告得在周会前发出去。他得先把这些做完。至于转正单——一个月都等了,再多等一个晚上也没什么区别。
区别在明天。
他打了辆车,报出自家小区名字的时候,手指在手机屏幕上滑了一下,把那份简历发到了自己的邮箱。邮件标题栏自动填了三个字:新开始。
第二章 星图的面试
猎头的电话是第二天中午打来的。
林远刚把青云封版报告发给沈岚,手机就震了。号码陌生,归属地本地,他犹豫两秒还是接了。
“林远先生吗?我是猎头公司的顾问,我姓方。有个机会想跟您聊聊,星图智能,您听过吗?”
林远拿着手机走到茶水间,把门带上了。“听过。”
“他们在招智能客服方向的产品负责人,我看您的背景非常匹配。方便的话,今天下班后能不能跟他们的副总裁周明远见一面?周总时间比较紧,如果合适就一轮定。”
“今天?”
“对,今天。周总明天出差,一去半个月。”
林远看了一眼茶水间外面,产品部工位区灯火通明,几个同事正围在沈岚的工位旁讨论什么。沈岚背对着他,肩膀绷得很紧。他把视线收回来,对着窗户玻璃里自己的倒影说:“可以,六点半。”
“太好了。地址我发您手机上。”
挂了电话,林远在原地站了一会儿。茶水间的饮水机咕噜响了一声,像在催他做决定。他拧开一瓶矿泉水喝了两口,回到工位,把青云的源码访问权限清单又过了一遍,确认所有提交记录、交接文档、测试报告都完整归在项目共享盘里,然后打开云端备份,逐项核对文件的修改时间和哈希值。
他做这些事的时候表情没什么变化,和平时改bug没什么两样。但旁边的赵小萌探头看了他一眼,又缩回去了。
六点二十,林远打了卡,跟沈岚说了句“身体不太舒服,先走一步”。沈岚从屏幕后面抬起头,目光在他脸上停了一瞬,点了一下头,没多问。
星图智能的办公楼在科技园南区,比锐达少了两层,但大堂更亮堂。前台看了他的身份证,直接领他到三楼一间小会议室。会议室不大,桌上摆着两瓶水和一个投影遥控器。林远等了不到三分钟,门就被推开了。
周明远比照片上瘦,四十二岁的人,头发剃得很短,鬓角有几根白的,穿一件深灰polo衫,手里拿着一个牛皮纸文件夹。进来先伸手,手心干燥,握得有力。
“林远,坐。”他拉开对面椅子坐下,把文件夹往桌上一搁,“我不太喜欢绕弯子。锐达的青云系统,核心对话引擎是你设计的?”
“是。”
“意图识别准确率从72%提到89%,用了多久?”
“四个月。前期三个月做数据清洗和标注体系,正式训练迭代只用了一个月。”
周明远点点头,翻开文件夹,抽出一张打印的架构图。林远扫了一眼,那是青云的公开技术白皮书里的一张简化图,真实架构比这张复杂得多。
“我看了你们的技术分享,有一点没想明白,”周明远拿笔在图上的对话管理模块画了个圈,“意图识别和槽位填充,你是怎么做到低延迟并发情况下还保持准确率的?我们的方案一上量就掉点。”
林远身体微微前倾,手指点在图上两个模块之间的连线上:“关键不在识别模型本身,在意图路由的前置规则层。我用了一个轻量的二分类器做意图预分组,把高频意图和低频意图分开走不同的推理路径。高频走缓存加增量匹配,低频才走完整模型推理。这样80%的请求根本不进大模型。”
周明远眼睛亮了一下,拿笔在空白处记了几个字。“规则层的数据从哪来?”
“日志回放加人工校验,但比例有讲究。”林远顿了顿,“这部分涉及我们线上的具体参数,不太方便展开。”
周明远笑了一声,把笔放下:“行,够实在。那我不问细节了。我问个大的——青云现在的日均处理量多少?”
“二十万次左右,峰值三十六万。”
“如果让你重做一遍,你会怎么改?”
林远沉默了几秒。这个问题他在脑子里过过很多遍。“我会把语音识别和语义理解解耦得更彻底。青云现在还是串联架构,语音转文字之后才做意图识别,中间有300毫秒左右的固定延迟。如果改成流式分段处理,边说边推理,端到端延迟能压到200毫秒以内。这块当时在锐达提过,但资源排不上。”
周明远往后靠了靠,椅子发出轻微的响动。他看着林远,目光很直接:“星图现在缺一个能带团队把智能客服产品从零搭起来的人。你的薪资,现在多少?”
“一万二。”
“我给你一万七,加项目奖金。转正流程一周走完,进来就是项目负责人,直接向我汇报。团队你自己搭,预算我来批。”
林远没有马上回答。这个数字比他预想的高,高得让他需要缓一下。他低头看了眼桌上那瓶没开的水,标签被自己无意识地抠起了一个角。
“我需要考虑一下。”他说。
周明远也不催,站起来收好文件夹:“应该的。但我时间紧,给你三天。下周一之前给我答复,我好安排后面的事。”他走到门口,又回头,“林远,你在锐达的事我听说过一些。别的我不评价,但有句话我可以放这——星图看技术,不看关系。你考虑。”
林远独自在会议室坐了两分钟,然后把那瓶水拿起来,走了出去。
回程的网约车上,他靠着车窗看路灯一盏一盏往后闪。手机屏幕亮了一下,是沈岚的消息。
“明天周会提前到八点半。另外,陈副总今天下午批了青云的上线时间——提前一周。你那边测试安排要重新排一下。”
林远盯着“提前一周”三个字看了好几遍,大拇指在屏幕上悬着。测试计划是他排的,每个环节留了多少冗余他心里清楚。提前一周意味着砍掉至少两轮压力测试。他键盘敲了“收到”两个字,又删了。最后回了一个字:“好。”
他退出沈岚的对话框,打开备忘录,翻到昨晚改了一半的简历。“项目经历”那栏还停在半截,光标在末尾闪。他想了想,在青云那行最后加了一句:主持核心对话引擎从架构设计到上线全流程,带领六人小组完成三端适配与性能调优。
保存。切到邮箱,猎头发来的面试反馈邮件已经躺在收件箱里,标题写着“星图一面反馈——通过”。
他点开,正文只有一句话:“周总说,希望尽快听到你的决定。”
网约车下了高架,拐进一条僻静的辅路。林远把手机放下,看着窗外。远处锐达大厦的灯光出现在视野边缘,楼层指示灯还在亮,产品部所在的十七层格外扎眼。车子又往前开了一段,那栋楼慢慢被另一栋更高的建筑挡住了。
师傅,前面路口右转。他说。
手机又震了,这回是赵小萌发来的微信:“远哥,陈副总在部门群里说青云提前上线是‘团队战斗力的体现’,还@了沈姐。沈姐没回。”
林远把手机翻了个面,屏幕朝下扣在腿上。
窗外,锐达大厦最后一角也消失在楼群后面。他想起刚才周明远那句话——“星图看技术,不看关系。”车里导航提示前方三百米到达目的地,他重新拿起手机,给猎头回了一条:“方顾问,麻烦帮我约周总,下周一上午我去公司面谈细节。”
发完这条,他切回沈岚的对话框,上一条消息还停在那个“好”字。他盯着看了两秒,又打了一行:“沈总监,明天周会前我想跟你单独聊五分钟。”
发送。
车停了。他推开车门,四月的晚风灌进来,比昨晚更凉。小区门口的保安跟他点了下头,他迈上台阶时才想起来,自己连晚饭还没吃。
第三章 最后通牒
周会八点半开始,林远八点十分就到了沈岚办公室门口。门虚掩着,沈岚已经坐在里面,面前摊着三份打印文件,手指按在键盘上没动,像是在等什么。
“进来说。”沈岚抬头看了他一眼,把文件翻过去扣在桌上。
林远走进去,顺手关上门。他没坐,站在办公桌对面,开门见山:“沈总监,我的转正申请在陈副总那里压了三十一天。人力那边说流程卡在他签批。孙莉昨天告诉我,她催过三次,陈副总的回复一直是‘再复核复核’。”
沈岚嘴唇动了动,没说话。
“公司规定,高级专员转正审批不得超过十个工作日。我入职两年半,绩效两个A一个B+,去年主导的智能问答模块到现在还在给客服部省人力。我想请问,陈副总还需要复核什么?”
沈岚把钢笔帽拧开又合上,合上又拧开。办公室里安静得能听见空调出风的嗡嗡声。
“林远,”她终于开口,声音压得很低,“季度会上你当众指出陈副总那页数据有问题,你还记不记得。”
“那个留存率算法确实有问题,分母口径不对,我后来复核过数据源。”
“我知道你是对的。”沈岚打断他,“我也知道所有人都知道你是对的。但陈副总分管产品和人事,你的转正单现在就在他抽屉里。我上周去找过他,他说你的项目经历需要‘进一步核实’,还特意提了句‘年轻人做事不要太急’。”
林远攥了攥拳头,又松开。“沈总监,我今天来就想问你一件事。周五之前,这张单子能不能签下来。”
沈岚看着他,目光里有种说不清的复杂。她站起身走到窗边,背对着他说:“我再去谈一次。”
“如果周五签不了。”林远停顿了一下,把后半句说得很平,“我本周五下班前交辞职信。”
沈岚猛地转过身。两个人隔着办公桌对视了三秒。
“你想清楚了?”
“想清楚了。”
沈岚没再劝,只说了一句:“你先回去。我今天上午就去找他。”
林远回到工位,打开电脑,屏幕上还停留着昨晚未关的测试排期表。“青云”提前一周上线,测试周期被压缩了整整四成。他把排期拉了一遍,把原本分两轮做的功能测试合并成一轮通跑,压力测试从三天砍到一天半。每删一个环节,他的鼠标都停一下。
赵小萌端着一杯水从茶水间回来,经过他工位时弯腰小声说:“远哥,我刚才路过陈副总办公室,听见沈姐在里面说话,声音挺大的。”
林远头也没抬:“汇报工作吧。”
“不像。”赵小萌把声音压得更低,“我好像听见沈姐说‘这不合理’三个字。”
林远的手停在键盘上。过了几秒,他继续改排期表。
沈岚是十点四十回来的。她绕过整个产品部的开放工位区,走到林远旁边,手指在隔板上敲了两下,低声说了句“来我办公室”,转身就走。林远注意到她脸色发白,脚步比平时快。
关上门,沈岚没绕弯子。
“陈副总说,转正单需要‘重新走一遍绩效评议流程’,理由是青云项目即将上线,你的工作内容有重大变动,之前的绩效材料需要补充。”她深吸一口气,“这是他的原话。我问他补充材料需要多久,他说‘看情况’。”
“看情况。”
“林远,他没有说不同意,但也没给任何时间承诺。我用部门总监的名义要求他明确时限,他说——”沈岚顿住。
“他说什么。”
“他说‘沈岚你管好项目进度就行,人事的事不用你操心’。”
办公室里静了几秒。林远觉得太阳穴在跳,但他声音反而更稳了:“沈总监,我明白了。”
“你先别急,我下午再去找孙莉,让她把流程记录调出来——”
“不用了。”林远站起来,“谢谢沈总监。我今天下班前把青云的测试方案和交接文档全部整理好发你邮箱。”
沈岚张了张嘴,最终只说出一句:“你再给我两天。”
“我昨晚看到陈副总批的上线时间,把测试砍了四成。”林远手搭在门把上,“这个项目我还在收尾,收完我就不欠什么了。”
他回到工位,打开邮箱开始整理交接文档。写到一半,右下角弹出一封部门群发邮件,是陈副总办公室发的:关于“青云”项目上线冲刺阶段人员分工调整的通知。
他点开。
“为保障项目高效冲刺,经研究决定,对项目组名单进行如下调整——”他往下扫,六人小组成员都在,自己的名字被删掉了。被替换成的是上个月刚调来产品部的另一个高级专员。
邮件最后一行写着:项目核心成员调整后,原有分工由新任成员全面接手,上线奖金及项目分红按实际参与人员核算。
林远盯着那行字看了很久。分红约八万,前提是转正。现在名单被删,转正被卡,两条路同时被堵死。
手机亮了,是赵小萌从隔壁工位发来的微信,只有两个字:“远哥?”
他没回。
屏幕右下角的时间跳到十一点四十七分。他打开昨晚改了一半的简历文档,把“期望到岗时间”从两周后改成一周内,又将星图面试反馈那封邮件重新看了一遍。
然后他拿起手机,走进消防楼梯间。
“方顾问,我是林远。上周说的那个职位,麻烦帮我跟周总确认,下周一上午我去公司面谈细节。对,薪资和岗位按周总之前提的来。”
挂了电话,他又拨了一个号码。
“沈总监,是我。周五的会不用开了。我刚才跟星图智能确认了,下周一去面谈。青云的交接文档我今天下班前发你,测试排期我更新了一版,压力测试砍到一天,但有个风险点我标红了——如果陈副总坚持要再砍,建议你把这条书面反馈给他。”
电话那头沉默了好几秒。沈岚的声音有些哑:“你什么时候联系的星图?”
“昨天。”
“林远——”
“沈姐,”他改了称呼,“去年你把我从初级专员提上来,让我带小组,这些我都记得。但陈副总这次不只是卡我转正,他把我的名字从上线名单里删了。八万分红我不要也行,但把核心开发者在冲刺阶段踢出去,这是冲着项目在搞事。我不能让青云出问题。”
沈岚在那头深吸了一口气。“我知道了。你把交接文档发我,下班前。”
“好。”
挂了电话,林远靠在消防楼梯的墙上,看着窗外四月的天。云层压得很低,但远处有一线阳光劈开云缝照下来,正好落在他攥着手机的那只手上。
他松开拳头,手心全是汗。
第四章 提离职那天
林远把辞职信打印出来的时候,办公室里大部分人还在午休。打印机吐出那张A4纸的声音在安静的工区里格外清晰,他拿起来看了一眼,折好,放进衬衫内侧口袋。
他在沈岚办公室门口站了半分钟。透过磨砂玻璃能看见里面灯亮着,隐约有人影在动。他抬手敲了两下。
“进。”
沈岚抬头看见是他,表情先是惯常的工作状态,随即像是意识到了什么,眼神微微一滞。她目光快速扫过林远的手,空空的两手,没拿电脑,也没拿文件。
“坐。”
林远没坐。他从口袋里掏出那封辞职信,放在沈岚桌上,正面朝上,措辞很简短:因个人发展原因,申请离职,最后工作日为下月十五日。
沈岚低头看着那张纸,足足有五秒钟没说话。办公室里空调嗡嗡响着,她伸手把信纸拿起来,翻到背面看了一眼,什么都没有,又翻回来。
“林远,你先坐下。”她的声音比平时低了一些。
林远拉开椅子坐下了。沈岚把信纸平放在桌上,手指按着纸边,指甲修剪得很整齐,只是指节微微泛白。
“上周五陈副总卡你转正的事,我还在争取。”她开口时语速比平时快,“青云项目上线在即,这个节骨眼上你走,整个研发排期要乱。”
“排期我已经调整好了,交接文档昨天发你了。”林远说,“接手的人我已经跟方舟对接过两次,测试用例他都跑通了。”
沈岚盯着他:“你什么时候开始准备这些的?”
“上周。”
“上周几?”
“周三。”
沈岚慢慢靠回椅背,双手交叉抱在胸前。她今天的眼妆比平时浓一些,遮住了眼角的疲惫,但眉心那道竖纹藏不住。她看了林远好一会儿。
“你去哪家?”
“星图智能。下周一去谈细节,已经基本定了。”
沈岚的表情没有太大变化,但交叉的手指收紧了一下。星图智能,锐达在智能客服赛道最大的竞对公司,两家产品线正面撞车已经两年了。她不可能不知道这意味着什么。
“薪资多少?”
“比现在高一些。”林远没说具体数字。
“高多少?”
“百分之四十。”
沈岚轻轻呼出一口气,嘴唇抿了一下。她拿起桌上的笔在辞职信边角写了几个字,又划掉了,然后把信纸收进抽屉。
“信我收了,但我不批。至少今天不批。”她说,“你让我再找陈副总谈一次。”
“沈姐。”林远叫得不轻不重,“你上周三去找他,他说流程需要复核。上周五你去,他说复核结果要等下周。今天周一,你再去,他大概率说复核流程要跟HR重新对齐。你已经争取过了。”
沈岚的脸色变了变。他说的每一个细节都对,像是有人把她的日程摊开来看过。
“你说得都对。”她松开抱着的胳膊,把手放在桌上,“但你没站在我的位置上想过。你走了,青云谁接?新来那个高级专员连系统架构都没吃透,上线延期谁负责?我负责。陈副总正好有理由说产品部管理不善。”
“所以我想了一个折中方案。”林远说,“我走之前把所有文档、测试、部署流程全部整理清楚,接手的人如果有问题,晚上和周末可以随时找我。青云是我从零开始搭的,我不希望它出任何纰漏。但我不能继续待在一个把我的贡献当筹码的地方。”
沈岚沉默了很长时间。办公室外面开始有午休回来的同事走动,推拉键盘的声音隐约传来。她最终开口,声音放得很轻。
“星图那个周明远,你了解他吗?”
“面试聊了两个小时。”
“他给的条件确实好。”沈岚点了点头,像是对自己说话,“那我就不拦你了。但信你先拿回去,等这周过完,我给你一个明确的答复。”
“沈姐——”
“给我三天。”她看着他,眼神里有种明确的请求,“三天后如果我给不了你交代,你走,我不留。”
林远想了几秒,站起来。“信放你这里吧,我不拿回去了。”他走到门口又停下,“你找陈副总的时候帮我带一句话——青云的压力测试是我坚持要跑三天的,他上周砍到一天的时候,测试报告里系统在八千并发下响应延迟超过两秒。这个数据我标红了给他在邮件里抄送过你。”
沈岚的手指在键盘上停住了。
“他看到了,没回。”林远说完,拉开门走了出去。
他回到自己工位的时候,赵小萌正趴在隔板上看他。小姑娘眼神里全是欲言又止,嘴唇动了两次都没出声。林远坐下来,打开电脑,桌面上“青云系统交接”文件夹静静躺着。他双击打开,开始往共享盘上传。
不到半小时,消息就传遍了产品部。林远不知道是谁先说出去的,也许是沈岚找HR报备时孙莉知道了,也许是他收拾桌面文件时隔壁组有人注意到了。总之下午两点刚过,孙莉就出现在他工位旁边,表情严肃得像来处理一桩安全事故。
“林远,方便吗?去小会议室。”
孙莉把门关上,坐下来直接问:“你离职信交了?”
“交了。”
“去哪家?”
“星图。”
孙莉的眉毛挑了一下。她翻开面前的文件夹,抽出一份薄薄的协议,推过来。“这是你当年入职签的保密和竞业限制协议,我需要跟你确认一下条款。”
林远拿过来看了一眼,翻到第二页,指着其中一段。“孙经理,这份协议第六条的竞业限制条款是空白的。入职时你跟我说过,这个条款要到高级管理岗才会启用,我只签了保密条款。”
孙莉凑过来看,眉头慢慢皱起来。她的确在那份协议上盖了章,第六条的甲乙双方权利义务栏是空的,没有约定竞业期限,也没有补偿金条款。按照行业惯例和法律常识,这种未约定补偿金的竞业限制条款,员工可以不受约束。
“你当时怎么不知道提醒我?”孙莉的语气里有懊恼,但不像是对林远说的。
“我记得你说过,初级岗不启用。”林远平静地说,“而且这份协议一直在你那里存档,今天第一次给我看。”
孙莉把协议收回去,塞进文件夹,站起来时椅子腿在地面刮出一声刺耳的响。“你的离职流程我会正常走,十五天后解除合同。”她走到门口又回头,“林远,如果陈副总问起来,这份协议的事你自己解释。”
“我会的。”
孙莉拉门出去,差点撞上端着水杯的赵小萌。赵小萌侧身让开,等孙莉走远了才快步走进会议室,反手把门关上。
“远哥,你真的要走?”
林远点点头。赵小萌把手里的水杯放在桌上,从口袋里掏出一个小布袋子,放在他面前。布袋子上印着一只卡通猫,针脚有点歪,像是手工缝的。
“去年你带我做第一个项目的时候,我老是写错接口参数,你每天下班留下来一个小时帮我debug。”赵小萌说话时眼眶有点红,但忍着没掉眼泪,“你说‘犯错不要紧,把原因找出来就行’。这句话我记到现在。这个给你,路上用。”
林远打开布袋,里面是一枚手工书签,用薄木片做的,上面刻着“青云”两个字,笔画很细,边角打磨得很光滑。他认出来,这是赵小萌自己刻的,她去年学了一阵木工。
“自己刻的?”
“刻废了五块木头。”赵小萌吸了吸鼻子,“第六块才成功。你得收好,以后你在星图做出更厉害的产品,这就是你带过的第一个兵给你的纪念品。”
林远把书签收进口袋,拍了拍赵小萌的肩膀。“你留在锐达好好干,遇到问题随时找我。青云的代码架构你比我熟,接手的人如果有不明白的,你可以帮忙解释。”
“嗯。”赵小萌用力点头。
下班之前,林远从隔壁部门同事那里听到了陈副总的反应。原话是四个字加一个冷笑——“走了正好。”又有人补充说,陈副总在走廊里跟另一个副总说,产品部有些人“心浮气躁,待不住是正常的”。
林远听完没什么表情。他把最后一批文件上传完毕,关掉电脑,拿起抽屉里早就收拾好的私人物品。一个马克杯,一盆小多肉,一本翻旧了的《系统设计方法论》。工位上只剩公司配的显示器和键盘。
他背起包往外走,经过沈岚办公室时脚步没停。但玻璃门里面的沈岚抬起了头,隔着磨砂玻璃的模糊人影,她好像微微点了一下头。
电梯到一楼,门打开,外面是四月傍晚微凉的风。林远走到大厦门口,回头看了一眼锐达的LOGO在暮色里亮起来。他把手插进口袋,指尖碰到那枚木书签光滑的边缘。口袋另一边是手机,屏幕刚亮起,一条新邮件——星图智能HR发来的面试确认函和一份详细到岗须知。
他点开邮件,快步走向地铁站。
第五章 入职星图
星图智能的办公楼在科技园南区,一栋通体玻璃幕墙的十二层建筑,外观比锐达那栋九十年代的老楼年轻了不止一个时代。林远刷卡进门时,前台背后的电子屏正滚动播放公司产品宣传片,画面里一个语音助手流畅地应答用户提问。他多看了两秒,听出那是友商两年前的技术底子。
“林远,这边。”周明远亲自站在闸机口等他,穿一件深灰色衬衫,袖口随意挽到小臂。握手时手掌干燥有力。“入职手续的事我已经跟HR打过招呼,转正流程一周内走完,你不用担心。”
林远本能地想问一句“走什么流程”,话到嘴边咽了回去。一个月前他还在为一张转正单辗转反侧,现在对方副总裁站在面前拍胸脯保证。他点头说好,跟着周明远穿过开放式办公区。星图的工位比锐达宽敞,显示器是双屏,每张桌上都放着崭新的降噪耳机。但林远扫了几眼屏幕上晃过的代码和文档,心里咯噔一下。
产品的技术架构比他预想的要旧。
周明远把他领进一间小会议室,倒了两杯水,开门见山:“产品团队刚重组,之前的技术负责人在你入职前一周离职了。现在核心组有五个人,经验参差不齐,但冲劲有。你先看文档,下午四点开个短会,跟他们见个面。”
“青云系统现在是什么状态?”林远问。
周明远端起杯子又放下,看着他:“这正是我要跟你说的第二件事。锐达的青云已经在上周拿下了恒远集团的招标,那本来是我们跟了八个月的单子。”
林远握着杯子的手指收紧了。
“青云系统三个月前还只完成了基础框架,核心算法模块是我带着团队做的。”他声音平稳,但语速比平时快了一些,“语义理解和多轮对话的架构是我从零搭的。”
“我知道。”周明远站起来走到白板前,拿起记号笔写了几个关键词,“锐达的商务报价比我们低百分之十五,而且演示效果确实比我们的现行版本好一个档次。恒远那边的技术负责人给我看了演示录像,你们的——或者说青云的——对话中断率比我们低了将近一半。”
林远没说话。他想起自己在锐达做的最后一次内测,那时候青云的对话中断率确实降到了历史最低点。数据是他亲手跑的,报告是他亲手写的,交给沈岚那天她还说“这个成绩可以拿出去打硬仗了”。
“我不瞒你,”周明远把笔放下,“星图现在这一代产品是两年前的架构,小修小补撑到了今天。锐达用青云撬走了我们最大的客户,如果这个势头继续,接下来半年我们连第二梯队的单子都会丢。”
林远抬起头。他明白周明远招他的意图了,但同时也意识到一个更复杂的局面:青云系统最早的架构思路、核心模块的设计、语音识别接口的优化方案,几乎全都装在他的脑子里。他离职的时候没有带走一份代码文件,但他带走了比代码更重要的东西,判断力和方法论。
“我需要先看星图现在的技术文档。”林远说。
“已经发到你邮箱了。”周明远看了眼手表,“下午的会你不用准备什么,先听他们说。还有——”他走到门口停了一步,“恒远那个项目还有第二轮比选,客户给了我们两周时间提交优化方案。你来了,这个方案的主导权归你。”
林远独自坐在会议室里,打开笔记本电脑。星图的技术文档结构清晰但内容陈旧,语音识别还是基于规则模板,多轮对话用的是上一代意图识别框架,整体落后他离职前锐达的水准至少一年半。他翻到系统架构图那一页,盯着看了很久。
敲门声响了两下。一个戴黑框眼镜的年轻男生探进半个脑袋:“林哥?周总让我带你去工位,顺便给你介绍下组里的人。”
林远合上电脑起身。男生叫方宇,二十五岁,星图产品组的产品经理,说话语速快,走路也快。他一边走一边介绍:“组里现在两个前端两个后端,加我一个产品。后端那边刘畅是主力,但他之前主要做管理系统,高并发这块经验不多。前端的话……”
“架构谁在负责?”
“之前是陈哥,但他走了之后……”方宇压低声音,“说实话,他留下的那套东西我都不敢动,牵一发动全身。周总说等你来定方向。”
林远在新工位坐下。桌面上贴着一张欢迎便签,是周明远手写的,字迹潦草,但最后一句写得格外清楚:把青云的仗打回来。
他打开邮箱,翻到星图现行系统的技术白皮书,又打开另一份文档——恒远集团的项目需求说明。两份文件并排放在屏幕上,一边是老旧但稳定的星图产品,一边是客户苛刻的性能指标和交付节点。他看了二十分钟,拿起笔在便签纸背面画了一个架构图。
比青云更彻底。他在心里说。
下午四点的会开了四十分钟。林远大部分时间在听,偶尔问一两个问题。团队确实年轻,刘畅讲到自己重构过的一个模块时眼睛发亮,方宇对客户需求的理解也足够敏锐。但整体技术底子薄,经验积累不够,遇到高并发场景的认知还停留在“加服务器”的层面。
散会后周明远走过来,把林远叫到走廊尽头的落地窗前。窗外夕阳把科技园的玻璃幕墙染成橘红色。
“你觉得他们怎么样?”
“有冲劲,但缺打仗的经验。”林远实事求是。
“所以我才找你。”周明远靠在窗框上,“锐达用青云打我们,而青云是你做的。这件事巧也好,不巧也好,事实就是这样。我要你用你自己的方法,做一个比青云更好的东西出来。资源我批,人你调,但时间不多。”
林远沉默了几秒。口袋里的木书签硌着手指,他摸到那个光滑的边角。赵小萌给他刻这枚书签的时候说“以后你在星图做出更厉害的产品”,她大概没想到这一天来得这么快,也没想到他要面对的对手就是自己留下的“青云”。
“我需要一个权限,”林远说,“查看星图所有已交付项目的运行数据和客户反馈。”
“已经让运维开通了,明天生效。”
林远点点头,转身走回工位。屏幕上还开着恒远集团的需求文档,他把光标停在第一页的项目概述上,那里面写着客户的核心诉求:在高并发场景下保持对话连贯性,并且具备持续自学习能力。青云做不到自学习,青云的对话模型是静态的,每次更新都需要人工介入。这是他在锐达时就意识到的短板,但那时候陈副总压着预算不放,沈岚也不敢批。
现在没有人压着他了。
他翻开笔记本新开一页,在顶部写下一行字:脱离青云路径,做真正的新东西。笔尖顿了顿,他又在下面补了一行:两周后见恒远。
第六章 第一个硬仗
恒远集团的项目比稿时间定在两周后,这个信息是周明远在周四早上的紧急会上正式宣布的。
“客户只给两周准备技术方案和演示环境。”周明远站在会议室白板前,把遥控笔往桌上一搁,“我们的竞争对手锐达已经进场三周了,他们的青云系统在客户内部做了一轮宣讲。我们没有宣讲机会,只有一次比选现场。”
会议室里坐了七个人,除了林远和产品经理方宇,还有技术组的刘畅、运维主管老赵和另外三名工程师。林远坐在靠窗的位置,面前的笔记本摊开着,上面是他昨晚画的架构图。
“现在说问题。”周明远看向林远,“恒远集团的需求你看过了,我们的老平台接不了这个活,差距在哪,直接说。”
林远把笔记本转了个方向,让所有人看到他那张手画的架构图。“差距在语音识别和对话引擎这两块。我们现有的系统用的是三年前的识别模型,错误率在安静环境下是百分之八,客户现场有嘈杂背景音,实际使用会翻倍。对话引擎依赖预设流程,客户要求的是自学习能力,这一块我们等于零。”
刘畅皱了皱眉:“两周时间,从零搭一套自学习对话引擎,不可能。”
“所以不搭整套。”林远用笔在架构图上半部分画了个圈,“我们只做识别准确率这一件事,把百分之八压到百分之三以内,用这个作为差异化。对话引擎先用半自动方案过渡,让客户看到我们有迭代路径,但不承诺两周内解决所有问题。”
方宇往前倾了倾身子:“恒远的项目负责人我接触过一次,他是个技术出身的人,最在意的就是语音识别在嘈杂环境下的表现。如果我们能当场演示嘈杂环境下的实时识别,比讲一堆架构有用。”
周明远敲了敲桌面:“说具体方案。”
“我需要两样东西。”林远说,“第一,市面上能买到的最好的麦克风阵列和降噪芯片,做好硬件层的前端处理。第二,我需要调用星图所有历史语音数据的标注权限,用迁移学习的方式微调现有模型。这个方向我之前在锐达的时候想过,但那边没条件做。”
他没说的是,当时他把这个想法写成方案发给沈岚,沈岚看完说“方向很好但陈副总不会批预算”。那份方案最后被沈岚锁在抽屉里,连个正式回复都没给。
“数据标注的权限我给你。”周明远没有犹豫,“硬件你列清单,今天下午采购就下单。刘畅带三个人跟你,需要什么支持直接找方宇。”
散会之后方宇没走,等其他人出了会议室才凑过来:“你刚才说的那个方向,是不是在锐达没做成的那个?”
林远看了他一眼:“你知道?”
“青云系统的技术文档我研究过,你们的识别模块用的是通用方案,没做场景适配。我当时就觉得奇怪,按理说做智能客服的不可能漏掉这个点。”方宇笑了笑,“后来打听了一下,说是预算被卡了。”
林远没接话,低头收拾笔记本。方宇也没追问,拍了拍他的肩膀说“需要什么说一声”就走了。
接下来的三天林远几乎没离开过实验室。麦克风阵列的样品第二天就到了,他带着刘畅和两个工程师在办公室里搭了一个模拟嘈杂环境的测试台,用音箱循环播放展会现场的录音,手机上开视频会议制造背景噪音,然后在中间放一台笔记本跑识别测试。
第一天错误率百分之十一。硬件前端处理比预想的效果差,降噪算法需要自己调参数。
第二天下午降到百分之六,但离目标还差一半。刘畅盯着屏幕上的波形图,揉了揉眼睛说“模型对中低频噪音的抑制不够,要不要换一个损失函数”。
林远站在白板前把整个识别链路重新画了一遍,突然想起一件事。他在锐达的时候看过一篇论文,讲的是用对抗训练的方式生成带噪样本,让模型在训练阶段就“见过”各种噪声场景。这个思路他当时记在笔记本上,但那本笔记本留在锐达的工位抽屉里没带走。
他翻出手机,在通讯录里找到赵小萌的号码,犹豫了几秒还是拨了过去。
“林哥?”赵小萌的声音有点意外,“你找我?”
“你还在锐达吧。”
“在啊,转正了,现在跟着沈总做青云的迭代。”她的语气里带着一点小心翼翼,“你那边还好吗?”
“挺好的。我问你一件事,我走之前放在工位抽屉里的那个蓝色笔记本,你看到过吗?”
电话那头安静了两秒。“看到了。你走了之后我收拾你工位,把你留下的东西都收在一个箱子里了。笔记本在箱子最下面,我没翻开看过。”
“里面有一篇论文的笔记,关于语音识别对抗训练的那篇。你能不能把那一页拍个照片发给我?”
“现在就要?”
“现在就要。”
赵小萌说“你等一下”,手机里传来她翻东西的声音。大约一分钟后,微信弹出一张照片,是一页手写的笔记,字迹有些潦草但内容清晰。林远放大图片,找到了那段关于带噪样本生成的公式推导,他当时用红笔在旁边标注了“值得一试”。
“收到了,谢谢。”他说。
“林哥,”赵小萌的声音压低了,“有件事我不知道该不该跟你说。”
“你说。”
“青云系统上线之后,这个月已经崩了两次了。第一次是客户做压力测试的时候数据库连接池被打满,第二次是对话服务在晚上高峰期直接挂了一个小时。沈总带着我们通宵修了两次,但根因一直没解决。陈副总在部门会上说,是因为你走之前没有做好交接,代码结构有问题。”
林远站在实验室的角落里,手机贴着耳朵,实验室那边传来刘畅调试设备的键盘声。
“你怎么想?”他问。
赵小萌沉默了一会儿。“我不觉得是你的问题。你交接的文档我看了,压力测试的部分写得清清楚楚,是陈副总后来让研发砍掉了两个测试环节来赶进度。但没人敢在会上说,沈总也没吭声。”
“你不用说。”林远说,“保护好自己。”
“可是……”
“赵小萌,你能打这个电话告诉我这些,我已经很感谢了。剩下的让事情自己发酵。”
挂了电话之后他回到工位,把赵小萌发来的笔记照片看了两遍,然后把公式抄到白板上,在下方写了一行小字:用对抗训练生成噪声样本,两轮迭代。他重新调整了模型微调的参数,把带噪样本的比例从百分之十提高到百分之三十。
刘畅凑过来看了一眼:“这个思路可以,等于让模型提前把各种难听的噪音都听一遍,它就不怕了。”
“试试。”林远说。
第四次测试的时候错误率降到了百分之三点七。第五次到了百分之二点九。实验室里几个人围在屏幕前,刘畅第一个喊出来:“进了!目标以内!”
林远没有笑。他盯着屏幕上的数字,脑子里同时在算另一笔账——恒远的比选是两周后,锐达的沈岚带队,青云系统虽然频繁崩溃但毕竟上线了快两个月,功能覆盖度比他们现在的半成品要高。口头承诺的迭代路径在比选现场只能算加分项,真正决定胜负的还是现场演示的稳定性。
他把方宇叫过来:“客户现场的那间会议室,能不能提前拿到平面图?”
“你要干什么?”
“我要根据现场的声学环境提前校准麦克风阵列的位置。展台布置、设备摆放、甚至桌椅材质都会影响收音效果,这些细节如果现场再调就来不及了。”
方宇愣了一下,然后掏出手机开始翻通讯录:“恒远那边有个接口人跟我关系不错,我今晚请他吃饭,争取明天把图拿到。”
林远点点头,转身对刘畅说:“我再给你两天时间,把识别模块的稳定性测试跑满一万次。每一次失败都要有日志,我要看到失败原因分布。”
“一万次?”刘畅吸了口气,“行,我今晚住这儿了。”
那天晚上十一点多,林远最后一个离开实验室。他把白板上的架构图拍了下来,清理掉当天用过的所有草稿纸,锁好门走进电梯。电梯下行的时候他掏出手机看了一眼,屏幕上恰好弹出赵小萌的微信消息,只有短短一句话。
“今天下午青云又崩了,客户投诉邮件直接发到了陈副总那里。他开始查是谁的责任了。”
林远把手机熄了屏放进兜里。电梯门打开,一楼大厅空荡荡的,保安在值班室里打盹。他推开玻璃门走进初夏的夜风里,脑子里闪过的画面是赵小萌发来的那张笔记本照片——一年前他用红笔在旁边写下“值得一试”的时候,大概想不到自己会在另一家公司的实验室里把这个想法变成现实。
而青云的崩溃,只是时间问题。
第七章 背脊上的暗箭
刘畅在第七次成功跑进目标区间后,直接把键盘往桌上一拍:“今天谁也别拦我,我要睡到明天中午。”
林远从工位下面拖出一箱矿泉水,挨个扔了一瓶过去。实验室里七个人各自瘫在椅子上,面前屏幕上跳动着同一组数据——语音识别模块在模拟噪音环境下的错误率稳定在百分之二点八左右,比恒远比选公告里的技术门槛还低了将近一半。
“明天上午十点,会议室三,把测试报告过一遍。”林远说,“方宇,恒远那边的场地平面图拿到了吗?”
方宇比了个OK的手势:“昨晚那顿饭没白请,连他们投影仪的型号都给我发了过来。”
林远点头,把电脑合上。他正准备说散会,手机在兜里震了两下。他掏出来一看,是赵小萌连发的三条消息:“你看一下脉脉职场区”“有人在传青云的事”“好像说的是你”。
第三条消息发出来之后,紧跟着是一张截图。林远放大了图片,是一个匿名帖,标题写着:“锐达青云系统频繁崩溃实锤——内部员工透露是前员工离职前埋了后门跑路。”正文没有点名,但描述里提到了“产品部高级专员”“刚跳槽到竞对”“时间节点吻合”,最后还加了一句“建议锐达直接走法律程序”。
实验室里几个人还在收拾东西,没人注意林远的表情变化。他退出截图回到赵小萌对话框,打了几个字:“什么时候发的?”
“今天中午。热度已经起来了,评论区有人猜是你。”
林远锁了手机,把电脑塞进包里。走出实验室的时候方宇在后面喊了一声:“林哥,明天见。”他头也没回地摆了摆手。
坐进出租车后座,林远又把截图翻出来看了一遍。帖子是匿名发在职场社区的,内容看起来像是有人故意引导——“内部员工透露”这种措辞本身就意味着发帖者要么是锐达的人,要么能接触到锐达内部消息。评论里已经有人把林远的名字和星图挖了出来。
他到家之后没有开灯,坐在客厅沙发上把手机亮着盯了五分钟。第一条消息是周明远发来的,时间是晚上十点四十七分:“脉脉上那个帖子我看到了。明天一早我们碰一下,法务那边我打声招呼。”
林远回了一个字:“好。”
然后他翻开通讯录,找到沈岚的号码。犹豫了十几秒,还是没拨出去。靠前同事来替自己澄清,比传言本身更让他觉得难堪。
第二天早晨八点半,周明远比平时早到了半个小时。他把林远叫进办公室,桌上摊着打印出来的帖子截图和几页纸,看起来是连夜找的公关方案。
“法务建议发律师函,”周明远说,“公关公司那边给了个声明模板,两点之前就可以出稿。我个人也倾向于快速反应,这种事拖久了就说不清。”
林远拉开椅子坐下,没有立刻接话。他把那几页纸拿起来看了一遍,内容写得很规范,措辞严谨,该撇清的关系都撇清了,法务和公关这是最省事的方式。
“周总,”林远把纸放下,“这个声明不能发。”
周明远抬起眼皮看他,手指在桌面上敲了两下:“说说理由。”
“声明一发,等于承认这件事值得回应。帖子是匿名的,我们回应的对象根本不存在,反而会让所有行业群里的人都知道‘星图那个从锐达来的人被指往代码里埋后门’。”林远顿了顿,“而且我如果真的发了律师函,锐达那边会怎么想?陈副总正愁没机会把事情闹大。”
“那你打算怎么处理?”
“给我两天时间。我有青云代码从头到尾的提交记录,每一次commit都有时间戳和描述。我还保留着离职前的交接文档,包括部署架构图和运维手册,沈岚签过字的。这些东西我全部整理出来,发给恒远那边做技术背书。”
周明远没说话,身子往后靠在椅背上。办公室里安静了几秒,窗外是早高峰的车流声。
“你那些记录——”周明远开口,“离职的时候带走了?”
“青云的代码提交记录在我个人的Git本地仓库里,这是常规操作,任何一个开发都会留自己的贡献记录。交接文档是公司流程,我手里有扫描件。”林远直视他的眼睛,“如果您觉得这不合规,我理解。”
周明远和他对视了几秒,然后点了点头:“你整理吧。公关这边我先按住,但如果两天之内你没有拿出东西来,法务那边还是要走。”
“明白。”
林远回到自己工位,打开笔记本开始翻文件夹。Git提交记录从两年前青云项目立项那天开始就有——他在锐达的两年半,每天的工作日志、每一次代码提交的注释、每一次和产品经理确认需求后的邮件存档,都存在本地硬盘里。去年十二月他质疑陈副总数据造假的那次季度会之后,他就养成了额外备份的习惯,没想到真的用上了。
翻到一半,手机屏幕亮了。是沈岚的微信消息,发了一条语音转文字,语气明显比平时急促:“林远,有件事我觉得还是告诉你一声。今天上午产品部例会,陈副总在会上专门说了青云的问题。他说经过初步排查,崩溃的原因可能是‘离职人员预留后门’——原话就是这么说的。没有点名,但下面所有人都看向了赵小萌。”
林远把手机扣在桌上。
胸口有一股火在烧,但他手底下的动作没有停。继续翻文件,把提交记录按时间线整理成一份PDF,每一笔改动标注了日期、作者、修改说明。他把交接文档的扫描件也找了出来,最后一页有沈岚的签字和HR的备案章。
做完这些,他拿起手机给赵小萌回了条消息:“别慌,没有人针对你。把我之前给你看的那份交接文档照片再发我一次。”
赵小萌秒回:“在找了。”
三分钟后,她把照片发了过来,附了一句:“陈副总今天还让孙莉调我过去问话,问我你走之前有没有找我要过数据库权限。”
“你怎么说的?”
“我说没有。他让孙莉记了笔录。”
林远把手机放在键盘旁边,盯着屏幕上整理好的提交记录看了很久。最后一条commit的时间是入职星图前三天,commit message写着“补充压力测试脚本,交接给赵小萌”。他截图保存下来,然后合上电脑。
中午十二点,周明远从办公室出来路过林远工位,放了一杯咖啡在他桌上:“恒远那边技术总监下午过来交流,你跟我一起接待。顺便——把你整理的东西带给他看看。”
林远端起咖啡喝了一口:“好。”
周明远走了两步又停下来,没有回头,声音不大:“我用人从来不看出身,只看你怎么做事。这两天你把该做的做了,剩下的不用管。”
林远看着他的背影消失在走廊拐角,把咖啡杯放下。他还没有完全整理完,但他知道下午自己该说什么。
恒远的技术总监会看到那些提交记录的时间线,会看到每一份交接文档的内容,会看到赵小萌的签字和沈岚的备案章。数据不会替谁说话,但也不会撒谎。
而陈副总那个“预留后门”的说法,在完整的提交日志面前,连一个支撑点都找不到。
除非——林远突然停住了翻文件的手——除非青云系统在交接之后又被谁动过。
他重新打开电脑,找到赵小萌三天前发的那张截图。崩溃日志里有一行错误代码,他之前没有仔细看。现在他把那行代码复制出来,在自己的本地仓库里搜索——没有匹配项。这段代码不是他写的。
林远把截图放大,盯着那行报错前面的函数命名规则看了一遍。命名前缀是锐达内部另一套规范,出自另一个项目组。
他给赵小萌发了今天第三条消息:“青云现在的维护人是谁?”
赵小萌过了将近十分钟才回复:“陈副总从平台组调了两个人过来接手。怎么了?”
林远没有回答。他看着屏幕上那行不属于自己的错误代码,慢慢靠在椅背上。匿名帖、内部甩锅、外部传言——这些东西串在一起,像一根线从暗处拉出来,线的另一头就在锐达内部。
有人在他走之后动了青云的代码,而陈副总在找替罪羊。
他给周明远发了一条微信:“周总,恒远的人下午几点到?我有新东西要给你看。”
消息发出去之后他又补了一句:“可能需要多要二十分钟。”
周明远回得很快:“没问题。会议室我给你留到五点。”
林远把手机放下,重新打开那份报错日志。这次他找到了更多东西——不止一处,最近七天之内青云核心模块至少有四处改动,全部来自平台组那两个人。改动的目的他还没完全看明白,但有一件事已经很清楚。
陈副总说的“预留后门”,如果指的是这些改动,那真正动过手脚的人就坐在锐达的办公室里,正拿着他的离职当挡箭牌。
林远把那些报错日志一行一行复下来,创建了一个新的文档。他没有急着往里面写结论,只是在最上面打了一行字:事件时间线——从commit记录出发。
打完这行字,他拿起那杯已经凉透的咖啡喝了一口,开始填第一行内容。
第八章 代码不会说谎
下午两点,恒远的人准时到了星图会议室。周明远带着技术负责人老郑和产品组两个骨干坐在长桌一侧,对面是恒远的三位评估代表,为首的是个四十来岁的女总监,姓方,说话干脆利落。
林远推门进去的时候,投影仪上正放着星图上一版方案的架构图。周明远朝他点点头,示意他坐到旁边。林远拉开椅子坐下,把笔记本电脑接上转接头,但没有立刻切屏幕。
方总监正在提问:“你们这个语音识别模块的响应延迟,测试环境下的数据能不能提供?”
老郑翻到对应的测试报告页面,刚要开口,林远轻声说了一句:“方总,在讨论方案之前,我这边有二十分钟的内容,可能和贵司今天的评估直接相关。”
方总监看了他一眼,又看了看周明远。周明远做了一个“请”的手势。
林远把投屏切到自己的电脑。第一页是一张表格——青云系统最近三十天内的代码提交记录,按时间排序,用红框标出了四处改动。
“这是锐达青云智能客服系统核心模块的最近提交记录,公开渠道可查。这四处改动发生在七天之内,提交账号属于锐达平台组。我本人是这个系统第一版架构的主要设计者,上个月完成了全部交接,交接文档有双方签字备案。”
方总监的表情没什么变化,但身体微微前倾了一下。
林远切到第二页,是一段错误日志截图和代码片段对照。他用激光笔圈出崩溃日志里的报错函数:“这行代码的命名规则来自锐达平台组内部规范,和我写的模块使用完全不同的前缀。这个函数在崩溃时被调用,但它是我离职之后才被加进去的。”
“你的意思是,锐达系统的崩溃和你无关。”方总监说。
“我的意思是,有据可查。”林远把第三份文件调出来,是他刚从Git仓库导出的完整提交历史,时间跨度覆盖他在锐达的全部在职周期。“这是我本地保留的仓库镜像,和锐达主仓库的提交记录一致。从第一行到最后一行,我没有任何未提交的本地代码,没有未记录的改动。交接文档里列出的每一个模块,都在这里能找到对应的提交记录。”
会议室很安静。老郑在旁边轻轻翻着林远提前打印好的纸质材料,找到了那份带备案章的交接文档复印件。
方总监看完屏幕上的内容,转向周明远:“周总,这些材料可以给我们一份吗?”
“可以。”周明远说,“林远上午整理好的,全套电子版和纸质版都在这里。”
方总监的助理立刻站起来接过材料。方总监翻了几页,合上文件夹,看向林远:“所以锐达系统崩溃这件事,你有完整证据链证明是内部改动导致的。”
“我只能证明我的交接是完整的、可追溯的。”林远说,“至于崩溃原因,锐达的技术团队应该比我更清楚。”
他没有多说一个字去指控谁。但他说完这句话的时候,心里很清楚——在座所有人都明白,那四处改动的提交时间、账号归属,已经说明了一切。
会议继续。林远把投屏切回星图方案,开始讲他准备的差异化技术路线。但他注意到方总监的助理在会议记录上写了一行字,然后把笔记本屏幕微微侧向方总监。方总监看完,嘴角动了一下,很快恢复常态。
四十分钟后,恒远的人离开。方总监和周明远握手时说了一句:“今天的材料很充分,我们会尽快给反馈。”
电梯门关上之后,老郑拍了拍林远的肩膀:“那三份东西,你什么时候整的?”
“昨晚加今天上午。”林远说。
“有你的。”老郑把材料收进公文包,“我干了十五年技术,头一回看到把交接文档留得这么全的人。”
周明远没有立刻说话,等回到办公区才叫住林远:“来我办公室一趟。”
林远进去坐下。周明远从抽屉里拿出一份打印好的文件,放在他面前。
“项目负责人任命书。”周明远说,“我本来想等比选结果出来再签,但今天你那个二十分钟,让我觉得不用等了。”
林远低头看文件。职位那一栏写着:星图智能客服产品线项目负责人,汇报对象为技术副总裁。薪资那一栏空着,旁边用铅笔写了一行小字,是周明远的笔迹——按之前谈的,再加项目分红。
“周总,我还没正式转正。”林远说。
“任命书和转正流程一起走。”周明远把签字笔推过来,“你入职那天我说过,星图不搞那些虚头巴脑的东西。你有本事,我就敢给位置。”
林远拿起笔,在签名栏写下自己的名字。笔尖在纸上划过的声音很轻,但他握笔的手比平时用了点力。
签完字,周明远把文件收回去:“对了,那个匿名帖的事,你处理的思路是对的。不公关,用事实说话。今天恒远的人看到了事实,比我们说一百句都有用。”
“锐达那边,可能不会太平。”林远说。
“那是他们的事。”周明远站起来,走到窗边,“你只管把方案做好。其他的,让该着急的人去着急。”
林远回到工位,打开手机。行业群里有几十条未读消息。他点进去,看到有人发了一张截图——是他上午准备的代码提交日志和交接文档对比图,不知道被谁传了出来。截图下面跟着十几条讨论,有人在问“这是锐达那个系统的事?”,有人说“我看了下,确实不是一码事”,还有人直接圈了锐达的一个技术总监。
紧接着又一条新消息弹出来,是另一个群的截图转发。这次是完整的二十分钟对比材料,从提交记录到崩溃日志,清清楚楚。发图的人没有配任何文字,只加了一个“转发”的标签。
林远把手机扣在桌上,没有回复,也没有转发。他打开电脑里那份还没写完的“事件时间线”文档,在最后加了一行:恒远比选材料已提交。结论栏里他打了四个字——有据可查。
赵小萌的消息在这时弹了出来:“林哥,那个帖子被删了。但截图已经传得到处都是了。陈副总下午开了一个紧急会,把平台组那两个人叫去了。”
林远回了三个字:“知道了。”
他把手机放下,打开星图的比选方案文档,翻到语音识别模块那一章。他之前在锐达没敢提的技术路线,现在可以放开手做了。屏幕上的光标在“声学模型优化方案”的标题后面闪动,他敲下第一行正文。
代码不会说谎。写代码的人,也可以选择用同样的方式回击。
第九章 比选前夜
比选前四十八小时,星图十三楼会议室的灯没熄过。
林远把测试报告投到幕布上,语音识别准确率一栏的红色数字刺眼——百分之八十七点三,比锐达青云系统上一季度的公开数据还低两个点。周明远坐在长桌末端,双手交叉盯着那个数字,没说话。
“模型训练量不够。”林远用激光笔圈出数据分布图,“咱们的语音语料库偏向北方口音,可恒远那边主要客户在长三角和珠三角。方言和口音混杂的识别率只有七成出头,这个数据拿出去比选,过不了技术关。”
负责训练的工程师小何揉着太阳穴:“林哥,公开语料库我筛了三个,能用的不到四百小时。再要上量,得买——采购流程最快两周,赶不上。”
会议室安静了几秒。有人小声提议要不要降标准,把演示样本只挑口音标准的场景。林远摇头,说客户现场随机抽人提问,降标准就是自己给自己埋雷。
散会后他站在茶水间冲咖啡,脑子里还在过语料库的事。锐达当年做青云系统时,前期也卡在同样的问题上。他记得很清楚,因为那会儿他刚带赵小萌,小姑娘被安排去整理行业公开语音数据集,每天下班后还在翻语音学会的公开论文和开源社区。
他放下杯子,翻出手机里赵小萌的号码。上一条消息还是两周前,她问他恒远比选有没有把握,他回了“尽力”。现在他拨过去,响了三声就接了。
“林哥?”
“小萌,问你个事。”林远尽量让语气听起来随意,“你在锐达整理过一份行业公开语音语料库的索引,还记得吗?就是去年三季度,你把开源社区那些数据集的标注格式、语种分布和授权协议做了个汇总表。”
电话那头顿了一下。“记得。那份表后来被陈副总要去说是‘统一管理’,但原始版本我存在自己硬盘里了。”
“我需要确认几个公开数据集的授权范围。锐达那边,没有人找你麻烦吧?”
赵小萌沉默了几秒。“林哥,那个匿名帖的事之后,陈副总让人查过我经手的所有文档。我暂时没事,但沈总监找我谈过一次话,意思是……让我跟你保持距离。”
林远握着手机的手紧了紧。他应该想到这一层,陈副总连赵小萌这种刚转正的新人都不会放过。他正要开口说算了,赵小萌的声音先传过来:“你告诉我需要查哪几个,我晚上回去找。公开数据集授权是公开信息,不涉及锐达内部资料。”
“小萌——”
“林哥,你带我那半年,做的都是真东西。陈副总让我改PPT数据那次,是你挡在前面说不改的。”她的声音低了些,“我知道什么该做什么不该做。你把清单发我。”
电话挂断后林远在茶水间站了一会儿。落地窗外是滨江新区的夜景,星图的大楼和对岸锐达的灯牌隔江相望。他把需要的六项数据授权类型整理成清单发给赵小萌,最后附了一句:有任何压力随时说,这事到此为止也可以。
赵小萌回了一个“OK”的表情,接着补了一条:“别小看人。”
晚上九点四十,赵小萌发来一个加密压缩包,密码是林远带她时用的工位分机号。打开后是完整的授权协议截图和几个开源社区的数据使用条款高亮标注。她还额外附了一份语音学会去年发布的方言语音采集规范,里面提到的采集伦理标准正好能用在恒远项目上。
林远把材料转给法务同事老韩确认。老韩回复很快:授权没问题,建议在方案里附一个数据合规声明,反而是加分项。
有了合规的数据源,小何连夜重新跑训练流程。林远守在会议室,和白板上画的模型架构图干瞪眼。凌晨两点,第一轮评估结果出来,识别率爬到百分之九十二点一。
“还不够。”林远盯着屏幕,“恒远客户的技术负责人是语音方向出身,百分之九十二骗不过他。”
小何趴在桌上闷声说:“林哥,再加数据量得通宵。”
“那就通宵。”
凌晨四点十七分,第二轮结果跳出来:百分之九十五点六。会议室里几个人同时呼了口气,小何直接趴在键盘上睡着了。林远把椅子往后推,揉了揉干涩的眼睛。这个数字比锐达青云系统上一季度公开的最好成绩高了三个百分点,而且是在方言混杂的测试集上跑出来的。
天蒙蒙亮的时候林远把测试报告整理成十页的文档,发给了周明远。他犹豫了一下,在附件末尾加了一句说明:语音语料库部分数据源经赵小萌确认了公开授权范围,具体清单在附录第三页。他不想隐瞒任何路径,这是他在锐达学到的教训——陈副总当年在会上把数据来路说得含糊,最后出问题背锅的是底下的人。
七点四十分,周明远的回复来了,只有两行字:“报告我看了。数据来源合法就没问题,你处理得对。上午十点全员过一遍方案。”
林远靠在椅背上,窗外的天已经大亮。手机屏幕亮起来,是赵小萌的消息:“林哥,恒远那边今天有锐达的人在做最后调试。我听以前同事说的,他们也在连夜改方案。”
他回了一个“收到”,然后把手机翻过去扣在桌上。比选前最后一天,该做的都做了。剩下的,到现场再说。
他站起来走到白板前,把语音识别模块的标题圈起来,在旁边写了一行小字:用对地方。然后转身叫醒小何,让他去洗把脸准备上午的过会。会议室里陆续有人进来,带着早饭的味道和熬夜后特有的安静。
林远打开投影仪,第一页PPT上写着方案标题——“智能客服语音交互系统升级方案”。他把激光笔握在手里,等着人齐。
还有不到二十四小时。
上午十点的过会,会议室坐得满满当当。周明远坐在长桌正中间,两侧是产品和交付的负责人。林远把十页文档投在幕布上,一页页过。讲到数据合规声明时,周明远抬手打断了一次:“附录第三页那个语料库清单,赵小萌签过字吗?”
“签了,邮件确认的,我截图放在最后一页。”林远翻到附录。
周明远点头,没再追问。产品负责人提了三个界面交互的细节问题,交付团队问了两处接口兼容性,林远一一答了,小何在旁边补充技术参数。四十分钟过完,周明远合上笔记本:“方案定了,下午把演示环境最后跑一遍,明天上午九点恒远会议室。”
散会后,林远留在会议室收拾东西。周明远经过他身边,停了一下:“赵小萌肯帮你确认数据源,不容易。她在锐达的时候,陈副总压着她做的那套东西,她心里有数。”
林远愣了一下:“您认识她?”
“行业就这么大。”周明远拍了拍桌角,“她给你的是公开语料库清单,这步走对了。比选现场如果对方问数据,你直接报清单编号。”
林远点头。周明远走后,他站在空会议室里,看着白板上那行“用对地方”,忽然想起刚进锐达时赵小萌给他讲过的一句话:数据来路干净,模型才立得住。三年了,他才真正学会。
下午的演示环境跑了两轮,没有卡顿。小何把演示脚本念了三遍,语速从紧张到平稳,最后一遍连林远都挑不出毛病。下班前,林远给团队点了外卖,算是战前动员。几个人围着会议桌吃盒饭,没人聊明天的比选,都在说周末去哪补觉。
晚上八点,林远最后一个离开公司。走到楼下回头看了一眼,星图的灯还亮着几盏。他拿出手机,给赵小萌发了一条消息:“今天周总提了你,说你在锐达整理的语料库清单是行业里少有的干净数据。”
赵小萌回得很快:“那套东西我整理了大半年,陈副总当时根本不重视。你能用上就好。”
“明天比选。”
“我知道。锐达那边今晚也在加班,我以前的同事刚发朋友圈了。”
林远看完消息,把手机揣进口袋。夜风有点凉,他拉上外套拉链,往地铁站走。明天九点,恒远会议室,一切见分晓。
第十章 客户现场
恒远大厦的会议室在二十三层,落地窗外是灰蒙蒙的江面。林远八点四十分到的时候,小何已经在调试设备了,见他进来,比了个OK的手势。
“昨晚又跑了一遍压力测试,一万两千并发,响应时间稳在八十毫秒以内。”小何压低声音,“锐达那边的人刚进隔壁准备间,我瞄了一眼,沈总带队,还有他们产品部两个面熟的。”
林远点头,把U盘插进演示机,最后过了一遍开场页。九点整,恒远方的采购负责人推门进来,后面跟着技术总监和两位业务代表,面色严肃,手里都拿着评分表。三分钟后,锐达团队从另一侧门进入,沈岚走在最前面,藏青色西装,头发扎得一丝不苟。她目光扫过星图这一侧,落在林远身上,停了不到半秒,随即移开。
“两家都到齐了,按抽签顺序,锐达先演示。”恒远采购负责人抬手示意。
沈岚打开投影,锐达的青云系统界面亮起来。她讲得稳,从架构到功能模块,逻辑清晰。林远坐在星图团队区域,看着屏幕上那些自己亲手写过的交互逻辑,心里出奇地平静。
演示到第十二分钟,意外出现了。沈岚点击“智能会话切换”节点时,界面卡住了,鼠标转圈,整整七秒没有响应。恒远技术总监皱起眉头,在评分表上记了一笔。沈岚神色不变,说“可能是网络波动”,跳过这段继续往下讲,但后面两个功能连带的演示节奏明显乱了。林远知道原因——青云的会话模块在特定参数下会触发线程阻塞,他在锐达的最后一个月写过修复方案,提交两周后被陈副总以“优先级不够”退回。
沈岚演示结束,掌声礼节性响起。恒远业务代表提了两个问题,沈岚答得中规中矩。林远注意到她说话时右手微微攥了一下讲台边缘,那是她紧张时才会有的小动作。
“星图智能,请开始。”
林远站起来,小何把演示环境切到主屏。他没有寒暄,直接进入核心场景:“我们今天演示的是一套面向高频并发场景的智能客服系统,重点解决三个问题——响应延迟、多轮会话保持、方言语音识别。”
他点开第一个模块,实时对话流在屏幕上滚动,每一条响应都压在六十毫秒以内。恒远技术总监把评分表往前推了推,开始认真记录。第二个模块演示多轮会话,林远故意制造了三次话题跳转和两次意图混淆,系统全部正确接续。第三个模块是方言识别,他让业务代表随机说了一句本地话,识别准确率百分之九十四。
演示用时十七分钟,没有卡顿,没有转圈。
“下面是问答环节。”恒远采购负责人说。
锐达那边一位产品经理率先举手,林远认得他,之前在锐达产品部做青云的竞品分析。“林远,你刚才展示的会话保持逻辑,和青云系统v2.3版本的架构非常接近,请问你怎么解释这个相似性?”
会议室安静了一瞬。小何脸色变了,手往桌下伸,想拉林远。林远没有看小何,也没有回避那个人的目光。
“技术没有原罪。”他说,“我展示的这套逻辑,核心改进在三个地方——动态线程池分配、基于意图预判的缓存预热、方言声学模型的迁移学习框架。前两项是我在锐达工作时就提出过的优化方向,当时的可行性报告被压了两个月。第三项是星图团队独立开发的,训练数据全部来自公开语料库,清单我可以现场提供。”
他点开附录,语料库清单表投在屏幕上,每一行都标注了来源和授权编号。
“剩下的,”林远顿了一下,“请恒远的技术团队自行比对代码提交时间戳和专利归属。青云的架构我参与了,但今天我用的每一行核心代码,都是在星图写的。”
恒远技术总监翻着评分表,和旁边的业务代表低声交换了几句。锐达那位产品经理还想追问,被沈岚抬手拦住了。
沈岚开口了,声音比刚才演示时低了些:“林远在锐达期间对青云系统的贡献,我们内部有记录。今天比选的重点是方案匹配度,不是技术出身。”
她说这话时没有看林远,看着恒远采购负责人。
恒远方的技术总监合上评分表,和采购负责人点了下头。采购负责人站起来:“感谢两家团队的演示。比选结果我们会在今天下班前通知。星图的方案在性能指标上确实更符合我们下一阶段的业务需求,但最终决策要走完内部流程。”
话虽如此,林远注意到技术总监收评分表时,在星图那一栏末尾画了个圈。
散场后,恒远的人先离开。小何开始收设备,林远把U盘拔下来,转身时正好和沈岚迎面。锐达团队的人已经走到门口,沈岚落在最后,手里还拿着青云的演示材料。
她停了一步。
“青云的线程阻塞,你之前写过修复方案。”她说,语气很平。
“嗯。”
“我当时没批。”
“我知道。”
沈岚看着他,眼神里没有责怪,也没有不服,只是一种很深的疲惫,像是扛了太久重物的人终于卸下来。“你那套方言迁移学习的框架,”她说,“数据标注标准是自己定的?”
“周总给了资源,我定的标准。”
“挺好的。”她点了下头,把演示材料收进包里,转身往门口走。走到门边时又停了一下,没回头:“周末之前锐达会出内部竞业审查结果,你不用担心,交接文档我签过字,写的很干净。”
然后她推门出去了。
小何在旁边轻轻吐了口气:“她居然帮你说话。”
“她只是在说事实。”林远把电脑合上,“走吧,回去等结果。”
两人走出恒远大厦时,外面下起了小雨。小何去开车,林远站在门檐下等。手机震了一下,周明远发来消息:“结果怎么样?”
“演示零故障,问答环节对方拿青云说事,我正面回应了。”
“沈岚什么反应?”
林远想了想,打字:“她说青云的线程阻塞修复方案她没批。”
周明远秒回:“她说了这句,说明锐达那边有人要动陈副总了。等着吧。”
林远收好手机,雨幕里小何的车从地下车库绕出来,停在路边。他拉开车门坐进去,后视镜里恒远大厦的轮廓渐渐模糊。小何边打方向盘边问:“林哥,你觉得能成吗?”
“技术上的事我们做完了。”林远靠在座椅上,闭上眼睛,“剩下的就不是我们能决定的了。”
小何从后视镜里看了他一眼,没再说话,把雨刷调快了一档。
第十一章 风暴回到锐达
比选结果在第二天下午出来。周明远把邮件截图发到项目群时,林远正在机房调语音模型的响应阈值。小何先看到的,从工位上站起来喊了一声:“成了!”
群里的消息一条接一条往外冒。周明远只发了一句话:“合同已签,项目组本周内出交付排期。林远牵头。”
林远看完消息,把手机屏幕扣在桌上,继续把刚才那组参数跑完。小何凑过来问他怎么不激动,他说跑完再激动,不然刚才那半小时白调了。小何愣了一下,随即笑出声,转身去茶水间拎了几罐饮料回来,说林哥这定力是练过的。
当天晚上,星图内部聚餐。周明远来了不到半小时,接了个电话就提前走了,临走前拍了拍林远肩膀,说好好干,这个客户只是开始。剩下的人放开了喝,林远被灌了几杯,回家倒头就睡。他不知道自己睡着的时候,锐达那边已经炸了锅。
赵小萌的消息是第二天早上七点多发来的。
“林哥,你醒了吗?锐达出大事了。”
林远刚洗漱完,看到这条消息的时候还没完全清醒。他回了个问号。赵小萌直接打了语音过来,声音压得很低,像是躲在什么地方说话。
“昨天下午恒远的比选结果传到公司,郑总——就是大老板——当天晚上把陈副总叫去办公室关了两个小时的门。今天早上孙莉一来就被叫进去了,到现在没出来。”
“你怎么知道这些?”
“我昨晚走的时候东西忘在工位上,今早来得早,本来想拿了就走,结果进不了部门。行政说产品部今天上午封闭自查,所有人九点半以后才能进。”赵小萌顿了一下,“我还看到审计的人来了,两个,拎着电脑包上楼的。”
林远把毛巾搭在椅背上,坐了下来。“沈岚呢?”
“沈总还没见到,但听说她昨天散会后一个人留到很晚,走的时候手里抱了一摞打印材料。”赵小萌的声音有点犹豫,“林哥,有人说是你把比选的内部信息给了星图,陈副总在楼里跟人说……”
“说什么?”
“说青云系统的客户数据是你泄露的,所以星图演示的时候才会针对性那么强。”
林远沉默了几秒。他早料到陈副总会走这步棋,只是没想到连包装都懒得换。“小萌,你不用替我做什么,也别在部门里跟人争。”
“我没争,但我不信。”赵小萌的声音突然硬了一点,“你走之前交接文档是我帮你整理归档的,每一份都有时间戳,源代码你碰都没碰过。我信你。”
挂了电话,林远坐在床边把整件事过了一遍。他手上没有锐达任何核心数据,离职时交接清单签了字、盖了章,沈岚也确认过。如果陈副总真想往他身上泼脏水,只能从“影响客户决策”这个方向做文章——但恒远那边全程有评分记录,技术评估占七成权重,星图的方案在响应延迟和意图识别准确率上都是硬指标领先,一查一个清楚。
他给周明远发了条消息,简单说了情况。周明远回得很快:“你什么都不用做。锐达内部的事他们自己会查,我们这边的合同和流程都经得起看。另外——沈岚今天上午给我打了个电话。”
林远愣了一下。
“她没说什么实质内容,只问恒远项目的技术评分表能不能发一份给锐达的审计做比对。我说可以,走正式函件。”周明远补了一句,“她不是在帮陈副总灭火,她是在帮锐达止损。你不用担心。”
锐达内部的调查持续了整整一周。消息从各种渠道断断续续传到林远这里:孙莉交出了近两年的转正审批记录,其中林远那一份被单独标注了三次延迟审批的时间节点,审批人都是陈副总。同期还有另外四个员工的转正申请存在类似情况,最长的一个压了将近五十天。审计还抽查了青云项目立项以来的周报数据,发现陈副总签批的多份报告存在关键指标与实际测试结果不符的情况,其中一份甚至直接把压力测试通过率从六成改成了九成五,日期正好是林远离职前两周。
赵小萌每天都会发几条语音过来,有时候是文字,有时候是截图——她不敢转发文件,只口头描述。林远听着这些信息时,没有报复的快感,只是想起自己坐在那个工位上等转正通知的那些天。每次路过陈副总办公室,门都关着。他当时以为是忙,现在才知道,门后面的东西跟他想的不一样。
第五天,赵小萌告诉他沈岚被叫去谈话了。不是约谈,是郑总单独把她叫到顶楼会议室,谈了一个下午。
“出来的时候沈总眼睛有点红。”赵小萌说,“但她回部门就把大家叫到一起做了个复盘,把恒远比选的评审意见逐条读了,一句没提你的事。最后只说了一句话。”
“什么?”
“她说,‘林远当初提的那个方案,我如果当时敢往上递,也许今天丢单的就不是我们。’会议室里没人说话。”
林远握着手机,站在星图办公室的窗前。外面是午后的光,楼下马路上车流不断。他想起恒远比选那天沈岚离开时的背影,想起她在门口停住的那一步。
“后来呢?”他问。
“后来陈副总就没来上班了。今天上午行政去他办公室收拾东西,门开着,我路过看了一眼,桌上那盆绿萝都蔫了。”赵小萌的声音里没有幸灾乐祸,反而有种说不清的复杂,“林哥,你知道吗,我今天打开青云的代码库看了一圈,你写的线程调度和方言降噪那两个模块还在跑。新来的人接手了,但注释没删,上面还留着你的工号和修改日期。”
“那是团队的成果,不归谁个人。”林远说。
赵小萌那边安静了一会儿,然后说:“沈总代理副总了。今早发的内部邮件,郑总签的。”
林远嗯了一声。他想了想,又补了一句:“小萌,不管锐达怎么变,你自己的事要想清楚。那边还有值得你学的东西就留着,没有就早点做打算。”
“我知道。”赵小萌说,“对了——沈总在部门会上最后说了句,她说林远的转正是我没保住,责任在我。以后部门所有人的转正审批流程我做第一责任人,超时我直接找HR总监。”
林远没接话。电话两头都安静了几秒。赵小萌最后说:“林哥,我就是想让你知道,你走之后,有些事变了。”
挂了电话,林远把手机放在桌上,屏幕还亮着。他打开电脑,翻到星图新项目的排期表,把下午要跟团队同步的几个节点重新标了一遍。窗外阳光斜着照进来,落在键盘上。
小何从旁边工位探头过来:“林哥,恒远那边对接人刚发消息,说他们CTO下周想来看看语音模块的现场演示方案。”
“行,把时间定下来,我列个清单,你帮我催一下训练集标注进度。”
小何应了一声,缩回去了。林远点开周明远发来的新项目框架文档,在空白处打了行备注:青云的教训是测试流程不能妥协,锐达的教训是人的事不能拖。
他盯着这行字看了几秒,然后删掉了后半句,只留下前半句。
第十二章 沈岚的电话
电话是第二天下午打来的。
林远刚开完星图新项目的内部评审会,手机震了一下,屏幕上显示“沈岚”。他看了两秒才接起来。
“林远,方便说话吗?”沈岚的声音比在锐达时轻了一些,像是怕被人听见。
“方便,你说。”
“我想约你吃个饭,就这两天,你定地方。”顿了一下,她又补了句,“不是公事,是我个人想跟你聊聊。”
林远没马上答应。他走到茶水间,接了杯水。“沈总,如果是青云项目的事,我们在比选现场已经说清楚了。”
“不是项目的事。”沈岚说,“是我欠你一个道歉。”
电话里安静了几秒。林远靠着吧台,看着窗外楼下的快递车在卸货。“那行,明天晚上七点,星光天地三楼有家淮扬菜,人少。”
“好,我订位。”沈岚挂了电话。
第二天傍晚林远到得早,坐在靠窗的位置翻菜单。餐厅里人不多,背景音乐压得很低。他点了一壶龙井,刚倒上第一杯,就看见沈岚从扶梯口走过来。她今天没穿锐达那套深色通勤装,一件米色针织衫,头发也没盘,散在肩上。走近了林远才注意到她眼下有淡淡的一圈青。
“来了。”他站起来,礼节性地点了下头。
沈岚坐下,把包放在旁边的椅子上,看了一眼菜单。“你点吧,我不挑。”
林远叫来服务员点了几个菜,等服务员走了,两个人之间突然不知道该从哪里开口。最后还是沈岚先说话。
“恒远那单丢了之后,公司内部炸了一轮。”她端着茶杯,没喝,只是转着,“郑总让财务和审计一起查了青云项目从立项到比选的全部流程。陈副总过去两年经手的七个项目,有四个数据报表对不上。压力测试造假那次你当众说的没错,但当时我没敢站你那边。”
林远夹了颗花生米,慢慢嚼着。
“我那时候刚升总监不到半年,位置还没坐稳。陈副总分管产品和人事,他一句话能让我走人。”沈岚终于喝了口茶,放下杯子的时候,杯底在碟子上磕出清脆一声,“你转正的事,他第一次打回来跟我说的是再观察观察,第二次打回来我其实就知道他在卡你。但我没跟你说实话,我跟你说是流程问题。”
“我知道。”林远说。
沈岚愣了一下。
“我早就猜到了。”林远把筷子放下,“你在季度会上看了我一眼,那个眼神我读得懂。你怕我闹,我也确实没闹,因为闹没用。所以我直接找了HR要审批流截图,孙莉给我的记录上,陈副总的意见栏每次都只写‘待复核’,不写通过也不写不通过。一个月,三次。”
沈岚低下头,手指在茶杯边缘来回转了一圈。“我来就是想跟你说这个对不起。我那时候选择保自己。”
“沈总,我能理解。”林远的声音很平,“换我是你,刚升上去,手下有个刺头得罪了直接上级,我可能也会先保自己。但我不后悔走。”
“你当然不用后悔。”沈岚苦笑了一下,“星图给你的条件我后来听说了,比我这边能给的都好。周明远这个人我打过交道,技术出身,说话直,不搞虚的,你跟他比跟陈副总强多了。”
“周总确实给我很大空间。入职一周转正,第二周就让我进核心项目组。”林远没有往下说青云竞品的事,这是职业底线。
沈岚也没问。她夹了一筷子菜,似乎在想措辞,过了一会儿才说:“锐达正在重组产品线。智能客服那块陈副总原来管的方向被拆出来单独成立事业部,郑总让我代理副总先兼着管。我现在手里缺一个能从头搭产品架构的人。”
林远抬起头,对上她的目光。
“我知道这话说出来有点可笑。一个月前你转正都批不下来,现在我跑来问你愿不愿意回来。”沈岚自嘲地扯了下嘴角,“但我说的是真的。你回来,产品总监的位置,团队你自己搭,薪资我跟郑总申请,不会比星图低。”
林远摇了摇头。“沈总,谢谢你看得起我。但我在星图刚站稳。新项目刚立项,团队还没搭完,我这时候走,对周总、对跟我一起干活的同事都没法交代。”
“我猜到了。”沈岚没有纠缠,端起杯子喝了一口,“如果是三个月前你跟我说这话,我可能还会觉得你矫情。现在我能理解。有些东西比钱重要,比如被人当人看。”
她说这话的时候语气不算轻松,倒像是真的想明白了什么。林远没接话,低头吃了几口菜。过了一会儿他问:“小萌怎么样?”
沈岚的表情松动了一些。“赵小萌?她最近进步很快。青云项目收尾之后我让她独立负责了一个小模块的接口设计,做得很细。下个月我准备提她做产品主管。”
“她扛得住。”
“我知道,你带出来的人。”沈岚说,“她有一次开会跟新来的产品经理争方案,把对方说得哑口无言。散会之后我跟她说,你越来越像林远了。她说不是,林远教她的是先把数据跑三遍再开口。”
林远笑了一下。“她本来底子就好,实习那会儿让她整理用户反馈,别人交表她交分析报告,还标了数据来源和置信区间。”
沈岚也笑了,是这顿饭里第一次真正放松的笑。“她上个月还问我,林哥在新公司还好吗。我说应该挺好。她还说想给你发消息又怕打扰你。”
“让她发,我不忙。”
饭吃到后半程,两个人聊的基本都是行业里的人和事,谁跳槽了,哪家产品又被客户投诉了,某大厂新出的开源模型效果怎么样。沈岚没再提回锐达的事,林远也没问陈副总最后到底是怎么处理的。有些事知道了就行,没必要追问细节。
结账的时候沈岚抢着扫了码。“说好我请的。”她站起来拿包,动作比刚来的时候利落了不少。
两人一起下扶梯。到一楼大厅,沈岚停住脚步,转过身来看着林远。
“林远,如果有一天你在星图想换个环境,或者想自己做点东西,随时联系我。这次我说的是认真的。”
“好。”林远点了下头。
沈岚没再多说,往停车场方向走了几步,忽然又回头。“对了,赵小萌的转正审批,我签的第一责任人。流程上没再卡过任何人。”
“那挺好。”林远说。
他站在商场门口看着她走远,夜风从侧面吹过来,带着街边烧烤摊的烟火气。他掏出手机,翻到赵小萌的对话框,打了三个字:加油干。发完把手机揣回兜里,朝地铁站走去。
回到公寓已经快十点。林远换了鞋,打开电脑,屏幕上还留着下午评审会的那份文档。他在底部批注栏里又敲了一行字:智能客服新平台的语音唤醒模块,下周必须出demo。然后合上电脑,去厨房烧水。
等水开的时候他站在窗前,楼下的路灯把行道树的影子拉得很长。手机亮了一下,赵小萌回消息:林哥你终于回我了!我转正批了,沈总签的。还有个事,星图那边是不是在招人?我想试试。
林远看着这条消息,水壶刚好响了。他倒完水,回了一个字:来。
第十三章 星图的新任务
周明远把一沓文件放在林远桌上的时候,办公室里正吵得厉害。隔壁工位两个后端工程师为接口方案争得面红耳赤,林远刚想站起来把会议室门关上,周明远抬手拦住了。
“让他们吵,吵完能出东西就行。”周明远拖了把椅子坐下来,把那沓文件往林远面前推了推。“你先看,看完我们再聊。”
林远翻开第一页,是一份项目立项书。标题写着“星图智能客服平台2.0——自主技术栈重建方案”。他的目光停在“完全脱离青云架构”几个字上,又翻到第二页,看到一行预算数字,心里粗略一算,是他进星图以来接触过的最大项目。
“你这是……”林远抬起头。
“我要你牵头。”周明远靠在椅背上,手臂交叉在胸前,语气跟平时布置周任务没两样,“产品架构、团队组建、技术选型,全部你来定。只有一个条件——别碰青云那套东西,一行代码都别用。”
林远下意识想说“青云架构我熟,复用能省三个月”,但话到嘴边又咽了回去。周明远看他的眼神很直接,没有试探的意思。
“想明白了?”周明远问。
“想明白了。”林远合上立项书,“你是想让我彻底把旧东西扔掉,重新搭一套。”
“对。”周明远站起来,走到白板前拿起马克笔,画了一个大圈。“青云是锐达在四年前立项的产品,我承认做得好,我也见过他们上个月的客户演示。但那个架构有个根本问题——”他在圈里点了一下,“它的意图识别层是单线程串行处理,并发一上去就掉链子。锐达那帮人不是不知道,是没人敢动。你要是在青云上面修修补补,最多比他们快半步。但你要是从零搭一套多线程异步架构——”
他把笔一放,转身看着林远。“差距就是一代。”
林远没说话,盯着白板上那个大圈。青云的核心逻辑代码有一大半是他写的,那段串行处理模块他改过三次,每次都被陈副总以“稳定优先”打回来。周明远说得没错,他从第一天就看出那个瓶颈在哪,但从没有机会动它。
“团队呢?”林远问。
“你自己招。编制十五个人以内,前端后端算法测试你说了算。预算在这里面卡着,你省的每一分都能用到奖金池里。”周明远拍了拍立项书,“下周给我第一版排期,这周五之前告诉我你第一个想招谁。”
周明远走后,林远把立项书从头到尾看了两遍。第三遍的时候他拿笔在空白处列了几个名字,又一一划掉。星图现有的工程师他接触过几个,基础都不错,但要做多线程异步架构,需要一个对底层通信有足够敏感度的人。他最后在纸上写了一个名字:赵小萌。
写完之后他自己愣了一下。赵小萌是产品岗,做数据分析出身,跟底层通信八竿子打不着。但他想起去年在锐达,青云系统第一次压力测试失败,所有人都说是服务器问题,赵小萌翻了两天日志,在几百兆的日志文件里找出一个缓冲区溢出的报错,截了图发在工作群里,配文“这个时间戳对不上,是不是接包逻辑有问题”。当时沈岚看完截图沉默了很久,最后说了一句“重新排查接收模块”。
那件事之后林远开始有意让赵小萌参与一些技术评审。她不懂写代码,但她懂怎么找问题。
林远拿起手机,翻到昨晚赵小萌发的那条消息。他昨晚回了一个“来”字就没再看,现在往上翻,发现赵小萌后来又连发了三条:锐达这边沈总找我谈过,说想让我接手青云的用户增长模块;林哥你觉得星图这边做什么方向;我其实有点犹豫,沈总对我挺好的。
最后一条是凌晨一点发的:不过想想还是想做真东西。
林远盯着“真东西”三个字看了几秒,退出对话,给周明远发了条消息:第一个想招的人,产品部,锐达过来的,叫赵小萌,做数据分析很强,能不能破格给技术岗编制。
周明远回得很快:你定。后面跟了一句:你选人的标准我信。
周五的排期会上,林远把架构方案大致过了一遍。参会的七八个人里有两个是星图原来的核心工程师,一个叫方俊,做后端六年,另一个叫李蔓,做前端五年。林远讲到多线程异步处理的思路时,方俊举手打断了他。
“林哥,这个方案跟青云最大的区别是不是在消息队列的串行改并行?”
“不止。”林远切到架构图下一页,“青云的并行只在网关层做了,再往下还是串行。我的想法是把并行下沉到意图识别和实体抽取两层,每一层用独立线程池,中间通过内存队列做数据交换。”
方俊皱了皱眉。“那数据一致性问题怎么解决?并行处理必然有状态同步的开销,极端情况下会不会比串行还慢?”
这个问题正中要害。林远点点头,没有回避。“会有这个风险。所以我打算在状态管理上做一个轻量级的版本号机制,每个处理单元只关心自己负责的数据切片,不做全量同步。具体方案我下周会出一版详细设计,到时候你帮我一起推敲。”
方俊没再说什么,低头在笔记本上记了几笔。李蔓接着问了前端交互层的问题,林远一一回答。整个会开了将近两个小时,散会的时候方俊主动留了下来。
“林哥,你这个方案比青云那套激进。”方俊压低了声音,“我有个同学在锐达做测试,他说上个月青云客户现场演示出了卡顿,沈岚回去之后部门被削了一笔预算。你现在做这个,等于直接打他们的痛点。”
林远收拾电脑的手没停。“我是做产品的,痛点就是机会。你那个同学如果对新技术栈感兴趣,可以让他关注我们后面的开源模块。”
方俊愣了一下,随即笑了。“行,我去跟他说。”
林远回到家已经快十一点。他泡了碗面,等面软的时候打开邮箱,看到赵小萌发来的一份文档。标题是“星图智能客服现有用户反馈分析”,附言写着:林哥,这是我用业余时间整理的,数据来源都是公开渠道,你看有没有用。
林远点开文档,看到赵小萌把星图现有客服产品的用户反馈分成了六类,其中“语音识别不准”被单独标红,占比最高,并且附了她自己做的聚类分析:用户抱怨主要集中在方言口音和背景噪音两个场景。文档最后一页,她列了三个可能的技术方向,都不是现成方案,而是需要验证的假设。
面泡好了,林远没急着吃。他回复赵小萌:文档很有用。下周我出排期,语音模块想让你先做竞品数据摸查,你把锐达青云和市面上三家主流产品的识别准确率分场景跑一遍,用同一套测试集。
消息发出去不到一分钟,赵小萌回了一个字:好。
林远放下手机,把面吃了。吃完洗了碗,又重新打开电脑,在架构图的用户输入层和意图识别层之间加了一个预处理模块。他盯着那个模块想了很久,最后在命名栏敲下三个字:新芽层。
这是整个新平台里第一个由他自主命名的组件,跟青云没有任何关系。他在注释栏里写了一行:处理原始输入的结构化清洗,为并行处理提供标准数据格式。
保存完文件,林远把电脑合上。窗外的路灯还亮着,他站在窗前喝了口水,心里很清楚这个项目意味着什么——周明远给了他机会,也给了他压力。十五个人的编制,半年出demo,一年上线跟青云正面竞争。他不是没做过大项目,但这一次,从头到尾,每一行架构代码都要他自己扛。
手机在桌上震了一下,是赵小萌发来的最后一条消息:林哥,我跟沈总提离职了。她问我去哪,我说星图。她沉默了很久,然后说“挺好的,替我跟林远问好”。
林远看着这条消息,把手机放在床头,躺下之前想了一件事:沈岚说“挺好的”,到底是客气还是真的觉得挺好。他闭上眼睛之前得出一个结论——不管是哪种,都已经跟他没关系了。明天还有一堆架构文档要写,新芽层的第一版详细设计还没动笔。
他翻了个身,很快睡着了。
第十四章 团队成型
林远把招聘网站上的简历翻到最后一页,关掉了浏览器。
三周时间,他面了十一个人,产品岗、数据岗、后端岗都有,履历漂亮的不少,但聊完之后没有一个让他产生“就是这个人”的直觉。有的对智能客服的理解还停留在转写准确率,有的张口就是中台、闭环、赋能,问具体怎么处理多轮对话里的意图漂移,支支吾吾答不到点上。还有一个技术背景不错,面到一半接了个电话,回来之后明显心不在焉,林远问了一句是不是有急事,对方犹豫了几秒说,其实手上还有两个offer在考虑。
林远没再往下问。面试本来就是个双向选择,他理解。但时间不等人,周明远给他的十五人编制目前只到位六个,新芽层的详细设计已经写了三版,越往下走越缺人。
周五下午,他刚结束一场不太理想的终面,手机响了。
“林哥,方便说话吗?”赵小萌的声音从听筒里传来,背景里隐约有键盘敲击声,像是还在工位上。
“你说。”
电话那头沉默了两秒,然后赵小萌说:“我想离职,去星图。你那边还要人吗?”
林远把椅子往后推了推,站起来走到窗边。锐达那边他最近刻意没怎么打听,但行业不大,消息总会传过来。上个月星图拿下客户那单之后,锐达产品部走了三个人,沈岚暂时接管了空出来的线,赵小萌的工作量翻了一倍。
“沈岚知道你想走?”
“我跟她提了。”赵小萌的语气比平时快,像是怕自己反悔,“她说再给我加一个季度的绩效,年终奖系数往上调零点二。但我跟她说我想做真东西,不是天天改PPT。她就没再说什么。”
林远听到这句,手指在窗台上轻轻敲了两下。赵小萌在锐达干了一年多,转正之后一直跟着沈岚做项目管理和汇报材料,技术上没怎么碰核心。他知道沈岚看重她,赵小萌那份语音语料聚类分析间接帮了星图大忙,只是明面上谁都没提过。如果这时候把赵小萌招进来,沈岚会怎么想,他不需要猜也能知道。
“锐达那边,沈总有没有难为你?”
“没有,她就说让我想清楚,别冲动。”赵小萌顿了一下,“林哥,我想清楚了。”
林远看着窗外楼下车流,黄昏的光打在路面上,车灯连成一条断断续续的线。他想起自己递交辞职信那天,沈岚也说过类似的话——想清楚。当时他的答案是已经签了星图,没有退路,也不想要退路。现在轮到赵小萌了,她比他还年轻两岁,做的决定却比他当初更干脆。
“简历发我一份,我走内部推荐流程。”林远说,“但我要提醒你,星图这边节奏比锐达快,我给你的活不会轻松。”
“好。”
“还有一点,”林远想了想,决定把话说明白,“你从锐达来,青云项目的架构你不了解核心层,这一点对你是保护也是限制。我会按新人标准给你定岗,技术等级和薪资评估不会因为你认识我而放水。周总那边我报备之后,HR会正常走流程,面试该几轮就几轮。”
电话那头安静了几秒,然后赵小萌笑了一声:“林哥,你要真给我放水我才不敢来。行,我今晚把简历更新好发你。”
挂了电话,林远在窗边又站了一会儿。他拿起手机给周明远发了条消息:之前那个做竞品数据分析的候选人,锐达那边要离职,我打算走正常流程推她进来。
周明远的回复来得很快:你说的是那个小姑娘?上次你提过她整理的用户反馈文档。你评估就行,我只看结果。
第二天下午,赵小萌的简历进了星图的招聘系统。两轮技术面加一轮HR面,用了三天走完。面试官反馈评价一致:基础扎实,学习意愿强,项目经验偏浅但分析逻辑清晰。技术等级定在P2,和她在锐达的职级一样,但薪资比锐达高了百分之十五。HR发offer的时候,赵小萌给林远发了条消息:面试官问我为什么离职,我说想做从零到一的事情。他没追问。
林远回了一个字:好。
入职那天是周一。赵小萌背着双肩包到工位,林远带她走了一圈,介绍了团队里现有的几个人。后端组的老周是周明远从竞对挖来的,架构经验丰富,但性格有点闷,冲赵小萌点了下头就算打过招呼。数据组的小陶比赵小萌还小一岁,两人很快聊到一起去了。
下午,林远把所有人叫进会议室。投影上放了新平台的架构框架图,他在白板上画了几个红框,标注出并行处理层和意图预测模块的位置。
“今天是我们团队成型的第一天。”他站在白板前,手里的马克笔点了点“新芽层”三个字,“这个模块,是我从零设计的,跟青云没有任何关系。名字也是我自己取的。”
会议室里安静了几秒。老周抬头看了他一眼,小陶在笔记本上写了什么,赵小萌坐在角落里,面前的电脑屏幕亮着,上面是文档的开头。
“我知道你们当中有人做过类似产品,有人是从别的项目组调过来的,还有人是刚换的公司。”林远把马克笔放下,“但在这里,我们不做谁的替代品。星图之前的客服产品是什么水平,你们都清楚。锐达的青云系统是什么水平,我比你们任何人都清楚。”
他说这话的时候语气很平,没有刻意压低也没有拔高。赵小萌在角落安静地听着,没有和其他人一样交头接耳。
“这次我们从零开始,没有捷径。”林远点开下一页PPT,上面是详细的排期表,“三个月出基础语音模块的POC,六个月完整demo,九个月上线第一个版本。每个阶段都有验收标准,达不到标准就推迟上线,我不会砍测试环节。”
他说完最后一句的时候,目光扫过会议室里每个人的脸。老周微微点头,小陶在排期表上勾了几个时间点,赵小萌合上电脑,拿出一支笔。
“有个问题。”老周开口了,声音不大但很稳,“并行处理层的资源调度方案,你准备用哪种?市面上主流的三个框架各有优劣,选错了后期改起来很麻烦。”
林远走回白板前,在并行处理层旁边写了一个问号:“框架选型我们做两周的预研,每个人认领一个方向,做完对比测试之后一起拍板。我不预设答案。”
老周想了想,点头:“行,那我来做对比测试的基座。”
“我认领数据处理这部分。”小陶说。
赵小萌抬起头,看了林远一眼,然后开口:“语音模块的竞品数据摸底,我来做。”
林远点头,没有多余的话。他在白板上写下了四个人的名字,每个名字后面跟着一串任务项。写完之后他退后两步看了看,那些名字和任务挤在白板上,像是一个还没搭好的骨架,但骨架的形状已经出来了。
散会之后,赵小萌留下来收拾会议桌。林远还在看白板上的任务分配,她走过来站在旁边,没有急着走。
“林哥。”
“嗯。”
“沈总昨天给我发了条消息,说让我好好干。”
林远拿起板擦,准备擦掉白板上的草稿,听到这句话手停了一下。他转过身看着赵小萌,等着她往下说。
“我回了她一句谢谢。”赵小萌把椅子归位,“她没再回复。”
林远把白板擦干净,最后露出了“新芽层”三个字。他看了几秒钟,拿起马克笔在那个词旁边画了一个圈,然后放下笔。
“明天开始,语音模块的数据摸底你先出一版周报。”他关上会议室的灯,“走的时候把门带上。”
走廊里,赵小萌应了一声。林远走回工位,打开电脑,新芽层详细设计的第三版还停在屏幕上,光标停在最后修改的位置。他按下保存,然后新建了一个文档,标题打了两个字:周报。
窗外的路灯刚刚亮起来,和他在家加班那晚看到的是同一片光,只是角度不同了。
第十五章 半年后
新芽层上线那天下着小雨。林远站在星图智能的发布厅后排,看着大屏幕上实时滚动的数据面板。周明远在台上讲话,声音不高,但每个字都像钉子一样扎实。
“各位,这是我们完全自主研发的智能客服平台,从底层架构到应用层全部重构。我特别要感谢产品团队,尤其是林远,他带着四个人用了九十天把这件事从不可能变成了可能。”
台下响起掌声的时候,林远下意识看了一眼手机。赵小萌发来一条消息:实时接入商户数破两千了。后面跟了三个感叹号。
他回了一个字:稳。
那天晚上团队聚餐,小陶喝了两杯啤酒就开始絮叨,说林哥你验收标准定得太狠了,我那个模块改了七版。赵小萌在旁边笑着接话,你才七版,我的语音模型调参调了四十二轮。老周放下筷子,说四十二轮算什么,我当年做第一代系统的时候,光压力测试就跑了三个月。林远听着他们说话,没怎么插嘴,只是给每个人倒茶。
后来的半年过得很快。快到林远有时候觉得好像昨天才入职星图,今天就已经站在了行业展会的展台前。新芽层的市场份额从第一季度的百分之四点七爬到了百分之十一点三,团队从四个人扩到了十五个,会议室不够用了,周明远把隔壁的储物间也改成了办公区。林远自己面了三轮新人,每次都在终面问同一个问题:你做过的最难的技术决定是什么。有人答得漂亮,有人答得真诚,他选真诚的。
行业展会设在城西的会展中心。星图的展位在B区,对面是锐达。林远一早就看到了那个熟悉的橙色标志,但没刻意往那边走。展会进行到下午,他刚送走一波客户,转身去茶水区倒水,迎面碰上了孙莉。
她穿着另一个公司的工牌,头发剪短了,看起来比在锐达时精神一些。两人面对面站了两秒,谁都没有躲。
“好久不见。”孙莉先开口,语气平淡。
“嗯,好久不见。”
“我听说你在星图做得不错。”她端起一杯咖啡,没有加糖,“新芽层的发布会我看了直播。”
“谢谢。”林远也倒了杯水,“你现在在哪家?”
孙莉报了个公司名字,做企业服务的。她说自己年初从锐达离职的,走的时候产品部已经走了三个人,陈副总被调离之后局面更乱,沈岚接手了一堆烂摊子。
“沈总现在怎么样?”林远问。
孙莉想了想:“她挺难的。不过上个月碰到她一次,看着还行,比以前接地气了。”
两人又聊了几句无关紧要的,比如展馆的空调太冷,比如今年的参展商比去年少了两成。然后孙莉看了看表,说她要回展位了。临走前她停了一下,像是犹豫要不要说什么。
“林远。”
“嗯。”
“当初那个转正单,我其实早就交上去了。是上面一直压着。”
林远点头:“我知道。”
孙莉看着他,似乎想从他的表情里读出点什么,但林远的表情很平静,像在听一件很久以前的事。她没再说什么,端着咖啡走了。
展会第二天,周明远在星图的展位上宣布了一项任命。他把林远叫到台前,对着一屋子客户和媒体说:“从下个月起,林远担任星图智能产品总监,全权负责新芽平台的后续迭代和新产品线规划。”
掌声来得比上次热烈。林远站在台上,看到赵小萌举着手机在拍,老周靠在柱子旁边抱着胳膊笑。他接过话筒,只说了一句话:“谢谢老周把我从锐达捞出来。”
台下笑了,老周笑着摆手。
回公司之后林远做的第一件事,是给赵小萌做晋升评估。她入职星图满半年,按制度要走一次正式评估。那天下午两个人坐在会议室里,赵小萌面前放着她这半年的工作总结,林远面前放着一张评估表。
“语音模块的准确率从百分之八十七提到了百分之九十二,这个数据是你独立完成的。”林远翻着工作总结,“三个客户的定制需求你也跟下来了,反馈都是正向。”
赵小萌坐得很直,两只手放在膝盖上,像是刚入职那会儿。
“但是有个问题。”林远放下工作总结,看着她。
赵小萌的表情紧了一瞬。
“你上个月拒绝了一个客户的加急需求,理由是没有足够时间做测试。客户投诉到老周那里去了。”
赵小萌的嘴唇抿了一下:“那个需求本身违背了我们自己的技术标准。如果强行上,后期维护成本至少翻三倍。”
“我知道。”林远在评估表上写了一行字,“所以要给你一个S级评价。坚持标准这件事,比满足所有需求更难。”
他把评估表转过来,上面在“通过”的方框里打了勾,旁边写了一行备注:独立判断能力突出,建议列入核心梯队。赵小萌看着那张表,愣了两秒,然后笑了,眼角有点红。
“林哥,你知道当初在锐达,沈总也给我做过一次评估,给了我B。”她拿起那张表,像是拿着一份很重的东西,“她说我太轴,不够灵活。”
“轴是好品质。”林远站起来,“但别对外面的人说是我说的。”
赵小萌笑出了声。
第二天上午,林远坐在办公室里翻看新一年的产品规划草案。窗外的梧桐树叶开始发黄,他想起半年前从锐达收拾东西那天,也是这样的天气。那时候他工位上只有一个纸箱,装了两本书和一个杯子。现在这间办公室里摆着白板、两块显示屏,还有老周送的一盆绿萝。
手机震了一下,周明远发来的消息:董事会通过了明年的产品规划,新芽要往行业解决方案方向延伸,你准备一下,下周碰。
林远回了个收到,然后打开电脑。新芽层迭代计划的文档停在屏幕上,光标在最后一行闪烁。他本来想接着往下写,手指放在键盘上却停住了。
他打开文件管理器,翻到一个很旧的文件夹,里面存着当初在锐达时的资料。那些文件他已经很久没碰过了,有些是青云系统的设计文档,有些是测试报告,还有一个PDF——那份被压了一个月的转正申请扫描件。PDF的预览图是锐达的抬头,上面有他签名的电子痕迹,申请日期那栏写着,比后来实际获批的日期早了三十多天。
他看着那个预览图,鼠标放在删除键上,停了一会儿。
然后他关掉了文件夹,把新芽层的迭代文档重新拉到屏幕上。光标还在闪烁,他敲了一行字:语音多轮对话场景优化,优先级P0。
窗外的光斜着照进来,落在键盘上,和半年前他在家加班那晚是同一片光。只是这次他不需要再等任何人的审批,就可以决定明天做什么。
他拿起手机给赵小萌发了条消息:明天早会,语音模块的迭代方案你来讲。
三秒后收到回复:收到。
第十六章 转正
梧桐叶落了大半,铺在人行道边上,被晚高峰的车流卷起来又落下。林远从地铁站出来,沿着中山路往星图大厦走。这条路他走了半年,闭着眼都能数出沿途的咖啡店和便利店。
锐达的大厦在这条路的中段,玻璃幕墙擦得锃亮,门口那棵银杏还是老样子。他远远看见几个熟悉的身影从旋转门出来,有人抱着纸箱,有人边走边低头看手机。他没有放慢脚步,也没有转头,只是目光从大厦顶层掠过,那层楼曾经是产品部的办公区,他坐在靠窗第三个工位,每天看着对面那栋更矮的楼发呆。
现在他连那扇窗在哪都辨不真切了。
星图大厦比锐达矮两层,但大堂更敞亮,前台小姑娘每次见他都笑着叫林哥。他刷卡进电梯,按了七楼,电梯门合上的瞬间,手机震了一下,是周明远发来的消息:董事会过了,明天碰个头,聊新方向。
他回了个好,电梯门打开,走廊里灯还亮着。这个点大部分人已经下班了,只有技术组那边传来隐约的键盘声。他推开自己办公室的门,把包挂在椅背上,没有急着开灯,借着窗外的天光走到桌前。
电脑屏幕还亮着,停留在上午那份新芽层迭代计划上。他动了动鼠标唤醒电脑,手指在键盘上停了一瞬,然后打开文件管理器,路径他很熟,Documents、旧工作资料、锐达,一层层点进去。
里面有三个文件夹,青云系统、测试报告、个人。他点开个人。
那个PDF静静躺在列表里,文件名是“转正申请_林远_20230215”。他双击打开,锐达的抬头出现在屏幕上,右下角有陈副总的签字栏,空白。申请日期是二月十五日,比他实际拿到转正通知的日期早了三十七天。
三十七天,够一个项目从立项到上线,够一个实习生做完季度复盘,够陈副总把他的名字从分红名单里划掉两次。
他把PDF关掉,又打开另一个文件,是当初青云系统的验收报告。验收结论那栏写着“通过”,但附件里少了压力测试那部分,正是后来在论坛上被攻击时他拿出来证明清白的那份缺失材料的来源。他翻到最后,看到自己当时写的备注:建议补充压力测试,未获批准。
他把这份报告也关了。
光标回到文件管理器,停在“个人”这个文件夹上。他右键点了一下,菜单弹出来,删除选项在倒数第二行。他的手指在鼠标上停着,窗外一辆公交车驶过,车灯扫过天花板,光影转了一圈又暗下去。
他收回手。
起身去接了杯水,回来的时候周明远又发了一条消息,这次是一份PPT,标题“星图智能客服平台2.0战略规划草案”,发件时间是五分钟前。附言:框架我搭了,你填血肉,不急,下周交初稿。
林远把水杯放在杯垫上,回了个收到。然后他关掉锐达的文件夹,窗口退回到桌面。壁纸是星图去年年会的合照,赵小萌站在他右边,比了个剪刀手,老周站在中间,笑得眼睛眯成一条缝。他新建了一个文档,命名的时候手指顿了顿,敲下“星图智能客服平台2.0规划”。
光标在空白的文档里闪烁。
他打了第一行字:目标——重新定义行业智能服务标准,脱离路径依赖,从底层架构做差异化。打完这行他停了一下,想起半年前在星图入职那天,周明远带他参观工位,走到技术组旁边一个空位前说,这就是你的位置,电脑明天到。那时候他以为老周会让他延续青云的思路做优化,没想到第一次项目会上老周就说,青云是好东西,但星图不能活在任何人的影子里。
这句话他记了半年。
他继续往下敲:语音交互层采用流式多轮对话引擎,支持上下文记忆和情绪识别;知识图谱层构建动态更新机制,打通行业语料库;底层算力调度优化,目标响应延迟控制在三百毫秒以内。
每敲一行,他脑子里就浮现出在锐达时不敢提的那些方案。那时候他跟沈岚说过一次情绪识别方向,沈岚听完沉默了一会儿,说这个方向好,但陈副总那边不会批预算,先放放。放放,就放到了离职。
文档写到第二页的时候,天彻底暗了,窗外亮起一片车灯。中山路是主干道,晚高峰的尾巴拖得很长,红色尾灯连成一条线,从窗口望出去像一条缓慢流动的河。他站起来活动了一下肩膀,走到窗前。
锐达的大厦在那条河的对面,亮着零星几盏灯顶层全暗着。这个点以前他还在锐达时,经常是全组最后一个走的,走的时候会看一眼对面星图的大楼,那时候觉得那栋楼很陌生,也很遥远。
现在他站在星图这边,看锐达的楼,觉得它比记忆中矮了一些。
手机又震了,赵小萌发来消息:林哥,语音模块的迭代方案我整理了个初稿,发你邮箱了,你看看方向对不对。
他回:好,明天过。
转身回到桌前,文档已经写了满满一屏。他把光标移到最下面,加了一行小标题:一期落地节奏——六月完成核心引擎开发,八月内部测试,十月客户试点。
打完这行,他靠在椅背上,盯着屏幕看了一会儿。然后打开邮箱,下载赵小萌的方案。附言里她写:参考了之前锐达语料库的一些公开数据,但底层逻辑重新做了梳理,应该没有版权风险。
他点开附件,第一页是框架图,第二页是数据来源说明,第三页开始是详细设计。翻到第四页的时候他停住了,赵小萌在备注栏写了一行小字:林哥,这个方向比青云更敢想,我喜欢。
他笑了一下,拿起手机打了两个字:加油。
发完消息他把手机调成静音,重新看向自己的文档。在“一期落地节奏”下面又加了一行:团队扩编至十五人,核心岗位内部培养优先,外部招聘侧重算法和行业解决方案方向。
写完这行他站起来,把窗户推开一条缝,晚风灌进来,带着秋天干燥的气息。楼下的车流还在缓慢移动,喇叭声远远传上来,混着风声。他想起刚入职星图那天,周明远在走廊里跟他说过一句话:在星图,你不需要等任何人批转正,你的东西自己会说话。
他当时觉得这话有点鸡汤,现在觉得是老周的真心话。
手机屏幕又亮了,这次是系统提醒,晚上十点,该走了。他关掉文档前犹豫了一下,打开那个锐达的文件夹。PDF的图标静静躺在里面,他看了两秒,然后关掉窗口,没有删。
有些东西留着不是放不下,是提醒自己曾经站在什么地方。
他把电脑合上,拿起包和外套,关灯出门。走廊里技术组的灯还亮着,他走过去敲了敲门框,里面三个小伙子同时抬头。
“还不走?”
“跑完这组数据就走。”
“明天再跑,回家路上注意安全。”
三个人应了一声。他转身走向电梯,按下一楼。电梯门合上之前,他看了一眼走廊尽头自己办公室的方向,门上贴着的铭牌在暗光里只能看清前两个字:产品。
电梯下行,他低头看手机,周明远的消息还停留在PPT那一条未读附件上。他点了进去,在回复框里打了一行字:框架没问题,我明天先跟赵小萌对齐语音模块,后天给你初稿。
发送。
电梯到一楼,门打开,大堂的灯已经调成了夜间模式,只有前台还留着两盏小灯。他走出去,回头看了一眼七楼窗户的方向,灯已经关了。外面的风比刚才大了些,梧桐叶打着旋从脚边滚过。
他裹了裹外套,往地铁站的方向走。路过锐达大厦的时候,他没有停,也没有抬头。口袋里手机又震了一下,是赵小萌回了个奋斗的表情包。
他笑了一声,把手机放回口袋,加快了脚步。前方的地铁口亮着暖黄色的灯,进站的人在他身前身后错落走着,每个人都在往自己的方向去。
(全文完)
文章虚拟演绎,请勿当真。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.