Sualeh:我们真正想要实现的是,让模型能够为我们编辑代码。这是我们的愿望,在拥有能够编辑代码的优质模型之前,我们进行了多次尝试。有了优质模型后,为了让使用体验更加流畅,我们付出了很多努力来加快推理速度,并已经开始整合。Michael刚才也提到了这种跳转到不同位置的能力,我认为这种跳转源于一种感觉,即一旦你接受了编辑,下一步要去哪里应该非常明显。比如,我做了这个更改,模型应该直接知道下一步要跳转到第18行。如果你是WIM用户,你可能会按18JJ之类的快捷键,但为什么我要这么做呢?模型应该直接知道。所以,你只需要按Tab键,它就会跳到第18行,然后显示下一个编辑,你再按Tab键,你只需一直按Tab键,就能一直这样操作下去。所以内部竞争就变成了,我们能让人按多少次Tab键?一旦你有了这个想法,更抽象地说,要考虑的是如何使编辑达到零熵状态。也就是说,一旦你表达了意图并且编辑,没有新的信息片段来完成你的想法,但你仍然需要输入一些字符来让计算机理解你真正的想法,那么模型或许应该“读懂”你的心思,所有零熵位都应该只是被Tab键消除,这就是比较抽象的说法。Aman:一个有趣的现象是,如果你看不同领域的language model loss,我相信每字节的比特数,这是一种对代码字符标准化损失的衡量,比语言低,这意味着代码中有很多token是非常可预测的,很多字符也是非常可预测的。而且,当你不仅仅是试图自动补全代码,而是预测用户在编辑现有代码时的下一步操作时,这种可预测性会被进一步放大。因此,Cursor Tab的目标是消除编辑器中所有低熵操作。一旦意图得到有效确定,就让我们直接跳转到未来的某个时间点,向前跳过。Lex:那么,Tab在近期内应该能够做什么?Aman:我可以讲讲让这些功能发挥作用的一些细节。它们的延迟极低,所以你需要在这个任务上训练小型模型。特别是,它们非常需要预填充token。这意味着它们有非常长的提示,能看到很多代码,但实际上生成的token并不多。因此,使用MOE模型是最合适的。这是我们取得的一项突破,极大地提高了模型在长上下文中的性能。另一个突破是我们构建的投机解码的变体,称为投机编辑。我认为,这两点是使其质量高、速度快的重要因素。Lex:那么缓存起作用了吗?Aman:缓存起到了巨大的作用。因为你要处理这么多输入token,如果你在给定行中输入的每个按键都要针对所有传入的token重新运行模型,那么一是会大大降低延迟,二是会让GPU负载过高。因此,你需要设计用于模型的实际提示,使其具有缓存意识。然后,你需要跨请求重用KV缓存,以减少计算量。Sualeh:希望能跳转到不同的文件。所以,如果你在一个文件中进行了编辑,可能需要转到另一个文件来完成你的想法,它也应该转到第二个文件。Arvid:完整的泛化是下一步行动预测。有时你需要在终端中运行命令,它应该能够根据你编写的代码来建议命令,或者有时它会给出建议,但你很难判断它是否正确,因为你需要更多信息来学习。你需要知道类型才能验证其是否正确。所以它或许应该先带你到某个定义的地方,然后再带你回来,这样你就有了接受下一个补全所需的所有必要知识。Michael:编程是一门奇特的学科,有时你接下来五分钟要做什么,实际上是可以根据你最近所做的事情预测出来的。那么,我们能否创造一个世界,让这接下来的五分钟要么在你放手的情况下自动完成,要么在你看到下一步要做什么并确认无误后,通过轻触Tab键就能快速实现。 05.增加显示框提示代码差异,围绕审查者体验做设计
Lex:根据你的直觉,生成与验证或者生成与排序哪个更容易呢?Aman:根据直觉而言...可能是这样的...既定情况下验证更容易,而非找到证明。Sualeh:AI获得菲尔兹奖的可能性有多大?Sualeh和Arvid:AI更容易获得菲尔茨奖。Aman:虽然AI已经解决了许多难题,但现在还不确定定理证明领域中AI效用如何。其次,对于我们距离解决这些非常非常难的开放性问题还有多远,我的直觉也不那么准确了。Lex:你认为AI会先获得菲尔兹奖吗?而不是物理学或其他的什么。Sualeh:我认为百分之一百是会获得菲尔茨奖的。我觉得,一些奥数难题,比如伯奇和斯温纳顿-戴德(Birch and Swinnerton-Dyer conjecture)猜想对于AI而言还是非常难的,现在还并不知道如何去解决这些问题。Aman:AI可能会在实现AGI之前就获得菲尔茨奖。Sualeh:如果能获得,我会非常开心的,我觉得,可能在2028或者2030年就会实现吧。 20.谈缩放规律的未来,“模型越大越好”观念已失效
Lex:你们现在处于编程世界的中心。你们认为编程,编程的本质在未来几个月,在未来几年,甚至十年会发生什么变化?Michael:我认为,我们对未来充满期待,因为程序员在很长一段时间内都坐在“历史的驾驶座”上。我们曾谈到过这个问题,这需要程序员有着高效、代理能力与控制能力,他们可以修改任何你想修改的东西,并且对你构建的内容进行快速迭代优化。此处,与“同计算机对话形的编程”有差别,与计算机对话,就好比你在Slack上与工程部门或工程师进行交谈一样,输入需求到一个独立的文本框,AI就会自动为你完成这些工作。但这也有些问题,首先会有延迟性,其次这也意味着放弃了一些控制力。从根本上说,工程实际的执行情况,是根据你构建的细微决策来进行的,其中人的关键作用是不能被AI取代的,要让人类坐在“驾驶位”来掌舵。而未来编程的情况,很可能是程序员可以控制代码库的抽象级别,可以通过观察伪代码的形式对代码库进行编辑。而且程序员也可对编程软件的逻辑进行修改,保留其控制权,这样可以大幅度提升生产力。但这只是一个模糊的想法,还需要很多细节需要解决,最终能否实现还有待观察。但是人本身的控制力、效率以及以人为中心观念是非常重要的。我们认为,对于一些像Arvid之前提到一样,某些编程,可以把它交给聊天机器人。但大多数编程任务人需要人深度参与。Lex:编程的基本技能是否会发生根本性的变化?Michael:实际上,我认为现在是开发软件非常令人兴奋的时刻。不管什么时候,很多代码依然还是需要查阅很多难以理解的信息。但今天的编程比过去有趣多了,人们开始享受编程。现在的编程让人具备快速构建事物的能力,人们的控制力也被极大提升了。对于那些编程人员来说,这也是个充满意义的时期,人们的创意和趣味会被放大,如果你是程序员,那今天应该更加注意这部分的特殊性。Arvid:我也同意,最近我们正对代码库进行一次比较大的迁移,将Node.js中的Async Local Storage替换为 Context对象。即使可以借助AI,这个工作也依然需要我与另一个工程师耗费大概五天的时间。不过未来,我们可能只需要给AI展示几个例子,然后这个迁移任务,就可以在10分钟内完成。程序员可以借助AI更快的工作,而不需要在事先就考虑太多,而且任何事情,其实都可以先去尝试新方法,尝试的成本并不高。Aman:我觉得在编程中有两种方式,其一是努力思考,仔细寻找解决问题的最佳方法然后用有限时间来验证。其二是直接执行代码,看是如何执行的并就此进行更新。我也更认同后一个方案。Lex:那对于现在想要学习编程的人而言,你们有什么建议呢?应该学习什么?比如Java亦或者PHP?Aman:我认为,每个人都有学习编程的自身原因。但我觉得,实际上那些真的热爱编程的人,会是最好的程序员。在我们团队内部,很多人在工作后依然会用Cursor编写自己的编程,有的人甚至会熬到凌晨三点去做这件事。当他们难过的的时候,还会说“我需要写点代码。”来宽慰自己。这种对编码的热爱,趋势他们成为了最好的程序员,我也认为这些人将会认真投入到那些他们研究的事物之中。我认为,未来的编程者们需要会更多地关注“你想要创造什么”。Sualeh:程序员可以通过更丰富的方式表达自己的意图。 22.结语:共建人机协同体系,改善程序员生活