工具大全
AI 教程作者:Coocon2026年7月27日267 次阅读约 10 分钟阅读

「关灯」软件工厂跑了四个月,他的联合创始人手写了两周代码善后

「关灯」软件工厂跑了四个月,他的联合创始人手写了两周代码善后

7 月下旬,一篇标题为《Why Software Factories Fail》(为什么软件工厂会失败)的长文冲上 Hacker News 首页,截至写稿时拿到 390 分,评论区吵了几百楼。它基于作者在 AI Engineer World's Fair 2026 上的主题演讲,副标题更扎心:harness engineering is not enough——光靠工程手段兜底,是不够的。

这篇文章值得认真读,原因和大多数「AI 写代码不行」的文章恰恰相反:

作者不是 AI 怀疑论者,他是靠教人用 coding agent 出名的人。

Dex Horthy,HumanLayer 创始人,《12-Factor Agents》的作者,讲「Advanced Context Engineering」的那几场演讲在 YouTube 上累计约百万播放。过去一年里,无数团队照着他的方法论搭 agent 工作流。

现在,这个人站出来说:我把「没人看代码」的软件工厂在自己公司真跑了一遍,结局是联合创始人在 VS Code 里手写了整整两周代码收拾残局。

一、先讲清楚:什么是「关灯工厂」

「软件工厂」这个词不是 2026 年发明的,它可以追溯到 1968 年——和「软件工程」出自同一场 NATO 会议。半个多世纪以来,人们一直梦想把软件生产变成流水线,而不是手艺人的孤独劳作。

AI 时代的版本大概长这样:需求进队列,agent 领任务写代码,自动化测试和 review bot 把关,出问题的事故单也自动流回队列。人的工作只剩两个问题:往队列里塞多少活,以及多快能审完产出

然后有人想:既然审代码是瓶颈,把这一步删掉不就行了?

这就是「关灯工厂」(lights-off factory)。这个词借自制造业——日本 FANUC 从 2001 年起就运行不需要开灯的车间,因为车间里只有机器人,而机器人不需要光。软件版的「关灯」是:上线的代码,没有任何人类读过,只有机器验证过。

这不是纸上谈兵。StrongDM 公开运营着一个「无人写代码、无人读代码」的工厂,Simon Willison 今年 2 月专门写文章介绍过;OpenAI 的 Ryan Lopopolo 也在 2 月发文讲「harness engineering」,介绍内部的软件工厂 Symphony;Ramp、Stripe、WorkOS、Brex 今年都陆续宣布 agent 生产了大约 75% 的代码。

支撑这一切的叙事只有四句话:你是瓶颈;模型已经够好了;代码是免费的;多发就完了。

二、他真的试了:2025 年 7 月开灯变关灯,11 月人肉重写

Dex 的团队在 2025 年 7 月全面转向关灯模式:人只读 spec 和工单,中小型任务全交给后台 agent,没人看产出的代码。

按他的复盘,剧本是这样展开的:

第一次,出现了一个 agent 无论如何解不掉的硬骨头 bug。深度检索、上下文精编、让 agent 用十种方式复现——都不行。最后只能咬牙钻回那个三个月没人读过的代码库里人肉排障。这期间:网站宕机,用户暴怒,而他自己「痛苦地读着当初放进系统的一坨坨 slop 代码」。

第一次他忍了,「为了速度,这点下行风险值得」。

到 11 月第三次发生同样的事,团队做了一个决定:与其继续修,不如推倒重写。他的联合创始人在 VS Code 里——他特意强调「甚至不是 Cursor」——花了整整两周,把所有代码模式一行行手工重建。

从 7 月到 11 月,这个关灯实验跑了大约四个月。这个时间点值得记住,因为它和另一个观察对上了:Dex 说,以现在的出货速度,一个 agent 生成的代码库大约 3 到 6 个月就会进入「brownfield」状态——过去这个词指十年陈酿的 Java 老系统,现在指你自己上个季度刚 vibe 出来的项目。

三、根因不在工程侧,在训练侧:坏设计没有惩罚

这篇文章真正的价值不是讲故事,而是往下挖了一层:为什么模型会这样?

Dex 的答案要从 coding 模型怎么训练说起。强化学习(RLVR)的循环大致是:让 agent 生成解题轨迹,用某个「打分器」判分,然后更新权重让高分轨迹更常出现。这个循环要跑几百万次,所以打分必须又快又准。

问题就出在打分上。以 SWE-bench Multilingual 为例——任务是从 Redis、Django、fastlane 这类开源库里挖出来的真实 issue,每个大约 15 分钟工作量,打分只有两条:

  • FAIL_TO_PASS:你修好要修的东西了吗?
  • PASS_TO_PASS:你有没有把别的弄坏?

过了就是 1,没过就是 0。他举了个真实例子:fastlane 的 zip action 对两个可选参数直接调 .empty?,不传参就崩。人类当年的修复是两行代码——给参数补上默认空数组。而模型在评测里怎么修的、修得优不优雅、有没有顺手留下一堆防御性 try-catch 和摧毁类型系统的强转——完全不影响得分

