扬子晚报2024-10-18 23:37:04发布:万字采访 Curor 团队:编程的价值在于迭代(上)

⭐发布日期:2024-10-18 23:37:04|来源:扬子晚报

⭐作者:林玟谊责任编辑:Admin

⭐阅读量:616评论:7人

【2024年新澳门天天开彩大全}】

【新澳门精准四肖期期中特公开】

【新奥门天天开奖资料大全】【澳门平特一肖100%准资功能】【新澳天天开奖资料大全最新】【2024澳门天天开好彩大全53期】【新澳天天开奖资料大全最新54期】【2024年澳门特马今晚开码】【2024年新澳门天天彩开彩结果】【777888管家婆一肖】
【2004新澳门天天开好彩】【澳门六开彩结果】【2024天天彩正版资料大全】【天空彩票天天好采图文资绒】【澳门六开彩天天开奖结果生肖卡】【2024澳门天天彩期期精准】【澳门最精准免费资料大全旅游团】【2024资料大全正版资料免费澳门】

本次访谈由知名播客主持人 Lex Fridman 主持,访谈对象是 Cursor 团队的创始成员,包括 Michael Truell、Sualeh Asif、Arvid Lunnemark 和 Aman Sanger。访谈的主题围绕 AI 编程工具的未来展开,特别是与 GitHub 整合可能带来的影响。自成立以来,Cursor 团队在 AI 辅助编程领域取得了显著进展,开发出了一系列标志性项目,旨在提升开发者的工作效率。目前,Cursor 不仅专注于优化编程工具,还广泛涉足与大语言模型的集成,力求在编程环境中实现更高的自动化和智能化。在访谈中,团队成员详细讨论了 AI 在编程中的应用前景,以及如何通过技术创新来应对未来的挑战。由于内容较长,今天发布采访的上半部分。

重播
播放
00:00 / 00:00 直播
00:00
进入全屏
50
点击按住可拖动视频

Cursor 团队的核心观点包括:

代码编辑器的演变:传统的代码编辑器作为软件构建的工具,正在向更高级的形式发展,集成了 AI 辅助编码功能,使得编程更加高效和有趣。Copilot 是第一个真正面向消费者的 AI 产品,即第一个由语言模型驱动的消费者产品。快速迭代的重要性:在编程和 AI 社区中,快速行动和实验是创造有趣且有用功能的关键,它允许开发者快速验证想法并进行迭代。在 AI 编程中,即使只领先几个月,甚至一年,都会让你的产品更具实用性。编程的民主化:编程的快速实现能力吸引了更多人参与,Cursor 等工具的出现在降低编程门槛,使得非专业人士也能快速开发项目。AI 在编程中的角色:AI 正在成为编程中的智能助手,通过自动补全、代码生成等功能,提高编程效率,同时引发对编程本质的重新思考。编程的未来趋势:随着 AI 技术的进步,编程将更加注重创造性和决策性的任务,而繁琐的编码工作将越来越多地由 AI 完成。人机协作的新时代:未来的编程将是由人类和 AI 共同参与的过程,人类负责提供创造性的指导和决策,而 AI 则负责执行和优化,共同推动软件的发展。

以下是本期播客内容的完整翻译,我们作了不改变原意的删减。

Cursor 像一个快速反应的同事

莱克斯·弗里德曼(Lex Fridman)

以下是与 Cursor 团队创始成员 Michael Truell, Sualeh Asif, Arvid Lunnemark, 和 Aman Sanger 的对话。Cursor 是一个基于 VS Code 的代码编辑器,增加了许多强大的 AI 辅助编码功能,吸引了编程和 AI 社区的广泛关注和热情。因此,我认为这是一个深入探讨 AI 在编程中角色的绝佳机会。这次对话不仅涉及一个代码编辑器,还讨论了编程的未来,以及人类与 AI 在设计和工程复杂系统中的合作前景。这是 Lex Fridman 播客。首先,一个重要的问题:代码编辑器的意义是什么?

迈克尔·特鲁尔(Michael Truell)

代码编辑器主要是用于构建软件的工具。长期以来,这意味着在编程语言环境中进行文本编辑。对于非程序员来说,代码编辑器可以被视为程序员专用的高级文字处理器。之所以称为高级,是因为代码具有复杂的结构。因此,这种“文字处理器”——代码编辑器,可以实现许多普通文字处理器无法做到的功能。这包括语法高亮以便快速浏览代码、支持在代码库中像使用超链接一样导航、查看代码定义,以及进行基本错误检查以捕捉错误。传统上,这就是代码编辑器的功能。我认为,随着软件构建方式的变化,代码编辑器将在未来十年内发生显著变化。

莱克斯·弗里德曼(Lex Fridman)

我认为代码编辑器也应该充满趣味。

阿维德·伦纳马克(Arvid Lunnemark)

在我们决定要构建什么时,快速行动是一个常被低估的重要因素。我们常常尝试和实验,构建许多东西,但最终可能因为不够有趣而放弃。因此,快速行动在创造有趣事物中起着关键作用。速度往往能带来更好的结果。

莱克斯·弗里德曼(Lex Fridman)

这句话应该印在 T 恤上。

迈克尔·特鲁尔(Michael Truell)

从根本上来说,我认为吸引许多人学习编程的原因之一是其惊人的快速实现能力。在其他领域,你可能会因为资源、能力的限制,甚至需要组织大型团队而受到阻碍。而编程的神奇之处在于,只需你和计算机,就可以快速开发出有趣的项目。

莱克斯·弗里德曼(Lex Fridman)

对于不太了解的人来说,Cursor 是一个非常出色的新编辑器,它是从 VS Code 分支出来的。 了解一下你们各自的编辑器使用历程会很有趣。我想你们中许多人可能都是 VS Code 和 CoPilot 的忠实粉丝。你们是如何开始使用 VS Code 的,又是如何转而使用 Cursor 的?

阿曼·桑格(Aman Sanger)

我想我们很多人,实际上是所有人,最初都是从用户的角度出发,单纯地使用工具。是的,不需要其他工具,只是在终端中作为用户使用。至少对我来说,大约在 2021 年,当 GitHub Copilot 推出时,我真的很想尝试一下。所以我选择了 VS Code,因为它是唯一可以使用 Copilot 的平台和代码编辑器。尽管我非常喜欢使用其他工具,但在 VS Code 上使用 Copilot 的体验足够好,让我决定切换。因此,这种情况一直持续到我们开始开发 Cursor 之前。

莱克斯·弗里德曼(Lex Fridman)

也许我们应该解释一下 Copilot 的功能。它就像一个非常出色的自动完成功能。当你开始写作时,它会建议一到三行来补充你的内容。这种体验很有趣,就像和一个亲密的朋友在一起,他能帮你把话说完。当它表现出色时,会让人感到一种亲密感。也许“亲密”这个词不够准确,但会有一种“它懂我”的酷感。当然,当它不理解你时,会带来一些不愉快的感觉,因此会产生冲突。但我认为对很多人来说,那种“它懂我”的感觉会胜过“它不懂我”的感觉。

阿维德·伦纳马克(Arvid Lunnemark)

我认为,实际上使用 Copilot 的一个被低估的优点是,即使它出错了,也只是有点烦人,并不算太糟糕。因为你只需再输入一个字符,它可能就能理解你的意思。所以即使出错,也不算严重。

苏亚莱·阿西夫(Sualeh Asif)

对我来说,另一个被低估的方面是,Copilot 是第一个真正面向消费者的 AI 产品,即第一个由语言模型驱动的消费者产品。

莱克斯·弗里德曼(Lex Fridman)

Copilot 有点像 LLM 的第一个杀手级应用。

迈克尔·特鲁尔(Michael Truell)

测试版本是在 2021 年发布的。

莱克斯·弗里德曼(Lex Fridman)

Cursor 起源的故事是什么?

迈克尔·特鲁尔(Michael Truell)

大约在 2020 年,OpenAI 发布了一篇关于 Scaling Law 的论文。这是一个关键时刻,表明该领域的进展是明确且可预测的。即使没有新的想法,只要有更多的计算能力和数据,似乎也能显著提升这些模型的性能。

莱克斯·弗里德曼(Lex Fridman)

顺便提一下,我们可能会花三到四个小时讨论 Scaling Law 。简单来说,这是一篇论文及其相关的一组论文和一系列想法,旨在说明在机器学习领域中,随着模型规模和数据规模的增大,模型性能可能会得到提升。

苏亚莱·阿西夫(Sualeh Asif)

学习能力变得更强大、更优秀,在预测方面表现更加出色。

莱克斯·弗里德曼(Lex Fridman)

