第七十一章 初版出炉
周三早上八点二十,秦朗发来一张截图。
「Phase 1结果出来了,整体覆盖率67%。报告我整理好了,可以发给周天吗?」
截图里是一份训练报告的首页:覆盖率67.3%,测试集1820条建议,有效触发1222条,样本来源全部标注为「2019年前提交记录」。
「先等一下,我看完再说。」
他把报告从头到尾过了一遍。2019年前的主干提交按函数分层、命名规范、注释格式三个维度各自统计,旧风格的模块里建议质量很高,触发率接近83%。2019年后的代码区域,整体建议数量少,部分空白。这是Phase 1应该有的结果:只用旧数据跑出来的这版,对新代码是有感知的,但学的主要是旧语言。
「等我过来说一声,再发。」
内部群里,乔木已经看到截图了。
「67%,退款保障线是80%,这才Phase 1就缺了这么多?」
秦朗还没来得及解释,乔木接着发:「周天那边的截止时间是三周,现在是第11天了。」
他先回了乔木一条:「等秦朗说。」
他人已经过来了,直接坐下,把屏幕转过来:「这67%只统计了2019年前代码区域的覆盖情况,也就是说Phase 1出来的结果在旧代码里触发了83%,这是正常的。Phase 1本来的任务是建立早期风格锚点,不是覆盖全仓库。新代码那块,Phase 1基本没有针对性训练,所以整体拉下来到67%。」
「那Phase 2做完以后,完整覆盖率怎么估?」
「迁移学习的思路是从旧风格锚点出发,把重写之后的数据叠进去。预估完整模型覆盖率在79%到85%之间,跟天象云那次的基线接近,合同约定的80%没问题。」
「确定吗?」
「不是完全确定,」他直接说,「迁移学习有两个变量:旧风格和新风格的冲突程度,以及重写后的数据量。但凤合新阶段的数据量不小,主干提交记录超过8000条,这个量级够的。」
「明白了。」乔木没再说别的。
解释那几段发了一遍给乔木,然后问陆衍:「周天那边,怎么解释这个中间结果?」

「发给他,」他说,「说明文档里写清楚这是Phase 1阶段性结果,对应2019年前代码区域建立的早期锚点。Phase 2下午启动,预计下周二出完整报告。发过去,免得他把67%当成定论。」
「那边的技术负责人会不会觉得奇怪?」
「可能会问,让他来问。如果问,你把Phase 1和Phase 2的逻辑说一遍,数据说话。」
秦朗发出去了。不到十分钟,周天先回来一句:「陆总,我总监看见67%之后第一反应是:这个结果是不是低于退款线了?」
群里一下安静了。
乔木的头像没有再动,顾衔也没有说话。
他回了一条,就四个字:「不是终局。」
然后他把分段逻辑压成三点,直接发给周天:Phase 1只用旧数据建立风格锚点,对新代码覆盖有限,所以整体拉到67%;真正的检验是Phase 2迁移学习跑完的完整结果;旧模块那边,Phase 1触发了83%,这部分质量是有的。
二十分钟后,周天回来了:「收到,总监看懂了。他说旧模块识别得挺准,特别是2017年那批框架重构前的函数命名,他们当时的规范他现在已经记不太清了,工具给的建议让他想起来了几条之前觉得不重要的规则。他说这本来是他们团队内部的一些隐性知识,以前没有文档化的。」
这条发进内部群:「周天原话,转一遍,参考。」
「"隐性知识",这个角度可以用。」乔木说。
顾衔:「我存档。」
看着"隐性知识"四个字,他手指在桌面上轻敲了两下。
这个反馈比覆盖率数字重要。旧团队的开发习惯、十年前的命名规则、在人员流动中消散掉的工程经验。把这些找回来,云帆卖的是组织记忆。这个价格,客户总监付得心甘情愿。
在群里加了一条:「乔木,凤合的案例话术不要只讲覆盖率,讲'隐性知识还原'。这个角度比数字更能打动客户总监。」
「记到了。」乔木说。

