脚手架工程:老生常谈

2026-03-19 · 原文链接

去年在一次黑客松上,有人问我:“我能用你那 20 美元的 AI 订阅服务做一个 Facebook 吗?”我尴尬地笑了笑。

今天,你确实可以。动态流、个人资料、点赞、评论、身份验证,花一个周末,加上 20 美元的 Claude 订阅,搞定。但说实话,当我看到它跑通的那一刻,我并没有感到惊讶,反而觉得有些失落。因为这个问题从一开始就错了。没有人需要另一个 Facebook 克隆版。代码从来不是让 Facebook 价值万亿美金的原因。

现在,代码是可以大规模生产的。然而,我们的整个行业却在投入全部精力,试图让代码生产效率再提升 10%。

这种努力有一个名字:脚手架工程(harness engineering)。我也曾在上面投入过大量时间。我配置过 hook,设计过跨智能体的工作流,微调过子智能体。但我总是得出同一个结论:有用的部分并不新鲜,新鲜的部分并不持久,而且经济账从来都算不过来。还是老一套的故事,只是换了个流行语。

剥离那些术语,看看真正起作用的是什么。

“背压机制(Back-pressure mechanisms)”、“上下文防火墙(Context firewalls)”、“渐进式披露(Progressive disclosure)”、“黄金准则(Golden principles)”。几个月来的博客文章、会议演讲、arXiv 论文都在讨论这些。

但当你观察那些团队在经过数月的迭代后真正保留下来的东西时,你会发现总是那几样:测试、linter、CI、清晰的文档、Git 规范、架构契约。本质上是让智能体能够验证它自己的输出。

关于这些,我们已经有写了三十年的书了。把“写好测试”称为 AI 领域的革命,就像把“勤洗手”称为医学突破一样。它是正确的、重要的,但绝不是新鲜事。

至于那些真正新颖的部分——子智能体编排、推理三明治、基于追踪(trace-based)的优化——这里有一个公开的秘密:大多数复杂的玩意儿即使被剥离掉,结果也几乎不会改变。

Pi,一个自称为“极简终端编程脚手架”的编程智能体,发布时完全没有这些。没有子智能体,没有计划模式,没有 MCP。只有模型、文件工具和 shell。人们每天都在用它交付真正的软件。有时候,少即是多。

价值曲线是一个阶跃函数。而我们已经跨过去了。

一个任务要么完成了,要么没完成,没有“完成度 73%”这种说法。模型在过去一年跨过了那个门槛。那才是至关重要的跨越。脚手架工程则存在于在那之后的平原上——在平庸的基准线和 Terminal Bench 上最好的脚手架之间苦苦磨砺,而仅仅一次模型升级就能免费送你 5 到 10 分。

下一个巨大的跨越将来自下一个模型,而不是更多的中间件。

这里没有乘数效应。

谷歌在每天 85 亿次搜索中将点击率(CTR)提高 1%,意味着每年约 15 亿美元的收入。同样的优化,发生在数十亿次相同的交易中。这就是乘数。

编程则没有。每个任务都是离散的。可靠性提高 15%,对于一个典型的开发者来说,意味着每隔几天能多成功完成一个任务。而且与广告不同,人类在环节之中,他们会看到输出,进行评判,如果有必要就重新运行。

AI 大规模扩大了代码的供应,边际成本趋近于零。但需求并没有变化:值得解决的问题数量、愿意付费的用户、分发的难度,一切照旧。

这个周末有一万个人能做出 Facebook。但值得使用的仍然只有一个,就是你朋友都在上面的那一个。瓶颈从来不在于“我们能否产出代码”。

还有一点,我认为关于脚手架的讨论一直忽略了:成本近乎为零且速度达 1000 tokens/sec 的 Opus 4.6,比维持现状价格的 Opus 5 更有意义。当推理成本几乎为零时,你不需要聪明的脚手架来保证一次成功。并行运行 20 次,让 CI 选出胜者即可。当重试成本趋于零时,暴力破解胜过优雅。

我觉得这之所以流行,是因为这是我们大多数人唯一能做的事。

我说这话并不是为了贬低。我也包括我自己。

你无法训练模型,那是 Anthropic 和 OpenAI 的活儿。你无法控制定价或推理速度。你无法改变公司的产品与市场契合度(PMF)。你无法凭空变出用户。

但你可以修改 AGENTS.md。你可以添加一个 hook。你可以接入一个子智能体。于是你就这么做了。这感觉就像是在做工程,因为从技术上讲,它确实是。你在写代码、测量数据、迭代。它具有真实、高效工作的外壳。

但我认为我们应该诚实地问问自己:这真的是我们投入时间的最优解吗?还是说,我们只是在优化那些我们可以触碰到的东西,因为那些真正重要的事情——产品、分发、单位经济效益——更难、更令人生畏?

我没有一个完美的答案。但我认为这个问题值得深思。

如果说有一件事是值得做的:

那就是让你的代码可以被智能体自身验证。类型系统、会大声报错的快速测试、智能体可以触发并读取的 CI、模块间清晰的契约。

这才是杠杆所在。每一个花哨的脚手架组件都在试图复制一个简单的想法:给智能体一个明确的信号,告诉它输出是否正确,并让它迭代。如果你的代码库能做到这一点,智能体就会搞定剩下的事——无论脚手架多么简单。

agent = model + harness

脚手架(harness)这一项每个季度都在缩小。

agent ≈ model

现在的游戏规则是成本和速度。而这两者都不是靠脚手架解决的。

我知道有些人会不同意这一点,这没关系。如果你正在构建脚手架,而且它确实在帮你交付,那就继续。但如果你隐约感觉到,你花在配置智能体上的时间比真正用它构建东西的时间还要多,也许是时候停下来,问问真正的瓶颈到底在哪了。

代码从来不是难点。老生常谈。