那是另一个话题。好的。

迈克尔·特鲁尔(Michael Truell)

当时,我们中的一些人进行了许多关于未来发展以及不同知识工作领域如何通过技术进步得到改善的概念性讨论。随后,有几个时刻让那些预测中的理论收益变得非常具体,仿佛是一种体验:你实际上可以在不攻读博士学位的情况下从事有用的 AI 工作,感觉现在有一整套可以构建的系统非常实用。

我们稍早提到的第一个时刻是体验早期的 Copilot 测试版,那真是令人惊叹和神奇。接下来,一切开始融合的重大时刻是获得 GPT-4 的早期访问权限。大约在 2022 年底,我们开始试验这个模型,能力的提升让人感到非常巨大。

在此之前,我们一直在进行几个不同的项目。由于 Copilot 和我们对技术的兴趣,我们一直在为程序员开发非常具体的工具。例如,我们为金融专业人士构建工具,或者尝试用这些模型进行静态分析。然后,GPT4 的进步让我们之前预测的理论收益变得具体,感觉在那个时间点可以立即构建更多东西。

如果我们保持一致,真的感觉这不仅仅是一个点解决方案的问题。这将是所有编程都将通过这些模型进行。感觉这需要一种不同类型的编程环境和编程方式。因此,我们开始构建那种更大的愿景。

苏亚莱·阿西夫(Sualeh Asif)

事情大致是这样的。我清楚地记得一件事:我的室友曾在国际数学奥林匹克竞赛(IMO)中获得金牌。在美国,有一项名为 PUTNAM 的比赛,可以视作 IMO 的大学版,是一项非常优秀的数学竞赛。我记得在 2022 年 6 月,Shengtong 和 Aman 打赌,到 2024 年 6 月或 7 月,你是否会通过某个模型在 IMO 中赢得金牌。

迈克尔·特鲁尔(Michael Truell)

Aman 对这些东西非常热衷。在此之前,他有一件印有比例图表和数学公式的 T 恤,经常穿着到处走。

莱克斯·弗里德曼(Lex Fridman)

你是体验到了通用人工智能(AGI)的能力,还是感受到了它的规模?

阿曼·桑格(Aman Sanger)

我清楚地记得有一次与 Michael 的对话,在那之前我从未深入批判性地思考过扩展的原则。他问了一个问题:为什么扩展不是你所需要的一切?或者为什么扩展不会带来巨大的进步?我想我经历了类似悲伤五阶段的过程:愤怒、否认,最后经过思考,接受。从那以后,我对进步一直抱有希望和乐观态度。我想补充一点,这也取决于在哪些领域可以看到进步。比如数学就是一个很好的领域,尤其是形式数学,因为你可以通过验证结果的正确性来获得极好的信号。因此,这意味着像强化学习(RL)这样的东西可以非常有效地运作。我认为你可以拥有在数学上非常超人的系统,但技术上仍然没有通用人工智能(AGI)。

莱克斯·弗里德曼(Lex Fridman)

我们可以一直谈论 Cursor 吗?Cursor 是什么呢?它是 VS Code 的一个分支。长期以来,VS Code 一直是最受欢迎的编辑器之一,几乎所有人都对它爱不释手。大家纷纷离开了 Vim,我也离开了 DMAX,抱歉。VS Code 在某种程度上统一了开发者社区。观察这个领域的发展和扩展生态系统,AI 正在变得非常出色。因此,你意识到仅仅为 VS Code 编写一个扩展是不够的,因为扩展有很多限制。如果 AI 要继续进步,我们需要重新思考 AI 如何融入编辑过程。因此,你决定分叉 VS Code,并开始构建许多令人惊叹的功能。我们将能够讨论这些功能。那么,做出这个决定是什么感觉?因为有很多扩展,包括 VS Code 的 Copilot,都在做类似 AI 的事情。是什么促使你决定直接分叉 VS Code 呢?

迈克尔·特鲁尔(Michael Truell)

开发一个编辑器似乎是显而易见的任务,至少对于我们想要实现的目标而言是如此。因为在我们开始开发这个编辑器时,我们认为这些模型的能力会不断提升,从而彻底改变软件构建的方式。这不仅会带来巨大的生产力提升,还会引发根本性的变革。如果只是作为一个插件嵌入到现有的编码环境中,对代码编辑器的控制将非常有限。我们希望突破这些限制,打造出最有用的工具。

莱克斯·弗里德曼(Lex Fridman)

那么,自然而然的问题是,VS Code 和 Copilot 是竞争对手。你们是如何在竞争中取胜的呢?这是否主要依靠速度和功能的质量?

阿曼·桑格(Aman Sanger)

我认为这是一个非常有趣,甚至可能是独特的领域。回顾以往的科技浪潮,通常会有一个主要事件引发新公司的涌现。然而,在这个领域,每一年、每一个模型能力的提升都会带来新的功能和可能性,尤其是在编程方面。因此,我认为在AI **编程中,即使只领先几个月,甚至一年,都会让你的产品更具实用性。**我认为一年后的某个产品应该让今天的产品显得过时。在微软公司,我们做了很多出色的工作,但我认为他们并不具备像初创公司那样持续创新和推动发展的有利条件。

莱克斯·弗里德曼(Lex Fridman)

快速实现某项功能。

阿曼·桑格(Aman Sanger)

推动相关工作,例如进行必要的研究实验,以真正提高能力的上限。

苏亚莱·阿西夫(Sualeh Asif)

我不太会从功能的角度去思考这个问题,而是从程序员能力的角度来考虑。正如你所知,新款 O1 模型已经发布,我相信未来还会有更多不同类型的模型出现,比如更长的上下文,或者速度更快的模型。有很多疯狂的想法可以尝试,希望其中有 10% 能变成一些很酷且有用的东西。我们希望人们能更早地获得这些创新。

换句话说,一个被低估的事实是,我们是在为自己制作这些东西。当我们开始开发 Cursor 时,真的感到了一种挫败感。你知道,模型在不断进步,但 Copilot 的体验却没有改变。就像,天哪,这些人,天花板在不断升高,为什么他们不做一些新的东西?他们应该做一些新的东西。他们应该问,所有的 alpha 功能在哪里?根本没有 alpha 功能。我确信它卖得很好,也是一门好生意,但感觉不对。我是那种真的想尝试和使用新东西的人,但很长一段时间内都没有新东西。

莱克斯·弗里德曼(Lex Fridman)

是的,这很有趣。我不清楚你是如何用语言表达的,但当你将某个工具与协作编译进行比较时,不知为何,很快就会觉得它有些过时。

阿维德·伦纳马克(Arvid Lunnemark)

我认为对我们非常有利的一点是,我们在一个统一的框架下进行开发。我们不仅在开发用户体验(UX)和模型的交互方式,同时也在提升模型的回答质量。我们在构建提示器、进行上下文检索以及训练模型方面都同步进行。我认为这种方式有助于让同一批人负责整个体验的开发过程。

苏亚莱·阿西夫(Sualeh Asif)

就好像负责制作用户界面的人和负责训练模型的人之间有大约 5.5 米的距离。

阿曼·桑格(Aman Sanger)

通常是同一个人。

苏亚莱·阿西夫(Sualeh Asif)

即使是同一个人,也常常会有不同的想法。因此,如果不进行交流和实验,就无法创造出那些看似不可能的事物。

莱克斯·弗里德曼(Lex Fridman)

正如你所说,你正在使用 Cursor 来编写 Cursor。那么,让我们来谈谈其中的一些功能,特别是这个强大的自动补全功能。Tab 是如何工作的?它到底是什么?

迈克尔·特鲁尔(Michael Truell)

从整体来看,我认为目前 Cursor 在两个方面表现得相当出色。尽管它还有其他功能,但主要在以下两个方面帮助程序员。**首先,它就像一个快速反应的同事在你身边,能够提前一步为你输入并预测你接下来的操作。最初的设计是作为一个优秀的自动补全工具,预测你将要输入的内容。但这个概念可以更具雄心,不仅仅是预测光标位置后的字符,而是预测你将要进行的整个修改、下一个差异以及你将要跳转到的地方。其次,它在某些情况下也非常擅长帮助你超越 AI,从指令生成代码。**在这两个方面,我们都投入了大量工作,以使编辑体验更加符合人体工学,同时让这些功能变得智能和快速。

苏亚莱·阿西夫(Sualeh Asif)