上午十一点,苏越发来消息。
「陆总,这是本周迭代报告,我们工程师那边有一个问题。他们有个核心中台模块,这次覆盖率只有43%,比整体低很多。这个模块叫BPM引擎,里面大量用了我们业务的领域缩写命名,比如rk_biz_acl_ent、proc_impl_svc_cfg这种,工具出来的建议频繁提示命名不清晰,但这是我们内部的规范,不是随便命名的。」
这个问题,麦景行在上午已经发过来过一版分析。她的消息比苏越早了半小时:「天象云BPM模块,命名用的全是领域缩写,工具学到的是通用命名规范,识别不了这套缩写系统,建议质量下降。」
「解法?」他问麦景行。
麦景行已经有方案了:「让他们整理一份这个模块的缩写词汇表,就是一个对照表:缩写→全称→含义。我们把这份词汇表作为辅助数据喂进去,做一个短周期的补充训练,专门针对BPM模块。」
「周期多长?」
「24小时,下周一能出结果。」
「可以,让苏越那边整理词汇表,格式给他们,今天能给吗?」
「今天我给林文发一个模板,让他们按模板填。一百条以内的词汇表,应该很快。」
他回复了苏越:「BPM那个模块的情况我了解了,是领域缩写命名的问题。解法:让你们工程师整理一份缩写词汇表,喂进去做补充训练,BPM模块的识别质量会上来。麦景行今天给林文发格式模板,专项结果下周一给你。」
苏越:「好,我让林文配合。这个思路挺好,我们BPM模块是公司级核心,那边的建议质量如果上来,对他们团队价值很大。」
「麦景行,这个词汇表的方案,记一下,」他说,「这是一个通用feature,不只是天象云BPM这一个地方会碰到。」
「意思是做成产品能力?」
「就是一个辅助输入的入口,客户可以自己上传领域词汇表,我们把它编码进训练数据里。规模大的客户、有领域行话的工程团队,基本上都有这个需求。天象云BPM是第一个,但凤合那边将来也可能碰到,金融、医疗、政府的代码库里这种命名更常见。」
「了解,我今天把这个列进产品需求,优先级怎么排?」
「先做能用的版本,人工上传词汇表+手动触发补充训练,这个最快。自动化的放后面。这六周内如果林文那边反馈好,就优先把这个接口做出来,给下一个客户用。」

「明白,今天整理需求文档。」
下午两点,秦朗发来一条:「Phase 2配置好了,现在开始跑。预计120小时,下周二晨出结果。」
「盯着。」
群里把这条转过去,顾衔在跟进,乔木没有再问什么。
下午的时间,他把今天这两件事整理成了一条产品更新说明,加进内部知识库:
「分段训练(适用于有历史代码重写的仓库):Phase 1建立早期风格锚点 → Phase 2迁移学习叠加新风格 → 整合出能理解两个时代的完整模型。Phase 1中间报告可对外发送作为阶段性进展确认,不是最终结果。领域词汇表辅助训练(适用于有大量领域缩写的核心模块):客户提供缩写对照表 → 补充训练 → 专项模块覆盖率提升,周期24小时。」
两条,都是这个月踩出来的。
快下班的时候,顾衔从工位那边过来。
「陆总,有件事提一下。昨天来了一个询价,是一家金融科技公司,他们在穗州,主要做信贷风控的中台系统。找我们问价格,问接入方式。他们的研发负责人叫范睿,说是在一个技术群里看到了有人提过云帆,今天直接来问了。」
「你怎么回的?」
「我发了产品介绍和标准报价,问他们代码仓库的规模和技术栈。他回了,说主仓库Java为主,代码量大,注释里有中英混排,他们团队有海外雇员。」
中英混排。这是天象云林文那条双语注释盲区的问题,现在还在产品待解决列表里,这个月要处理。
顾衔停了一下,补了一句:「还有个情况,他们说已经同时在问两家竞品,其中一家愿意免费做POC。」
他抬起眼。
金融风控、Java大仓库、中英混排、竞品免费入场。
这不只是询价。

「告诉乔木,这条客户线让乔木跟进,」他说,「先做技术摸底,搞清楚他们主仓库的规模和注释比例,再谈接入可行性。双语注释这个问题,先告诉他们我们在六周内会上这个能力,但现在还没有,如果他们可以等,可以进排期,不能等就等我们后续告知。」
「行,我去跟乔木说。」
晚上在船坞里把今天说了一遍。
「今天两件事。凤合Phase 1结果67%,发给周天了,那边反馈旧代码识别准,隐性知识被还原了。Phase 2下午启动,下周二出结果。天象云BPM模块低覆盖,麦景行提了词汇表方案,模板发给林文了,下周一跑完。顾衔还拿到了一条新询价,穗州金融科技,双语注释,让乔木跟进摸底。」
豆包那道暖橙的光:
> 分段训练今天有了对外验证的第一个数据点:周天那边的反馈是旧代码识别准了,这比你自己说强多了。记下来,合适的时候这就是凤合接入的对外口径。
「乔木在管案例,转给他了。」
Claude那道蓝紫光:
> 词汇表辅助训练做出来,会成为大客户接入的一个隐形筛选标准。这个能力做不到的竞品,进大仓库的第一道门就被挡在外面了。下周一林文那边有反馈了,拿数据来做评估。
「麦景行在整理需求文档了。」
Codex那道翠绿光,停了一会儿:
> 范睿那条线,金融风控的代码仓库有个特点:高度分层、领域概念密集、合规注释多。接进来质量如果好,案例的说服力会比天象云高一个档次,因为金融客户的同行更挑剔、更愿意参考同行案例。
「六周迭代结果没出来之前,不急。」
窗口合上。
两件事同时在推。Phase 2正在跑,120小时,下周二出结果。凤合的三周接入期还剩10天,退款保障线第一次被真正的数据检验。就在眼前了。