他把这句话单独放大加粗:

there is no penalty for eroding codebase maintainability(破坏代码库的可维护性,没有任何惩罚)

更麻烦的是时间尺度的错配:

测试几秒钟就能给你反馈,但坏架构的代价,要用几周、几个月甚至几年来计量。

坏的设计决策埋下去,几个月后才以事故的形式爆炸——而没有任何机制能把这次事故「反向传播」回当初那个决策。RL 需要一个快速、可靠的裁判,而「可维护性」恰恰没有这样的裁判。于是这套哲学最刺的一句话出现了:

如果模型能可靠地分辨好代码和坏代码,它一开始就会把好的那版写出来。

顺带一提,这套逻辑也解释了另一件事:Claude Code 为什么能在一年内从零干到约 90 亿美元年化收入,把更早出现、上下文工程做得也不差的 aider、cline 们甩在身后——公认的解释是 Anthropic 在 harness 内部做了 RL,第一次让模型针对它将要搭载的那套工具本身进行训练。RL 决定了模型擅长什么。而 RL 没教的东西,再多的 loop 和 prompt 也补不回来。

四、数据侧的旁证,和必要的免责声明

Faros AI 今年发了一份报告,观察各团队自年初大规模采用 AI 编程工具之后的变化:review 评论多了 25%,评论变长了 22.7%,31.3% 的 PR 完全跳过 review 直接合并;每 PR 事故数 +242.7%,月度事故 +57.9%,每工程师 bug 数 +54%。

必须实事求是地说:Dex 自己都标注了,这是相关性信号,不是实锤——采用 AI 工具的时期恰好也是很多团队疯狂提速的时期,因果很难剥离。但他的评价是「方向上和我亲眼所见一致」。

五、反方观点:HN 评论区没有全信

这篇文章在 Hacker News 上并非一边倒,几条主要的反驳值得原样呈现:

「你的实验过时了。」 点赞很高的一条评论指出,业界普遍认为模型在 2025 年秋到 2026 年春之间发生了阶跃式提升,「7 月那次失败的经验,对现在这代模型可能已经不适用」。Dex 在文中预判了这个反驳,他的回应是:模型在「单次解题」上确实好了很多,但在「长期维持代码库质量」上,据他观察没什么变化——同时他也坦承:这一点他证明不了,因为根本不存在衡量这个能力的基准测试

「StrongDM 那边好像跑得挺好。」 有评论者指出,StrongDM 关灯工厂的团队成员已经出来开了家咨询公司,从结果看这条路没有失败,问题可能不是「不可能」,而是「大多数人不够严谨」。

「为什么不直接在 RL 里给坏设计加惩罚?」 这条问到了点子上。事实上业界正在做:Abundant AI 的 SWE-Marathon 在构建约 400 小时量级的超长任务、用复合奖励替代单一 pass/fail;Cognition 的 Frontier Code 用变异测试的思路惩罚「写了等于没写」的测试,还在 diff 上跑代码质量裁判模型。Dex 对这些的态度是「方向对,但现在还不敢把代码库押上去」——裁判模型的天花板,仍然是那个悖论:能可靠判断好坏的模型,早就自己写出好代码了。

「模块化就能绕过去。」 有人提出:既然 agent 不擅长维护性,那就由人类先定好模块化架构,再放 agent 去填充模块内部——维护性不重要的地方随便 vibe。这其实和 Dex 自己的解法殊途同归。

六、他的解法:不是关灯,是把人的判断前移

文章结尾给出的方案,说穿了非常保守:把 code review 加回来,然后用规划降低 review 的成本。四个阶段,每一段都是人机协作而不是全自动:

  1. 产品评审:一页纸讲清楚「解决什么问题」和「成功长什么样」,能用 HTML mockup 就别用三段文字吵架;
  2. 系统架构:服务、接口、库表怎么对话,用时序图和 contract 对齐;
  3. 程序设计:他认为被严重低估的一环——在写实现之前,先对齐类型、函数签名、调用栈树、文件树 diff。这些东西模型起草、人来吵架,每一条都是你原本要在 code review 时(最贵的时刻)才被迫做的决策;
  4. 垂直切片:拒绝模型最爱的「水平计划」(先全部建表、再全部写服务层、再全部写 API),改成每次打穿一条能跑通、能用 curl 戳一戳的细缝,每 100-200 行代码看一眼、纠一次偏。

他也没有走向另一个极端:团队里约 40% 的任务照样一把梭给 agent,只有中大型改动才走完整流程。核心的账是:30 分钟规划,省下几小时 review。放弃「10-100 倍快、还不用看代码」的幻想,换取「2-3 倍快、并且安全」的现实。

最后一条建议只有五个词:Read the dang code(把代码读了,就现在)。

七、我的解读:这和「删掉 80% 提示词」是同一枚硬币