我们非常希望开发出一个能够为我们编辑代码的模型。在成功拥有一个优秀的代码编辑模型之前,我们进行了多次尝试。拥有这个模型后,我们投入大量精力加快推理速度,以提供良好的用户体验。我们开始引入一种功能,正如 Michael 提到的,可以跳转到不同位置。这种跳转功能的灵感来自一种直觉:一旦你接受了一个编辑,接下来要去哪里应该是显而易见的。就像你做了这个更改,模型应该知道下一个要去的地方是第 18 行之后。

如果你是 vim 用户,你可能会用快捷键来跳转。但为什么要这样做呢?模型应该能够自动完成这个过程。因此,我们的想法是你只需按下 Tab 键,它就会跳到第 18 行之后,然后显示下一个编辑。你只需继续按 Tab 键。我们内部的挑战是看看我们能让用户按多少次 Tab 键。从更抽象的角度来看,当编辑是零熵的,你已经表达了你的意图,编辑中没有新的信息来完成你的想法,但你仍然需要输入一些字符让计算机理解你的意图。也许模型应该能够读懂你的意图,所有零熵的部分都应该被轻松处理掉。这有点抽象。

阿曼·桑格(Aman Sanger)

在不同领域观察语言模型的损失时,有一个有趣的现象。我认为代码的每字节比特数(即字符归一化损失)通常比自然语言要低。这意味着总体而言,代码中的许多标记和字符是高度可预测的。而且,当你不仅仅尝试自动补全代码,而是预测用户在编辑现有代码时接下来会做什么时,这种现象会更加明显。因此,Cursor Tab 的作用是:在意图已经基本明确的情况下,消除编辑器中所有低熵操作。让我们直接跳过这些步骤,继续向前推进。

莱克斯·弗里德曼(Lex Fridman)

关于如何进行 Cursor 下一步的预测,有哪些直观的理解和技术细节?我认为这对人们来说并不容易理解。

阿曼·桑格(Aman Sanger)

我可以谈谈如何让这些技术发挥作用的一些细节。由于这些技术的延迟非常低,因此需要在这个任务上训练小模型,并且它们对预填充标记的需求非常高。这意味着它们需要很长的提示词,会看到大量代码,但实际生成的标记并不多。因此,使用稀疏模型,即 MOE 模型,是一个完美的选择。这是我们取得的一个突破,显著提高了长上下文的性能。另一个突破是我们开发的一种变体预测解码技术,称为预测编辑。 我认为这两个方面是确保其高质量和快速性能的重要因素。

莱克斯·弗里德曼(Lex Fridman)

缓存的输入数据量很大,但输出数据量很小。你能谈谈如何让缓存更有效地工作吗?

阿曼·桑格(Aman Sanger)

缓存在处理大量输入标记时起着重要作用。每当你在某一行中输入一个字符时,模型需要对所有传入的标记重新运行。这不仅会显著增加延迟,还可能因负载问题对 GPU 造成损害。因此,你需要设计模型的提示,以优化缓存的使用。此外,还需要在不同请求间重用键值缓存,以减少工作量和计算量。

莱克斯·弗里德曼(Lex Fridman)

Tab 在不久的将来应该能够实现的功能包括:生成代码、自动补全、多行代码编辑。此外,它还可以在同一文件内跳转到不同位置,并在本地环境中执行这些操作。

苏亚莱·阿西夫(Sualeh Asif)

同样适用于跳转到不同的文件。因此,如果你在一个文件中进行编辑,可能需要切换到另一个文件来完成你的想法。它应该也会跳转到第二个文件。

阿维德·伦纳马克(Arvid Lunnemark)

全面概括就像是预测下一步操作。有时你需要在终端中运行一个命令,它应该能够根据你编写的代码提供建议。或者,当你需要执行某项操作但难以判断其正确性时,实际上可能需要更多的信息来学习。例如,你需要了解类型才能验证其正确性。因此,它或许应该引导你到某个定义的位置,然后再返回,这样你就能获得进行下一步操作所需的所有知识。

迈克尔·特鲁尔(Michael Truell)

编程有时是一门神奇的学科。在某些情况下,你接下来五分钟要做的事情可以从你最近完成的工作中预测出来。那么,是否可以达到这样一种程度:在接下来的五分钟里,你可以选择不参与,而让系统自动引导你完成,或者你可以看到下一步要做的事情,并感到满意,就像我们在进行这些重大变革时,只需轻轻按下 Tab 键即可。

Cursor 的代码差异

莱克斯·弗里德曼(Lex Fridman)

说到这一点,我应该提到,Cursor 有一个非常酷且显著的特点,那就是它具备完整的差异显示功能。模型会用红色和绿色标记代码的修改建议。在聊天窗口中,你可以查看并应用这些建议,系统会显示出差异,你可以选择接受这些修改。那么,或许你可以谈谈这个方向的相关内容?

苏亚莱·阿西夫(Sualeh Asif)

我们可能会有四到五种不同类型的差异。因此,我们已经对自动生成的差异进行了优化,形成了一种不同的差异视图。当你审查较大代码块时,情况又有所不同。我们还在尝试优化另一种差异处理方式,以便在处理多个不同文件时使用。总体而言,自动生成的差异应该非常易于阅读。实际上,在所有情况下都应该易于阅读。但在自动生成差异时,你的注意力会集中在一个区域,人类无法同时关注多个区域。

莱克斯·弗里德曼(Lex Fridman)

所以,你是在谈论与界面相关的内容吗?

苏亚莱·阿西夫(Sualeh Asif)

在界面设计中,目前侧边栏中有一个框。如果尝试在某些地方修改代码,比如删除或添加代码,系统会尝试在侧边栏显示该框。

阿曼·桑格(Aman Sanger)

如果你访问 cursor.com 网站,可能会看到我们正在讨论的内容。

苏亚莱·阿西夫(Sualeh Asif)

为了让那个框正常工作,我们大概尝试了三到四次。最初的设计是一个蓝色的交叉标记。在它成为侧边框之前,它曾以类似 Google 文档的风格显示待删除的代码,带有删除线和新代码,这非常让人分心。我们尝试了多种方法,比如删除和用红色高亮显示。接下来的迭代比较有趣:在 Mac 上按住 option 键时,会高亮显示一段代码,提示可能有变化。在这个例子中,输入和数值会变成蓝色,提示 AI 有建议。它不会直接显示,而是暗示有建议。如果你想查看,按住 option 键即可看到新的建议;松开 option 键则返回原始代码。

莱克斯·弗里德曼(Lex Fridman)

顺便说一下,这已经相当不错了。不过,你需要按下 option 按键。我虽然不是 Mac 用户,但我明白你的意思。

苏亚莱·阿西夫(Sualeh Asif)

这是一个不太直观的例子,我认为这正是问题的关键。

阿曼·桑格(Aman Sanger)

此外,这也可能不是最终的版本。

阿维德·伦纳马克(Arvid Lunnemark)

我个人对在这个领域进行大量改进感到非常兴奋。我们常称之为代码审查问题,这些差异在小规模编辑时非常有用,但在大规模编辑或涉及多个文件时,审查这些差异实际上有些困难。因此,我们有几个不同的想法。例如,我们认为差异的某些部分非常重要,包含大量信息,而其他部分则信息量较低,可能是重复内容。因此,可以考虑突出显示重要部分,并将不太重要的部分灰显。或者,可以使用一个模型来检查差异,发现可能存在的错误,并用小红波浪线标记出来,提示用户需要审查这部分差异。我认为这些想法非常令人兴奋。

莱克斯·弗里德曼(Lex Fridman)

确实,这是一个非常有趣的用户体验设计领域。基本上,你是在尝试引导程序员只阅读他们需要的内容。尽量做到最好。

阿维德·伦纳马克(Arvid Lunnemark)

你希望有一个智能模型来完成这项任务。目前的算法就像普通的算法,并不具备智能。虽然在设计这些算法时运用了智能思维,但算法本身并不具备智能。无论它处理的是哪种任务,你都希望模型能够完成这个任务。因此,我认为需要进一步完善和优化现有的算法,以便更好地满足智能化的需求。

苏亚莱·阿西夫(Sualeh Asif)

我认为一般的问题是,这些模型会变得越来越聪明。随着模型智能的提升,它们能够提出的建议和变化也会越来越复杂。因此,人类需要进行更多的验证工作,这变得越来越困难。就像你需要帮助这些模型一样。是的,我不想把所有时间都花在审核上。很好。

莱克斯·弗里德曼(Lex Fridman)

你能详细说明一下多个文件之间的差异吗?

阿曼·桑格(Aman Sanger)

也就是说,Github 试图通过代码审查来解决这个问题。在进行代码审查时,你需要检查多个文件中的多项更改。但正如 Arvid 之前所说,我认为你可以做得比代码审查更好。代码审查其实有些不尽如人意。你花费大量时间试图理解那些对你来说相当陌生的代码,但通常并不能真正发现很多错误。

