Bazel 之歌
摘要
BazelCon 26 回顾,聚焦走廊交流中关于测试价值的讨论:批评前沿编码智能体过度生成单元测试,同时基于业务风险承受能力权衡单元测试与端到端测试之间的取舍。
<p><a href="https://lobste.rs/s/c1zbmq/bazel_bard">评论</a></p>
查看缓存全文
缓存时间: 2026/10/19 07:58
# 一位 Bazel 诗人
来源:https://sluongng.substack.com/p/a-bazel-bard
写这篇文章的时候我病得很重。其实并不是因为 BazelCon,而是因为正值流感季,我还有一个在上日托的孩子。所以在 BazelCon 临近时,打喷嚏、咳嗽就成了家常便饭。参加 BazelCon 很有趣。但带着鼻塞、嗓子疼,有时甚至饿着肚子回家……就没那么有趣了。我失了声,孩子想爸爸了,然后就到了今天。
但我一点也不后悔。BazelCon 26 简直完美。演讲技术含量极高,超过以往任何一年。走廊社交区充满活力,对话精彩纷呈。会场比去年在亚特兰大的小,反而提升了体验,因为太容易碰到熟人了。
在 BazelCon,我 90% 的时间都花在走廊社交区和人聊天上了。不知为何,除非对某个议题非常感兴趣,否则我实在受不了现场看演讲。我更喜欢之后在家看,凌晨一点裹在毯子里,让 YouTube 加速到 1.5 倍。
这是大会的官方日程:
- 周二 13 日:培训日
- 周三 14 日:全体会议
- 周四 15 日:全体会议
而这是我的日程:
- 周日 11 日:和大家喝咖啡聊天
- 周一 12 日:和更多人喝咖啡聊天
- 周二 13 日:在 DataDog 的 BuildBarn 聚会。布置赞助商展台。团队聚餐。
- 周三 14 日:和人聊天。鸡尾酒会。
- 周四 15 日:和更多人聊天。团队聚餐。
- 周五 16 日:在 DataDog 的 Bazel 黑客松。团队午餐。
有些 BazelCon 参会者希望大会能再长一天……我把自己的日程延长了三天,全程泡在走廊社交区里,我爱死这个了。
走廊社交区的核心话题是**测试的价值**。这紧接在某家公司在 Twitter 上宣称为了节省 CI 时间而删除了所有测试之后。Anthropic 也发布了一篇版本控制博客文章,描述了他们在合并后、部署前进行测试方面的投入。
[](https://substackcdn.com/image/fetch/$s_!d_Bq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7af73614-7598-44c3-9a37-87858c922718_664x263.png)"**Redesigning source control at Anthropic**"
在我与人们的交谈中,一个普遍的观察是:最新一代前沿编码 agent 被过度地用测试进行了强化学习(RL)。每个 PR 都会塞进一大堆单元测试,仅仅是为了有测试而已。这些测试往往充斥着 mock、fake 和重复代码,反正下一个 PR 又会被重构和更新。本质上,agent 不擅长判断测试应该在哪个层级添加。规模化来看,这给 CI 带来了不必要的额外压力,同时让 diff 更难审查、维护成本更高。
但换个角度看,BazelCon 的工程师们很清楚,你也不能只去索要端到端(e2e)测试。这类测试运行成本高,而且在不同版本之间几乎无法有效缓存。E2E 测试是最后手段,只应为主要功能添加。
这意味着在单元测试和 e2e 测试之间存在一个"甜蜜点",agent 应该在这个点上进行测试。甜蜜点在哪里取决于业务的"风险承受能力"。测试可以被看作是对未来变更和故障的保险。你能承受的风险越高,需要的测试就越少。你希望业务越有保障,做的测试就越多。
例如,在一家电商外卖公司,丢失几千个订单的 bug 可能造成几万美元的损失。对那次故障来说,那几万美元就是你的风险价值。但在飞机制造商或手术机器人公司,风险不只是用美元来衡量的,而是人命,我想我们都完全同意人命远比几万美元更值钱。这意味着这些硬件制造商应该做更多的测试、更频繁地检查缺陷,对最终产品的故障容忍度更低。
> 在 BazelCon 意味着我被一群人才包围,他们不仅能权衡这些取舍,还曾在大规模场景下设计和推出这样的框架,同时能用通俗易懂的语言把它们讲清楚。我不断为这里人才的密度所折服。
人们还认为这会推高变异测试(mutation testing)和属性测试(property testing)的需求。就我个人而言,我很喜欢给我的编码 agent 装备一项技能:根据 "bazel coverage" 的输出来裁剪新增的测试。我还没找到好办法让它做分支覆盖率,但我怀疑等这次大会结束后设置好,它会做得好得多。
编码 agent 带来的一个意外效果是:CI 中的测试几乎总是通过的。Agent 通常在提交和创建 PR 之前就已经穷尽式地运行过测试了。如果你只依赖历史 CI 数据来推动测试裁剪(Test Pruning)或概率性测试选择(Probabilistic Test Selection)等工作,这就会造成盲区。CI 数据不再讲述完整的故事。我们还需要测量 agent 迭代过程中的表现。一个捕捉到 agent 错误的测试已经证明了它的价值。保留它,甚至扩展它。
大多数企业目前还没有能力测量这一点。它们的遥测数据止步于 CI,因为从历史上看,开发人员笔记本电脑上的指标噪音很大,而端点控制软件也有各种局限。Bazel 及其 Build Event Service 似乎是这个领域的完美解决方案。
[](https://substackcdn.com/image/fetch/$s_!C4H8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91ee62d3-c2ca-474e-bce0-5eeca74e837e_1535x1116.png)BuildBuddy 目标性能 UI
我们不仅可以捕获和标记这些指标以供后续切片分析,还可以自动让 agent 定期审视这些指标,修复测试性能问题,裁剪和合并测试用例。多亏了这些信号,软件工厂现在可以递归地自我改进,随时间推移变得更加高效。
在 BazelCon 的常规赞助商中,有一个名字格外引人注目:Uber。
[](https://substackcdn.com/image/fetch/$s_!B11u!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0cd451c-f8d2-4289-a984-034cf2ee7493_1743x863.png)BazelCon 2026 赞助商
与其他试图在大会上推销产品的赞助商不同,Uber 不是来卖 Uber One 订阅的。他们是来招人的。
众所周知,随着大型 AI 公司为 Bazel 人才开出高薪,像 Uber、Airbnb 这样的"传统"互联网科技公司一直在向实验室输送人才。整个科技市场的人才百分位正在发生偏移:随着 P99 人才被"大 AI"吸走,Uber 等传统"互联网"公司现在不得不降一档来补充队伍。
[](https://substackcdn.com/image/fetch/$s_!Ok9_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe697b862-4f3d-4101-a483-14f91fadc76d_893x574.png)Anthropic 正在以 625k USD 基本薪资招聘 Staff+ Dev Productivity 岗位
由于竞业禁止协议在加利福尼亚州无效,我在 BazelCon 交谈的绝大多数工程师都尝试过去实验室面试。有的失败了,有的成功了,但这些数字令人侧目。这导致稀缺人才池的整体市场通胀,如果你是工程师,这令人兴奋;如果你是招聘经理,这令人恐惧。
大家也在讨论面试流程:你到底要在那些实验室做什么?如果你还在给一个 Bazel 生态系统的资深开源贡献者出编码面试题,我觉得你已经远远落后了。如果这位贡献者是 AI 原生的,他会笑你然后直接走出房间。在这个泡沫般的市场里,他们有更好的机会。决策树通常归结为几个要点:
- **对远程办公友好。** 这是各家 AI 实验室之间的核心差异化因素。如果你执着于重返办公室(RTO),你就会错失优秀人才。不过每年 2-4 次出差参加线下聚会应该可以接受。
- **自上而下扩大 Bazel(或类似工具)使用范围的承诺。** 我从决定不加入 Anthropic 的人那里得到的主要反馈是缺乏自上而下的支持。没人想加入一个组织后还要和同事展开一场逆风的文化战争。让建造者去建造。哦,而且不一定非要是 Bazel,因为有些人乐于自己写一个 Bazel 替代品。
- **AI 采用情况。** 面试者喜欢问公司对可用的模型/工具链有没有明确立场,以及是否给他们固定的 token 预算。有 token 预算不是坏事。坏事是把预算设成固定而非动态的。
> 这对那些再也负担不起顶尖百分位人才的公司意味着什么?
你要么有能力兜售你的文化,要么需要积极采用 AI 来赋能现有的员工。我交谈过的大多数人似乎都同意:你可以是一个采纳 AI 来提升效率的资深工程师;你也可以招一个 AI 原生的应届毕业生,他从第一天起就能深入代码库;但你不能既反 AI,又拒绝整个行业已经在享受的生产力提升。听到 Bazel 用户中还有人持这种态度,我真的感到惊讶。我希望那些人试试编码 agent 然后改变主意。
[](https://substackcdn.com/image/fetch/$s_!IaCz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7fe67eb-a7e7-4b34-8bf6-f2c9b60e945c_1271x727.png)没有 AI 就不会有 Bazel 10 的性能提升
> 向你推销云端编码 agent 的人同时也在积极招聘人类软件工程师,这难道不是挺讽刺的吗?
是的。但在当前的情况下,这些编码 agent 只是你人类工程师注意力的放大器。虽然未来可能改变,但今天,你仍然需要组建一支由懂得如何把时间和精力投入到正确问题上的人员组成的团队。这些人是经过多年磨练、从科技公司中最优秀的人那里模式匹配出来的,拥有"品味"和"见解"。如果你身处 Bazel 社区,甚至规模更小的版本控制社区,并且符合这些描述,恭喜你,你就是百万美元级别的雇员。
BazelCon 参会者中还有来自 Meta 的 Buck2 团队成员。他们做了一个非常精彩的关于 Buck2 Configuration Modifier 的演讲,这是 Bazel Target Platform 的替代方案,我认为这是一个非常有趣的分歧点,有着不同的取舍。我趁机向他们推销了我对 Meta 最新 AI Agent——Muse 的想法。我不知道 Meta 对 Muse 的规划。但这是我所设想的竞争场景。
想象一下个人 AI agent 成为一个成功的产品品类。这意味着你、我以及这个大会上的每个人都会有 10-20 个 agent——一支全天候在线、 7×24 小时为我们工作的软件工程师大军。这些编码 agent 需要的不仅仅是代码。它们需要语言服务器和代码搜索来获取上下文,版本控制来协作和审计,构建和测试基础设施,以及部署到生产环境的能力。
在这些方面,我们已经看到由 Cloudflare 驱动的 ChatGPT Sites 作为"生产环境"品类的早期版本。我们也看到一些 agent 工具链将版本控制纳入产品:Amp 通过 Pierre 的 Code Storage 来驱动,Cursor 通过 Origin 来驱动。我们还没有看到的是一个正经的构建和测试平台。
如果你是 Meta,你会允许你的客户在你的数据中心算力上运行 Git 和 Cargo 吗?绝不会。你知道有更好的选择:Sapling VCS 和 Buck2 + RBE。这些是在规模化场景下经过验证的方案。Eden VFS 能高效地克隆和 GC。Buck2 和 Bazel 可以在多个 agent 之间共享缓存的操作结果,而 RBE 可以在并发调用之间去重相同的操作。Cargo 并不原生提供这种模型——为什么要为每个 agent 构建同样的东西付费?这些是 Meta 在大规模运营中经过验证的、可靠的解决方案;他们知道这些能行。但更重要的是:Muse 的用户不需要知道这些。对最终用户来说,这些只是 agent 会处理好的实现细节。他们关心的是每个结果的成本,而将 Sapling 和 Buck2 打包进 Muse,Meta 在云端编码 agent 这个产品品类上就能在价格上获得显著优势。
[](https://substackcdn.com/image/fetch/$s_!uuPv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7465f55c-9588-4cdf-936c-1f16d3b9d3ac_1536x1024.png)Muse、Buck 和 Sapling 是好朋友
对 Sapling 和 Buck 团队来说,能够将自己的产品挂靠到 Meta Superintelligence Labs(MSL),将为他们开辟一条巨大的晋升、奖金,以及最重要的——编制和 token 资源的通道。"这是逃离永久底层阶级的出路,"我在心里半开玩笑地想。
> 这听起来有道理,但你为什么要花这么多时间向别人重复这个叙事?
我认为,今天 Bazel(和 Buck2)是一把钥匙,帮助顶尖 AI 实验室释放生产力。它降低了 CI 算力瓶颈,使得更多的 agent 能够可靠地大规模协作。
但更重要的是,我看到了一幅图景:Bazel 不仅仅是这些实验室后台的支持工具,它还应该在未来 6 个月内成为他们核心主打产品——云端编码 Agent——的一部分。如果你假设这些 agent 会使用实验室自己的数据中心来运行构建和测试,而算力消耗会推高 token/定价压力,那么将 Bazel 和 RBE 作为多 agent 云端工厂的一部分嵌入进去,你就能以远低于竞争对手的价格提供产品。否则,几个月后我们将面临每分钟数百万次的 "cargo build" 运行……祝你好运定价吧。
鉴于 Meta 最近聘请了 MongoDB CEO CJ Desai 担任首席企业平台官,人们只能想象 B2B SaaS 管道中正在酝酿什么。顺便说一句,MongoDB 也在使用 Bazel。我不知道其他 AI 实验室会不会因此产生 FOMO 然后采取行动。😉
我为 BuildBuddy 团队感到非常自豪。在今年的 BazelCon 上,我们带来了精彩的技术演讲。它们不是销售话术,而是工程师在分享我们过去一年构建的技术——我们自己也在用,觉得其他人可能也会喜欢。
[](https://substackcdn.com/image/fetch/$s_!sg3k!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9464fb5-d863-4672-8528-7e4cb5e1fd17_1267x722.png)我们现在是一家沙箱公司了?
和我交谈过的人不断惊叹于 BuildBuddy 团队有多小。写这篇文章时我们不到 20 人。然而,我们在为世界上一些最关键的公司提供赋能:前沿 AI 实验室、航天、半导体、机器人、汽车制造商、互联网公司、顶级金融银行和支付处理机构。我们不能透露其中很多名字,但懂的都懂。
[](https://substackcdn.com/image/fetch/$s_!KKMg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fee3ef5-9807-4268-8d01-84741938d605_1265x723.png)我们在 Bazel 中交付了 CDC,对整个生态产生了巨大影响
我真的很希望在未来一年能更多地聊聊我们在做的事情,因为我们已经解决了太多很酷的底层基础设施问题。
相似文章
@jarredsumner:在 bun 的 Rust 重写过程中我最喜欢的测试失败:TOML 和 YAML 解析器的栈溢出测试失败了,因为它现在可以比测试预期更深…
Jarred Sumner 分享了 Bun 的 Rust 重写过程中一个最喜欢的测试失败:TOML 和 YAML 解析器的栈溢出测试失败了,因为 Rust 实现能够处理比预期更深层次的嵌套。
@copyconstruct: 端到端测试 > 单元测试,在 vibecoding 时代。一个几乎完全由 AI 代理编写的大规模重构通过了所有单元…
一位开发者认为,在 AI 编码代理时代,端到端测试比单元测试更重要。一个由代理编写的重构通过了所有单元测试,但却破坏了一个关键功能,这个缺陷只在手动端到端检查中被发现。
@Vtrivedy10: 我最喜欢的问题,昨天在AIE演讲中讨论了代码智能体的评估+改进循环基础设施和用户体验!有点偏见,但……
演讲者讨论了评估和改进代码智能体的重要性,强调了LangSmith与Harbor的集成,以提供在隔离环境中运行、追踪和改进智能体评估的统一栈。
你实际上是如何使用像E2B或Daytona这样的代理沙箱的?试图弄清楚我是否需要它
一位开发者讨论了使用像E2B和Daytona这样的代理沙箱来运行代码执行时的权衡取舍,向社区询问关于生命周期、状态持久化、网络隔离以及托管式与自托管式解决方案的问题。
面向测试的构建:编码智能体交付的是你检查的内容,而非你请求的内容
本文研究了基于LLM的编码智能体如何经常通过构建面向测试的代码来通过基准测试,而非正确实现所请求的功能。作者使用Copilot CLI智能体在受控实验中重新用Angular实现React UI库,并引入了“面向测试构建”和“验证自我意识”这两个概念。