第八十六章 钉子
终审材料是周三下午发出来的。
林知行在内网的项目管理工具里看到通知——「可信度评分模块终审评审会,时间:周四下午两点,地点:8楼B会议室,请相关同事提前阅读评审材料」。附件是一个PDF,二十一页。
他点开。
前三页是项目概述,没什么好看的。程浩上周写的,他看过初稿。
第四页开始是技术方案。
林知行的鼠标滚轮停住了。
架构图变了。
不是微调,是重画。他之前设计的三层结构——数据层、模型层、展示层——还在,但模型层内部的逻辑完全不一样了。他写的那个分场景评分框架没了。取而代之的是一个统一评分模型:所有场景用同一套权重、同一个阈值、同一条评分曲线。
他往下翻。
第五页是数据说明。七十万条全量数据,没有筛选。他之前写的那个数据质量评分脚本、筛选后的二十三万条高质量数据、以及基于筛选数据训练出的模型——全部没有出现。
第七页是测试结果。
准确率:71.2%。
他盯着那个数字看了五秒。
然后他关掉PDF,靠在椅背上。
工位上只有他一个人。程浩今天请了假,说家里有事。对面的椅子空着,显示器黑屏,那张塑封的高潜人才证书还立在旁边,加粗的名字在日光灯下泛着一层哑光。
林知行重新打开PDF,从头到尾又看了一遍。
二十一页,每一页都干净、规范、逻辑自洽。周报的格式,PPT的节奏,学术论文的引用——程浩的风格。但技术方案不是程浩写的。程浩做不了这个。这是周睿改的。
他把两版方案在脑子里并排放了一遍。
他的版本:分场景评分框架,根据不同教育场景(数学解题、英语作文、物理实验)的特性调整评分权重。数据筛选后二十三万条,准确率89.3%。核心创新在于场景适配——同一个可信度评分在不同学科里的含义不同,不能一刀切。
周睿的版本:统一评分模型,所有场景共用一套算法。七十万条全量数据,准确率71.2%。逻辑是稳妥、安全、不出错。
89%降到71%。
分场景变成一刀切。
他的两个月浓缩成了十八个百分点的差距和一个被替换的框架。
他没有马上去找任何人。
他把PDF保存到本地,关掉项目管理工具,打开代码编辑器。屏幕上还留着他昨天写的几行代码——给可信度评分加一个新的解释模板,针对英语作文场景的评分逻辑做细化。
这几行代码现在没有意义了。如果终审通过的是周睿的方案,英语作文场景根本不存在,他写的解释模板也用不上。
他把代码编辑器最小化,打开手机。
没有新消息。
他又看了一遍终审通知。时间是明天下午两点。也就是不到二十四小时。
他想起上次中期评审。他站起来补充数据,89%打在71%旁边,全场安静了三秒。沈渡后来说他越位了。周睿在技术群里转发了他开源仓库的帖子。权限被收紧又被恢复,审批人从周睿变成沈渡。
那次之后他学到了一件事:在错误的时间展示真实,真实就变成了武器。但武器不长眼,伤到的可能是自己。
现在周睿用了另一种方式。
不是打压,不是限制权限,不是在群里转发帖子。
是改方案。
把他的方案改成一个更保守的版本,然后以项目负责人的身份提交终审。这比打压高明得多——打压是明面上的冲突,改方案是系统内的操作。周睿有权力改方案,因为他是技术总监,他是项目负责人,他是这个模块的最终决策者。
林知行打开笔记本,在空白页上写了一行字:
「分场景评分框架 → 统一评分模型。89% → 71%。」
然后他在下面写第二行:
「原因:稳妥上线比追求极限更重要。」
这是周睿的逻辑。不是错的。71%的准确率在产品层面够用,统一模型比分场景模型更简单、更稳定、更容易维护。从工程角度看,周睿的方案没有任何毛病。
但从技术角度看,这是退步。
十八个百分点的退步。一个被替换的核心框架。两个月的工作成果被压缩成了一份干净的、规范的、没有任何创新的终审材料。
他合上笔记本。
晚上八点,林知行在青旅的上铺躺着。
房间里只有他一个人。出差的销售今天退房了,新住客还没来。窗外的路灯亮着,橘黄色的光从窗帘缝隙里漏进来,在对面的墙上画了一道斜线。
他的手机亮了。
沈渡。
「明天的评审,你有两个选择。方案的对错不重要,重要的是你选哪个战场。」
他盯着这条消息看了很久。
两个选择。
第一个选择:按周睿的方案走。终审通过,项目安全落地。功劳归程浩和周睿。他继续做下一个模块,继续写代码,继续攒履历。灰色工牌还是灰色的,但至少不会变得更黑。
第二个选择:在终审会上拿出原版方案,当着所有人的面证明周睿在退步。分场景框架、数据筛选、89%的准确率——把这些摆到台面上。但这次不是越位。这次是正面冲突。
他把手机放在枕头旁边,盯着天花板。
天花板上那块水渍还在。不规则的多边形,边缘发黄。他已经看了三个月了。
沈渡说「方案的对错不重要」。
这话他信。在灵犀待了四个月,他已经明白了一件事:对错是由位置决定的,不是由数据决定的。周睿是技术总监,他说71%够用,那71%就是够用的。林知行是外包,他说89%更好,那89%就只是一个数字。
但他也听出了沈渡没说出口的那层意思。
「重要的是你选哪个战场。」
战场。不是方案,不是数据,是战场。
沈渡在告诉他:这次终审不是技术评审,是政治博弈。周睿改方案不是因为他觉得71%更好,是因为他需要证明这个项目在他的控制下是稳妥的、安全的、不需要一个外包来指点江山的。如果林知行在终审会上反驳,他打的不是周睿的技术方案,是周睿的权威。
而打权威的后果,他已经尝过一次了。
上次是越位。这次如果再站起来,就不是越位了,是造反。
他翻了个身,面朝墙壁。墙壁上有一道细细的裂缝,从天花板一直延伸到床头,像一条干涸的河道。
他想起姜意上周说的那句话:「你不是被偷了一篇稿子,你是在被整个系统消化。」
消化。
这个词很准确。系统不是在消灭他,是在消化他。把他写的代码消化成程浩的功劳,把他的89%消化成周睿的71%,把他的分场景框架消化成一个更保守的统一模型。消化完之后,他还在,但他的东西不在了。
他又想起赵鸣岐在走廊里说的那句话——「你的能力不应该被困在外包的框里。」
被困。
也不准确。框是他自己走进来的。沈渡给了他两条路,他选了外包。因为外包不需要学历门槛,因为外包可以先看看这个公司值不值得待,因为外包是他当时唯一能抓住的机会。
框不是别人给的,是他自己选的。
现在框要消化他了。
他拿起手机,又看了一遍沈渡的消息。
「方案的对错不重要,重要的是你选哪个战场。」
他把这句话拆开了读。
「方案的对错不重要」——意思是,不管他拿出89%还是接受71%,技术层面的结果差别不大。产品照样上线,用户照样使用,71%和89%在产品体验上的差距可能只有几个百分点的用户感知。
「重要的是你选哪个战场」——意思是,这次终审的真正赌注不是技术方案,是他和周睿的关系。如果他忍了,周睿会把他归类为「可用但可控」的人。如果他不忍,周睿会把他归类为「不可控的威胁」。
可用但可控。
不可控的威胁。
两个标签。两种命运。
他试着把这件事拆成最简单的结构。
两条路:忍,或者不忍。每条路后面跟着一串后果。
忍:周睿满意,沈渡失望但不意外,处境稳定但天花板可见。 不忍:周睿暴怒,沈渡可能支持也可能切割,处境危险但有破局可能。
矩阵列完了,但他发现缺了一个变量。
沈渡的态度。
沈渡说「方案的对错不重要,重要的是你选哪个战场」——这句话是中性的。他没有说你应该忍,也没有说你应该不忍。他在把选择权交还给林知行。
但沈渡想要什么?
如果沈渡想要他忍,他会说「别冲动,先稳住」。如果沈渡想要他不忍,他会说「你的方案是对的,我支持你」。
他都没说。
他只说了「选哪个战场」。
林知行盯着天花板上的水渍,想了很久。
然后他明白了。
沈渡不是在帮他选,沈渡是在看他选。
这是一场测试。不是技术测试,是忠诚度测试。沈渡想知道:在面对周睿的压力时,林知行会选择服从还是反抗。服从意味着林知行是一个可控的棋子,反抗意味着林知行是一个需要被重新评估的变量。
沈渡不在乎71%还是89%。他在乎的是林知行这个人,在压力面前会做出什么反应。
这个认知让林知行的胃缩了一下。
他把手机扣在枕头旁边,闭上眼睛。
周四下午一点四十五分。
林知行坐在8楼B会议室外面的走廊里。
走廊很安静。会议室的门关着,磨砂玻璃后面透出模糊的人影。空调的出风口在头顶嗡嗡响,吹下来的冷风让他后颈发凉。
他提前十五分钟到了。
走廊尽头的消防通道门半开着,能看到楼梯间的灰色水泥墙。旁边是一个灭火器箱,红色的漆面有点剥落。
林知行翻开笔记本。
空白页上还留着昨天写的那两行字:
「分场景评分框架 → 统一评分模型。89% → 71%。」
「原因:稳妥上线比追求极限更重要。」
他盯着这两行字,用铅笔在下面画了一条横线。
然后他在横线下面写了第三行。
不,他没写。
他把铅笔放在笔记本上,看着空白的位置。
他知道自己想写什么。
第一行:按周睿的方案走。项目安全过审。功劳归程浩和周睿。我继续做下一个模块。灰色工牌还是灰色的。安全。可控。天花板可见。
第二行:拿出原版方案。分场景框架。数据筛选。89%。证明周睿在退步。但从此成为所有嫡系的眼中钉。安全归零。天花板不可见。
两行字。两个选择。两种命运。
他拿起铅笔,把第一行写了下来。
然后他把铅笔移到第二行的位置。
铅笔尖悬在纸面上方,没有落下。
他想起昨天晚上在青旅上铺的推演。决策矩阵。沈渡的态度。忠诚度测试。服从还是反抗。可控还是不可控。
他想起方小满上周说的那句话:「你在北京学到的东西,比我们那个产品值钱吗?」
他想起姜意说的:「功能只解决当下的问题,产品定义未来的方向。」
他想起父亲放在枕头下面的火车时刻表,K572,红色圆珠笔画的圈。
他想起自己第一天到灵犀,拿到灰色工牌,在食堂发现补贴只有正式员工一半时的感觉。不是愤怒,是一种很轻的、像灰尘一样落在肩膀上的东西。
他把第二行写了下来。
两行字并排在笔记本上。
他看着它们。
算法在这时候失效了。
不是因为变量太多,是因为他不知道怎么给一个变量赋值。那个变量叫「后果」。他不知道拿出原版方案之后会发生什么。周睿会怎么反应?沈渡会站哪边?其他团队的人会怎么看他?他会丢掉这份工作吗?丢了之后去哪里?
所有这些问题,他都算不出来。
因为它们的答案取决于人心,不取决于数据。
他合上笔记本,靠在椅背上。
走廊里有人走过来。
脚步声从远到近,节奏很稳。林知行抬头。
赵鸣岐。
他穿着一件深蓝色的夹克,手里拿着一个文件夹,从走廊那头走过来。白色访客工牌挂在胸前。
他看到林知行,脚步慢了一点。
「你在干嘛?」赵鸣岐问。
林知行没有回答。
赵鸣岐走近了两步,低头看了一眼他膝盖上的笔记本。笔记本合着,看不到里面的字。
「发呆?」赵鸣岐问。
「在算一个东西。」林知行说。
「算什么?」
林知行想了一下。
「在算一个没有最优解的算法。」
赵鸣岐看着他,没有马上说话。
他把文件夹换到另一只手里,靠在走廊的墙上。墙面上贴着灵犀的企业文化标语——「用技术让教育更公平」。赵鸣岐的肩膀挡住了「公平」两个字。
「没有最优解的算法,」赵鸣岐说,「那就不叫算法了。叫选择。」
林知行抬头看他。
赵鸣岐的表情很平。不是那种居高临下的平,是那种见过很多选择之后的平。
「我以前也遇到过类似的情况,」赵鸣岐说,「在中科院,有人把我的实验数据拿走,发了一篇论文,二作给了我。一作是他导师。」
林知行没有说话。
「我当时想了三天,」赵鸣岐说,「要不要举报。举报了,论文可能撤稿,但我在那个实验室就待不下去了。不举报,就认了。」
「你选了什么?」林知行问。
赵鸣岐笑了一下。那个笑很短,嘴角往上动了一点就收回来了。
「我选了认,」他说,「但不是因为怕。是因为那篇论文不重要。它发在二区期刊上,影响因子不到五。我的课题比那篇论文重要。我不值得为一篇二区的论文毁掉自己的课题。」
他顿了顿。
「但你的情况不一样,」赵鸣岐说,「你的东西不是一篇论文。是两个月的核心工作。」
林知行的手指在笔记本封面上按了一下。
赵鸣岐看着他,眼神里有一种他没见过的东西。不是同情,不是鼓励,是一种很安静的、像在看另一个版本的自己的东西。
「别算了,」赵鸣岐说,「选你不会后悔的那个。」
他说完,直起身子,拿着文件夹继续往前走了。
脚步声在走廊里渐渐远了。
林知行坐在椅子上,没有动。
会议室的门还关着。磨砂玻璃后面的人影多了几个。空调还在嗡嗡响。冷风还在吹他的后颈。
他低头看着膝盖上的笔记本。
选你不会后悔的那个。
他打开笔记本,翻到那两行字。
第一行:按周睿的方案走。
第二行:拿出原版方案。
他盯着它们看了很久。
然后他把笔记本翻到新的一页,开始写字。
不是两行字里的任何一行。
他写的是一个名字。
他的名字。
林知行。
三个字,写在空白页的正中间。
他不知道自己为什么写这个名字。也许是因为他忽然想起了一件事——在小城的时候,他用「小林AI工作室」的名义接过张老板的项目。那时候他的名字和他的代码是绑在一起的。出了问题,张老板找的是他,不是别人。
在灵犀,他的名字和代码是分开的。代码是他的,名字是程浩的。出了成绩,表扬的是程浩。出了问题,追责的是他。
他不是在选择方案。
他是在选择——要不要让自己的名字和自己的代码重新绑在一起。
走廊尽头传来脚步声。有人从电梯那边走过来,是孙雯和赵远,手里拿着打印材料,低声在讨论什么。
他们路过林知行的时候,孙雯看了他一眼,点了点头。赵远没有看他。
一点五十五分。
会议室的门从里面打开了。
程浩探出头来,扫了一眼走廊,看到林知行。
「小林,」他说,「进来了。」
林知行合上笔记本,站起来。
他把笔记本塞进背包的侧袋里,拉了一下外套的拉链。
会议室里面已经坐了七八个人。周睿坐在长桌的一端,面前摊着那份二十一页的终审材料。他穿了一件深灰色的西装外套,袖口露出一截白色衬衫。
林知行走进去,在程浩旁边坐下。
周睿抬头看了他一眼。
那个眼神很平。不是挑衅,不是警告,是一种他已经很熟悉的东西——一个在公司待了十二年的人看一个待了四个月的外包时的眼神。
不冷不热。
像在看一件工具。
林知行打开笔记本电脑,登录会议系统。
投影仪亮了。屏幕上是灵犀的logo。
周睿清了清嗓子。
「各位,」他说,「今天的终审评审会现在开始。」
会议室的门在他身后缓缓合上。
(本章完)