我认为你可以通过使用大型语言模型显著改善这种审查体验。 例如,使用一些技巧来引导你关注那些真正重要的部分。我还认为,如果代码是由大型语言模型生成的,而不是由人类开发者生成的,那么代码审查的体验应该是为审查者和代码生成者设计的。在代码生成者是语言模型的情况下,你不必过于关注他们的体验。你可以围绕审查者设计整个过程,使审查者的工作尽可能有趣、简单和高效。我认为这就是仅仅试图让这些事情看起来像代码审查的问题所在。我认为你可以更加富有创造性,拓展可能性。

阿维德·伦纳马克(Arvid Lunnemark)

我认为顺序非常重要。通常,在审查一个 PR(Pull Request)时,你会按照文件列表从上到下进行检查。然而,实际上你可能希望先理解某个逻辑上更早出现的部分,然后再去理解后续部分,而不必自己去理清这些顺序。你希望有一个模型来帮助你完成这个过程。

莱克斯·弗里德曼(Lex Fridman)

目标是让创作过程越来越接近自然语言,而不依赖实际操作。

阿维德·伦纳马克(Arvid Lunnemark)

我认为编程有时并不完全依赖自然语言。比如,当我和 Sualeh 进行结对编程时,他在操作键盘。当我主导时,我会对 Sualeh 说,帮我实现这个函数,这样是可行的。但有时,向 Sualeh 解释我要他做什么实在太麻烦了,所以我会接过键盘,给他展示一些示例代码,然后他就明白了。这是最简单的沟通方式。我认为这对 AI 来说也是一样的。

有时,与 AI 沟通的最简单方式是给出一个示例,然后它就能在其他地方执行任务。或者说,如果你在制作一个网站,最简单的方式不是告诉 AI 应该做什么,而是通过拖动或绘制来展示。也许最终我们会发展到脑机接口等技术,能够理解你的想法。所以我认为自然语言会有它的用武之地,但绝对不会是大多数人编程时的主要方式。

机器学习的细节

莱克斯·弗里德曼(Lex Fridman)

我真的感受到这个编辑器中蕴含的通用人工智能(AGI),感觉到其底层有很多机器学习技术在运作。能告诉我一些支持其运作的机器学习技术吗?

阿曼·桑格(Aman Sanger)

在这个自定义模型的集合中,Cursor 发挥了重要作用。我们训练这些模型,与那些在复杂推理任务中表现出色的前沿模型一起使用。例如,Cursor 功能就是一个很好的例子,展示了如何定制化模型,使其表现甚至超过前沿模型。如果你观察这些模型在我们设定的其他领域任务中的表现,会发现自定义模型虽然有些出人意料,但确实是必要的,并且效果显著。

前沿模型在为代码制定计划和生成大致草图方面表现不错,但要创建详细的代码对它们来说相当困难。比如,当你尝试用 Sonnet 或其他前沿模型来完成这项任务时,它们在处理一些简单问题时会出错,比如在超大文件中计算行号。因此,我们的做法是让模型先勾勒出一个粗略的代码块,指示需要进行的更改,然后训练一个模型来应用这些更改。

莱克斯·弗里德曼(Lex Fridman)

在这个文件中,我们可以说,应用程序就像一个模型,它会查看你的代码,并为你提供下一步的建议。对于人类而言,将两者结合似乎很简单,但你可能会觉得并非如此。

苏亚莱·阿西夫(Sualeh Asif)

与普遍看法相反,它并不是一种确定性的算法。

阿曼·桑格(Aman Sanger)

我认为你可能在其他地方见过浅复制的应用,它大多数情况下会出错,因为你可能试图进行某种精确匹配,但至少有 40%的时间会失败。这导致了糟糕的产品体验。我认为总体来说,模型会变得越来越智能。另一个应用的好处是,它允许你在使用最智能的模型时减少 tokens 的使用。这在生成所有这些 tokens 时既昂贵又耗时。

因此,你可以先给出一个非常粗略的草图,然后让简单模型去实现它,因为实现这个粗略的代码任务要容易得多。我认为这种模式会持续下去,你可以使用越来越智能的模型进行规划,然后由不那么智能的模型处理实现细节。 也许你会有更强大的模型来处理更高层次的计划,这种计划可能会递归地应用于特定的应用模型。

苏亚莱·阿西夫(Sualeh Asif)

或许我们应该讨论如何提高它的速度。我认为这是一个永恒有趣的话题。

莱克斯·弗里德曼(Lex Fridman)

你是如何让它运行得更快的?

阿曼·桑格(Aman Sanger)

在提升速度方面,一个重要的组成部分是预测性编辑。预测性编辑是预测性编码的一种变体。为了更好地理解预测性编码,简单介绍一下预测性解码:在语言模型生成中,当受到内存限制时,同时处理多个 token 比逐个生成 token 要快。这就像在比较提示 token 与生成 token 的每秒处理速度时,提示 token 要快得多。因此,我们采用的方法是,不像传统的预测性解码那样使用一个非常小的模型来预测草稿 token,而是由更大的模型进行验证和代码编辑。

我们对现有代码的预期非常强烈,实际上就是完全相同的代码。你可以将原始代码块重新输入到模型中,模型大多数时候会同意并输出相同的代码。这样,你可以并行处理所有这些行,只需用足够多的代码块进行并行操作。最终,你会达到一个分歧点,模型将预测出与原始代码不同的文本。它会生成这些 token,然后在足够多的 token 与原始代码匹配后,我们会决定重新开始对代码块进行预测。实际上,这看起来就像是一个更快版本的正常代码编辑。就像是模型以更快的速度重写所有代码。我们可以使用与差异相同的接口,但它会更快地流式传输。

苏亚莱·阿西夫(Sualeh Asif)

一个优势是,在进行无线流媒体时,你可以在内容加载完成之前就开始观看。因此,不会出现长时间的加载画面。

莱克斯·弗里德曼(Lex Fridman)

这样,人类可以在任务完成之前就开始阅读。

苏亚莱·阿西夫(Sualeh Asif)

我认为有趣的是,预测如今已成为一种相当普遍的现象。这不仅体现在语言模型中,显然在 CPU 和数据库中也存在预测,几乎无处不在。

综合表现最好的模型是 Sonnet

莱克斯·弗里德曼(Lex Fridman)

让我来回答这个看似荒谬的问题:在编程领域,哪个语言模型更优秀?是 Claude 还是 GPT?我相信答案要复杂得多,因为每个方面似乎都涉及不同的模型。

阿曼·桑格(Aman Sanger)

我认为没有哪个模型能够在我们认为重要的所有类别中全面超越其他模型。这些类别包括速度、编辑代码的能力、处理大量代码的能力、长上下文处理能力等,以及其他一些方面和编码能力。目前,我认为综合表现最好的模型是 Sonnet,这似乎是一个普遍认可的观点。 Sonnet 在推理方面非常出色,因此如果你给它一些非常难的编程面试题或者前导码问题,它可以表现得很好。然而,它在理解你的大致意图方面似乎不如 Sona。

很多其他前沿模型给我的感觉是,它们并没有在特定任务上过拟合。我并不是说它们是在基准测试上训练的,但它们在基准测试中的表现相对来说非常好。因此,如果你在这些基准测试和与基准测试分布相符的任务中测试它们,它们会表现得非常好。但当你稍微超出这些范围时,我认为 Sonnet 是在保持相同能力方面表现最好的一个。就像在基准测试中表现出色一样,当你尝试让它进行任何编码任务时,它也能保持同样的能力。

莱克斯·弗里德曼(Lex Fridman)

在评估这些模型时,正常的编程体验与基准测试所代表的内容之间有什么区别呢?你认为基准测试在哪些方面存在不足之处?

苏亚莱·阿西夫(Sualeh Asif)

顺便说一下,这就像一个非常棘手的问题,也是一个至关重要的细节,涉及基准测试与我们实际编码之间的差异。我们进行的是实际编码,而不是面试风格的编码。在实际编码中,人们有时会用非正式的英语表达,比如说“按照我之前的做法”,或者“先做这件事,然后帮我做另一件事,最后制作这个 UI 元素”。很多事情都依赖于上下文。你需要真正理解人们的意图,然后去实现他们想要的,而不是像面试问题那样明确。面试问题通常非常明确,依赖于详细的规范,而人们的需求则不那么明确。

迈克尔·特鲁尔(Michael Truell)

