Eric Xu : 2016 年,我做过一次 AI 写代码创业

2016 年,当 AI 还远没有成为今天这样的全民浪潮时,我已经开始认真尝试一件事:用语言模型来理解、修改和生成代码。

我给公司起名叫 ai.codes。这个名字几乎不需要解释:AI codes——把 code 当作动词,意思就是“AI 写代码”。

这个愿景在十年后的今天终于成为现实。“Agentic Coding”的浪潮已经席卷全球。只是当这一切真正到来时,我当年的那次创业,早已停在了 2016 年。

今天我想把这段往事写下来。它既是对那个技术爆发前夜的记录,也算是给 30 岁的自己留下一封迟到的回信。

当年的愿景

前史:我为什么会相信这件事

2011 到 2014 年,我在 Google 工作。那时我有个习惯:去看 Jeff Dean 最近又写了什么代码。

2013 年夏天,我注意到他在参与一个叫 DistBelief 的项目。那是 Google 早期的大规模分布式神经网络训练系统,本质上是在 CPU 集群上把神经网络的 forward 和 backward 过程做成分布式计算。虽然我当时并不知道 Jeff Dean 最终想把这条路带到哪里,但这件事成了一个契机:我开始花大量时间系统地学习神经网络。

2014 年,我离开 Google,搬到旧金山湾区,加入当时还不算显眼的 Fitbit。

因为此前已经对神经网络的能力有了比较深的认识,所以在 Fitbit 时,我主动把卷积神经网络引入到睡眠周期分类的问题里。Fitbit 是全球最早在可穿戴设备上做睡眠周期识别的公司之一,而我当时带的小组,应该也算是业界较早把卷积网络真正用到这一问题上的团队之一。那时主流方法仍然是特征工程加线性分类器,而我们在实践中很快发现,卷积神经网络的效果明显更好:它学到的信号表示,比人工构造出来的特征更强。

工作上我用的是卷积网络,但真正让我着迷的,其实是神经网络在自然语言处理上的潜力:翻译、理解文本,以及进一步地,理解程序。

我当时特别好奇:神经网络能不能写代码?尤其是那些我认为非常繁冗、复杂度并不高、模式却很多的代码。因为在工作里我常常看到,工程师尤其是做底层系统的工程师,很多时候不是在写配置,就是在写“生成配置的代码”。而与此同时,机器翻译已经开始取得真正的突破。既然 AI 可以做自然语言之间的翻译,那它为什么不能做自然语言到代码的翻译?更何况,很多代码在统计意义上比自然语言更规整、更低熵。

那时候我一直在博客上写《编程珠玑番外篇》,对各种编程语言的特性,以及人类编程过程中的种种困难,也算有不少思考。我逐渐意识到,在 AI 还远不完善的时候,真正可行的路径不是纯 AI,而是把 AI 和编译器技术谨慎地结合起来。

这些朴素的判断、长期积累的技术兴趣,以及对自己工程能力的信心,最终汇成了我创业的起点。

2016 年 8 月,我从 Fitbit 辞职,决定全职去做这件事。

那时候很多人注册的都是 .ai 域名。我偏偏反其道而行,注册了一个我至今仍然觉得很炸裂的域名:ai.codes。意思非常直接:AI 写代码。

第一版产品:从自动补全开始

语言模型和代码自动补全之间的联系,其实是非常直接的。所以我最早做的产品,就是一个更智能的代码自动补全工具,目标很简单:提高程序员在 IDE 里的工作效率。

为此,我下载了当时 GitHub 上大量的开源代码,专门搭了一套后端存储和训练架构,并在 GPU 上训练了一个在当时已经不算小的语言模型。它的任务和今天的大语言模型并没有本质区别:预测下一个 token。

2016 年时,Transformer 还没有出现;LSTM 仍然是最现实的序列模型选择。所以我的预测模型最终是一个 4 层 LSTM。现在回头看,它当然还很早期,但在当时已经足够让人震撼。

代码和自然语言相比有一个天然优势:它的下一个 token 往往受到更强的语法约束。比如前面没有出现左括号,后面就不应该凭空出现右括号。所以我当时很自然地加了一层约束:把那些在当前语法位置不可能