Google 的 Addy Osmani 随后写了一篇回应《Software Factories, Light and Dark》,贡献了一个可能比原文流传更久的词:理解债(comprehension debt)——代码总量和「人类仍然理解的部分」之间不断拉大的差距。关灯工厂不偿还这笔债,它以最快的速度举债,而且测试一路全绿。清算不会以戏剧性的方式到来,它会「安静地、迟到地」到来。

把这篇和我们之前写过的《Anthropic 删掉了 Claude Code 80% 的系统提示词》放在一起看,会看到一个有意思的分工:上下文工程决定的是单次产出的上限——提示词删得再漂亮、harness 搭得再精巧,都是在优化「这一把」的质量;而 Dex 谈的是另一个维度:代码库的长期命运,取决于人类保留了多少理解。前者是可以卷出来的,后者目前卷不出来,因为它没有进入任何一个训练循环的奖励函数。

对普通开发者,这篇文章可操作的启示大概是三条:

  1. 警惕「测试全绿」带来的安全感。 绿色只证明了打分器关心的那部分。你的代码库里此刻正在发生什么,打分器不知道,模型也不知道——只有读代码的人知道。
  2. 把和 agent 吵架的时间花在写代码之前。 类型、签名、调用栈、文件布局,这些在规划阶段改一句话的事,到了 review 阶段就是 2000 行看不懂的 diff。
  3. 给自己的项目记一个「3-6 个月」的闹钟。 如果一个重度依赖 agent 的代码库开始让你觉得「改一处、崩三处」,那不是你退步了,是理解债到期了。

最后值得说明:Dex 在文章开头就自曝立场——他的公司 HumanLayer 卖的就是「人机协作」工具,这篇文章天然利好他的生意。但读完全文你会发现,他最有力的论据恰恰不需要你信任他:SWE-bench 的打分规则是公开的,任何人都可以去核实那个 0 和 1 之间,确实没有给「好设计」留位置。


参考链接

相关文章

Claude Code 报错 temporarily unavailable, so auto mode cannot determine the safety of bash 怎么解决

Claude Code auto 模式弹出「temporarily unavailable, so auto mode cannot determine the safety of bash」?先说结论:不是你的命令危险,是安全判定器(一次额外的模型调用)暂时联不上。本文给出四步处理、模型名×工具名×原因的完整变体速查,以及只读操作为何不受影响的机制解释。

llmclaude-code+3
pitfalls2026年9月4日4 min
260

复现一条能打穿 Claude Code auto 模式的注入链:模型拒跑恶意二进制,却自写代码把自己坑了

embracethered 8 月底放出一条攻击链,让一句『总结这个网页』把 auto 模式的 Claude Code 拖到 60~80% 的代码执行成功率——而 Anthropic 委托第三方测出的数字是 0.00%。我在隔离环境里把这条链拆开逐段实测:诱导模型从 WebFetch 降级到 curl 的分流端点、以及最关键的一环——模型『拒绝运行陌生二进制、改自己写 Python 解码器』这个安全决定本身,反而踩中了同目录下的同名 struct.py 投毒。确定性部分(分流 + 同名模块投毒 + 缓解对照)在本机完整复现并给出真实证据;live 端我这台机器因判定器限流 fail-closed 而没能跑通完整 RCE,如实标注。文末给出真正有用的缓解手段。

claude-codeauto-模式+5
hands-on2026年8月31日9 min
280

抓包拆开 Claude Code auto 模式的判定器:11 万字系统提示词逐段解析

上一篇复测确认了 auto 模式在放行 Bash 前会调一次会话模型当判定器,但那个判定器收到的到底是什么,一直是黑盒。这次我用本地日志代理把判定请求整包抓了下来:一份 116,879 字符的系统提示词,开头写着 You are a security monitor for autonomous AI coding agents。本文逐段引用抓包原文,拆开它的威胁模型、两级规则(1 条 HARD BLOCK / 68 条 SOFT BLOCK / 17 条 ALLOW)和两阶段判定流程——第一阶段只评估危害、明确不看用户意图,第二阶段才叠加意图和豁免。附三张真实终端截图和抓包证据,所有数字均来自本次读出,未经估计。

claude-code提示词+5
hands-on2026年8月30日11 min
302
把家里的 Mac mini 变成 24 小时在线的 Claude Code 工作站:claudecodeui + SSH 反向隧道,手机浏览器随时接管

把家里的 Mac mini 变成 24 小时在线的 Claude Code 工作站:claudecodeui + SSH 反向隧道,手机浏览器随时接管

家里的 Mac mini 常年开机跑 Claude Code,人在外面怎么用浏览器接管会话?这是一套上线一周、每天在用的真实方案:claudecodeui 做 Web 界面(选型对比了官方 Web 版、ttyd、code-server),SSH 反向隧道把它推到 VPS,nginx 加 TLS 和登录限流反代成一个普通网址。附完整配置、真实运行数据(隧道五天零掉线、内存 170MB)、上线一周就踩到并自己修掉的 <synthetic> 占位符 bug,以及「为什么不用 Tailscale」的正反论证。

claude-codeclaude-code-lab+7
claude2026年8月29日10 min
374