存在一个问题,那就是基准测试中可以实际建模的内容与实际编程之间的差异。这有时很难概括,因为实际编程非常混乱,有时并不明确什么是正确的或不正确的。此外,由于公共基准测试的挑战,这变得更加困难。这是因为公共基准测试有时会被过度优化,而且很难从这些模型中获取公共基准测试的数据。例如,一个最受欢迎的代理基准测试,SWE-bench,在这些基础模型的训练数据中被严重污染。因此,如果你让这些基础模型解决一个 SWE-bench 问题,而没有给它们提供代码库的上下文,它们可能会凭空想象出正确的文件路径和函数名称。因此,这些问题的普遍性也很棘手。

阿曼·桑格(Aman Sanger)

在这种情况下,模型可能会直接根据具体的问题或请求进行调整。实验室可能在数据清理方面表现更佳,或者他们已经在这方面做得很好,但他们不会省略仓库本身的实际训练数据。这些仓库包括一些最受欢迎的 Python 仓库,例如 SimPy。我不认为他们会限制模型在 SimPy 和其他这些流行的 Python 仓库上的表现,以便在基准测试中获得真实的评估分数。

迈克尔·特鲁尔(Michael Truell)

我认为,考虑到稀缺性和基准测试,那些构建这些模型或利用这些模型来开发系统的地方,实际上使用了一些有趣的指标来判断他们是否走在正确的方向上。在许多地方,人们会让人类与这些模型互动,并提供质量反馈。例如,一些基础模型公司专门有人负责这方面的工作。此外,我们内部也会对这些模型进行定性评估,并在很大程度上依赖这些评估。

苏亚莱·阿西夫(Sualeh Asif)

这就像一种直觉。

莱克斯·弗里德曼(Lex Fridman)

你让人类进行情绪调查。好吧,我的意思是,这就是我所做的事情。比如阅读在线论坛、Reddit 以及其他类似的平台,所以我不太确定如何正确理解人们的意见,因为他们会说一些像“我觉得 Claude 或 GPT 变得不如以前聪明了”这样的话。我会说,我也有时有这样的感觉,但我想知道这是模型的问题还是我自己的问题。

阿曼·桑格(Aman Sanger)

是的,关于 Claude,我听说有一个有趣的情况,似乎 AWS 提供了不同类型的芯片。我怀疑它们的数值计算能力可能与图形处理单元(GPU)略有不同。有人推测,性能下降可能与在 AWS Bedrock 上使用的模型量化版本有关,而不是在 Anthropic 上运行的版本。

莱克斯·弗里德曼(Lex Fridman)

我采访了一些持有阴谋论观点的人,并很高兴能与他们对话。

苏亚莱·阿西夫(Sualeh Asif)

这并不像阴谋论那么复杂。只是,人类的本性如此,当你进行大量浮点运算时,由于芯片的复杂性,可能会出现漏洞。很难强调这些漏洞有多难以避免。

莱克斯·弗里德曼(Lex Fridman)

在这一切中,一个好的提示能起到什么作用呢?我们提到过,基准测试中的提示通常是非常结构化且精心设计的。那么,人类应该如何做才能最大化成功呢?在你博客中提到的提示设计中,人类的重要性是什么?

阿维德·伦纳马克(Arvid Lunnemark)

是的,我认为这取决于你使用的模型。不同的模型在处理提示时会有些许差异,并且对不同的提示反应也不同。不过,我认为最初的 GPT-4 和去年那些相对出色的模型对提示非常敏感,而且它们的上下文窗口非常小。因此,在我们的代码库中,有许多可能与提示相关的信息,比如文档、你添加的文件、对话历史等。这就带来了一个问题:在有限的空间里,你如何决定实际放入提示中的内容。即使是今天的模型,即使有较长的上下文,填满整个上下文窗口也会导致速度变慢,有时模型实际上会感到困惑,而且有些模型比其他模型更容易困惑。

我们内部有一个系统叫做 Preempt,它在这方面对我们有一些帮助。我认为它是为我们拥有 8000 个 token 上下文窗口的时代而构建的。这有点类似于制作网站时,你希望它能在移动设备和桌面屏幕上都能正常工作,并且你有动态信息,而不是像设计印刷杂志那样,确切知道可以放置东西的位置。

但是,当你有一个网站或提示时,你有这些输入,然后你需要格式化它们以确保始终有效。即使输入非常大,你可能也需要删减一些内容。因此,我们的想法是,好吧,让我们从中汲取一些灵感。设计网站的最佳方法是什么?我们最喜欢的是 React 和声明式方法,你在 JavaScript 中使用 JSX,然后声明:“这就是我想要的,我认为这个优先级更高,或者这个比其他东西的 Z 指数更高”。

在网页设计中,有一个渲染引擎,比如 Chrome,而在我们的情况下是 Preempt 渲染器,它将所有内容放到页面上。当你声明一点时,它决定你想要什么,然后它弄清楚你想要什么。我们发现这非常有帮助,我认为它的角色随着时间的推移有所变化,最初是为了适应这些小的上下文窗口。现在它非常有用,因为它帮助我们分割进入提示的数据和实际的渲染。因此,更容易调试,因为你可以更改提示的渲染,然后在旧提示上进行测试,因为你有进入提示的原始数据。这样,你可以看到,我的更改是否确实改善了整个电子邮件。

莱克斯·弗里德曼(Lex Fridman)

所以,你是直接用 JSX 来提示的吗?

阿维德·伦纳马克(Arvid Lunnemark)

是的,这有点像 React。在这个系统中,有一些组件,比如文件组件,它会接收光标位置作为输入。通常情况下,光标所在的行是文件中最重要的一行,因为你正在查看这一行。因此,你可以为各行设置优先级,光标所在的行优先级最高,离光标越远的行优先级越低。最终,在渲染时,系统会计算出可以在光标行周围显示多少行。

莱克斯·弗里德曼(Lex Fridman)

这件事情真是太棒了。

阿曼·桑格(Aman Sanger)

你还可以做一些其他有趣的事情,比如,如果你在整个代码库中有大量的代码块,可以通过检索、嵌入和重新排序评分等方法,为这些代码块设定优先级。

莱克斯·弗里德曼(Lex Fridman)

那么,人类在提问时,是否也应该尝试使用类似的方法呢?比如说,在问题中使用 JSX 是否有益,还是应该保持整个想法的灵活和随意。

阿维德·伦纳马克(Arvid Lunnemark)

我认为我们的目标是让你做出最自然的反应。接下来,我们的任务是找出如何检索相关信息,以确保你的反应真正有意义。

莱克斯·弗里德曼(Lex Fridman)

这让我想起我和 Perplexity 的 Arvind 关于模糊性的讨论。他认为应该尽可能简化工作。是的,这确实很美好,但我认为可以对程序员提出更高的要求。比如,如果你说随心所欲地做事,我的意思是,人类往往倾向于选择简单的解决方案。这种倾向与付出更多努力之间存在一种紧张关系,几乎就像系统在施压或激励你去深入思考。这里不是指语法结构,而是指你在问题中传达的思维深度。

阿曼·桑格(Aman Sanger)

我认为,即使一个系统接近完美,当你向模型提出请求时,通常意图的传达不足以让模型明确知道该如何操作。为了解决这个问题,有几种方法。一种简单的方法是让模型直接询问你:根据你的查询,我不确定如何处理某些部分,你能否澄清一下?另一种方法是,如果查询中存在不确定性,模型可以生成五到六种可能的结果,直接展示给你选择。

莱克斯·弗里德曼(Lex Fridman)

模型在决定是否进行对话时有多大的难度?与此相比,处理不确定性又如何?我是否应该选择询问更多信息以减少不确定性?

苏亚莱·阿西夫(Sualeh Asif)

我们最近增加了一项功能,可以尝试建议可能需要添加的文件。在你输入的过程中,我们能够识别不确定性,并可能建议一些文件。例如,当你编写 API 时,我们可以根据你之前在同一文件中的提交内容,推测出哪些客户端和服务器的内容可能非常有用。技术难点在于如何在所有提交中识别出当前提示下最重要的文件。

我们已经推出了一个初始版本,我相信我们可以让它更准确。尽管这项功能仍处于实验阶段,但我们的想法是向你展示是否需要添加这个文件,以便模型能够帮助你编辑这些文件。因为如果你正在开发 API,你也应该编辑使用该 API 的客户端和服务器,以及解决该 API 的其他部分。在你编写提示的阶段,甚至在按下回车键之前,我们可能就能帮助解决一些不确定性。

编程的很多价值在于迭代

莱克斯·弗里德曼(Lex Fridman)

你在多大程度上使用代理方法?代理的作用有多大?

阿维德·伦纳马克(Arvid Lunnemark)

