软件工厂的光与暗:当AI代理大规模编写代码,人类的判断力在哪里?
原文:Addy Osmani · https://addyosmani.com/blog/software-factories/
◆ 一、软件工厂:一个50年的老梦想
“软件工厂”这个术语最早可以追溯到 Bob Bemer 在1968年发表的论文《The economics of program production》。半个世纪以来,许多人梦想着软件开发成为一个可重复、可度量的生产过程,而非孤立的个体手工艺术。
从历史上看,这个梦想大多以失败告终。
但在过去两年里,情况已经发生了巨大的变化,足以让我们重新审视这个古老的梦想。
Dex Horthy 在 AI Engineer World’s Fair 上发表了精彩的演讲——Harness Engineering is not Enough: Why Software Factories Fail。
◆ 二、循环是原子,工厂是循环的规模化
结构就是一切。整个体系是三个概念:循环(Loop)、限制框架(Harness) 和 工厂(Factory)。
循环(Loop) 是一个代理重复执行单一任务的过程:收集上下文 → 采取行动 → 检查结果 → 重复,直到满足条件。
限制框架(Harness) 是围绕循环的围墙:它运行的沙箱、它可以使用的工具、运行之间持续存在的记忆、以及定义完成标准的门控。
软件工厂(Software Factory) 是多个加上 Harness 的循环同时运行,由工作队列供给,经过审查门控流入生产环境,而人类在顶层拥有对整个系统的所有权。
循环 → 限制框架 → 工厂。一个工厂不是一个更聪明的代理,而是多个经过约束的循环共同汇入一个审查门控,由人类掌控外层循环。
◆ 三、工厂的样子
Dex 花最多时间讲解的核心幻灯片很精妙,它是一个清晰的接线图。
工厂是一个闭环:意图和生产信号汇入队列,Harness 构建变更,自动化检查和审查门控拦截,部署上线,监控将生产数据转化为新的信号。
意图从工程领导层的愿景和工程师直接流入待办队列。事故和用户请求驱动的信号也推动着同一个队列。
整体来说,图中的每个框几乎都是零成本的:生成、测试、扫描。只有一个昂贵的框被证明强烈抵抗规模化,那就是审查门控。
◆ 四、为什么叫黑暗工厂?
黑暗工厂在物理上关着灯运行,因为车间里只有机器。黑暗软件工厂做了同样的事情:代码在没有人类阅读的情况下上线,仅由其他机器验证。
这个概念借自制造业。FANUC 在日本自2001年起就以熄灯模式运营工厂;小米在2024年也开设了一家黑暗工厂。
这些工厂的共同点是:产品从组装到发货,没有一个人阅读过任何细节。黑暗来自从流程中移除了阅读这一行为。
这是一个出奇容易做到的事情,至少一开始是这样。容易是因为那个缺失的审查步骤阻碍了一切。它的缺席让你对团队垂直吞吐量的感知突然而彻底地提升了一个量级。
同样的工厂管线,区别只在于灯在哪里开着。
◆ 五、仅有 Harness 工程是不够的
长期维护代码质量和应对增量变更方面,仅靠模型最终会在与理解债务(Comprehension Debt)的对抗中落败。
理解债务是指代码存在的总量与任何人类仍然理解的量之间的差距。一个黑暗工厂不会偿还这笔债务——它会以最快的速度借入更多债务。
周末玩具项目几个月就能运行正常。但一个已经开发了十年或更久 的企业系统是另一回事。
黑暗工厂真正擅长的是在测试保持绿色的情况下,快速消耗全新的代码。最后的清算会悄然来临,而且来得太迟。
◆ 六、瓶颈从来不是生成
软件工厂的根本约束不是我们能产出多少代码,而是我们能多快验证它。验证,而非生成,才是工厂的真正瓶颈。
生成是宽阔的入口,验证是狭窄的瓶颈。
"你不是有太多 PR,你是有太多糟糕的 PR。" —— Dex Horthy
◆ 七、重新点亮灯光
光明工厂(Lit Factory) 是同一个生产管线,只是在判断力所在的地方亮着灯。代理仍然完成大部分构建工作,但人类在上线前阅读了产出的内容。
光明版本不是在最后才加上审查,而是将人类判断力的节点向上游移动,放在产品、设计和架构阶段。
这个安全网由我们一直都知道但大多忽视的架构实践组成:良好的类型和方法签名、测试接缝(test seams)、清晰的代码布局、短小的调用栈、良好的组件边界、依赖注入。
这个安全网必须存在于模型之外,因为模型不会提供它。那些感觉最强大的编码代理——Claude Code 和 Codex 等——是通过对其自身 Harness 和工具的强化训练得到的,不擅长长期可维护性。
◆ 什么条件值得为循环关灯?
一个循环只有在满足以下条件时,才能赢得完全自动化的资格:
- 检查成本低廉
- 高频运行
- 依赖于不容易被伪造的信号
短循环比长循环更容易验证。 Dex 的经验法则:一个代理能在3到10步内保持专注,超过20步就开始迷失。
危险在于忘记逐个翻转开关,而是把所有的开关都设为同一模式。全部关灯——四个月后你会被困在必须推倒一切重建的泥潬里。全部点灯——没有人能及时完成审查。
◆ 八、循环、图还是状态机?
当你给一个代理分配任务时,你很可能会围绕它构建一个图(graph)。
软件本来就一直都会有那种结构。 我们过去用流程图来绘制程序,不是没有原因的。
大多数所谓的代理其实并没有那么代理。它们大部分是确定性代码,只是在正确的点上加入了 LLM 步骤。—— Dex Horthy
◆ 九、人类到底去了哪里?
注意:人从未离开工厂。他们只是换了位置。
工程师需要越来越多地拥有外层循环(the outer loop)。代理可以调查 bug、写出诊断报告、实现修复、运行测试、写出总结报告。但这从来不是真正的本职工作。
你拥有的部分是外层循环:决定是否是解决问题的正确方式、验证诊断和实现是否合理、审批变更、承担出错后的后果。
你不再在生产线上写代码了;你站在生产线的末端,设计着整条线,守望着大门。核心仍然是行使人类判断力。
机器在黑暗中运行没有问题,但人类需要看到他们在做什么。如果工厂车间里一片漆黑,你什么都看不见,甚至找不到灯的开关——那才是真正的危险所在。
夜雨聆风