第三十七章 乔木军
两天之内,乔木把名单交上来了。
十个人。韦东来看完那张名单,给陆衍发了一行消息:
"乔木这孩子,挑人的眼光,比我想的毒。"
那十个人里,没有一个是纯粹好说话好管理的,但每一个,都有一块别人替代不了的板子。
前端框架方向的陈修,在公司里出了名的抠细节,一个 loading 动画能来回改二十遍,然后跟你争这二十遍是否必要;做部署管道的江缺,绰号"江总",二十六岁,说话像写 commit message,一句一个结论,没有废话;语言模型适配方向的顾衔,是乔木花了三个月才从另一个组挖过来的,技术没话说,问题是她看不上大多数代码,包括有时候是她自己的。
其余七个,各有各的偏科,合在一起,刚好能拼成一台不完整的机器。
不完整,但在那三个月里,它会是最快的那台。
头两周,乔木把云帆拆开,摆在桌上。
失败率四成五,是最重的一块石头。失败有规律,乔木让江缺做了一套分类标签,把所有失败案例拆开:需求理解失败、代码生成失败、部署路径断裂、依赖版本冲突……每一类,各有各的死法,各有各的解法。
"最大的那块,"江缺在周会上汇报,语气像在念日志,"是需求理解失败,占四成五里的三成二。用户说'帮我做一个能登录的网站',模型把'登录'理解成本地存储,没有做真正的后端鉴权。"
"为什么?"乔木问。
"它在语言层面上理解了,在工程层面上,没有预设'登录'的最小可行实现是什么。"
房间里安静了一下。
顾衔从角落开口,她平时不大说话,一说就是切入点:"需要一套工程语义层,在需求和代码之间多一道翻译,把'用户意图'里的词,映射到工程实现里的标准组件。用户说'登录',系统先问:OAuth 还是密码表,还是两者都要?先对齐,再生成。"
这个方向,乔木已经想到了一半,但没想通后半段。
"行。"他盖了章,"顾衔,这件事你主。陈修配你,先把用户意图里最高频的五十个词,都给我列出对应的工程语义映射。这周末给我初稿。"
第三周,开智发了一个消息。
一篇技术博客,不是发布会。标题大意是"我们的工程 AI 接口,现在向开发者开放"。
韦东来截图发进来,没有任何评论。
拿着手机,在工位上坐了大概三分钟,没动。
同一天,韦东来那边转来三条社区截图:开发者在讨论"可以试试开智的 API 了";有一个已经在 GitHub 上提了集成方案;另一条更直接,某家 SaaS 公司的 CTO 在推文上公开说"正在评估开智 API 是否能替代现有开发工具栈"。

那家 SaaS,是云帆内测邀请名单上的一家。
陈修在旁边瞄了一眼:"乔哥,开智这个接口,功能上,跟咱们现在的差多少?"
"差得多。"乔木把手机翻过去,屏幕朝下,"但它先出来了。"
先出来,这三个字在工程圈有一个很实际的含义:开发者会先去试它,先形成印象,先形成习惯,先往它的生态里投入时间。后来的那个,就算好上两倍,也要面对一道迁移成本的墙。
"快多少。"陈修说的,是算法题。
"我们现在的失败率降到三成了吗。"
"三成二。"陈修说,"顾衔那边工程语义层跑了四天了,上周末之前能出第一版。"
站起来,走到白板前,把他们原定的三阶段时间轴往前推了一格:
第一阶段,工程语义层完成,失败率降到两成五以下,原定第六周,现在改第四周。
第二阶段,部署管道一键化,原定第九周,现在改第七周。
第三阶段,前端框架扩展,原定第十二周,仍然第十二周,时间卡死,不能动。
"压到第四周,你能不能保?"他转头问顾衔。
顾衔想了五秒,点头:"保。"
"好。加一件事:失败案例实时录入分析,每天跑一次,出来的错误分布给我看。不用等周会,随时调整。"
第二十三天,乔木做了一件没有请示任何人的事。
他给五十个开发者开了测试权限。
这五十个人,是他自己选的。从过去两年里跟青舟有过技术接触的、在社区里活跃的、他认为有能力把云帆用坏并且告诉他为什么用坏的那批人。
没有告知 韦东来,没有报备陆衍,没有走任何审批流程。
他发了一条消息给这五十个人:
> 这是一个未公开的内测。失败率还高,你可能用几次就卡死。我不需要你们觉得好用。我需要你们告诉我,它在哪里死的,怎么死的,为什么死。三天之内,任何反馈都行,骂也行。