我们认为智能代理非常酷。智能代理就像是人类的存在,让你在看到演示时感受到它的行为就像人类一样,更接近 API,这真的很酷。目前智能代理在很多方面还不是特别有用。不过,我们正在接近它们真正有用的时候。因此,在某些类型的任务中,拥有一个智能代理会非常好。比如说,如果我们遇到一个 bug,有时候你不能在聊天输入框中使用 Command C 和 Command V,这是一个非常明确的任务。我只想简单地说,这个功能不工作,请修复它。然后我希望有一个智能代理去处理它,一天后我回来查看结果。

莱克斯·弗里德曼(Lex Fridman)

这是否意味着它会找到正确的文件?

阿维德·伦纳马克(Arvid Lunnemark)

是的,它能够找到正确的文件。它会尝试重现这个错误,修复它,然后验证修复是否正确。这可能是一个需要很长时间的过程。因此,我希望能够具备这样的能力。我认为在编程中,很多人相信代理会接管所有编程工作。但我不这么认为,因为编程的很多价值在于迭代。 你不一定想在一开始就明确指定某些东西,因为在看到初始版本之前,你可能并不知道自己真正想要什么。然后,你可以在此基础上进行迭代,提供更多信息。因此,对于很多编程工作,我认为实际上需要一个实时系统,能够立即给出初始版本,然后你可以非常快速地进行迭代。

莱克斯·弗里德曼(Lex Fridman)

Replica Agent 可以设置开发环境、解决软件包问题、配置所有内容、建立数据库,甚至实际部署应用程序。这也是你一直梦寐以求的功能吗?

阿维德·伦纳马克(Arvid Lunnemark)

我也是这样认为。我觉得这对某些编程类型来说会非常酷。

莱克斯·弗里德曼(Lex Fridman)

Cursor 在选定范围内吗?

阿维德·伦纳马克(Arvid Lunnemark)

我们目前在这方面的工作并不活跃,但我们确实希望让程序员的工作变得更加轻松和有趣。有些任务确实繁琐,需要多个步骤,你可能希望将这些任务委托给一个代理程序。而在工作过程中,有些任务实际上可以让代理程序在后台运行。比如说,当你处理一个同时涉及后端和前端的 PR(Pull Request)时,可以在处理前端部分时,让后台代理程序了解你的工作。这样,当你开始处理 PR 的后端部分时,就会有一些初始代码供你进一步开发。这将会非常酷。

莱克斯·弗里德曼(Lex Fridman)

我们之前已经讨论过速度的问题,但我认为我们可以更深入地探讨技术细节,以使这个程序真正变得非常快速。在程序的各个方面,大多数操作都感觉非常迅速。正如我提到的,应用程序可能是最慢的部分。对我来说,这是一个需要重点关注的领域。

阿维德·伦纳马克(Arvid Lunnemark)

我们正在经历痛苦,并努力解决这个问题。

莱克斯·弗里德曼(Lex Fridman)

这意味着,当你感到某个过程,比如一两秒钟,显得有些慢时,其实是因为其他一切都非常快。那么,有没有一些技术手段可以用来加速这些模型呢?比如如何让聊天更快,或者让差异计算更快。有哪些方法可以立即想到呢?

阿曼·桑格(Aman Sanger)

我们可以讨论许多我们使用的策略,其中一个有趣的策略是缓存预热(Cache Warming)。在用户输入时,你可以提前利用一些上下文信息,因为这些信息在用户完成输入之前就已经可以获取。正如我们之前讨论的,重用 KV 缓存(Key-Value Cache)可以降低延迟和跨请求的成本。因此,当用户开始输入时,你可以立即使用当前文件内容来预热缓存。这样,当用户按下回车键时,实际上需要预填充和计算的 token 非常少,从而显著降低 TTFT(首次生成时间)。

阿曼·桑格(Aman Sanger)

KV 缓存是一种用于优化数据存取的技术。它通过在内存中缓存键值对,加速数据的读写操作。KV 缓存的工作原理类似于传统缓存系统:当应用程序请求数据时,首先检查缓存中是否存在该数据。如果存在,则直接从缓存中返回,避免访问较慢的存储设备;如果不存在,则从存储设备中读取数据,并将其存入缓存,以便下次快速访问。通过这种方式,KV 缓存可以显著提高系统的性能和响应速度。

阿曼·桑格(Aman Sanger)

Transformer 的一个机制使其不仅能够独立处理每个标记,还能同时考虑之前的标记,这就是注意力机制中键和值的作用。通常,注意力机制的工作方式是,在当前标记处生成一个查询,然后利用所有之前标记的键和值,这些是模型内部存储的所有之前标记的某种表示。在默认情况下,当处理序列数据时,模型必须对每个标记进行一次完整的前向传递,这涉及大量的矩阵乘法运算,非常缓慢。

然而,如果你已经完成了这些运算并将键和值存储在 GPU 中,那么当模型已经处理了最后 n 个标记后,如果现在需要预测第 n+1 个标记的输出,就不需要将前 n 个标记再次通过整个模型,因为模型已经拥有了所有这些键和值。因此,你只需要对最后一个标记进行前向传递。在进行注意力计算时,你会重用那些已经计算出的键和值,这是 Transformer 唯一的顺序依赖部分。

莱克斯·弗里德曼(Lex Fridman)

是否存在更高级别的缓存,例如针对提示词或相似内容的缓存?

阿曼·桑格(Aman Sanger)

有一种有趣的缓存方式可以用于 Cursor Tab,即通过预测用户会接受某个建议来提前准备下一个请求。这种方法结合了预测和缓存,因为你是在预测用户会接受建议,从而缓存了这个建议。当用户按下 Tab 键时,下一个建议就会立即为他们准备好。这是一种巧妙的启发式方法或技巧,利用了更高级别的缓存,让用户感受到速度的提升。

苏亚莱·阿西夫(Sualeh Asif)

如果你能缩小 KV 缓存的大小,其中一个好处是可以进行更多的预测。你可以预测出 10 个可能有用的选项,这样用户点击其中一个的概率会远高于只展示一个选项的概率。用户可能会输入另一个字符,这样我们就能在缓存中找到其他相关内容。因此,这里有很多技巧,这种现象在强化学习(RL)中也非常有用。也许模型的单个样本效果不佳,但如果你预测 10 个不同的选项,其中一个正确的概率就会大大提高。这些是被动触发因素,RL 的一部分工作就是利用这种被动触发现象进行多种预测。

可以这样理解,模型内部对哪个关键点是正确的或哪个选项是人类想要的存在不确定性。当我们使用 RL 标记模型时,我们所做的事情之一就是在模型生成的 100 个不同建议中预测哪个更适合人类,哪个是人类更喜欢的。也许模型可以预测得很远,也许只能预测一点,或者在中间某个地方。然后你可以对人类更喜欢的选项给予奖励,对不喜欢的选项进行惩罚,从而训练模型输出人类更喜欢的建议。你可以利用这些非常有用的 RL 循环来优化模型的表现。Aman 可能可以对此进行更详细的解释。

阿曼·桑格(Aman Sanger)

这与速度有些不同,但从技术上讲,可以将其联系起来。因为如果你对较小的模型进行强化学习(RL),并获得与较大模型相同的性能,就像 Sualeh 提到的关于缩减知识库(KB)缓存大小的一些内容。此外,还有其他技术也能显著提高速度。大约两年前,人们主要使用多头注意力机制。我认为现在已经转向更高效的注意力机制,比如分组查询注意力或多查询注意力。这对于在较大批量处理中更快生成标记非常有帮助。

有趣的是,这对首次标记预填充速度没有影响,重要的是生成标记时的速度。为什么呢?因为在生成标记时,速度的限制更多来自于长上下文和大批量处理时读取缓存键和值的速度,而不是高度并行化的矩阵乘法。因此,这涉及到内存带宽的限制。

我们如何加快速度呢?可以尝试压缩这些键和值的大小。多查询注意力是其中最为激进的一种,通常在多头注意力中,你会有多个所谓的注意力头和查询头,而多查询注意力只保留查询头,去掉所有的键值头,只剩下一种键值头,其余都是查询头。而在分组查询中,你保留所有的查询头,但键和值的头数较少,不过不会减少到只有一个。总之,重点在于减少 KB 缓存的大小。

阿曼·桑格(Aman Sanger)

是的,这涉及多个潜在变量,情况稍微复杂一些。其工作方式是将所有注意力头的键和值整体转换为一个隐向量表示,然后在推理时进行解码。

苏亚莱·阿西夫(Sualeh Asif)

