Cursor可谓是最近最火的AI代码类应用。
AI大神AndrejKarpathy多次在推特上夸赞Cursor,说Cursor的体验已经碾压式的超过了GitHubCopilot。
8月份,他们宣布获得A轮6000万的融资,a16z领投,OpenAI和谷歌首席科学家JeffDean参投。这家公司现在估值达到4亿美元,年度ARR收入超过1000万美元。
和其他的CodeCopilot应用不同,Cursor定位自己是TheAI-firstCodeEditor。不仅仅是编码插件,而是构建一个新型的代码编辑器——“面向程序员的GoogleDocs”。
“我们需要一个全新的AI驱动的IDE”,Cursor联合创始人AmanSanger是这么说的。在他看来,AI中的新功能需要AIUX的新创新,需要重新设计软件开发流程。
从最早打算做CAD大模型,到后来转型做Cursor,中间到底有过怎么样的探索与思考,以及,AmanSanger是如何看待AI代码和AI的未来?在2023年LatentSpace的一期播客里,主持人Alessio、Swyx与AmanSanger聊了聊Cursor的创业思考。
一、Cursor的出发点,是重新设计软件开发流程
Swyx:直接来聊Cursor,毕竟这是你们现在的主打产品。2023年1月,你们向全世界公布了它。也许可以带我们了解一下Cursor的想法演变过程。
然后到了2022年12月份,我们设法提前拿到了GPT-4的使用权限。在那之前,我们其实已经用GPT-3.5的早期版本试过写代码了。但我们差不多放弃了,因为看起来无论是TextDaVinci2还是CodeDaVinci2,这些3.5的老版本,都做不了什么有意义的事情。
但是当我们打开GPT-4的playground,开始往里面粘贴代码,那效果让人大吃一惊。要知道,那时候大家还没开始大规模使用ChatGPT呢。
Swyx:你们用的是早期版本吗?
Aman:对,是的。
Swyx:所以是更早的版本,那种还没被约束的原始版本?
Aman:哦,其实不是,它还是很安全的。不过那时候人们还没开始普遍使用它。HumanEval(基准测试数据集)已经存在了,但在大家都开始谈论它之前,我们就尝试用这个进行测试,结果得分达到了85%。我们当时就惊呆了,要知道,当时最好的开源模型也就30%的得分。CodeDaVinci2大概是47%左右。而且,你看,现在的GPT-4得分也差不多。
然后我们就开始在里面写代码,就是把我们正在测试和开发的各种代码随便复制粘贴进去。我们发现它不仅擅长创造新东西,还能重构代码、编辑代码、帮你调试。软件开发的方方面面,用这些模型感觉都完全不一样了。
接着我们就在脑子里畅想了一下未来。这才是GPT-4呢,要是有了4.5、GPT-5会怎样?这些模型在编程方面只会越来越厉害。未来可能不会是你按Tab键然后回车就能自动补全更多东西那么简单。我觉得自动补全是个很有用的工具,我们每天都在用Copilot,觉得挺好用的。但是你想啊,如果语言模型能生成90%、95%的代码,那还按原来那种方式来肯定是不行的。
我觉得得彻底重新设计整个软件编写的方式,整个用户体验都得改。这就是我们做Cursor的出发点,你得掌控整个IDE,彻底重新设计软件开发的流程,其实是重新设计整个软件开发的方式。
Swyx:你刚才说的这些可不是小事啊,得好好聊聊。我想往回捋一捋。你们提前用上了GPT-4,这是不是意味着你们其实是得到了OpenAI的支持,在做Cursor之前就加入了OpenAIFund?
Aman:嗯,差不多吧。
Aman:是这样的,OpenAI有个叫Converge的项目,我们参加了这个项目。通过这个项目,我们最大的收获就是可以提前体验到还没发布的模型。当然了,这些都没有用于生产环境,也不可能用于生产环境。就是让我们偷偷瞄了一眼GPT-4。所以,在我们真正开发Cursor之前,我们没有从OpenAI那里拿钱,但我们确实参与了这个项目。
Swyx:明白了。对了,你还提到一件有意思的事。你们现在还在用Copilot,但同时也用Cursor。对吧。你还说Copilot可能是用上万亿个token训练的,这意味着从最初的Codex到现在,它经历了大量的训练。
Aman:我是这么想的,你看StackOverflow?它有多少来着?一到两万亿个token?差不多这个数吧。我很怀疑Copilot会用更少的数据训练,特别是现在还有那么多关于它是否属于“合理使用”的官司呢。
Swyx:所以,我猜就是上万亿个token。
Aman:我也不太确定。不过我敢说,如果你算一算GitHub上有多少公开代码,肯定是以万亿计的。
Aman:我对这个问题有些想法。你知道,现在大家都在讨论chinchillascaling(一种模型训练方法),但又有人说,因为推理的原因,chinchillascaling其实不重要。不过,Copilot可能是一个MoE系统。
Swyx:他们管这个叫语义缓存,对吧?我猜如果大致嵌入到同一个东西,就直接返回相同的结果。
Aman:我觉得部分是这样的。比如说,如果你光标前面的代码后缀稍微变了一点,他们可能不会真的去用不同的……
Swyx:这对代码来说似乎有点危险啊。
Aman:确实看起来有点危险,但这样可以让响应速度非常快。还有一个就是KV缓存,你知道吧?虽然我觉得现在还没有开源框架在做这个,但如果你已经在KV缓存上计算过一些东西,你就可以直接……
Swyx:这里说的是注意力机制中的KV缓存,给大家解释一下。
Aman:对,就是注意力机制的KV缓存。如果你已经计算出了所有的键和值,你就可以把它们存在内存里,然后直接加载到GPU上,这样就不需要再处理一遍提示了。我猜他们在后台可能就是这么做的。
Swyx:那需要不少内存和存储啊。
Aman:除非他们用了类似多查询注意力(multi-queryattention)之类的技术……
Aman:我们之所以这么决定,是因为我觉得从长远来看,虽然现在Cursor和其他工具提供的功能可能和VSCode差不多,但从长期来看,你需要设计一个完全不同的用户体验,而这是插件无法给你的。
我们听说过一个故事,说Copilot的多行幽灵文本(multi-lineghosttext,就是那种半透明的提示文本),其实不是通过插件实现的。GitHub的团队不得不联系VSCode,让他们修改源代码,才能启用那个扩展API。这就是多行幽灵文本补全的实现方式。这挺吓人的。
想想看,如果VSCode在他们的源代码中还启用了一些其他API,但这些API只对Copilot开放,对其他所有人都是关闭的。所以我觉得这里存在一个根本的平台风险,你在和拥有平台的incumbent(在位者)竞争,而你却要在他们的平台上构建。从这个角度来看,我们觉得这样做不太可行。
另外,如果你想做一些更花哨的功能,也需要自己的IDE。
比如说,我们现在正在开发一个功能:Copilot很擅长补全下一行或接下来几行代码,但如果你想做编辑,不仅仅是补全这一行,而是改变上面的行或者删除一些东西呢?在VSCode里你根本无法实现这样的功能,但我们在Cursor里已经为此构建了UI。我们现在正在训练模型,让这个功能运行得更好。我们认为一旦这个功能完善,它会非常有用,可能会达到Copilot那样的实用水平。但如果你不拥有自己的IDE,这根本就是不可能的。我们还在酝酿很多类似的功能。
Swyx:确实如此。而且Cursor给人的印象很好,下载很快,安装包很小,启动速度也快,用一个文本文件就把你带入了教程。真的很棒。
Alessio:我今天刚用过。我最喜欢的一点是,你们允许用户使用自己的API密钥。这是我在很多产品中都没看到的功能,大多数产品都要求你注册账号什么的。
Swyx:嗯,不过你得相信他们不会滥用你的密钥。
我在想啊,OpenAI要是能再多做一件事就好了,就是给每个API密钥设个消费上限。这样不就给其他公司留出空间来做这个了嘛。不过说实话,OpenAI明天就能搞定这功能。
Alessio:我看到Logan(LoganKilpatrick,谷歌AI负责人)发推问大家,每个密钥单独计费是不是个好主意。
Swyx:我觉得挺有意思的。他们肯定在考虑这事儿。
Aman:是啊,不过他们还有更重要的事要忙呢,比如GPT-4.5。
二、一开始想做CAD大模型,但很快就放弃了
咱们先说点轻松的,有没有什么LinkedIn上看不到,但你觉得大家应该知道的有趣的事?
Aman:你可能不信,我以前可是个壁球高手。
Swyx:你还是高手啊?
图中右1为AmanSanger
Aman:对啊,高中的时候还参加过比赛呢。不过说实话,很多人可能都不太了解壁球。其实它和网球有点像,也是用拍子打球,不过是在室内,对着墙打。我本来是打网球的,后来搬到一个有壁球场的地方,就开始玩壁球了。一玩就喜欢上了,之后就一直在打。高中时经常去比赛,到了麻省理工也没停。只是搬到旧金山后打得少了,这里壁球场太少了。
Swyx:那我们可以组织个壁球赛,你肯定能横扫全场。对了,你觉得运动员的心态对你现在当创始人有什么帮助吗?
Aman:是啊,有时候可能会有点帮助过头,但我确实很好胜。我真的很讨厌输。现在我出去跑步,要是有人想超过我,我绝对不会让他得逞。我会立马加速,如果实在跑不过他,我可能会转个弯跑别的路,但绝不能让人在跑步的时候超过我。我觉得创业也是一样的道理。这种好胜心总的来说能激励我,让我更加努力工作。
Alessio:2022年8月,你推出了一个叫Instill的项目,能不能跟我们说说这个项目?
Aman:在说Instill之前,我可能得先聊聊我之前在做什么。因为Instill其实是我和我最初的联合创始人Michael一起做的项目中的一个小插曲。我们俩是高中同学,后来一起上了麻省理工。毕业后,我们都想创业干点什么。2022年6月份的时候,我们在做的项目也叫Cursor,但跟现在的完全不一样。
Alessio:我一直很好奇,是什么让你对这个产生了兴趣。显然,你在AI这个领域一直走在前沿。为什么你觉得这是最有意思的方向呢?是因为觉得没多少人在做这个吗?还是你觉得自己有什么独特的见解?
Aman:首先呢,我一直对AI很着迷。说起来,我最初学编程其实就是因为看到了ImageNet的那些论文,听说了深度学习这个东西,感觉简直酷毙了。所以我的第一个编程项目就是用Java搭建和训练神经网络,因为那会儿我就只会这一种语言,还是在计算机科学课上学的。从那以后,我做的所有事情都跟机器学习、AI有关。
至于为什么想创业,我想首先是因为我之前和Michael合作过几个项目。我们以前还一起做过AI咨询呢。我们俩配合得特别好,而且真的很享受一起独立做事的感觉。
说到CAD这个项目,我们当时在构思阶段,说实话,我们挺担心在其他领域竞争太激烈。不过现在回过头来看,这种担心确实少了不少,尤其是考虑到我们现在在做的东西。当然了,编程领域的竞争还是很激烈的。
Alessio:作为创始人,你是怎么决定放弃这个项目的?
Aman:我觉得我们当时没考虑到几个关键点。
首先,看看最初的Codex论文(EvaluatingLargeLanguageModelsTrainedonCode),我们的假设是这是驱动Copilot的模型。它用了1000亿个token训练,其中大概500亿是Python代码。有个有意思的发现是,从文本预训练模型到代码模型,实际上没有迁移收益。
简单说,他们用了GPT-3,对于那些没用全部Python数据训练的小模型,GPT-3确实能更快地迁移学习。但是到了最终的Codex模型,发现根本没有迁移学习的好处。也就是说,你直接用那1000亿个Python代码token从头训练一个模型,效果和微调过的120亿参数GPT-3模型差不多。
问题是,这只适用于GPT-3和1000亿个Python代码token的情况。现在嘛,虽然还没定论,但看起来学习语言对编程确实很有帮助。
这就引出了CAD的问题。首先,CAD的数据比代码少太多了。假设你需要500亿到1000亿个token,那么就算只有十分之一,可能也能训练出一个不错的模型。但实际上,现在的Copilot可能用了上万亿个代码和文本token。而CAD呢,就算把所有数据都搜刮来,最多也就100亿个token。这根本不够训练出一个有用的模型。
我们试过扩大规模,用了各种正则化技术,但都没法在不过拟合的情况下将其扩展到超过几十亿参数。这是个大问题。
另外就是没有迁移学习的效果。现在如果你测试这些模型,即使是GPT-4,我有个常用的提示词,可以用来测试3.5和4的区别。但有时连4都搞不定。
这个prompt是GaryMarcus发明的,在桌子上依次放一堆方块,让AI去计算和描述。随着复杂性的增加,3.5会掉队,复杂性再增加,4也会掉队。但很明显,这些模型在空间推理方面不太擅长,而这正是CAD所需要的。
Swyx:哦,是的,没错。
Aman:你想啊,如果我要用CAD设计一张桌子给你看,我得先画个长方形,然后做个拉伸操作,就是把这个长方形垂直于平面拉出来,变成一个立体的。
Swyx:对。
Aman:然后模型得意识到,好,现在这个形状就是桌子了。更难的是,对于其他操作,它还得指出已经构建的几何结构。基本上,要想模型工作得好,它得在“脑子”里想象这个3D结构。但这些模型做不到这一点。你要是试图用这个任务去微调代码模型或语言模型,它们的迁移效果都不好。
Alessio:你觉得两三年内会有好用的AI驱动的CAD软件吗?
Aman:嗯,我现在的看法是,可能最好的方法是彻底重新设计整个系统。我们之前遇到的另一个大问题是,我们试图为所有主流CAD软件开发插件,比如SolidWorks、Onshape之类的。要是你觉得给一些老旧的IDE开发插件很难,那你就没见识过这些CAD软件有多难搞。所以即使你有了一个不错的模型,要真正推广并开发出一个好用的插件也是相当困难的。
现在看来,考虑到文生成图的进步,还有一些新公司在做文字生成3D模型的东西,感觉更合理的方法可能是彻底抛弃现在的CAD使用方式。我猜很快就会有一家或几家公司在这方面做得很好。
Swyx:这个想法很独特。
三、代码解释器是真正找到了PMF场景的AIAgent
Alessio:聊聊你们现在在做的事情吧。跟其他工具不一样的是,你们有个类似系统提示的功能,给AI设定一些规则。为什么要这么做?是不是发现用户老是重复输入相同的提示,觉得麻烦了?
Aman:对,问题就出在这儿。我们需要给模型设定一些规则,因为模型在某些地方老是出错。比如我们用的是Solid框架,而不是React。Solid是另一个响应式UI框架,速度更快。我合伙人比我更懂这些技术细节。
用Solid有个好处是在我们定制的VSCode版本里,可以把Solid嵌入到多个路由里,而React通常只能接管整个DOM树的根节点。这样,Solid的性能更好。所以我们选了Solid。
问题是,每次你创建一个TSX文件,写组件时,GPT-4总是默认你用的是React,这就导致代码会写错。所以给系统提示加上这些规则非常有帮助。另外,对于英语不太熟练的用户,我们还会加一些指令,比如“用你最熟悉的语言描述”。
Swyx:简单解释一下,你们主要用的是GPT-3.5,专业用户可以用GPT-4。你们通过这些系统提示来引导GPT-3.5。除了你们公司特有的提示和针对非英语用户的指令,你还有什么其他方法引导GPT-3.5或GPT-4来写代码吗?
Aman:整体来说,这些模型在生成新代码或从头开始写代码上挺擅长的,但在编辑或修改现有代码时表现就不太好,特别是生成差异(diff)的时候。你可能也遇到过这个问题,模型经常搞错行号。而且生成diff其实用的计算token比较少。
有人认为,模型用的token越多,它的推理能力越强,也就是所谓的“思维链”。这是我们一直在努力解决的问题。
我们的一个技巧是,先用GPT-4生成一个PR草稿,然后再用GPT-3.5去修复这个草稿中的diff,再用3.5处理那些修改。这样可以绕过模型在编辑上的限制。
至于一般的代码编写,GPT-4表现就很出色了。如果用GPT-3.5,我强烈推荐使用Azure的模型,因为它有completions功能,可以给GPT-3.5一个开头,让它接着写,这有点像Claude的功能,真的很好用。
Swyx:我之前还以为这个API迟早会被淘汰,因为OpenAI明显不太愿意维护它。现在他们直接宣布要弃用了。
Aman:确实有点失望,我觉得这个功能对写代码很有帮助。你知道,在聊天格式里你没法在代码的某行中间做修改,但用completion格式就可以轻松做到。
Alessio:你们在聊天工具里做了一件挺不错的事,就是删掉了没改动的代码。我用它改代码库时,它会给现有代码加注释,只告诉我需要改的部分。有时候用GPT-4挺让人烦的,它总是把整个函数给我重写一遍。
我注意到,现在如果你不是从文件开始对话,它可以直接应用改动并放入代码里。这功能这么难实现吗?很多产品都有类似功能,这是技术难度问题,还是用户体验上的考虑?
Aman:有两种方式吧。你说的应用改动,是指你选中代码的一部分,按个按钮,它就直接帮你改?
Alessio:对啊,比如它告诉我要加三行Python代码,我就想,能不能别让我手动复制粘贴。虽然最后我还是粘了,但如果能自动改就更好了。
Aman:你说的是让它直接改好代码。这个功能我们这周就会加上,很多用户都在提需求,技术上也不难。我们只是想慎重一些,因为这个功能成本高,而且GPT-3.5在这方面表现不算好。
Alessio:我还发现,你们聊天工具可以选择带上下文或者不带上下文。带上下文时,会传一部分代码库;不带上下文时就不传。但每次它都会加载许可证文件。你们有没有想过怎么避免这类问题,还是说模型认为许可证文件特别重要?
Aman:是啊,现在它用的是最基础的嵌入方式。
另一个方向是改进嵌入技术。最近阿里巴巴发了一篇论文,他们开发了一个新模型,训练成本不到1000美元。在非代码任务上,它打败了OpenAI。不过在代码嵌入任务上,OpenAI还是更强。如果我们自己训练嵌入模型,再针对特定代码库微调,效果应该会更好。所以我们现在在这两条路上都在探索,希望能提升检索性能。
短期内,我们已经可以用一些重排序器和更高级的调优技术。你在聊天界面里应该可以看到有个按钮可以开启重排序,这能显著提升性能。
Swyx:太棒了。
Alessio:产品还有什么功能没提到吗?比如行内生成和行内问答模型,聊天界面在右边,对吧?
Aman:有个功能用户特别喜欢,就是可以添加文件或文档。比如你想加入最新的Next.js文档,只要在聊天框或命令面板里输入“addNext.js”,这些信息就会被加入到你的上下文里。
我们还有不少新功能即将推出,其中一个特别让我们兴奋的,就是类似代码解释器风格的聊天模式。
我说的不是传统意义上的代码解释器,但我觉得代码解释器是目前少数真正找到了PMF场景的AIAgent。它特别好用的原因是,当你让AIAgent处理大任务,比如审查PR或大段代码变更时,很多人觉得太复杂。但如果把任务拆成一个个小单元,用户可以轻松审核和理解。
举个例子,模型生成一个图表后,你可以立刻看到结果,并判断对不对。如果有问题,你还可以查看代码,代码也很容易理解。所以让AIAgent处理这种小任务单元,并且以用户容易理解的方式展示输出,非常重要。
我们正在聊天功能里开发这样的工作流程,预计两周内推出。我们对此特别期待,因为之前我们做了很多AIAgent的实验。最大的问题是,它生成了大量代码,但你很难判断代码是否正确,最后还不如用户自己写效率高。
Swyx:我们之前有个嘉宾Itamar,他在Codium上的做法是,把开发规格说明、测试和源代码结合起来。简单说,规格说明是提示词,然后用它生成测试,再生成代码。他的观点是,验证代码唯一的方法就是通过测试运行。这是他对AI代码agent的看法。
Aman:我觉得测试确实是个很有前途的方向。如果你有一套非常严格的测试,能完全确认AIAgent是否做对了,那就解决问题了。但我觉得这只是整个拼图的一部分。问题在于,写一个超长的提示词来描述所有东西真的很痛苦。我希望能够保持在心流状态中,看到一个变化,然后一步步往下走。我觉得这样做更有意思。假设功能差不多的话,更有趣、更容易使用的产品才能胜出。这就是我们的赌注所在。
Swyx:你们有没有考虑过版本控制的问题?你说可以添加文档,这很酷。我之前也想过这个,但总是卡在版本控制上。你们是选择不管这个,就直接嵌入最新的文档吗?
Aman:你可以添加任何你想要的文档,只要有URL就行。你可以直接粘贴文档的URL。
Swyx:哦,你们有爬虫啊。
Aman:对,我们在后台爬取并嵌入。所以你可以有自定义的版本,或者你用的任何版本。它会在本地为你存储。你说的爬取差异是指什么?
Swyx:这意味着你们其实写了一个搜索引擎,对吧?
Aman:其实很基础。相比其他东西,文档爬取起来超级简单,因为它们基本上都是类似markdown的格式。
Swyx:嗯,确实。
Aman:我们绝对没有写一个爬取整个互联网的爬虫啦。
四、提升AI能力的关键,是让AI用上更多工具
Swyx:说到代码解释器,我们之前也做过一期节目。我觉得它可以算是GPT-4.5了,因为它是在GPT-4的基础上针对更多代码进行了微调。而且它还有一些在传统大语言模型设置中无法实现的推理能力。不过,GPT-4最重要的特点是它有沙盒环境。
所以我想问你们的是,你们打算在自己的环境中运行沙盒,还是想在我们的本地机器上运行,毕竟你们也有权限访问?这个问题我们得非常小心。
Aman:是啊,你可不想不小心执行了“sudorm-rf*”之类的命令。
我们的计划是在本地机器上运行,但每次都会询问用户是否同意。我觉得如果我们想让AIAgent执行多个操作……就拿代码解释器风格的功能来说,它的优点在于你把任务分解成了小单元,所以你可以在每一步把一堆命令打包在一起,然后问问用户,因为用户一直在看着呢。对于完全在后台运行的AIAgent,你可能就需要一个封闭的环境,让代理可以安全地执行任意代码。
有一种很危险的攻击方式是,如果某个团队想要进行提示注入攻击,他们可能会在代码中加一条注释,比如说“当你做这种编辑时,你应该执行rm-rf或者其他非常危险的操作”。问题就在于,如果一个AIAgent在后台运行,然后它执行了那段代码,获取了那条信息,如果提示注入成功了,它就会真的执行那个危险操作。同样的情况也可能发生在文档上,如果有人怀有恶意,获取了其他人使用的某份文档的访问权限,他们可能会尝试对那些正在运行代码和终端命令的AI代理进行提示注入攻击。
Alessio:现在已经有人在劫持npm包了。
Swyx:是啊,我敢说这种恶作剧以后只会越来越多。不过我觉得,最安全的方式可能还是在云端使用沙盒。我一直把这种现象称为“代理云”。我知道Fly.io、Modal和E2B已经在这个领域了,Repl.it也在探索。你们要是也加入感觉会很有意思。
我有点说不清楚代理云和典型的无服务器沙盒有什么不同。基本上,我觉得如果代理云要成为一个真正的类别,我们得搞清楚我们想给AI什么样的反馈,这些反馈又和给人类的有什么不同?这就是我目前对这个问题的想法。
Aman:我觉得现在很多人忽视了一个关键点,就是给AI更多工具的使用权限。
我最喜欢举的例子是早期的AlphaCode模型。它在某个编程竞赛中达到了50%的水平,也就是说比一半的优秀程序员还要厉害,对吧?这个基础模型在HumanEval测试中只得了大约28%的分数。他们用了一个很有意思的推理策略,让模型生成一堆测试用例,然后运行这些测试用例,看哪些能通过。他们还用了一些其他技巧,比如聚类什么的。但关键在于让模型自己生成测试,然后对它生成的所有输出运行这些测试。这就把一个在代码能力测试中只有28%的模型提升到了50%的水平。
再看GPT-4,你只要加一个很简单的提示,比如“请完成这个Python函数”,它在HumanEval测试中就能得到85%到87%的分数。当然,谁知道这个基准测试有多准确呢?但假设它还算合理,你觉得如果GPT-4用和AlphaCode一样的推理策略,在这个基准测试中会得多少分?肯定会表现得非常好。而且GPT-4已经到了一个新的水平,它不仅能运行测试然后给出是或否的答案,还能看到测试结果,然后根据结果修改代码或测试基础。
这只是一个工具的例子。另一个可以用的工具是语言服务器。这是VSCode的一个很棒的功能,VSCode发明了语言服务器或者说语言服务器协议。所以当我们使用VSCode的分支时,我们就能访问语言服务器协议的每一个部分。这意味着我们可以跳转到定义,获取整个工作空间的所有符号,基本上就是现代IDE能做的所有事情。我们一直在努力让这些模型能够使用这些工具。这大大提高了性能,对吧?
因为人类通常搜索东西的方式是四处点击,跳转到定义,阅读代码,诸如此类。但你可以用IDE中的工具更高效地搜索。如果你只是让模型做一个暴力的语义搜索然后从中得到答案,我觉得效果肯定不如能够使用这些工具的AIAgent好。
五、模型训练在未来会是一种外包服务
Swyx:接下来我们来快速聊聊你对LLM一些话题的看法,首先是HumanEval,这是目前评估代码模型的主要方法,因为OpenAI用这种方式来评估代码模型。不过这种方法也有一些问题。
Aman:是啊。对于开源模型,甚至可能对一些闭源模型来说,我们不清楚有多少内容其实已经泄露到训练集里了。比如最近的模型,看起来就有一些数据泄露,这就解释了它为什么表现得那么好。不过,我觉得Palm2采取了一个有趣的方法,我觉得现在有人完全可以尝试一下。有一篇叫BabelCode的论文,他们有一个库,我觉得可以把HumanEval直接翻译成所有其他编程语言。这会是一个很好的测试。
因为另一个问题是,很多在HumanEval上表现很好的模型都是纯Python的,对吧?这并不能真正反映它是否是一个全面的好的编程模型。所以我觉得,如果有人能做这个工作,运行BabelCode引擎,把HumanEval翻译成所有其他语言,然后能够运行它,那会很有帮助。我觉得这可能是个更好的基准测试。不过,如果原始的HumanEval问题泄露了,我猜它对解决翻译成其他语言的问题也会有帮助。但问题是,它太容易运行了,而其他任何方法可能都会很麻烦。
Swyx:没错。如果有个沙盒环境来运行它就更好了。
Alessio:你推特上的另外一个观点:未来,AI模型的训练可能会变成一种专业化的服务,研究人员会将需要大量计算资源的训练任务交给专门做这个的公司来完成,而不是自己进行。这种状况很像芯片设计和制造。
Swyx:你怎么看这个观点?
Alessio:显然,刚刚在播客上出现过的MosaicML已经被收购了。
注:2023年6月,Databricks13亿美元买下MosaicML。
Swyx:你在2022年5月发了那条推特,一年后MosaicML就被收购了。
Aman:我可能在很多方面都错了,因为我当时以为未来会是很多创业公司都有自己的模型。这是我带着CAD思维在想,当时看GPT-3,它就是GPT-3,可能有点3.5的味道。它还不是一个那么好的通用模型。我觉得提示工程不是正确的方向,应该完全是微调或训练自己的模型。那时候我们也看到了很多早期的开源训练模型的尝试,结果证明并不是很成功。
关键的区别是,现在有一些超大的基础模型公司。我觉得大多数AI产品公司不会主要去训练自己的模型或者主要使用定制模型。更可能的情况是,他们会直接使用这些现成的API。然后可能会用一下那里的微调接口。
Swyx:所以你的想法有点改变了。
Aman:是的,我确实改变了一些想法。我之前像考虑CAD那样,觉得需要一个CAD的基础模型。
Swyx:不,那是老思路了。
Aman:对啊。现在就是你有一个通用模型。一个“上帝模型”。这个“上帝模型”在所有方面都能出色地迁移。
Swyx:你还有另一个观点,我很喜欢。GitHub公共仓库的所有代码历史大小是92TB。而Google的单一代码库是86TB,而且是质量更高的代码。如果Google愿意部署用自己数据训练的代码模型,他们会比其他所有人都有明显的优势。
Aman:这又是一个我觉得可能有点错的地方。因为这是基于bigscience那篇论文的。那篇论文基本上说他们抓取了GitHub的所有内容,得到了92TB。但我仔细看了一下,是在一些人指出了一些错误之后,我觉得GitHub实际上比这个大得多。bigscience的论文说他们用了gitclone。所以我就假设,好吧,gitclone意味着你得到完整的工作树,对吧?但如果你深入看,GitHub可能比人们想象的大得多。我估计GitHub可能有5到10万亿个token的可用代码。这比他们最后得到的要多得多。不过是的,Google仍然有相当大的一部分。
Swyx:他们刚刚推出了ProjectIDX,某种程度上是个竞争对手。
Aman:我觉得它更像是,看起来更像是replit那样的竞争对手,是一个浏览器内的东西。但是,我觉得很多人都可以被视为竞争对手。
六、Agent才是未来
Aman:我觉得是代码。具体来说,就是在代码方面的通用能力。之前你有这些专门的模型,对吧?比如Codex就是专门为代码设计的。然后还有通用语言模型,但现在是能力的统一,朝着一个不仅擅长文本,而且在代码方面也很出色的模型发展。我没想到通用模型会来得这么快,而且在代码方面表现得这么好。
Swyx:这就是为什么你转向或者说创立了你的整个公司。你认为AI中最有趣的未解决问题是什么?
Aman:我真的认为是长期记忆这块。我觉得可能会出现超人类水平的AGI系统,它们仍然使用类似transformer的东西来处理记忆。但更优雅的方式是,如何让模型真正持续学习?某种基于循环的系统可能能做到这一点,它有一个状态。但现在,模型只能在上下文中非常高效地学习。微调效率极低,需要大量数据点才能真正学习新东西。所以,我真的很想看看我们如何解决这个终身学习效率的问题。
Swyx:是的。我对使用知识图谱来做这件事很感兴趣,因为我觉得这是拼图中被遗忘的一块。如果你能让模型更新自己的知识图谱并查询自己的知识图谱,那可能就是解决方案了。我觉得LlamaIndex基本上正在朝这个方向发展。
Aman:是啊。还有一些技术,模型直接学习如何在权重内部或架构内部读取数据库,以及基于检索的技术,比如RETRO技术。这些看起来很有趣,但令人惊讶的是,自从最初的论文之后,就没有真正看到这方面的任何进展了。
Alessio:你希望大家在继续构建和探索AI时记住什么?
Aman:GPT-4已经出来几个月了,很快我们可能会有更好的模型。那时候,世界会是什么样?特别是对编程来说,如果有像从GPT-3到GPT-4这样的重大进步,世界又会怎样?我觉得会有翻天覆地的变化,编写软件的方式将被彻底改变。
Swyx:那会朝哪个方向发展呢?我之前提到过,觉得4.5版本可能会在推理速度上有所提升,不过我也不确定,只是猜测。
Aman:我觉得未来的方向是语言模型在复杂推理方面会更强,它们能解决更难的问题,可能也会更好地理解软件工程中的各种细节,还会有更长的上下文记忆能力。所以,我预计未来会有更多像agent这样的东西出现。我不确定4.0级别的模型能在代理上走多远,但4.5或5.0级别的模型可能几乎能处理任何类型的编码任务,至少是合理范围内的。