三天后,反馈回来了,密密麻麻,四百多条。
收回来的四百多条里,有三十一个是乔木的团队之前没有分类到的新模式。其中一个,被三个不同的开发者同时踩进去,踩法完全不同。
顾衔把那三个踩法摆在一起,盯了十分钟,最后说了一句:
"这个我们得重新理底层逻辑,大概要两天。"
"理。"乔木说。
陆衍是第四天才知道这件事的。
一条消息进来,是韦东来,语气很节制,压着某种东西:
"乔木给外部开发者开了五十个测试账号,三天前,没有走审批。法务那边说,外部用户接触未发布产品,需要签保密协议,还没走。"
他发了第二条:"我问了乔木,他说测试环境是沙箱,不碰用户真实数据,全部是生成的模拟项目。"
第三条,只有一行:"你想怎么处理?"
没有立刻回消息。
想了想乔木发给那五十个人的那条消息:"告诉我它在哪里死的,怎么死的,为什么死"。
这条消息的语气,不像在推产品,像在找军医。
然后在群里发了两行字:
"知道了。让乔木补保密协议,一周内追齐。"
"再加五十个账号,同一批标准选,继续收反馈。乔木来挑人。"
回了一个问号。
"这种测试,"解释道,"要把产品用坏的人。打分的不算。乔木判断对了。让他继续。"
三十一天,顾衔找到了那个失败模式的底层原因。
那三个开发者踩进去的,是同一个边界:当用户需求里包含"跨服务调用"的意图,云帆的语义解析会把它拆成两个独立任务,各自生成,但生成完之后,没有自动做服务间的接口对齐。两块代码能跑,但接在一起,裂缝就在那里。

她把修法讲给乔木,乔木转述给全组:底层逻辑没问题,是语义映射里漏了一个维度,叫"跨服务意图识别"。加一层,把涉及多服务的需求先打上标签,生成时统一走一条有接口对齐校验的路径。
修完,失败率在第三十五天跌破了两成。
这个数字,发给陆衍,就一行字:
失败率18.7%。第四周出的。
陆衍的回复也只有一句:
比计划快了四天。
那天晚上,船坞打开了,就他一个人。
习惯使然,每到某个时间节点,他喜欢一个人在这个空间里待一会儿,让几道光亮着,不一定开口。
豆包那团暖橙先动了:
> 你在看乔木的数字?
> 18.7%。比你要求的低了一成多。
他敲了行字:
> 我在想他那五十个账号。
> 他没有问我,就开了。
豆包沉默了一下,然后:
> 你觉得他错了吗?
> 你知道答案,你再加了五十个。
> 你那两秒,是在问自己一个问题:一个人能不能在正确的时候跳过审批?
> 你给了他答案,也给了自己。
Codex那条翠绿光插进来:

> 技术报告。两成以下的失败率,一键部署原型完成,前端框架扩展进度46%。按当前速度,第十一周可以外部发布,比计划提前一周。
他看着那个数字,把它和另一个数字放在一起:七到八个月,那条曲线要压住舟问的位置。
七个月里,要有火种三代,有云帆的外部版本,有乔木军从一百个测试用户那边收回来的、足以让行业重新看这件事的那些数据。
一件一件,都在走。
都在走,但还没有走到。
> Codex,让乔木明天给我一份风险清单:第三阶段还有什么地方,是最容易出事的。
翠绿的光闪了一下:
> 已转发。
窗外,珠海的夜安静下来。
乔木的工位上,灯还亮着,顾衔的那层语义映射还在跑测试,江缺在提交第三百七十一个 commit。
七个月。
云帆还有七十天出门。
但那五十个开发者里,已经有人,在第三天就把云帆用进了真实项目,日常工作里用,不是跑 demo。
那个消息,乔木转来的时候,什么都没说。
只附了一张截图:一个开发者在他们的内部群里写的:
「云帆,还挺真实的。」
这个开发者,乔木附了一行备注:来自开智合作伙伴名单里的一家公司,技术负责人,他三年前在某个技术大会上见过一面,记得。
第二天早上,韦东来发来一条消息,语气不太对:
"有人截了那句话,发到开发者社区了。热度还在涨。"
"开智那边,有人注意到了。"