DeepSeek 公司的算法相当有趣。其核心思想可能与 MQA 及其他方法类似,即通过减少键值对头(KV heads)的数量来实现优势。虽然数量减少了,但理论上你可能仍需要许多不同的键和值,并希望每个键和值都是独特的。减少大小的一种方法是为所有键和值保留一个大的共享向量,同时为每个单独的标记保留较小的向量。

这样在操作时,你只需存储较小的部分,作为某种低秩近似。低秩近似的好处在于,当你需要计算最终结果时,考虑到内存带宽,你仍然可以利用一些计算能力。因此,如果你能扩展潜在向量,这样做效率更高,因为你减少了,比如说,可能是减少了 30Q 或其他类似的向量大小。

阿曼·桑格(Aman Sanger)

是的,将键和值分开进行成对匹配查询,可能会带来一些灵活性,而不是将所有内容合并为一个整体,至少在这种交互中是这样的。

莱克斯·弗里德曼(Lex Fridman)

这与内存限制有关。那么,这最终如何影响用户体验呢?

阿曼·桑格(Aman Sanger)

现在,你可以将缓存设置得更大,因为为键值缓存分配的空间减少了,这样可以更积极地缓存更多内容。因此,你会获得更多的缓存命中,从而减少延迟的令牌生成时间,正如我们之前所述。此外,当你开始处理越来越多的请求和更大的批处理时,生成令牌的速度不会显著下降。

苏亚莱·阿西夫(Sualeh Asif)

它是否也允许你在某些情况下扩展提示?

阿曼·桑格(Aman Sanger)

基本上,你的 KV 缓存大小是所有提示信息大小与并行处理数量的乘积。因此,你可以增加这两个参数中的任意一个,即批处理大小或提示信息的大小,而不会降低生成令牌过程的延迟。

莱克斯·弗里德曼(Lex Fridman)

Arvid,你写了一篇关于影子工作环境的博客文章。是的,你在后台进行代码迭代。那么,具体发生了什么?

阿维德·伦纳马克(Arvid Lunnemark)

为了更清晰地说明,我们希望在后台进行许多操作,并尝试多种不同的方法。目前,除了缓存预热或寻找合适的上下文来输入命令行提示外,我们并没有进行太多其他操作。我们的想法是,如果能在后台进行计算,就可以帮助用户在更长的时间范围内做出决策,而不仅仅是预测接下来的几行代码,而是预测接下来 10 分钟内的操作。通过在后台进行这些操作,可以投入更多的计算资源。

因此,我们实现并在内部用于实验的影子工作区的概念是,实际上要利用后台操作,你需要某种反馈信号返回给模型,否则仅仅让模型思考更长时间并不能提高性能。例如,0 和 1 就是一个很好的例子。但提高性能的另一种方法是让模型进行迭代并获得反馈。对于程序员来说,一个非常重要的反馈来源是语言服务器。

语言服务器存在于大多数编程语言中,每种语言都有一个独立的语言服务器,它可以告诉你,比如这里使用了错误的类型,并给出错误提示。或者它可以让你跳转到定义,理解代码的结构。语言服务器是由不同语言的开发者开发的,比如 TypeScript 团队开发的 TypeScript 语言服务器,Rust 团队开发的 Rust 语言服务器,它们都通过语言服务器协议与 VS Code 进行接口连接。这样,VS Code 不需要内置所有不同的语言,而是可以使用现有的编译器基础设施。

阿维德·伦纳马克(Arvid Lunnemark)

它用于代码检查、跳转到定义以及查看代码中使用的类型信息。

莱克斯·弗里德曼(Lex Fridman)

也在做类型检查。

阿维德·伦纳马克(Arvid Lunnemark)

在处理大型项目时,类型检查和引用跳转功能是必不可少的。如果缺少这些功能,编写大型项目的代码将变得非常困难。

莱克斯·弗里德曼(Lex Fridman)

你能详细说明一下在 Cursor 中如何使用语言服务器协议进行通信吗?

阿维德·伦纳马克(Arvid Lunnemark)

这个功能用于在 Cursor 向程序员展示信息,就像在 VS Code 中一样。接下来的想法是,你希望将相同的信息展示给 AI 模型,并且希望以一种不影响用户的方式进行,因为你希望在后台完成这项工作。因此,这个工作空间的想法是,我们可以生成一个隐藏的窗口。你可以设置一个选项,使窗口隐藏。虽然窗口存在,但实际上你看不到它。在这个窗口内,AI 代理可以自由地修改代码,只要不保存,因为它仍然在同一个文件夹中,然后可以从代码审查工具中获取反馈,查看定义,并对代码进行迭代。

莱克斯·弗里德曼(Lex Fridman)

所以,这就像是在后台运行所有程序或任务,甚至可能还会执行代码,对吧?

阿维德·伦纳马克(Arvid Lunnemark)

这就是最终的版本。好的,这就是你想要的结果。许多博客文章实际上在讨论如何实现这一点,因为这确实有些复杂。你希望它能在用户的机器上运行,以便准确反映用户的环境。在 Linux 系统上,有一个非常有趣的功能,可以实际镜像文件系统,让 AI 对文件进行更改。AI 认为它是在文件层面进行操作,但实际上这些操作是在内存中完成的。你可以通过创建一个内核扩展来实现这一点。然而,在 Mac 和 Windows 系统上,这就比较困难了。不过,这也是一个有趣的技术问题。

阿曼·桑格(Aman Sanger)

一个可能有些巧妙但有趣的想法是对保存操作进行限制。 基本上,你可以让大语言模型控制保存到磁盘的操作。这样,你操作的就不是那些已经安全保存到磁盘的文件的真实版本,而是操作之前的临时工作区和仅存在于内存中的未保存内容。这些内容仍然会触发代码分析工具(Linter)的错误,你可以在其中编写代码。当你尝试运行代码时,会有一个小警告提示存在限制,如果你尝试并发操作,就需要从语言服务器或临时工作区中解除锁定。

莱克斯·弗里德曼(Lex Fridman)

这是一个令人兴奋的未来。顺便说一下,我喜欢模型能够更改文件的功能。虽然这可能让人有些不安,但可以让代理执行一系列任务,然后第二天回来查看结果,就像观察同事一样,真的很酷。

阿曼·桑格(Aman Sanger)

在可执行性方面,可能存在不同的实现方式。对于一些简单的任务,比如用户在编程时可以在几分钟内完成的工作,让程序在用户的本地机器上运行是合理的选择。而对于那些需要更长时间的大规模任务,你可能希望在一个远程的沙盒环境中进行。这又引出了一个非常棘手的问题,即如何精确或大致地重现用户的环境,以便在远程沙盒中运行代码时达到与本地相同的效果。

苏亚莱·阿西夫(Sualeh Asif)

我很好奇,你希望代理程序在编码中扮演什么角色?是希望它们发现漏洞,还是实现新功能呢?你理想中的代理程序是什么样的?

莱克斯·弗里德曼(Lex Fridman)

顺便说一下,当我想到自动化时,我不仅仅想到编程。我想到的是应用领域,比如这个特定的播客和视频编辑。如果你看看 Adobe 的产品,很多功能都是由代码驱动的。虽然这些代码的文档很差,但你可以通过编程与 Premiere 进行交互。基本上,我在 YouTube 上进行的所有上传工作,包括翻译、配音等任务,都是通过编程实现的。因此,我设想自动化许多与编辑不直接相关的任务。这就是我所考虑的。在编程方面,我主要关注的是错误查找,比如多层次的错误检测和逻辑错误检测,而不是精神上的错误,而是像实施方向上的大问题。

苏亚莱·阿西夫(Sualeh Asif)

这使得你能够在寻找漏洞方面提供帮助。

阿曼·桑格(Aman Sanger)

是的,我的意思是,当这些模型仅仅通过简单提示来识别错误时,它们在发现错误方面的表现非常差,准确性很低。

阿维德·伦纳马克(Arvid Lunnemark)

即便是最聪明的模型,也可能会遇到无法解决的问题。

莱克斯·弗里德曼(Lex Fridman)

你会如何解释这个问题?有没有更直观的解释方法?

阿曼·桑格(Aman Sanger)

我认为这些模型确实很好地反映了预训练数据的分布。虽然随着损失函数值的降低,它们具备一定的泛化能力,但我认为损失值还没有低到足以让它们完全泛化到我们使用这些模型的所有领域。它们在代码生成和问答系统方面表现得非常出色,比如处理代码、Github 上的内容,以及数万亿的标记和在 Stack Overflow 或 Github 问题上的问答。

