巴别塔持续增高:AI代理如何消解软件协作的共同语言
我总觉得,有些经过振动编码的软件会以某种随机且出人意料的方式发生改变。 这让我开始思考布鲁盖尔的《巴别塔》——这幅画作生动地描绘了 一座本已相当混乱的巴别塔。故事通常被讲述为一则关于骄傲与野心的故事,以及最终为何人们不再说同一种语言的寓言。然而,它同样也是一个关于团结协作、推动技术进步的故事。
文本开篇便提及了一项技术升级:
他们彼此说道:“来吧,我们造砖,把它们烧得透彻。”于是,他们用砖块当石头,用黏土当砂浆。
他们将此用于一项文明工程:
“让我们建造一座城市,再建一座高耸入云的塔。”
然而,当上帝审视这一局面时,他却并未在意那些砖块:
“众人都是同一个民族,说着同一种语言……如今,任何事都难以阻止他们。”1
他们的力量源自于协作:他们共享一种语言,并凭借这种共同的语言,将各自的工作融合成一件前所未有的成就——一件单凭个人之力无法完成的伟业。 上帝并未夺走砖块,也未剥夺他们制造砖块的知识; 他只是夺走了他们彼此理解的能力,于是施工也随之停滞。
令人着迷的是这样一个观点:由人工智能辅助编程所带来的,是更强大的工具,使我们能够构建出更加雄心勃勃的软件。 在个体层面,这一点无疑是真实的;毫无疑问,拥有一个代理的开发者,将能以惊人的速度对代码库进行改造与优化。 然而,大型软件项目从来不会仅仅受限于个人编写代码的速度。 真正限制这些项目进展的,是人们在理解所要改造的系统时,能否实现高效的协作。
软件项目的共同语言,并非英语或Python,而是大家对软件概念本质的共同认知——包括这些概念的含义、 边界在哪里、哪些不变量至关重要、谁拥有什么、以及为什么这个系统呈现出如今的形态。 这种语言很少被完整地记录下来,它既存在于文档和代码中,也体现在代码审查、 对话、争论之中,以及那些不得不向他人解释变更内容的经历里。
在有代理之前,这种共同的理解往往需要通过摩擦来维系。 如果我想更改你的存储层,我通常需要阅读你的代码,向你提问,并可能与另一支依赖该服务的团队进行协调。 这样的过程既缓慢,而且其中大部分的迟缓其实并非完全无用——有些时候,正是通过这种摩擦, 你的理解才逐渐融入我的理解之中,而我们双方也得以发现:我们是否依然对系统的运作方式达成共识。 正是这种摩擦,让彼此之间的互动得以同步。
而代理则大大减少了这种摩擦。我可以请代理添加OAuth功能,你可以请代理加入缓存机制, 还有人可以请代理从零开始重建数据库,并将用户界面改造成粉红色。 每项改动在孤立状态下都显得合理:代码可以编译通过,测试可以顺利通过,而解释也能按需自动生成。 我们无需一定彼此交谈,甚至不必去掌握原本需要我们共同学习的那部分共享模型。
正如我多次提到的:代理并不会感到痛苦,只有人类才会如此。 如今,代理让我们得以在系统中的某些环节中自主行动——而这些环节过去往往需要依靠他人, 也常常让相关人员围绕着代码库运转。
当我审视一些经过振动编码的规模化项目时,你会发现,这些代码库之所以被称为“巴别”, 并不是因为没有人能够沟通,而是因为根本不需要沟通。 每一位开发者都有一位不知疲倦的翻译者,他能够为你解读塔楼的某个角落,并根据你的需求, 对塔楼做出任何本地化的调整。这些改动不断涌现,即便那种本应让人类共同思考、 共同理解的架构语言,也悄然消逝了。
但这一切并非圣经中的故事。在巴别塔的故事里,语言的丧失导致了施工的中断; 而在人工智能辅助工程中,当共同的理解已然崩塌之后,施工仍可继续进行。 正是这种缺乏即时性失败的特性,使得这一场景既引人好奇,又略显迷茫:塔楼并未倒塌, 我们也因此未曾察觉到曾经失去的东西——它只是持续向上延伸。