因此,当你尝试进入那些在线上不常见的领域时,比如预测下一个编辑的光标位置(给定到目前为止的编辑),模型的局限性就会显现出来。另一个很好的例子是错误识别,因为实际上没有那么多关于实际检测真实错误并提出修复方案的例子,模型在这方面确实面临困难。但我认为这是一个模型迁移能力的问题。 就像你可以从仅在代码上预训练的模型中获得出色的迁移性能一样,你会发现代码到错误识别的泛化模型中也会有类似的效果,只需要稍微推动一下。

苏亚莱·阿西夫(Sualeh Asif)

首先,我认为他们对代码的理解非常出色。在预训练过程中,模型构建的表示几乎可以肯定会在某个环节中意识到可能存在一些可疑的情况。实际上,这部分是因为人类能够很好地判断哪些错误真正重要。关键不仅在于识别可疑之处,而在于判断其是无关紧要的,还是会导致服务器宕机的严重问题。部分原因可能与文化知识有关,比如资深工程师之所以优秀,是因为他们知道三年前有人写过一段非常可疑的代码,导致了服务器宕机。

相反,如果这是一个实验项目,那么出现一些错误是可以接受的,因为你只是想进行实验并感受一下。如果模型在实验过程中变得非常干扰,那就很糟糕。但如果你在为生产环境编写代码,比如在 Postgres 或 Linux 上编写数据库代码,像 Linus Torvalds 这样的知名开发者,即使在这种情况下也不能接受。对用户警觉程度的判断是非常重要的。

【2004新澳门天天开好彩大全】【旺角彩二四六天空彩赢彩】
【2024年新澳门天天开彩免费资料】【管家婆2024资料大全】
【2024年正版免费天天开彩】【澳门天天彩期期精准】
【2024新澳今晚资料】【2O24年澳门正版免费大全】
【2024年新澳门天天彩开彩结果】【2024澳门天天六开彩免费图】
【2024新澳正版免费资料大全】【澳门特一肖一码免费提】【2024新澳门天天六开好彩大全】
上一条新闻下一条新闻

推荐文章

发表评论

三声缘

4秒前:他们应该问,所有的 alpha 功能在哪里?

IP:88.87.9.*

Sheil

2秒前:苏亚莱·阿西夫(Sualeh Asif)

IP:66.25.4.*

察合台·乌鲁索伊

5秒前:因此,在我们的代码库中,有许多可能与提示相关的信息,比如文档、你添加的文件、对话历史等。

IP:28.46.1.*

陈紫鹏

6秒前:迈克尔·特鲁尔(Michael Truell)

IP:38.67.7.*

扬子晚报APP介绍

APP图标

APP名:扬子晚报

版本:V3.96.334等级:8星

更新时间:2024-10-17 13:13文件格式:apk应用分类:ios-Android

APK大小:49.24MB23%好评

扬子晚报这是一个功能强大的扬子晚报APP,可以帮助你完成各种任务。包括最新24小时热点资讯,今日最新:对于程序员来说,一个非常重要的反馈来源是语言服务器。

版本V2.98.448APP介绍

APP图标

APP名:扬子晚报

版本:V1.42.293等级:6星

更新时间:2024-10-17 15:20文件格式:apk应用分类:ios-Android

APK大小:23.62MB53%好评

无论是扬子晚报快速浏览新闻还是深入了解某个话题,这款新闻APP都能为您提供全面、精准的信息服务。

版本V4.86.250APP介绍

APP图标

APP名:扬子晚报

版本:V5.19.911等级:1星

更新时间:2024-10-17 21:15文件格式:apk应用分类:ios-Android

APK大小:54.48MB15%好评

扬子晚报应用界面简洁易用,用户可以轻松浏览头条新闻、深度报道和特写文章。24小时内的热点资讯一目了然,让您随时掌握世界动态。此外,您还可以参与评论,与其他读者交流看法,形成一个互动活跃的社区。

版本V6.93.352APP介绍

APP图标

APP名:扬子晚报

版本:V7.64.600等级:2星

更新时间:2024-10-17 14:13文件格式:apk应用分类:ios-Android

APK大小:13.85MB72%好评

扬子晚报这款新闻APP是您获取实时信息的理想伴侣。它汇聚了全球最新的新闻报道,涵盖政治、经济、科技、娱乐、体育等多个领域。通过个性化推荐功能,您可以根据兴趣定制新闻源,确保每条信息都与您相关。

版本V9.88.999APP介绍

APP图标

APP名:扬子晚报

版本:V9.56.615等级:6星

更新时间:2024-10-17 14:17文件格式:apk应用分类:ios-Android

APK大小:75.63MB93%好评

这是一款功能强大的扬子晚报应用,专为帮助您高效完成各种任务而设计。它不仅提供最新的24小时热点资讯,还为您带来今日的最新动态:就像你可以从仅在代码上预训练的模型中获得出色的迁移性能一样,你会发现代码到错误识别的泛化模型中也会有类似的效果,只需要稍微推动一下。。无论是获取信息还是提升效率,这款APP都是您理想的助手。

版本V3.99.461APP介绍

APP图标

APP名:扬子晚报

版本:V2.84.332等级:2星

更新时间:2024-10-17 22:23文件格式:apk应用分类:ios-Android

APK大小:13.27MB91%好评

这是一款功能强大的扬子晚报应用,旨在帮助您高效完成各类任务。它提供最新的24小时热点资讯,让您随时了解发生的重大事件。今天的最新内容包括:阿维德·伦纳马克(Arvid Lunnemark) ,为您的生活和决策提供了重要参考。这款APP是您获取信息和完成任务的得力助手。

版本V9.18.594APP介绍

APP图标

APP名:扬子晚报

版本:V1.10.963等级:6星

更新时间:2024-10-17 17:13文件格式:apk应用分类:ios-Android

APK大小:53.93MB67%好评

这是一款功能强大的扬子晚报应用,专为帮助您高效完成各种任务而设计。它汇集了最新的24小时热点资讯,让您时刻掌握世界动态。今日的最新内容包括:接下来,我们的任务是找出如何检索相关信息,以确保你的反应真正有意义。,为您的决策和日常生活提供有价值的信息支持。无论您需要了解什么,这款APP都能成为您不可或缺的助手。

版本V8.66.943APP介绍

APP图标

APP名:扬子晚报

版本:V2.55.655等级:6星

更新时间:2024-10-17 16:24文件格式:apk应用分类:ios-Android

APK大小:74.68MB80%好评

今天的最新动态包括:在成功拥有一个优秀的代码编辑模型之前,我们进行了多次尝试。,让您第一时间掌握关键资讯,做出明智的决策。这个应用不仅是您的信息获取工具,更是一个提升生活质量的得力助手。

版本V8.64.745APP介绍

APP图标

APP名:扬子晚报

版本:V9.59.993等级:1星

更新时间:2024-10-17 13:17文件格式:apk应用分类:ios-Android

APK大小:44.49MB52%好评

这是一款功能强大的扬子晚报应用,能够帮助你高效地完成多种任务。它包括最新的24小时热点资讯,以及今天的最新动态:大约在 2020 年,OpenAI 发布了一篇关于 Scaling Law 的论文。。

版本V6.21.979APP介绍

APP图标

APP名:扬子晚报

版本:V8.81.184等级:6星

更新时间:2024-10-17 22:16文件格式:apk应用分类:ios-Android

APK大小:17.37MB53%好评

这款功能强大的扬子晚报应用旨在提升您的日常效率,帮助您轻松应对各种任务。应用界面友好直观,用户可以快速导航,获取所需信息。它不仅提供最新的24小时热点资讯,还定期更新各种主题的文章和评论,确保您始终走在信息的前沿。

版本V7.47.716APP介绍

APP图标

APP名:扬子晚报

版本:V8.37.405等级:3星

更新时间:2024-10-17 18:19文件格式:apk应用分类:ios-Android

APK大小:76.55MB80%好评

这款新闻APP是您获取实时新闻的最佳选择。它整合了全球各大新闻来源,提供最新的头条、热点和专题报道,涵盖从政治到娱乐的各个领域。用户可以根据兴趣自定义新闻推送,确保获取最相关的信息。

版本V2.25.520APP介绍

APP图标

APP名:扬子晚报

版本:V1.25.333等级:3星

更新时间:2024-10-17 20:20文件格式:apk应用分类:ios-Android

APK大小:29.21MB48%好评

APP界面友好,支持快速浏览和离线阅读。您还可以通过搜索功能,快速找到特定主题的新闻。互动功能让您可以评论、分享文章,与朋友讨论热点话题。无论您是在通勤、休闲,还是工作间隙,这款APP都能让您轻松掌握最新动态。