Home
cover of episode #447 – Cursor Team: Future of Programming with AI

#447 – Cursor Team: Future of Programming with AI

2024/10/6
logo of podcast Lex Fridman Podcast

Lex Fridman Podcast

Key Insights

Why did the Cursor team decide to fork VS Code instead of writing an extension?

The decision to fork VS Code was driven by the need for more control over the programming environment as AI capabilities improve. Extensions have limitations that would lock in certain features and hinder innovation as models get better.

What are the key features that make Cursor stand out compared to GitHub Copilot?

Cursor offers faster and more intelligent features like next-action prediction and code editing across multiple lines. It also integrates AI more deeply into the editing process, making the experience more organic and efficient.

How does Cursor's tab feature work, and what is its purpose?

The tab feature in Cursor allows the model to predict the next edit or action the programmer will take, making coding faster by eliminating low-entropy actions. It aims to make the editing process feel more like having a fast colleague looking over your shoulder.

What technical challenges did the Cursor team face in making the tab feature work efficiently?

The challenges included training small, efficient models, handling long contexts, and ensuring fast performance. Techniques like speculative decoding and using sparse models were employed to improve speed and accuracy.

How does Cursor handle diffs for code changes across multiple files?

Cursor optimizes diff interfaces for different types of code changes, such as auto-complete suggestions versus larger code blocks. It aims to make the review process easier by highlighting important parts of the diff and graying out less critical changes.

Why is Cursor focusing on local models less compared to cloud-based models?

Cursor's focus on cloud-based models is due to the limitations of local models, especially on less powerful machines and the need for larger models that can't fit on a single node. Cloud-based models also allow for more sophisticated features and faster iteration.

What role does synthetic data play in improving AI models for programming?

Synthetic data helps in training models for tasks where real data is scarce or expensive. It can be used to generate training data for bug detection, improve model accuracy, and create verified data for specific tasks like solving math problems or passing coding tests.

How does Cursor envision the future of programming with AI?

Cursor sees the future of programming as a hybrid where humans remain in control, making critical decisions while AI handles the repetitive and predictive tasks. This will allow for faster iteration and more creative control over the codebase.

Chapters

The code editor is where software is built, providing structure and tools for programmers.
  • Code editors are advanced word processors for programmers.
  • They offer visual differentiation, navigation, and error checking.
  • The role of code editors will evolve with AI-assisted coding.

Shownotes Transcript

以下是与 Cursor 团队创始成员的对话。Michael Truell、Sualeh Asif 和 Aman Sanger 与 Omar K. 在一起,Cursor 是一款基于 VS Code 的代码编辑器,它为 AI 辅助编程添加了许多强大的功能。它吸引了编程和 AI 社区的关注和兴奋。

我认为这是一个绝佳的机会,深入探讨 AI 在编程中的作用。这是一次超越单一代码编辑器的超技术性对话,它关乎编程的未来,以及人机协作在设计和构建复杂强大系统方面的未来。现在,快速提醒一下赞助商,查看描述中的赞助商是支持本播客的最佳方式。

我们有 Cod,用于统一您的机器学习堆栈;MasterClass,用于学习;Shopify,用于在线销售;NetSuite,用于您的企业;以及 AG1,用于您的健康。明智地选择,我的朋友们。此外,如果您想与我联系,或参加调查,或提出类似问题,那将很棒。

访问极端、竞赛、联系。现在进入四个广告。

我尽量让它有趣,但如果您跳过它们,请仍然关注我们的赞助商。我喜欢他们的产品。也许您也会。本集由 Cursor 赞助,这是一个专注于数据驱动的 AI 工具平台,用于注释、整理、管理和模型评估。我喜欢他们的一个特点是他们有一个很棒的博客,清晰地描述了……

我的意思是技术性,但它不是过于技术性的,而是有效地技术性地描述了想法,而不是像博客文章那样在当前状态下描述。他们就像刚刚发布的开眼模型一样。所以有时他们会整合到为什么这是 Cursor 的一部分,为什么这是有意义的,有时则不是。

所以我喜欢他们的博客,总的来说。话虽如此,您知道,当他们关注当前状态时,他们关注的是模型。他们一直在寻找浪费。

基本上,它整合到他们的平台中,是一个组织数据的场所。数据是所有。这在以前就成立了。在变压器和注意力方法的流行和爆炸中,这仍然非常重要。现在,在某种程度上,人类生成的数据非常重要。

您如何生成这些数据,如何组织这些数据,如何利用这些数据,如何进行预训练和后训练,所有这些都是非常非常重要的。

Cursor 非常重视数据。无论如何,尝试使用 Cursor 来创建、注释和管理您的 AI 数据。

本集还由 MasterClass 赞助,您可以在那里观看来自世界各地各个领域的顶尖人士的超过 200 门课程。例如,卡洛斯·桑切斯(Carlos Santana)的吉他课程。我喜欢那个。

明天有几场吉他演奏会。从伟大的、伟大的、伟大的东西到伟大的东西,卡洛斯·桑切斯是一位杰出的吉他手,我还没有尝试演奏过,但我喜欢这个列表,因为它似乎是我一定会演奏的东西,因为它太美了。

它太美了,感觉一旦演奏,您就会对吉他有所了解,而您以前不知道。它不是蓝色,我不知道那是什么。

这就像一种进入迷幻世界的梦境般的瞬间转移,音调比我听过的任何东西都温暖,吉他仍然可以哭泣。我不知道。我喜欢它。

他是一位天才。所以能够让像他这样的人来教我们他的秘密,真是太棒了。获得所有 MasterClass 的无限访问权限,并享受年度会员资格的额外 15% 折扣。但 MasterClass,那可是一个很棒的播客。

本集还由 Shopify 赞助,这是一个为任何人在任何地方销售产品而设计的平台,拥有外观精美的在线商店或简单的在线商店,就像我创建的那样。让我们来解决这个问题。我有一些衬衫放在那里,如果您感兴趣的话。

说到衬衫,我想到三家非常受人喜爱的商店,我喜欢三家商店。这是一个不错的选择,可以获得厨房用品、服装等,您在这些商店中获得的服装实际上非常有趣,因为那里有衬衫,与您在其他任何地方获得的衬衫都不同。

因此,如果您有选择性和创造力,那里有很多有趣的时尚和有趣的 T 恤,T 恤反映了您在生活中所经历的轨迹,或者没有,但您只是没有像您喜欢的乐队那样思考过它,但您从未想过要穿他们的 T 恤。我认为 Shopify 是一家很棒的商店,当然,您可以在那里进行高级课程,也可以进行高级或高级漂流。所有这些都是可能的。

立即注册 Shopify 的一个小时试用期。

本集还由 NetSuite 赞助,这是一个全面的云端企业管理系统。有时我认为 NetSuite 在支持本播客方面,因为他们说:“嘿,莱克斯,你说话是不是太多了?”

也许你应该多做点事情。我同意 NetSuite 的观点。我同意。

我每次都这样想。我还没有准备好 NetSuite。这是一个让我面对我内心阴影的机会。一些恶魔从潜意识中出现,并提出我无法回答的问题,例如,生命短暂,而生活中最令人满足的事情之一是拥有家庭和孩子,以及所有我非常想拥有的东西。

还有现实,我喜欢编程,我喜欢构建,我喜欢创建人们可以使用和分享的东西,并让他们的生活变得更好。当然,我也喜欢听播客。我有点认为这个播客就像我在听播客,我也可以通过提问来参与其中。

所以,所有这些您都喜欢的东西,但您会问一些棘手的问题,例如,生命短暂,您想如何利用剩余的时间来丰富您的生活?是的。

所以感谢上周的生存危机。如果您经营企业,如果您已经踏上了未知的旅程并创办了公司,那么您应该使用正确的工具来管理公司。事实上,超过 37,000 家公司已经升级到 NetSuite,利用其灵活的融资计划。

莱克斯,那是 NetSuite。本集还由 AG1 赞助,这是一款美味的每日营养饮料,旨在支持更好的健康和最佳表现,基本上是一个很棒的多维素。

它让我感觉自己掌控一切,即使其他一切都在崩溃。至少我拥有营养基础。所以,我做的第一件事就是饮食。

所有这些目标、舞蹈活动、在线停留时间以及其他压力,AG1 都在那里。至少他们有各种选择。

有时我还会想,这些被称为“平坦的绿色”,另一个被称为“AG1”。我总是想知道“AG2”是否会推出。我总是对 AG1 的品牌决策感到好奇。我是一个强迫症程序员。

就像,“这是否是一个版本问题?”“这是否像 AG1 的 alpha 版本,而 AG1 是最终版本?”无论如何,我喜欢说和消费 AG1,它会提供一个月的供应。

AG1,那可是一个很棒的播客。请查看描述中的链接。现在,我的朋友们,这里有 Michael、Sualeh、Arvid 和 Aman。

这太棒了。我们有 Michael、Aman、Sualeh 和 Arvid,来自 Cursor 团队。首先,一个关键问题:代码编辑器的意义是什么?

代码编辑器主要用于构建软件。今天或很长一段时间以来,这意味着在正式编程语言中输入文本。对于那些不是程序员的人来说……

思考代码编辑器的方式,就像程序员的增强型文字处理器一样,因为代码具有很多结构。因此,文字处理器,即代码编辑器,实际上可以为您做很多事情。文字处理器是您在写作空间中,以前无法为文本用户做的事情。

因此,从让您直观地区分代码中的实际标记,以便快速扫描,到让您在代码中导航,就像您在互联网上使用链接导航一样,您正在查看您使用的内容的定义,以检查基本错误。传统上,代码编辑器就是这样。我认为代码编辑器在未来十年将发生变化,因为构建软件的含义可能看起来有点不同。

我认为这也很有趣。

是的,这非常重要。这非常重要。这实际上是我们在决定构建什么时所采取的潜意识方法,就像我们构建的大多数东西一样。

然后我们尝试,进行实验,然后将其丢弃,因为它们没有趣。有趣的部分通常是快速。

是的,快速。是的,是的。这是我的 T 恤要点,Aman。

我认为吸引许多人构建计算机软件的原因之一是看到网络速度,在其他领域,您可能会受到资源或能力的限制,甚至获得大团队和代码的能力,这真是令人惊叹。您在计算机中,仅凭这一点,您就可以快速构建出很棒的东西。因此,对于您来说,Cursor 是一个非常酷的新编辑器,它是 VS Code 的分支。您将对您自己的编辑器之旅,以及您如何从 VS Code 和 Copilot 到 Cursor 的旅程感兴趣。

是的,我想我们所有人都是从用户那里开始的,是的,不需要他们,只需在终端中使用它们。至少对我来说,大约在 Copilot 发布(2021 年)的时候,我真的很想尝试它。所以我想要 VS Code,这是唯一可用的平台,唯一可用的编辑器。即使我真的很喜欢使用它们,Copilot 的体验以及 VS Code 的体验已经足够让我切换到 Cursor。所以,那基本上就是默认设置,直到我们开始开发 Cursor。

也许我们应该解释 Copilot 的作用,它会提供一个非常好的顺序完成。当您开始编写某些内容时,它会建议一两三行如何完成该内容。这很有趣,就像当您与朋友非常亲密,您的朋友会完成您的句子一样,就像他们做得很好一样,有一种亲密感。这可能比亲密感更好或更糟,但感觉很酷,就像我们应该如何做。

然后,当它没有完成时,就会有一种不愉快的感觉。

所以,我想,Copilot 的一个被低估的方面是,即使它错了,也并不那么糟糕,因为您只需输入另一个字符,然后它可能就会完成,或者您输入另一个字符,然后它就会完成。

所以,即使它错了,也不那么糟糕,是的,您可以纠正它。Copilot 的另一个方面是……所以,这是否是我们第一个真正的 AI 产品?第一个语言模型消费者产品?

Copilot 来了。VS Code 的第一个杀手级应用。

就像它在 20…

2021 年发布,对吧?好的。那么 Cursor 的故事起源是什么?

所以,大约在 2020 年,从 AI 领域出现了关于规模的论文,这是一个时刻,该领域看起来像清晰可预测的进步,即使我们没有更多想法,看起来您也可以通过拥有更多计算机和更多数据来改进这些模型。

顺便说一句,我们可能会花 3 到 4 个小时讨论规模定律。简而言之,它是一篇论文,而不是一篇论文,而不是想法。我认为模型大小和数据大小在机器学习中可能更大更好,但可预测地更好。

在谈话的主题中……

大约在那个时候,对我们中的一些人来说,有很多关于这将如何发展,这将是所有开发人员如何通过技术进步而变得更好的故事。

然后,我认为在某些时候,在该论文中预测的理论收益开始变得非常具体,开始感觉像是一个可以实际进行 AI 工作的时刻,而不是获得博士学位。我实际上开始感觉到,现在可以构建一整套非常有用的系统。

我认为第一个时刻,我们已经谈论过一点,即使用早期版本的 Copilot,它非常棒,非常神奇。我认为下一个重要的时刻,所有事情都开始融合在一起,实际上是在 2022 年底获得早期访问权限,当时我们正在尝试使用该模型,并且其功能感觉非常强大。之前,我们一直在从事一些不同的项目。

我们一直在……由于 Copilot、规模定律以及我们之前对该技术的兴趣,我们一直在尝试为程序员构建工具,这些工具非常具体。所以,您知道,我们一直在为金融专业人士构建工具,以便他们可以使用 Jupyter Notebook 或尝试使用这些模型进行初步分析,以及在使用 GPU 之前。我感觉,现在可以构建我们之前预测的理论,感觉您可以在那个时间点立即构建更多内容。此外,如果我们保持一致,并且真正……

感觉这不仅仅是一个点解决方案,这将是所有编程,这些模型将通过它并以这种方式发展,这需要一种不同的编程环境,一种不同的编程方式。因此,我们开始构建围绕它们的这种更广泛的愿景。

我记得一个具体的例子。我的室友是美国 IMO 金牌得主,以及其他一些比赛。这是一个数学竞赛,非常出色。所以,我记得 2022 年 6 月,我们打赌 2024 年 7 月,您是否会在 IMO 中获得金牌。

使用模型,我大多数国际……

金牌。所以,我参与了比赛,所以这有点个人化,我记得当时我认为这不会发生。这就像,即使我有点相信进步,我也认为,您知道,我是一个人,这只是一个模型的幻觉,老实说,我的意思是,我非常错误。但这可能是我们小组中最大的赌注。

结果,DeepMind 证明……

你是对的。

差一点,我非常兴奋。在那个男人不喜欢规模定律 T 恤之前,我喜欢图表和公式。

你感觉到了,或者你感觉到了学校。

是的,我清楚地记得我与 Michael 进行过一次对话,在那之前,我没有深入和批判性地思考规模定律。

他提出一个问题,为什么规模定律不是线性的?或者为什么规模定律不会导致进步的巨大飞跃?我认为我经历了悲伤的阶段,有愤怒、否认,最后只是接受……我认为自从我开始思考这一点以来,我对进步一直抱有希望和乐观的态度,我认为 Copilot 的一个方面是,我认为它还取决于您要查看哪些领域的进步。

就像数学是一个很棒的领域,特别是像形式化的领域,它们正在改进,因为你可以获得实际验证事物是否正确的神奇信号。所以这意味着像石油这样的东西可以运作得非常好。我认为你可以拥有在数学方面可能非常超人,但仍然在技术上没有人工智能的系统。

好的。所以我们可以将IT一路带到诅咒吗?什么是诅咒,它是一个VS代码的分支。

而VS代码是长期以来最受欢迎的编辑器之一。就像每个人都爱上了它,每个人都喜欢它们。我喜欢dmax,抱歉。统一了某种根本性的方式,开发人员社区。

然后你看看这个空间,看看人工智能变得很棒时的情况,你决定,好吧,仅仅为VS代码编写一个扩展是不够的,因为这有很多限制。如果它要变得越来越好,我们需要真正地思考如何让AI成为编辑过程的一部分。

所以你决定分叉VS代码并开始构建许多令人惊叹的功能,这将是讨论这个决定是什么样的。因为有很多扩展,包括VS代码的Copilot,它们正在做AI的事情。只是分叉VS代码的决定是什么样的?

所以决定做一个编辑器似乎有点自我实现,至少我们想要做和实现的是。因为当我们开始开发编辑器时,想法是这些模型会变得越来越好。它们的性能会提高,这将彻底改变。

你构建软件,既有大的生产力,也有激进的,我喜欢积极的构建方式,这将改变很多。所以如果你将AI插入现有的编辑环境中,你对好的编辑器的控制非常有限。我们不想被这些限制所束缚。我们想能够构建最有用的东西。

好的,那么自然的问题是,你知道VS代码有点像Copilot的竞争对手,所以你怎么赢?基本上只是速度和功能质量。

是的,我的意思是,我认为这是一个非常有趣,可能非常独特的领域,如果你看看之前的技术浪潮,也许只有一件大事发生了,并解锁了任何公司。但是每年,每个模型的能力都会提高,你解锁了新一轮的功能。在编程中,尤其如此。

所以,我认为在AI编程中,仅仅领先几个月,甚至领先一年,都会让你的产品更有用。我认为一年后的诅咒,我们需要让今天的诅咒看起来很落后。我认为微软已经做了很多很棒的事情,但我认为他们不太可能在这个领域保持创新和推动。要开始,可以。

正在迅速实施功能和。

推动,以及进行必要的实验研究,以真正达到极限。我不知道我。

我认为在功能方面思考它,我认为在程序员的能力方面思考它。你知道,当一个新模型出现时,我相信会有更多不同类型的模型,比如更长的上下文,可能更快。

所有这些疯狂的想法,你都可以尝试,希望其中10%的疯狂想法会产生一些很酷且有用的东西,我们希望人们能够更快地获得这些东西。就像在诅咒开始时,我们感受到的这种沮丧,你真的感觉到了这种沮丧,你知道,模型正在变得越来越好,但Copilot的体验却没有改变。

这真是令人厌恶。就像天花板越来越高,但他们没有创造新事物,像这样的事情应该创造新事物。他们就像这样,就像所有这些alpha功能一样。

没有alpha功能。我确信它卖得很好。我确信它是一项伟大的业务,但我没有感觉到我想要尝试新事物的人之一。谁说只是不做什么新事物,就像很长时间一样。

是的,很有趣。我不知道你怎么看待它们,但是当你将诅咒与Copilot进行比较时,它很快就开始变得陈旧了。

我认为我们能够做到这一点的原因之一是,我们正在将所有内容整合到一个地方,我们正在开发UI,同时与模型进行交互,以及我们如何让模型获得更好的答案。所以我们喜欢你如何构建提示,或者你如何找到诅咒标签的上下文,以及你如何让模型做到这一点。我认为这有助于让所有这些人都参与到整个体验和趋势中。

就像制作UI的人和训练模型的人,他们经常是同一个人,甚至经常是同一个人。所以你可以看到一些如果你不谈论,如果你不进行实验,并且你使用像这样的东西就不可能实现的事情。

你没有使用像这样的东西。

诅咒来写诅咒。

不。是的。让我们谈谈这些功能。让我们谈谈预测,无所不能。

请在时间上保持一致,你知道,完成任务,基本上。所以标签是如何工作的?标签如何提高。

从高层次来看,我认为诅咒现在做得很好有两件事。它还有其他功能,但它帮助程序员的两件事是:一种是回头看看,就像一个非常快速的同事,可以超越你,输入并弄清楚你接下来要做什么。这是最初的想法,这是好的自动完成背后的想法,预测你接下来要做什么,但是你可以通过不只是预测你的诅咒之后的字符,而是预测你接下来要做的整个更改来使这个概念更加雄心勃勃,以及你接下来要跳转到的下一个位置。第二件事是诅咒现在做得很好,它可以帮助你超越AI,告诉你该做什么,以及如何从说明转换为代码。在这两方面,我们都做了大量工作,使这些事情在编辑体验中变得自然,并且使这些事情变得智能和快速。

我们真正想要的一件事是,我们希望模型能够为我们编辑代码。这就像一个愿望。我们之前尝试过多次。在我们拥有一个能够为你编辑代码的良好模型之前。

然后,在拥有一个良好的模型之后,我认为我们已经做了很多努力,你知道,让它对你来说更快,让你有一个良好的体验。我们开始整合,我的意思是,迈克尔有点提到了这一点,能够跳转到不同的位置。我认为这种跳转到不同位置的感觉来自于,你知道,一旦你接受了编辑,它就像,哇,接下来应该很明显去哪里?就像我做了这个更改。

模型应该知道接下来要跳转到哪里,就像向下移动几行,如果你是一个Vim用户,你可以按一个键,或者任何键,为什么?为什么我要这样做?就像模型一样。模型应该知道它。然后,想法是,你只需按一下Tab键,它就会向下移动几行,然后确保你看到下一个步骤,然后你按一下Tab键。所以只要你能一直按Tab键。

所以内部竞争是,我们能使Tab键在按下后移动多少行。如果你从更抽象的角度思考,要考虑的是编辑器如何达到零熵。所以一旦你表达了你的意图,编辑器中就没有新的信息要完成,你已经想到了,但你仍然需要输入一些字符。你是否让计算机理解你真正想的是什么,然后模型可能只是读取你的想法,以及你所有零熵位,就像按Tab键一样。

有趣的是,如果你查看不同领域的语言模型损失,我相信每比特的位数,这是一种字符归一化代码损失,低于语言。这意味着一般来说,代码中有很多非常可预测的标记,很多可预测的字符。

我认为,当你不仅仅尝试自动完成代码,而是预测用户在编辑现有代码时接下来要做什么时,这会进一步放大。所以,你知道,诅咒的目标是让它变得快乐。让我们消除你在编辑器中执行的所有低熵操作。当意图被有效确定时,让我们跳到前面。跳过。

那么直觉是什么?如何做到这一点的技术细节是什么?下一个问题是预测跳转。我认为这对人们来说不是那么直观。

是的,我认为我可以谈谈如何让这些事情发挥作用的几个细节。它们具有惊人的延迟。所以你需要训练一些小模型来执行这项特定任务,它们非常渴望获取标记。

这意味着当它们看到你大量的代码时,它们会遇到非常非常长的问题,而它们实际上并没有生成很多标记。所以,最适合它的就是使用稀疏模型,这意味着使用缓存。所以这是一种突破,一种突破。

我们通过它显著提高了长上下文性能。另一个是我们在一种称为推测性编辑的推测性编码中所做的。我认为这两点是使诅咒非常高质量且非常快速的关键。

好的,所以缓存使你成为专家。输入很大,输出很小。好的,所以你还能说什么关于如何使诅咒缓存。

在处理如此多的标记时,缓存起着巨大的作用。如果每次你输入给定行中的每个按键,你都必须在所有这些传递的标记上重新运行模型,那么你将显著地增加延迟,这会杀死你的GPS。所以你需要设计模型实际使用的任务,以便它们是缓存感知的。然后,你还需要在请求之间重用KV缓存,这样你就可以减少工作量,减少计算量。

标签在短期内应该能够做什么?只是在代码上停留,填充空白。还可以在多行中编辑代码,然后跳转到同一文件的不同位置。然后。

跳转到不同的文件。所以如果你正在编辑一个文件,也许你需要去另一个文件才能完成你的想法,它应该跳转到第二个文件。

完全的概括是像下一个操作的预测。有时你需要在终端中运行命令,我应该能够根据你编写的代码建议命令。或者有时你实际上需要的是,它不仅仅是某事,而是你很难知道它是否正确,因为你需要更多信息来学习,比如你需要知道类型才能验证它是否正确,也许你应该跳转到某个地方,例如某个东西的定义,然后带你回来,这样你就有所有必要的知识来接受下一个完成。

还提供人类知识。

是的,对。

是的。你能深入了解吗?我只是想了解,获得主要收益,我相信他通过SSH订购了咖啡。

哦,是的,我们做到了。我们做到了。

模型可以做到这一点。就像给你和是的,提供AO,所以这是通用的。

框架。是的。如果它。

编程。

这是一个奇怪的学科,有时接下来的五分钟,并非总是如此,但有时接下来的五分钟,你接下来要做什么实际上是可以从你最近做的事情预测出来的。所以你能达到一个点,接下来的五分钟要么通过你参与进来,它带你完成,要么可能稍微多一点。你只是看到下一步要做什么,然后你就像,好的,很好。

很好。很好。你可以点击,点击,点击,完成这些大更改。正如我们。

谈论这一点时,正如你提到的,关于诅咒的一个非常酷且显而易见的事情是,整个差异界面情况正在发生。所以,就像模型建议的,用红色和绿色来表示我们如何修改代码。在聊天窗口中,你可以应用它,它会给你一个更改,你可以接受更改。所以也许你能谈谈。

它可能会有四五种不同的差异类型。我们优化了差异界面,以便进行自动完成。

所以它有一个不同的差异界面,然后当你审查更大的代码块时,我们正在尝试优化另一个差异界面,当你处理多个文件时,以及在高层次上,差异在进行自动完成时会非常快。实际上,在所有情况下都应该非常快。但在我们的自动完成中,你的眼睛真的集中在一个区域。你不能同时关注太多。人类不能同时关注太多。

不同的位置来工作。

所以我们目前在一边有一个框,所以我们有当前框。如果你尝试在某个地方删除代码并尝试添加其他代码,它会尝试在你的框中显示。

你可能会看到,如果我们把它拉出来。这结束了。

很高兴。所以这就像三四个不同的尝试。我试图让这个差异工作。首先,尝试是像这样的蓝色虚线。

所以,在一边有一个框之前,它曾经通过向你展示像谷歌一样,像文档样式,你会看到一条线穿过它来向你展示删除的代码。然后你会看到新代码,这非常分散注意力。然后我们尝试了很多不同的方法,甚至在下一轮迭代中,有一种尝试阅读和突出显示,这很有趣。

如果你在Mac上按住选项键。所以我会突出显示代码区域,以向你展示可能出现的内容。所以,例如,输入和值。

所有这些都会变蓝。蓝色是为了突出显示AI为你提供的建议。所以,而不是直接向你展示它,我会暗示AI为你提供了一个建议。如果你真的想看到它,你按住选项键,然后你会看到新建议。然后,如果你松开选项键,你就会恢复原始代码。

所以,顺便说一句,这很好,但是你必须知道。

按住选项键。是的。

顺便说一句,这不是问题,但我明白了。这是一个按钮。我想你们。

它仍然不直观。我认为这是关键。

并且,顺便说一句,这也不是。

最终版本。我个人非常兴奋于在这个领域进行大量改进,就像我们经常谈论的验证问题一样。这些差异对于小编辑来说很棒,但对于大编辑或多个文件或其他情况来说,审查这些差异有点困难。所以这里有一些不同的想法。一种想法是,你知道,差异的某些部分很重要,包含大量信息,而差异的某些部分只是非常低熵的,就像一遍又一遍地重复相同的事情。然后,也许你可以突出显示重要的部分,然后使不重要的部分变灰,或者也许你可以让模型查看差异,并看到,哦,这里可能有一个错误,我会用一个小红框标记它,并说,你可能应该检查一下这个部分。我认为这些想法很有趣。

是的,这是一个非常有趣的设计工程领域,基本上是引导程序员阅读所有必要内容,仅此而已。

是的,你想让一个智能模型来做这件事,目前,算法就像,我就像,它们只是普通的算法。没有智能。设计算法的智能,然后你不在乎它与这件事或那件事有关,你想要一个模型来做这件事。

我觉得总体问题是,这些模型会变得越来越聪明。随着模型越来越聪明,它们能够提出的更改也会更大。因此,随着更改越来越大,人类需要做的验证工作也越来越多。这变得越来越难,就像你需要帮助它们一样。我不想花所有时间……

审阅代码,你能详细说明一下跨多个文件的情况吗?深入探讨一下?

是的。我的意思是,摆脱它。尝试一下,用牛来做。当你进行良好的代码审查时,你是在审查跨多个文件的多个债务。

但是,正如哈佛之前所说,我认为你可能比覆盖它更好。覆盖它有点糟糕,因为你花了很多时间试图弄清楚这段代码。这段代码对你来说通常很陌生,而且它通常甚至无法发现很多错误。

我认为你可以通过使用语言模型显著改善他们的审查体验,例如使用我描述过的技巧,这可能会引导你关注真正重要的区域。此外,如果代码是由这些语言模型生成的,而不是由其他人生成的,那么代码的体验将针对代码审查者和代码生成者设计。如果代码生成者是语言模型,你就不必那么关心他们的体验。

你可以围绕代码审查设计整个流程。让代码审查者的工作尽可能有趣、轻松和高效。我认为,仅仅天真地尝试让这些东西看起来像代码审查,可能会更具创造性,并突破可能性的界限。

一个想法是,我认为在审查代码时,顺序通常很重要。你有一个文件列表,并从上到下审查它们。但实际上,你可能首先需要理解这部分,因为它在逻辑上首先出现,然后你想要理解下一部分。你不想自己弄清楚这一点。你需要一个模型来引导你完成这个过程。

代码生成的步骤是否会变得更自然化?目标是与实际情况相比?

我认为情况并非总是如此,所有编程都将是自然语言。原因是,如果我进行编程,那么在计算机和键盘上进行编程是有效的。有时,如果我在开车,我想说“哇,嘿,实现这个函数”,它就能工作。有时,解释我想让它做什么会很烦人,就像我实际接管键盘并向它展示我如何编写部分示例,然后它就明白了,这是最简单的沟通方式。因此,我认为对于人工智能来说也是如此,有时与人工智能沟通最简单的方法是展示一个示例,然后它会在其他地方执行相同的操作。或者,有时如果你正在制作网站,向人工智能展示你想要的内容的最佳方法不是告诉它该做什么,而是拖动东西或绘制东西……是的,也许最终我们将能够创建机器界面,或者它能够理解你的想法。我认为自然语言将占据一席之地,但它肯定不会成为大多数人大部分时间编程的方式。

我真的很感觉到这个编辑器中的人工智能。

感觉像……

下面有很多机器学习正在进行。告诉我一些让它运作的细节。

所有工作都是通过我们训练的自定义模型样本进行的,这些模型与那些在推理、复杂任务方面非常出色的前沿模型一起训练。因此,Cursor 的“示例”功能就是一个很好的例子,你可以专门训练模型,使其比前沿模型更好。

如果你查看测试,你会发现它在其他领域也适用,这有点令人惊讶,这需要自定义模型,但这是必要的,并且效果很好。在应用中。因此,我认为这些模型,特别是前沿模型,非常出色。

它正在勾勒出代码计划,并生成类似于更改的粗略草图。但是,对于前沿模型,创建深度内容非常困难。如果你尝试用一个前沿模型来完成,它会搞砸一些愚蠢的事情,例如计算行号,尤其是在非常大的文件中。因此,我们所做的是让模型勾勒出指示更改内容的粗略代码块。然后,我们训练一个模型来将更改应用到文件中。

我们应该说,应用模型查看代码后,会给你一个非常好的建议,说明要做什么。将这两者结合起来,看似对人类来说微不足道的步骤,实际上并非如此简单。

与普遍的看法相反,它不是一个确定性的真理。

是的,我认为你看到,应用的副本在其他地方失败了,因为你认为你可以尝试进行一些确定性的混合,但它至少有 40% 的时间会失败,这会导致糟糕的用户体验。

我认为,总的来说,这种趋势是模型会变得越来越聪明。应用让你能够使用更少的令牌来获得最智能的更改。这在令牌生成方面既昂贵(从计算的角度来看),又昂贵(从成本的角度来看)。因此,你可以提供一个非常粗略的草图,然后让你的模型去实现它,因为实现这个非常粗略的代码要容易得多。我认为这种趋势将继续下去,你可以使用更聪明的模型进行规划,然后让更简单的模型处理细节。也许你会有一个更强大的模型,给出一个更高级的计划,由更简单的模型递归地应用。也许我们……

我们应该讨论如何让它更快。你是否喜欢?是的,这总是很有趣的。

是的,你如何让它更快?

是的,让它更快的一个主要组成部分是推测性编辑。推测性编辑是推测性编码的一种变体,可能有助于简要描述推测性编码。在推测性解码中,你可以利用这样一个事实,即在大多数情况下,当你使用语言模型生成时,你通常会遇到内存限制。如果你一次处理多个令牌,它比一次生成一个令牌要快。这就像如果你查看提示令牌和第一个生成的令牌,提示令牌要快得多。

因此,我们所做的是,而不是使用通常推测性编码所做的,即使用一个非常小的模型来预测这些草稿令牌,我们让你的大型模型进入并验证。我们对现有代码的外观有很强的先验知识,这个先验知识实际上就是相同的代码。因此,你可以将原始代码的片段直接输入模型,模型通常会同意,好的,我将吐出这个片段,你可以并行处理所有这些行。你只需这样做足够多的片段,最终你会达到一个分歧点,模型将预测与原始代码不同的文本。它会生成这些内容,然后我们决定,如果足够多的令牌与原始代码匹配,则重新开始推测代码。这实际上看起来就像一个更快的普通代码编辑版本。所以,这就像一个更快的模型版本,重新编写所有代码。因此,我们可以使用与生成代码相同的界面,但它会以更快的速度流式传输。

无线流式传输的优势是,你可以在没有大加载屏幕的情况下开始审查代码。因此,这可能是优势的一部分。

因此,人类可以在事情完成之前开始阅读。

我认为这里有趣的是,推测性思维现在是一个相当普遍的想法,不仅在语言模型中,在 CPU 和数据库推测中也随处可见。

让我问一个荒谬的问题,在编程的背景下,GPT 和 Claude 哪一个更好?我相信答案要微妙得多,因为这涉及到这个过程中的每个部分都使用不同的模型。

是的,我认为没有一个模型在所有类别中都占主导地位。在速度、处理大量代码和上下文以及其他编码能力方面,我们认为它在所有类别中都更好。

我认为目前最适合的模型是 Claude。我认为这是共识。我们的模型非常有趣,推理能力也很强。

因此,如果你给它一些非常困难的编程面试风格的问题,一些代码问题,它可以做得很好。但是,它不像 Claude 那样理解你的粗略意图。如果你查看许多其他前沿模型,你会发现它们似乎并没有真正理解。它们在基准测试中训练良好,但在基准测试中表现良好,相对于基准测试分布中的一切都表现良好。因此,如果你尝试将它们推到基准测试之外,我认为它在保持相同能力方面做得最好,在基准测试中尝试进行任何编码指令时,它保持了相同的性能。

另一个问题是,普通编程体验与基准测试之间的区别是什么?基准测试在评估这些模型时有哪些不足之处?

但是,我们只是想深入了解一个非常非常重要的细节,即基准测试与实际编码之间的差异。这不是面试风格的编码。你正在做的事情,人类有时会说一些半破碎的英语,有时你会说,就像我以前做过的那样。

有时你会说,嗯,让我看看这个,然后让我做另一件事,然后让我修改这个,我放弃了……等等。这就像很多事情都取决于上下文。你真的想了解人类的需求,而不是结构。也许最好的方法是将它描述为一种抽象的列表。面试问题非常明确,而人类的需求则不那么明确。

是的,我认为这个问题既复杂,又与之前提到的问题有关,也与 Aman 谈到的问题有关,即基准测试中你想要的东西与实际编程之间的差距。这有时会造成偏差,因为实际编程非常混乱,有时事情并不明确。

什么是有特色的,什么不是。但是,由于公共存储库问题,这变得更加困难。

但是,从公共基准测试中获取数据也同样困难。例如,最流行的基准测试之一,例如 Hugging Face,在这些基础模型的训练数据中非常受污染。因此,如果你要求这些基础模型解决一个问题,你实际上并没有提供代码的上下文。

它们可以找到正确的文件路径。它们可以找到正确的函数名称。因此,这些事情的公共性质也存在问题。

在这种情况下,它们可能会在实际问题或糟糕的请求本身进行训练,并且它们可能会做得更好,或者它们已经做得很好,以消除这些问题。它们不会承认响应本身的实际训练数据,例如,这些是最流行的存储库之一。我认为他们不会为了在这些基准测试中获得真实的评估分数而限制他们的模型。

我认为,鉴于基准测试的局限性,一些构建系统或构建这些模型的公司已经发现了一些有趣的方法来了解它们是否朝着正确的方向发展。在许多情况下,人们实际上会让人类使用这些模型,并提供质量反馈。

他们有这样的人,这是他们工作的重要组成部分。我们内部也定性地评估这些模型,在我们的内部评估中,这非常重要。

就像……

五,基准测试,人类基准测试,是的,你让人类进行视频检查,是的,好的。我的意思是,这就像阅读在线表单,阅读它,并进行评估。我不知道如何正确地收集人们的意见,因为他们会说,我觉得 GPT 变笨了,或者类似的话。我会说,我觉得也是,但我不知道这是模型的问题还是我的问题。

这是一个有趣的观点。我听说 LLM 有不同的架构,我认为它们与视频 GPT 的架构略有不同。有人推测性能下降可能是由于使用基础模型中存在的量化方法。无论如何,Anthropic 的 GPT 运行的是什么。

在采访中,许多人谈到了关于这个的阴谋论。

嗯,不是那么像阴谋论。他们就像人类,人类就是人类。存在这些细节,你知道,你正在进行大量的浮点运算,这些芯片很混乱。你可能会遇到错误,错误很难避免。

在所有这些中,提示的作用是什么?这些基准测试中的提示通常结构良好,措辞得当。人类应该做什么才能最大限度地提高成功率?人类在博客文章中提到的提示设计的重要性是什么?

是的,我认为这取决于你使用的模型,它们很可能不同,对不同提示的反应也不同。但是,我认为最初的 GPT 和所有类似的模型,在过去一年中,它们对提示非常敏感,并且上下文窗口也很小。因此,我们有关于代码库的所有这些信息,这些信息可能包含在提示中。

你有一些文件,你正在查看的转换历史。然后,当你有一个大型代码库时,你如何决定在提示中包含哪些信息是一个问题。即使对于今天的模型,即使你有很长的上下文,填充整个上下文窗口意味着它会更慢,并且有时模型会感到困惑,有些模型比其他模型更容易感到困惑。

我们内部有一个名为“预提示”的系统,它在一定程度上帮助我们解决了这个问题。我认为它是在我们拥有 8000 个令牌上下文窗口之前构建的。这有点类似于当你制作网站时,你想在移动设备上工作,你想在桌面屏幕上工作,并且你有一些动态信息,例如你正在制作的网站。

你就像在设计一本印刷杂志。当你有一个网站或一个提示时,你知道确切的位置,你可以放置内容。你有一些输入,然后你需要对它们进行格式化,以便它们始终有效。即使输入很大,你可能也需要缩减一些内容。因此,想法是,让我们从……

设计网站的最佳方法是什么?嗯,我们真正喜欢的是 React 和声明式方法,你使用 JavaScript 中的组件,然后声明你想要的内容,例如,这具有更高的优先级或更高的 z 索引,等等。然后,你有一个渲染引擎,例如 Chrome,在我们的案例中,它会渲染提示,然后将所有内容放在页面上,就像你声明你想要的内容,然后它会弄清楚你想要的内容。我们发现这非常有用。

我认为它的作用随着时间的推移而发生了变化。最初,它用于适应这些小的上下文窗口。现在,它真正用于将进入提示的数据分割,以及提示的实际渲染。因此,更容易调试,因为你可以更改提示的渲染,然后在旧提示上尝试,因为你拥有进入提示的原始数据,然后你可以看到你的更改是否真的改进了它。

整个数据集,他们实际上是提示的。

是的,是的。看起来有点像 React。有像文件组件这样的组件,它接受像光标这样的输入。通常,文件中光标所在的那一行是最重要的,因为你正在查看它。因此,你可以赋予优先级。所以,那一行具有最高的优先级,然后每向后移动一行,优先级就降低一点,最终在呈现时,会确定有多少行实际上适合这个中心。

1 太棒了。你可以做一些其他很酷的事情,比如从整个代码库中提取几个代码块。你可以使用一些技巧,比如在优先级和这些组件的强制执行方面使用递归算法和一些技巧。

2 那么,当人类提问时,是否也应该尝试使用类似的东西?在编写 JSX 时,在整个想法中,你应该保持松散和凌乱。

3 我认为 Argo 差不多,你应该做最自然的事情,是的。然后我们的工作是不同的等级。我们如何实际处理相对的东西,以便你的结果有意义?

4 这是一个服务。与 Perplexity 的讨论就像思想史一样,你应该让这个人尽可能懒惰,是的,是的。

5 但是,是的,那真是太好了。但是我觉得你允许问更多的问题,对吧?所以,如果你说,你想做什么?我的意思是,人类很懒惰。在仅仅懒惰和提供更多信息之间存在一种张力,就像系统在逼迫你或激励你更具体一样。这不仅仅是句法的具体性,而是你传递给问题的想法的深度。

6 我认为,即使系统越来越接近完美,当你要求模型做某事时,你通常并没有明确地传达你想要做什么。解决这种意图有几种方法。一种简单的方法是让你问更多的问题,我不知道如何处理这些部分,你能澄清一下吗?我认为另一种方法可能是,如果根据你目前的问题,有五到六种可能的生成结果,为什么不直接显示所有这些结果,让你选择呢?

7 对于模型来说,选择以某种方式回应或交谈有多难?这很难。这有点像如何处理不确定性。是的,我选择要求更多信息来减少不确定性。

8 所以,我们做的事情之一是,最近添加的功能是尝试建议可以添加的文件。所以,当你输入时,我们可以猜测不确定性是什么,并可能建议一些东西,比如,也许你正在编写你的 API,我们可以根据你之前在同一文件中创建的客户端和服务器来猜测,这非常有用。

9 并且存在一个棘手的问题,即如何跨所有提交确定哪些文件最重要,以及根据当前提示。我们仍然处于初始版本阶段,我相信我们可以使其更准确。这非常实验性。

10 但是,我们展示给你的想法,比如,你是否只想添加这个文件、这个文件和这个文件,或者是否想让模型为你编辑这些文件?因为,如果你正在创建 API,你可能还需要编辑使用该 API 的客户端和服务器,这在某种程度上解决了我们正在讨论的点。在输入回车键之前,我们是否可以帮助你更好地思考?

11 代理方法的能量是什么?

12 我们认为代理非常酷。我认为代理就像,它有点像人类,有点像你感觉越来越接近通用人工智能,因为你看到它如何像人类一样行动,这非常酷。我认为代理目前对许多事情来说还不够有用。

13 我认为我们正在接近它们真正有用的阶段。所以,我认为有一些特定类型的任务,代理会非常有用。

14 例如,我希望有一个代理,如果我们遇到一个错误,有时你无法在聊天输入框中使用命令 C 和命令 V,这是一个非常明确的任务。我只想用两句话说,这不起作用,请修复它。然后我希望有一个代理,它可以自行处理。然后,几天后,我回来检查,我检查你做的工作。

15 它找到了正确文件。

16 它找到了正确文件,尝试重现错误,修复错误,然后你验证它是否正确。这可能是一个耗时过程。所以,我认为我希望有一个代理。我认为许多编程工作中,人们经常认为代理将接管所有编程工作。我不认为情况会是这样,因为许多编程工作,其价值在于迭代,或者你实际上并不想事先明确说明,因为你直到看到初始版本并想对其进行迭代,你才真正知道自己想要什么,然后提供更多信息。所以,对于许多编程工作,我认为你实际上想要一个系统,它可以立即给你一个初始版本,然后你可以快速迭代。

17 关于类似于我们认为来自古代的回复,它也像设置开发环境、安装软件包、配置所有内容、配置数据库以及实际部署应用程序一样。是的,这也在你梦想的清单中。

18 我认为这会非常酷。对于某些类型的编程,我会非常。

19 光标的范围是什么?

20 是的,我们目前没有积极地致力于此。但是,我们绝对希望让编程更轻松、更有趣,有些事情非常繁琐,你需要经历很多步骤,你希望将这些步骤委托给代理。然后,有些事情你可以在后台运行代理,同时进行工作。

21 假设你有一个 API,它既有后端又有前端,你正在处理前端,然后你可以在后台运行一个代理,它可以跟踪你正在做什么。然后,当你处理 API 的后端部分时,你将有一些可以迭代的初始代码。这也会非常酷。

22 我们之前谈到过速度,但我希望在各种技术细节方面多谈谈,这些细节对于让这个东西运行得非常快至关重要。光标的几乎所有方面都感觉非常快。我可能会说应用可能是最慢的部分,是的。所以,痛苦。

23 不,痛苦是我们正在经历的痛苦,我们正在努力解决。

24 是的,我的意思是,如果它感觉一秒或两秒钟很慢,那说明其他所有东西都非常快。所以,关于如何让一些模型更快,如何让聊天更快,如何让一些模型更快,有一些技术细节。

25 是的,我的意思是,我们可以使用许多技术来实现这一点。一个有趣的事情是缓存预热。所以,当用户输入时,你可以,是的,你很可能将使用一些上下文,你可以在用户完成输入之前知道这一点。

26 所以,正如我们之前讨论的那样,重用缓存结果可以降低延迟和成本。所以,当用户输入时,你将用当前文件内容预热缓存。然后,当他们按下回车键时,实际上需要处理的令牌数量非常少。在开始生成之前,我可以。

27 解释一下 KV 缓存是如何工作的。

28 所以,变形金刚。

29 工作方式。

30 我的意思是,允许变形金刚不仅仅独立地查看每个令牌,而是查看先前令牌的机制,这些令牌是注意力机制中的键和值。

31 通常,注意力的工作方式是,在当前令牌处,你有一些查询,然后你有所有先前令牌的键和值,这些是模型永久存储在提示中的所有先前令牌的某种表示。默认情况下,在进行聊天时,模型必须对每个令牌执行此操作,并遍历整个模型。这涉及大量的矩阵乘法,这非常慢。

32 相反,如果你已经完成了这项工作,并且你存储了键和值,并将它们保存在 GPU 中,那么,如果我考虑最后 n 个令牌,如果我现在想计算输出令牌,即第 n+1 个令牌,我就不需要将前 n 个令牌传递给整个模型,因为我已经拥有所有这些键和值。所以,你只需要对最后一个令牌执行一次传递。然后,在进行注意力计算时,你将重用已经计算出的键和值,这是变形金刚中唯一一种顺序依赖的部分。

33 是否有更高层次的提示缓存?

34 那是一种我所说的帮助,是的,你可以做其他类型的缓存。一个有趣的事情,你可以为当前选项卡做的是,你可以基本上预测用户是否会接受建议,然后触发另一个请求,所以你缓存了预测,如果他们接受它,那么你将缓存这个建议。然后,当他们按下回车键时,下一个建议将立即显示,这是一种巧妙的启发式方法/技巧,它使用更高层次的缓存,并且可以使它感觉很快,尽管模型本身没有发生任何变化。

35 并且,如果你可以使 KV 缓存更小,你将获得一些优势,比如,也许你可以预测更多,可以获得十个建议,并且用户可能点击其中一个。用户点击你显示的建议的可能性更高。这就像 RL 中的许多技巧。RL 中所做的事情是,你可以利用这种过去的缓存现象来进行许多不同的预测。一种思考方式是,模型内部对哪个正确结果存在不确定性,但就像人类在 RL 中想要的那样,模型应该知道哪个缓存结果更适合人类。我们正在做的事情之一是预测。

36 一百个不同建议中哪个更适合人类。

37 也许模型可以预测更远,而不是只预测一点点,并且介于两者之间,然后你可以奖励人类更喜欢的结果,并惩罚人类不喜欢的结果,从而训练模型输出人类更喜欢的建议。你有一些 RL 循环,它们非常有用,可以利用这些。也许我们甚至可以更深入地探讨。

38 这有点不同于速度,但是,我的意思是,如果你使用较小的模型,并且它具有与较大模型相同的性能,那么你就可以节省计算资源。这就像我之前提到的关于减少缓存大小的事情。还有其他技术可以帮助提高速度。

39 所以,在过去,比如两年前,人们主要使用多头注意力。我认为人们已经转向更有效的注意力机制,例如分组查询或多头注意力。这对于处理大型模型尺寸非常有用,可以更快地生成令牌。有趣的是,这现在对第一个令牌的处理时间没有影响,但它确实提高了速度。我认为这对于生成令牌很重要,因为当你生成令牌时,而不是被瓶颈化,通过对所有令牌执行这些矩阵乘法,瓶颈在于上下文长度和大型模型,即读取这些缓存键和值的速度。那么,如何提高内存带宽并使其更快?我们可以尝试压缩这些键和值的大小。多查询注意力是最激进的。通常,在多头注意力中,你有一些注意力头。我认为一些查询头。多查询注意力只保留查询头,丢弃所有键头。所以,只有一个键值头,以及所有剩余的查询头。在分组查询中,你保留所有查询头,然后你的键值有点少,但如果你不减少,它只是一个。但无论如何,重点是你在减少 KV 缓存的大小。

40 是的,潜在的,这有点复杂。我们所做的是将所有头部的键值转换为一个潜在向量,然后在推理时将其展开。

41 但是,来自一家名为 DeepMind 的公司的 ML,它非常有趣。也许关键思想是,在多查询注意力和其他地方,你所做的是减少键值头的数量。你从减少中获得的优势是,它们更少,但也许你实际上想要许多不同的键值。一种减少大小的方法是保留所有键值的单个共享向量,然后为每个令牌保留较小的向量,以便当你最终需要计算最终结果时,你只需要存储较小的内容,作为某种低秩约简。最终,当你最终需要计算最终结果时,记住你的内存带宽,这意味着你仍然有一些计算资源可以用来做这些事情。所以,如果你可以将潜在向量展开,这将更有效,因为你正在减少,例如,将向量大小减少到 32 或类似大小。

42 是的,也许拥有单独的键值查询集,并使其对齐,而不是只压缩一个,这种交互。

43 至少,好的,所有这些都与内存绑定有关,是的。最终,这如何映射到用户体验,试图。

44 获得,是的,两件事。首先,你可以使缓存更大,因为你为 KV 缓存分配了更多空间,并且可以容纳更多内容。你获得更多缓存命中,这有助于减少第一个令牌的处理时间,原因如前所述。其次,当你开始使用更多请求和更大的批处理大小进行推理时,你不会看到生成令牌的速度下降。

45 这还允许你做什么?

46 是的,是的。所以,你的 KV 缓存的大小既是所有提示的大小,又是并行提示处理过程的数量,所以你可以增加维度,即模型大小,或者增加提示的大小,而不会降低生成令牌的速度。

47 你写了一个关于在后台运行代码的工作空间。是的。发生了什么?

48 嗯,为了明确起见,我们希望后台发生很多事情。我们现在正在尝试很多事情。除了缓存预热或确定进入注释提示的正确上下文之外,我们目前没有太多正在发生的事情。

49 但是,如果可以在后台进行计算,那么你就可以帮助用户,也许在比仅仅预测几行代码更长的时间范围内。他们将。但实际上,在接下来的十分钟里,你将做什么?通过在后台进行计算,你可以进行更多计算。

所以这个想法是如何监控我们实现并用于内部实验的空间,以及如何利用后台执行某些操作来获得优势。你需要某种反馈信号来反馈给模型,因为其他SE(软件工程师)可以通过让模型思考更长时间来获得更高的性能。例如,一个很好的例子就是让模型迭代并获得反馈。

当你是程序员时,一个非常重要的反馈是语言服务器,它存在于大多数不同语言中,并且每种语言都有一个独立的语言服务器。它可以告诉你正在使用错误的类型,然后给出错误,或者允许你跳转到定义并理解代码的结构。语言服务器是由语言开发人员开发的扩展,例如TypeScript语言服务器由TypeScript团队开发,Rust语言服务器由Rust团队开发。

然后它们都通过一种协议与VS Code进行交互,这样VS Code不需要将所有不同语言都内置到VS Code中。相反,你可以使用现有的编译器基础设施进行链接。

它是用于链接和跳转到定义,以及检查你使用的类型是否正确。

它还在做类型检查。

是的,类型检查和跳转到引用。当你处理大型项目时,你需要这些功能。如果没有这些功能,很难编写项目代码。

你能再说一下在Cursor内部如何使用语言服务器协议吗?

所以Cursor使用它来向程序员显示信息,就像我们能做到的那样。但是,想法是你想向模型(IO模型)显示信息,并且以不影响用户的方式在后台执行。因此,Charter工作区背后的想法是:我们可以通过以下方式做到这一点:我们创建一个隐藏的Cursor窗口。你可以设置一个标志,在该窗口中有一个窗口,但你实际上看不到它。在这个窗口内部,AI代理可以随意修改代码,只要它们不保存它(因为它们仍然在同一个文件夹中)。然后,它们可以从语言服务器获得反馈,跳转到定义,并在代码上执行操作,例如实际运行所有内容。

就像在后台运行所有内容,就像直接运行一样。

甚至可能运行代码。

所以这是...

最终版本。这就是你想要的。很多博客文章实际上都讨论了如何实现这一点,因为这有点棘手。你希望它在用户的机器上运行,因此它必须精确地反映用户的环境。在Linux上,你可以做一些很酷的事情,例如镜像文件系统,让AI修改文件,并让它看起来像是对文件进行操作,但实际上它是在内存中存储的。你可以创建一些扩展来让它在macOS和Windows上工作,但它有点困难,但这是一个有趣的技术问题。

一个可能有点黑客,但很有趣的想法是阻止保存。所以基本上,你可以让语言模型阻止保存到磁盘。然后,你不再在文件的实际版本上操作,而是在内存中的影子或副本上操作。这样,你仍然可以获得语言服务器的反馈,并且可以编写代码。当你尝试运行代码时,它会发出一个小的警告,但有一个锁,然后如果你尝试在当前或聊天工作区中执行操作,你将从语言服务器或聊天工作区中收回锁。

尝试执行当前操作,这真是一个令人兴奋的未来。顺便说一句,让模型更改文件对人们来说有点吓人,但能够让代理执行一系列任务,然后第二天回来观察,就像一个同事一样,这真的很酷。我认为...

可能会有不同的运行模式,对于简单的事情,你可以在用户机器上花费几分钟来完成编程任务,这很有意义。对于更激进的事情,我们正在进行更大的更改,需要更多的时间,你可能希望在某个远程沙箱环境中执行这些操作。这是一个非常棘手的问题,即如何精确地复制或尽可能地复制用户的环境到这个远程沙箱,以便有效地运行代码。

你想让代码代理拥有什么样的自主权?你想让他们找到错误吗?你想让他们实现新功能吗?你想让他们做什么?

顺便说一句,当我想到代理时,我不仅仅想到编码,我还想到其他事情。例如,在这个播客中,视频编辑和很多代码背后,代码的文档非常糟糕。但是你可以使用代码与Premiere等软件交互,基本上我上传到YouTube的所有内容,以及所有内容。

你可以想象,我通过代码完成所有这些操作,包括翻译和配音。所以我想所有这些任务都可以自动化,而不仅仅是直接与编辑相关的任务。所以,这就是我所说的。在编码方面,我会从根本上考虑错误查找,包括各种级别的错误查找,以及逻辑错误。以及实现的大方向。

以及查找...是的,我认为这些模型在错误查找方面非常糟糕,当仅仅被提示查找错误时,它们的表现非常糟糕。

甚至更聪明的人也...

你甚至不知道...

你如何解释这一点是一个很好的直觉。

我认为这些模型非常强烈地反映了训练分布。我认为它们确实会随着损失越来越低而泛化,但我认为损失的规模还不够低,以至于它们能够真正完全泛化,并且像我们使用这些模型的边界模型那样擅长代码生成和问题回答。

这些东西以大量的数量存在,并且在像Stack Overflow这样的平台上进行训练,包含了数万亿个标记和问题以及答案。因此,当你尝试应用这些模型到实际不存在的东西时,例如,让Cursor预测给定先前编辑的下一个编辑,就会出现脆弱性。错误检测是另一个很好的例子,因为模型中实际上并没有很多关于实际检测错误并提出修复的示例。模型在这方面表现得非常糟糕。但我认为这是一个将模型迁移到Cursor标签目标的方式的问题,就像你从重新训练模型中获得的出色迁移一样。

总而言之,关于代码的通用模型在错误检测方面非常出色。它只需要一点方向。

要明确的是,我认为它们在训练过程中对代码的理解非常出色,就像模型构建的表示形式一样。在某个时刻,模型可能知道可能存在一些错误。

所以,有一些错误实际上列出了错误,你可能会喜欢。其中一部分是人类对哪些错误真的很重要有很好的理解。这不仅仅是说“这有点奇怪”,而是“这有点奇怪,但无关紧要”。

这是否意味着“这有点奇怪,你会让服务器崩溃”?是的,其中一部分可能是对错误的文化理解,例如,资深工程师知道三年前有一个非常奇怪的代码片段导致服务器崩溃。我认为你应该像这样对待它,就像一个实验一样。所以一些错误是可以的,你只是在尝试实验并获得一些东西。

因此,如果模型在编写实验时非常烦人,那就很糟糕。但是,如果你正在编写用于生产的东西,例如数据库,你正在编写PostgreSQL或Linux代码,那么即使在教育环境中,也无法接受。关键在于用户有多谨慎。

但是,即使你最大限度地提高了谨慎性,它仍然无法完全理解。

是的,我认为人类很难理解哪些代码很重要,哪些代码不重要。我认为在网站上,如果代码可能造成大量损害,则应该添加注释,说明该代码行是危险的,并且使用大写字母。

你说的,例如,对于函数中的每一行代码,你都必须...

这非常深刻,这说明了人类的某些方面,因为即使是同一个人也可能忘记了如何思考,一个单独的函数可能不会通过查看单个代码片段来清晰地表达这一点。

我认为这部分也适用于今天的AI模型,如果你在每一行代码上都写上“危险”之类的字样,模型会更加关注该区域,并且更有可能在该区域找到错误。

这实际上只是对代码的损害程度进行标记的一种很好的实践。

我...有些人认为这很丑陋,实际上...

我认为这实际上是我从我们的IT中学到的东西之一。我知道,从美学上来说,我不喜欢它,但我认为它对模型和人类来说确实有用,因为人类很容易忘记很多事情,并且很容易犯小错误,例如,你可能会不小心让服务器崩溃。我们喜欢技术,但总有一些事情与众不同。

是的,就像普通的字符串一样。我认为人们在进行交换时经常会这样做。我认为我需要指出这一点,这样听起来才不会...

通过...是的,你必须记住你正在造成损害。我认为我们并没有真正考虑这一点。是的,你考虑的是“我如何弄清楚它是如何工作的,以便我可以改进它?”你并没有考虑另一个方向...

直到我们对所有内容都有正式的验证,你才能做任何你想做的事情,并且你可以确定,如果证明通过,你不会引入错误。

但是,你认为用户会是什么样子?

我认为人们将不再编写测试,并且模型将建议你编写规范,然后你将进行审查。与此同时,一个智能推理模型会证明实现符合规范。我认为这适用于大多数函数。

你认为这与你之前谈到的关于难以指定你想要提供的意图的问题有点关系吗?有时,这可能是因为实例本身很难指定,因此很难证明它是否与你的意图相符。

你认为规范的生成会很难,或者对于给定的反馈,你认为可以...我认为这是一个问题,例如,你是否真的可以进行正式验证?这可能吗?我认为这还有很多需要深入研究的地方。但是,即使你有了这个反馈...

如果你已经...

如果你已经...

你如何...如果你已经有了这个反馈,那么...

以及网络...是的,那...

反馈应该在之前。

但是,你如何处理那些在规范语言中不容易很好地指定的方面?

我明白了,是的,是的。

也许反对正式验证的一个论点是,它会取代诸如单元测试之类的功能。

当然,是的,是的。我认为你也可以改进检测语言,以捕获它们无法真正捕获的一些内容。我认为这非常令人兴奋。

你不仅谈论单个函数,你还谈论整个代码库。

我认为整个代码库更难,但我希望这可能。我认为这应该可能,因为你甚至可以进行一些最近的工作,可以对硬件进行正式验证。

所以,你可以对C代码进行正式验证,然后对GCC编译器进行正式验证,然后一直验证到硬件。这是一个非常大的系统,但它实际上有效。我认为大型代码库也类似,它们是多层系统。如果你可以分解它,并对每个部分进行正式验证,那么我认为这应该可能。我认为规范问题是一个真正的问题。

但是,你如何知道副作用,或者你如何处理外部依赖项,例如调用Stripe API?

Stripe API,对吧?

你是否可以对所有内容都这样做?你是否可以对所有你使用的东西都这样做?你如何处理像语言模型这样的语言,它们可能被用作程序中的基本元素?

对吧?它们依赖于它。你如何处理这种情况?

我认为你可能能够证明...

证明什么关于语言模型?

我认为这可能,你实际上可以证明我们的语言模型是正确的,例如,或者你可以证明它实际上给出了正确的答案。这真是一个梦想,是的。

这...是的,如果这可能,就像你说的那样,这将有助于确保你不会调用错误的函数,并确保AI不会摧毁人类文明。所以,从AI安全到错误查找,整个范围。所以,他说模型在错误查找方面存在问题。希望是什么?

我的希望是,首先,它应该能够帮助你找到愚蠢的错误。例如,你应该能够快速找到愚蠢的错误,例如“差一个”错误。有时你以一种方式编写代码,而应该以另一种方式编写。

这很常见。我经常这样做。我写了一些注释,然后可能写错了。模型会说,“你确定要这样做吗?”但最终你应该能够找到更难的错误。

是的,我认为这也很重要。拥有一个好的错误查找模型对于让AI为你做更多编程工作来说是必要的。你将能够...如果AI为你构建了更多系统,那么你不仅要信任它,还要验证它。如果没有它,我们之前谈到的使用这些模型进行编程的一些问题将变得无法解决。所以,这不仅仅是人类说“帮我找到错误”,而且还能够验证代码并检查它,这非常重要。

是的,然后你如何实际做到这一点?我们已经就如何训练错误查找模型进行了很多讨论。一个非常流行的想法是,你可能很容易引入错误,然后实际找到错误,就像你可以训练一个模型来在现有代码中引入错误,然后训练一个反向错误模型来使用这些合成数据查找错误。所以,这是一个例子。但是,是的,有很多想法。

你也可以...你也可以做很多工作,甚至不是在模型级别,而是采用最大的模型,然后可能让它们访问大量非代码信息,例如,这有点困难,就像找到错误并说“这可能是错误”,你经常需要运行代码,并且能够查看调试器中的跟踪和步骤。

还有另一个方向,就像有人建议的那样,这可能意味着存在两种不同的产品形式。可能有一个非常特殊的模型,它非常快,在后台运行,试图发现错误。这可能意味着有时,就像我们之前讨论的关于一些低级错误的例子一样,你可能知道存在错误,但你不仅仅是在自由地检查假设,而是在说“这是一个我真正想要解决的问题”,然后使用大量计算资源来解决它。

你是否考虑过将金钱整合到整个系统中?如果它找到了错误,或者生成了我真正欣赏的代码,我可能会支付一大笔钱。几天前,我开始使用Cursor时,它生成了...

0 完美。嗯,完美的三個函數,用於與 YouTube API 互動,更新字幕和實現全面的本地化,例如不同語言的本地化。API 文件夾中的代碼文檔非常棒。

如果我在網路上搜尋一段時間,我找不到確切的資訊,有很多令人困惑的資訊,當然,生成的程式碼非常完美。我就像,我剛才把程式碼改成紅色,我心想,這程式碼是正確的。我測試過,它是正確的。

我心想,我想在按鈕上加一個提示,讓它先捐贈 5 美元,一個真正好的提示,只是為了支持公司,支持它的工作,以及其他可能發出強烈信號的提示,例如「做得很好」,對吧?發出「做得很好」的信號比僅僅接受程式碼的信號要強得多,對吧?你實際上發出了一個強烈的「做得很好」的信號,而且對於錯誤的發現,顯然有很多人都願意為一個錯誤付費,例如一個錯誤的錯誤,對吧?大家有沒有想過這個?

嗯,這在公司內部是一個有爭議的想法。我想這取決於你對人類的信任程度。你知道,嗯,我覺得如果,嗯,你花費零成本嘗試找到一個錯誤,如果他沒有找到錯誤,你花錢,然後如果他找到了錯誤,嗯,你點擊接受,然後它也會顯示像印章一樣的提示,例如,你花了一美元來接受這個錯誤。

嗯,當然,還有擔憂,例如,我們花費了大量的計算資源,也許人們只是複製粘貼。嗯,我想這是一個擔憂。嗯,還有擔憂,例如,將金錢引入產品中會讓它,你知道,嗯,它不再那麼有趣了。你必須考慮金錢,而你只想考慮程式碼,嗯,也許實際上將其分開更有意義。你每月支付一些費用,然後你可以免費獲得所有這些東西。

但可能有一個提示機制,這不是像...

是的,但它仍然有那個,嗯,我認為人們付費是沒問題的。但我也有點擔心,也許你不想引入它,是的,我...

在人們分享程式碼的時候,這種感覺最明顯。當他們有一個很棒的範例時,他們無法與朋友分享。

還有一個潛在的世界,存在解決這個問題的技術方案,例如,一個誠信系統的問題,如果我們能更了解系統的輸出,我的意思是,我們正在討論的內容,例如,使用 LSP 追蹤錯誤,然後執行程式碼,如果你能達到一個地方,你實際上可以驗證,哦,我修復了錯誤。也許這樣,我們就不需要依賴我們的系統了。

終端與程式碼之間有多少互動?如果你在終端中執行程式碼,你能獲得多少資訊?你能執行一個迴圈,執行程式碼並建議如何更改程式碼,如果程式碼和執行時間之間存在差異,現在它們是完全不同的世界嗎?你知道,你可以在終端中使用 Ctrl+K 來幫助你...

寫程式碼,你也可以使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,在終端中使用終端互動,嗯,

机器学习。但我认为这正是我们面临的挑战。如今所有的软件都拥有许多来自云端的功能,并且越来越依赖IT,让我们的生活变得很棒。但也有缺点,这就是为什么你需要非常好的安全措施来防范基本攻击的原因。但是,只有少数公司控制着这些数据,你知道,他们显然可以利用这些数据,并且可以被各种方式渗透,这取决于我们所处的世界。

是的,我的意思是,我实际上非常担心这种世界,这意味着审讯有这种负责任的技能政策。因此,我们不像低级ESS(主题安全)那样,关注模型的安全,但是随着我们获得像这样的模型,它可能在三年或四年内变得非常强大,但出于大部分合理的安全原因,你可能需要监控所有提示。嗯,我认为这是合理的,并且可以理解每个人都来自哪里,但是如果世界上的所有信息都像这样被集中起来,那可能真的很糟糕,就像盖上厚重的盖子一样。你正在走一条非常微妙的道路,一方面,你不想让模型失控,另一方面,就像人类一样,我不知道是否信任世界上的所有信息都通过三个模型提供商。

你认为这与云提供商有什么不同?

因为我认为这些数据一开始根本就不会进入云提供商。嗯,通常情况下,你希望为你的模型提供更多数据,你希望提供你一开始根本不会放到网络上的个人数据,给这些公司或这些模型,并且它也集中了控制权,嗯,对于云端来说,你通常可以使用你自己的加密密钥。而像这样的东西,我们真的无能为力,但这里只是集中控制。

参与者看到...

另一类上下文中的确切纯文本。

对我来说,在用Python编写代码时,这实际上一直是一个摩擦点。有很多东西本身就导入了。这啊,你可能可以把它包含进去,那类东西。我想知道,自动识别上下文有多难?这很棘手。

嗯,我认为我们将来可以在自动计算和上下文方面做得更好。需要注意的一点是,包含自动上下文存在权衡。因此,你包含的上下文越多,这些模型的性能就越低,嗯,这些请求的成本就越高,这意味着你可以进行更少的模型调用,并在后台执行更少的功能。

此外,对于许多模型来说,如果提示中包含大量信息,它们会感到困惑。因此,你包含的上下文的准确性和相关性应该相当高。嗯,我们已经在产品的一些地方使用了自动上下文,这绝对是我们想做得更好的东西。我认为这里有很多很棒的想法,嗯,在学习更好的检索系统、改进模型和改进审查方面。

我认为这里也有一些很棒的学术想法,你知道,我们内部尝试过的一些东西,但该领域也在努力解决一个大问题,即你是否可以让语言模型达到可以真正理解新信息的地步?最流行的讨论版本是,你是否可以让上下文窗口无限大?如果上下文窗口无限大,你是否可以让模型真正关注无限上下文?然后,你是否可以使模型关注无限上下文,从而使其能够真正做到这一点?

然后,你是否可以缓存无限上下文?你不需要每次都重新计算所有内容。但是,还有其他一些更类似于微调的想法正在尝试。

我实际上是在学习这些信息在模型权重中的作用,并且这可能意味着你实际上会获得一种不同的理解类型,如果你在权重级别这样做,那么如果你在不可抗拒的ARN级别这样做,那么这可能意味着你实际上会获得一种不同的理解类型。我认为,关于这一切最终会如何发展,人们的意见仍然存在一些分歧。但是,作为一家公司,我们对改进检索系统和选择代码库中最相关的部分非常兴奋。你在做什么。

我们可以做很多这样的事情,例如,一个有趣的概念验证,直接在权重中学习知识,就是VS代码。因此,我们在VS代码中工作,代码都是公开的。因此,这些模型在自由训练代码场景中,他们可能也看到了关于它的问题和答案,然后他们进行了微调,并早期发布了构建,以回答关于代码的一般问题。

因此,当你提出关于代码的问题时,有时它会产生一些噪音,但有时它实际上确实做得很好。我认为这只是因为这样就足够了。但是,如果你可以真正地专门训练模型,使其真正理解这个代码库呢?嗯,这是一个开放的研究问题,一个我们感兴趣的问题。

然后,还有不确定性,即你是否希望模型成为端到端执行所有操作、执行其内部操作并回答问题或创建代码的东西,或者你是否希望将检索与前沿模型分开?或者,你知道,你可能在几个月内获得一些比最好的开源模型更好的模型。然后,你希望单独训练一个非常好的开源模型来充当检索器,充当向这些测量模型提供上下文的工具。

人们是否可以更多地关注训练模型以理解代码库?我真的不知道我的意思,如果这个声明的方向是...是的,我的意思是。

有很多可能的方法可以尝试,而且肯定不会缺乏想法。嗯,这只是去尝试所有这些方法,并对哪种方法最有效进行评估的问题。嗯,你知道,一个简单而天真的事情是尝试复制在VS代码中使用前沿模型所做的事情。

因此,让我们继续训练某种包含一般数据,但还包含你关心的特定存储库数据的训练,然后进行训练,嗯,让我们从指令微调开始。你有一个关于代码的普通指令微调数据集,但你添加了关于该存储库中代码的大量问题。嗯,你可以获得地面真实值(这可能很困难),或者你可以做你暗示或建议使用合成数据的事情。嗯,例如,让模型询问关于不同代码片段的问题。嗯,你可以获取代码片段,然后提示模型或让模型提出关于该代码片段的问题,然后将这些作为指令微调数据点添加,理论上,这可能会解锁模型回答关于该代码库问题的功能。

关于开放AI或一,你认为这种测试时计算系统在编程中的作用是什么?

我认为测试时计算非常有趣。因此,存在一种重新训练方案,随着你增加数据量和模型大小,它会让你在损失和基准测试以及一般性能方面表现得越来越好。我们使用它来进行编码或其他案例。

嗯,我们开始遇到数据墙,这意味着继续扩大这种方案会很困难。因此,扩大测试时计算是一个有趣的方法,现在你增加了推理时间浮点运算的数量,但仍然获得与增加推理时间浮点运算数量相对应的模型性能改进。传统上,我们只需要训练一个更大的模型,它始终使用更多浮点运算。

但是,现在我们也许可以使用相同大小的模型,并运行更长时间,以获得与较小模型相同质量的答案。因此,我最喜欢关于这一点的真正有趣之处在于,有些问题可能需要训练一个包含一百万个标记的、具有万亿参数的模型,但这可能只占所有查询的 1%,或者可能只有 0.1%。所以,你是否会投入所有这些努力,训练如此昂贵的模型,然后只运行它几次?这感觉非常浪费,因为你可以训练一个模型,该模型能够处理 99.9% 的查询。然后,你有一种方法,让推理时间运行得更长,以满足那些真正想要最大智能的人。

你如何确定哪个问题需要哪个级别的智能?是否可以动态确定何时使用代理,何时使用小型模型,何时需要大型模型?

我的意思是,是的,这是一个开放的研究问题。当然,我认为没有人真正很好地解决了这个问题。我们想,我们已经为一些事情(例如,你的代码标签)创建了一些初步的实现。

嗯,在从四到一的级别上,嗯,这有点棘手,因为还有问题,即你需要多少智能才能确定某件事是否对四级模型来说太难了?也许你需要一级模型。嗯,这真的不清楚。

但是,你提到,所以存在重新训练过程、后训练过程以及测试时计算,那么最大的收益在哪里?

嗯,这很奇怪,因为对于测试时计算,你需要一个完整的训练策略才能让测试时计算发挥作用。而真正奇怪的是,除了大型实验室之外,甚至可能只是开放AI,没有人真正知道它是如何工作的。有一些非常有趣的论文暗示了他们可能在做什么。

因此,也许他们正在使用进步奖励模型进行树搜索。但是,嗯,我认为问题在于我们不太清楚它到底是什么样子。因此,很难评论它在其中的位置。我会把它归类为后训练。但是,也许用于让模型的测试时计算发挥作用的计算量最终会用于重新训练。

所以我们甚至不知道所有这些是否只是使用链式思考,我们不知道他们是如何使用的。

我们一无所知。如果要构建一个竞争模型,这很有趣。

要做什么?

是的。我认为你可能需要训练一个过程奖励模型,这就像,也许我们可以先讨论过程奖励模型和结果奖励模型。结果奖励模型是人们训练语言模型、语言建模的传统奖励模型。它只是查看最终结果。

因此,如果你正在解决数学问题,让我们看看最终结果,你已经完成了所有操作,让我们分配一个我们认为的概率,嗯,这个结果的奖励是什么?过程奖励模型,并尝试对链式思考进行评分。我认为开放AI在去年夏天发表了一些初步论文,他们使用人类标签创建了数千个链式思考示例。嗯,最终,我认为人们在使用过程奖励模型的方式上并没有看到任何有趣的东西,除了将其用作在许多示例之间进行选择的工具。因此,所有这些论文中人们所做的事情是,从语言模型中抽取一些示例,然后使用过程奖励模型对所有这些生成结果进行评分,也许还有一些其他技巧。

然后,他们使用它来选择最佳答案。真正有趣的是,人们认为可能有效,并且人们想要研究的是使用这些过程奖励模型。因为如果你真的可以对链式思考中的每个步骤进行评分,那么你就可以扩展并探索链式思考的多种路径,然后使用这些过程奖励模型来评估你正在采取的分支的好坏。

是的,当分支的质量与最终结果的质量以某种方式密切相关时。因此,我有一个很好的模型,可以知道应该采取哪个分支,不仅在短期内,而且在长期内。

是的,我认为已经完成的有趣工作是弄清楚如何正确训练过程奖励模型,我认为一些公开发表的论文讨论了这一点,也许是一种更自动化的方式,嗯,我可能错了,可能没有提到一些论文。我还没有看到任何真正有效地使用过程奖励模型来进行代码研究的案例。

这有点像人工智能安全,也许有点像哲学问题。因此,开放AI表示他们隐藏了用户链式思考,他们表示这是一个有意的决定。他们没有显示链式思考,而是要求模型总结链式思考。

他们还在后台监控链式思考,以确保模型不会试图操纵用户,这是一个非常有趣的想法。但是,你对隐藏链式思考有什么看法?

开放AI的一个考虑因素(这完全是推测)是他们希望让复制这些功能变得更难。这实际上可能更容易。如果你可以访问隐藏的链式思考,那么复制该技术可能更容易,因为那是一些非常重要的数据,例如看到...

看到AI训练的步骤。

并且在大型语言模型中也存在类似的情况。这同样是推测。但是,一些API过去提供对所有生成标记的日志属性的轻松访问,以及对提示标记的日志概率的访问,然后一些API取消了这些功能,这同样是推测。

但是,嗯,其中一个想法是,如果你可以访问这些功能,嗯,这可能会让你获得更多信息,从而尝试从这些大型模型中提取这些功能,并控制你自己的模型,以及之前关于我们集成开放AI的讨论,我认为我们仍在学习如何使用这些模型。因此,我们让开放AI在Cursor中可用,因为当我们获得该模型时,我们真的想尝试一下。我认为许多程序员都非常想尝试一下。

但是,嗯,开放AI并非以任何方式成为默认的Cursor体验。嗯,我们仍然没有找到一种方法,让它以我们每天甚至每小时都想要的方式集成到编辑器中。因此,我认为人们对如何使用该模型仍然存在分歧。

我们还没有看到人们发布任何明确表明,哦,这是我们现在想要返回的用例的案例。也许这可以让你更容易地让这些后台事物运行,让这些模型和循环运行,让这些模型代理化。嗯,我们仍在探索。

要明确的是,我们有想法。我们只是需要在尝试之前弄清楚如何让它变得非常有用。

但是,它存在一些重大限制,例如,即使是像外来功能这样的功能。嗯,它不进行流式传输,这意味着对于你想要监控输出的东西来说,这非常痛苦,而你只是等待文本显示出来。此外,它感觉就像测试时计算的早期阶段,它只是非常、非常地依赖于今年,并且有很多事情感觉不太对。我怀疑,与人们增加重新训练数据和改进模型以及重新训练和发现技巧的努力同时,你还会看到另一个线程,即让搜索变得更好。

所以,让我问你一下关于草莓明天眼睛的问题。看起来GitHub Copilot可能会以某种方式集成开放AI。我认为一些评论说,这实际上意味着Cursor已经完成了。我认为这是一种普遍的说法。

这表示关闭Cursor的时间到了。

关闭Cursor的时间到了。

我认为这与过去 20 年的软件领域有点不同,嗯,我认为这里的上限非常、非常、非常高。因此,我认为 3 到 4 年后的最佳产品将比今天的最佳产品更有用得多。你可以谈论改进的代码分支,你知道,这是我们的优势。

但是,我认为最终,如果你没有创新,如果你停止改进产品,你就会失去。这对初创企业来说也是如此,嗯,这对试图进入这个市场的公司来说也是如此,因为这意味着你有机会击败那些已经拥有大量用户的公司,只需构建更好的东西。我认为在接下来的几年里,这将取决于构建最佳产品,构建最佳系统,这既取决于模型引擎方面,也取决于编辑体验。

是的,我认为当前第一个版本带来的额外价值主要在于,所有其他产品不仅仅是快速整合新模型,还在于这些定制模型中隐藏的各种债务,你可能没有意识到它们正在为你工作,以及产品方方面面的设计,以及每个功能的深思熟虑的用户体验。

对吧?嗯,从那个深刻的回答中,它被传回技术层面,你改变了……

氧化物,不,不。

你能解释一下吗?

是的,我认为有三种主要类型的合成数据。首先,什么是合成数据?首先,有普通数据,也就是非合成数据,它只是自然产生的。

例如,通常它会来自人类完成的事情。所以,从某些人类流程中,你获得这些数据。合成数据。嗯,第一个是安装。所以,让语言模型输出标记或标记上的概率分布,然后你就可以训练一些能力较弱的模型。嗯,这种方法并不会让你获得一个比最初产生标记的模型更强大的模型。

嗯,这真的很有用,如果你想从一些非常昂贵、功能强大的模型中获得一些能力,然后将其分解成一些更小的、特定任务的模型。嗯,第二种情况是,问题的某个方向比反方向更容易。一个很好的例子就是错误的产生,就像我之前提到的,更容易引入看起来合理的错误,而不是真正地解决它们。

这对于人类来说是一个非常重要的案例,所以你可以做的是,你得到一个模型,它并没有改变太多数据,它并没有试图引入错误代码。然后,你可以用这个合成数据来训练一个能够很好地检测错误的模型。我认为最后一类,大概是大实验室在合成数据方面做的主要工作,是使用语言模型生成数据,这些数据可以很容易地验证。

所以,你知道,一个极端的例子是,如果你有一个验证系统,可以检测语言是否达到莎士比亚的水平,一堆猴子在打字机上打字,你最终可以获得足够多的训练数据来训练一个达到莎士比亚水平的语言模型。我的意思是,这在数学中也是如此,在形式语言中,验证实际上非常容易。然后你可以让一个好的模型生成大量结果,然后选择那些实际上证明了基础的,然后进一步训练。

嗯,你也可以用类似的方法来处理代码,例如代码问题,或者如果你有一些测试集,你知道它们对应于如果某些东西通过了这些测试,它实际上就解决了问题。你可以做同样的事情,验证它是否通过了测试,然后用通过测试的结果集训练它们。我认为这有点棘手。让它在所有领域都能工作,总的来说,拥有完美的验证感觉非常非常困难,就像你给模型的开放式任务,或者更像长远的任务,甚至编码。

那是因为你没有那么乐观,但是是的,所以是的,第三类需要一个验证系统。

感觉最好的是,你知道它一定是正确的。然后,它不会像使用语言模型来验证那样,而是使用测试或形式系统,或者运行该东西。

做一些人工质量控制,是的,但是……

构建一个不同的……

版本,它可以运行,实际上理解……但是,是的,这与……

我认为这一类最有可能带来巨大的收益。

关于强化学习与反馈呢?强化学习与反馈……它在提高模型性能方面扮演什么角色?

是的,所以强化学习与反馈是指,你使用的奖励模型是从你收集到的人类反馈中训练出来的。嗯,我认为,如果你有能力获得大量关于你关心的测试类型的人类反馈,那么强化学习与反馈就很有用。强化学习与人类反馈的结合很有趣。

嗯,因为你有点依赖于……这实际上有点像……这取决于约束条件,验证实际上比生成更容易,因为它感觉像,好吧,你在做什么?你使用语言模型来查看语言模型,然后通过语言模型。但是,如果语言模型更容易验证某些解决方案,而不是生成,那么你实际上可能能够获得这种强化学习与人类反馈的结合,但是我认为它看起来不会完全一样。嗯,你还可以做的是,我们有点混合了强化学习与人类反馈,通常模型实际上是相当正确的,这是当前最流行的案例。在两种可能的生成结果之间,选择哪个更好,然后它只需要一点人类的引导,只有大约 50 到 100 个例子……来调整模型,使其看起来像你想要的样子,这与通常训练这些奖励模型和反馈示例的方式不同。

当你比较生成和验证、生成和排序时,你的直觉是什么?生成是不是更容易?生成……

我的直觉是,我们只是说,是的,这有点像,如果你相信 p 不等于 mp,那么存在一类问题,这些问题更容易验证,而不是实际证明。

我想知道,如果证明 p,一,P2,P,P……

那将是……那将是……

非常酷。由人工智能获得的任何奖项。谁获得荣誉?不,那里……

开放文件,沙发问题。

我实际上,我实际上非常……

关心的是……什么,什么。就像一个好的,一个坏的,一个我将获得的领域……

那将是……

嗯,我不知道……

一个人在这里打赌,对不起……

诺贝尔奖,感觉更……

谁先来?嗯,你会这么说,当然。

但它也是一个孤立的系统。不,当然。就像我不知道是否需要做……

我觉得,我觉得通往 AI 的道路,稍微清晰一些,因为 AI 可以解决一些 AI 问题。而且,有很多关于根据当时文献,人们可以采取哪些策略的讨论,我认为在他们现在正在改进的空间中,取得的进展要少得多,关于我们离解决这些真正困难的开放性问题还有多远,我的直觉要少得多。

所以,你会认为,感觉上,它不会像物理学那样……

或者在 100 年内。我认为这可能更像我。他们可能会获得这些奖项。是的,是的。

我认为它会让人想起,我不知道,像 B、S、D,也就是鸟类会变成直接导体,当我想到这些问题时,像这些非常困难的数学问题,实际上非常困难,甚至不清楚如何解决。看起来我们甚至不知道答案是什么样子。仅仅这一点……

你就像一个孤立的系统。你实际上有一个好的奖励系统。嗯,感觉更容易训练。

我认为我们可能在 AGI 之前获得菲尔兹奖。

我认为你很高兴,你很高兴,但我不知道。我认为 2028 年或 2030 年感觉很酷。

感觉从现在开始,时间过得很快,考虑到事情进展的速度,规模化一直是一个问题,对于那些不知道的人来说,也许谈谈这个规模化概念会很好,它们是什么?你认为情况如何?

情况很有趣。最初的规模化定律论文,由 OpenAI 撰写,略有错误,我认为他们对学习率计划和一些问题处理得不好,然后有人提出了一个更正确的版本。然后,人们又偏离了使用计算机优化器。

人们现在开始更多地优化,以使事情在给定推理预算的情况下运行得很好。我认为这些曲线比我们合理地使用的维度更多,仅仅是计算数量、数据量、影响计算机的因素。我认为上下文也是另一个显而易见的因素。

如果你关心,比如说,你关心推理、计算以及上下文窗口,也许你想要训练的是比以前更好的东西,因为它们更便宜、更快,上下文窗口超级超级对数。即使在训练期间,也许它具有训练规模化特性,许多人花费更多计算资源来训练模型,以获得相同级别的能力。嗯,这是值得的,因为你最关心的是推理预算,用于非常长的上下文窗口。所以,有趣的是,人们如何玩弄所有这些维度。

所以,是的,我谈到了多维因素。显然,最初的概念是查看模型大小的变量,通过参数和数据大小来衡量,通过标记数量来衡量。然后查看这两个……

这有点令人信服,至少有一个最小值。似乎有一个正在出现。你仍然相信大就是好?

我的意思是,我认为大对于原始性能、粗略的智能和错误的智能来说当然更好。

我认为人们可能会采取的路径是,我特别看好蒸馏,以及,如果我们花很多钱在训练上,我们可以获得多少模型?就像获得最强大的、最便宜的模型一样?就像真正地尽可能多地利用它,因为这就像关心推理时间、计算机资源,人们已经用 Lama 模型做过的事情,只是过度训练了 7B 模型,在比必要更多的标记上。

但是,如果你真的关心它,也许你应该做的是我所做的事情,那就是不要仅仅训练标记。让我们真正地训练,最小化与 27B 模型的知识分布的差异。嗯,你正在花费计算资源来训练这个 270 亿参数模型,在所有这些标记上,只是为了获得一个更小的模型。

蒸馏让你获得一个更快的模型。

小意味着更快。理论上,蒸馏是……我认为从你训练的数据中获得更多信号。这可能是一种另一种方法,不是完全克服,而是部分帮助数据墙。就像你只有这么多数据可以训练一样,让我们训练一个非常大的模型,在所有这些标记上,然后将其蒸馏成一个更小的模型,也许我们可以获得每个标记的更多信号,对于这个更小的模型,而不是重新训练它。

所以,如果我给你 10 万亿美元,你会怎么做?我的意思是,你可以买一个岛屿,或者任何东西。你如何分配资源,以改进大型模型?或者,也许是为强化学习与人类反馈付费?

是的。我认为有很多关于训练这些大型模型的秘密和细节,我根本不知道,只有大型实验室知道。问题是,如果我尝试这样做,我会浪费很多钱,因为我不知道这些事情。悬置很多这种信念,并假设,如果你必须知道如何……以及如何操作,或者如果你说,你必须用现在拥有的有限信息……

你没有获得所有信息。所有这些小细节,所有这些小细节,都定义了训练方式。如果我们看看如何在未来五年内投资资金,以最大限度地提高所谓的原始智能……

答案不是很简单吗?你只需要尽可能多地购买计算资源,最终,你只需要购买 GPU,然后研究人员可以找到所有……他们可以调整,无论你想要一个大型模型还是一个小型模型。

那么,这涉及到一个问题,你是否真的受限于计算资源和资金?你是否受限于其他因素?

我更倾向于相信我们受到某种理想的限制,但总是有……

但是,如果你有大量的计算资源,你可以进行大量的实验。

所以,你将进行大量的实验,而不是像计算机渲染的代理模型。

我会的。但是,我相信我们受到想法的限制。

我认为是的,即使拥有所有这些计算资源,以及你能收集到的所有数据,你最终仍然受到限制,不是因为缺乏想法,而是因为缺乏优秀的工程能力。即使拥有所有这些资源,你是否真的能够组装……世界上真正能做出改变的人并不多。嗯,而且研究中有很多工作,这只是纯粹的、非常困难的工程工作,这是一种非常手动的过程。

例如,如果你看看最初的 Transformer 论文,你知道有多少工作结合在一起,许多这些有趣的想法是在那个时代发明的,而不是去编写所有代码,也许是内核,也许是其他任何东西。我不知道你是否在最初的 GPT 或 TPS 中运行,所以它实际上加速了 GPT 的性能,对吧?获得这些知识,然后去编写所有这些代码,对吧?然后,可能是世界上最好的工程师,或者更进一步,下一代模型拥有这些功能,例如让模型瘫痪工作并扩展。

而且,你知道,可能有数千个,也许数万个,可能 GPT-3 拥有的。嗯,所有这些事情都需要大量的工程工作才能使其发挥作用。嗯,如果你真的降低了这些成本,比如,你知道,可能不是零,但只是让它更容易,或者让拥有真正出色想法的人能够立即获得他们梦想中的新架构版本,这就像获得 GPT 的 50% 到 40% 的性能。我认为这将极大地加快研究速度。

我的意思是,我认为如果你看到明显的改进,你应该总是先尝试低挂的果实,我认为可能 OpenAI 和所有其他定律,直接摘取低挂的果实,就像你可以扩展到 GPT-2.5 的规模,然后继续扩展,事情会变得越来越好。

只要……没有尝试新想法的意义。我们喜欢所有东西。所有东西都在运行,你只是不断地尝试,尽可能多地做这些事情。然后,也许当你真正需要新想法时,我认为,如果你正在花费计算资源,你可能想要花一些时间来评估你的想法,也许你的理想状态是那时。

我认为我们所有人相信,为了达到 AGI,可能需要新想法。而且,我们所有人可能都相信,存在测试这些想法的小规模方法,并且相当有信心它们会奏效。只是,对于当前的实验室来说,在他们目前的位置上,很难将他们非常有限的研究和工程人才投入到探索所有这些其他想法中,因为这些想法可能会在一段时间内提高性能。

是的,但是这些大型实验室,他们只是继续疯狂地前进。

好的。

所以,展望未来,这是一个大问题。你现在处于编程世界的中心。你认为未来几个月、未来一年、未来两年、未来五年、未来十年,编程的性质会如何变化?

我认为我们对未来非常兴奋,程序员将长期处于驾驶座上,你已经听到过你谈论过这一点,但重点是程序员的速度和自主性,以及控制能力,能够修改任何你想要修改的东西,能够非常快速地构建。这与我认为一些人在该领域所做的有所不同。

嗯,我认为一个吸引人们的想法是,你能与你的计算机对话吗?你能为你的工作构建一个界面,就像你正在与 Slack 上的工程团队或工程师对话一样?我可以只使用这个文本框?嗯,我们对它的兴奋部分原因是,你知道,我们与 Encord 谈论过一些事情,但我们对它的兴奋部分原因是,这意味着放弃很多控制权。

在文本框中谈论事情时,要做到真正具体是很困难的。而且,如果你注定要与类似于你与工程部门沟通的东西进行沟通,你实际上会应用大量、大量真正重要的决定……这有点说明了工程的根本是什么。我认为,一些与工程稍微隔绝一点的人,比如IT人员,会认为规格完全正确,然后工程师们只是平静地执行并相信自己能够让事情发生,让代码让事情存在。

但是我认为,很多我们喜欢的优秀工程涉及到对正在构建的内容进行大量的微观细节思考,以及在速度和成本之间进行艰难的权衡,以及系统中涉及的其他所有事情。只要人类实际上是那些进行软件设计和指定想要构建内容的人,而不是像由AI驱动的公司那样,我认为你真的会想要幽默感,让人在驾驶座上……做出这些决定,所以关于这看起来是什么样的问题,意见仍然存在分歧。我认为,关于这可能是什么样的一种奇怪的想法是,IT可以让你控制抽象级别,查看代码,并指出代码库中的特定部分,可能让你通过以伪代码的形式查看IT来消化代码库,并且你实际上可以编辑该城市代码,然后让更改在该正式程序级别向下传递,并且你保留……你知道,你可以对软件组件中的任何逻辑片段进行操作,保留编程的输入文本编辑组件,保留控制权,你甚至可以深入到代码中,也可以在更高的抽象级别进行操作,同时也能给你带来这些巨大的生产力提升。

如果能上下移动抽象堆栈就好了。

那里有很多细节需要弄清楚,这有点像模糊的想法。时间会证明它是否真的有效。但是,我认为控制和速度这些原则,以及人类在驾驶座上,非常重要。我们认为,对于一些事情,就像我们之前提到的那样,对于一些编程任务,你可以将风格交给……如果你有一个非常明确的错误。但这并不是大多数编程,也不是我们认为很多人重视的大多数编程。

关于编程的基本技能呢?现在有很多年轻人感到害怕,因为他们喜欢编程,但他们害怕自己是否能够在追求这条职业道路时拥有未来。如果你认为编程的技能本身会发生根本性的变化呢?

我实际上认为,现在是构建软件的非常、非常令人兴奋的时期。我们记得编程是什么样的,你知道,13、14岁的时候,以及严肃的、大量的工艺和样板代码,以及你知道,在早期寻找一些东西,但它绝对不是从零开始。但是,问题比那时有趣多了。

这就像真正地获得乐趣、专注以及所有真正吸引人们进行编程的事情,例如,能够快速构建事物的能力,以及速度和个人控制,所有这些都得到了提升。所以我认为,这对于到目前为止一直从事编程工作的人来说,可能是一个非常、非常有趣的时间。我认为,技能可能会发生变化。我认为,人们的品味和创造性想法会得到放大,它可能不太关注文本编辑,甚至可能不太关注细致入微,我认为这对于今天的程序员来说非常重要。

它可能会变得更有乐趣。但我同意。

我很兴奋能够改变……最近发生的一件事是,我们想进行一次相对较大的迁移,或者说,我们正在使用已知性能不佳的本地存储节点。我们想迁移到上下文对象。这是一次影响整个代码库的大迁移。

我知道,我花了五天时间来处理这个问题,即使使用了当今的AI工具。我真的很期待未来,我可以展示几个例子,然后AI将其应用于所有位置,然后突出显示,哦,这是一个新例子,我应该怎么做?然后我展示应该在那里做什么。

然后,这可以在大约十分钟内完成。然后,你可以比以前迭代得快得多。然后,你不需要事先考虑那么多,也不需要站在黑板上,仔细思考如何做到这一点,因为成本很高。

但是你可以先尝试一下,然后意识到,哦,这实际上并不是我想要的。然后你可以在瞬间再次更改它。所以,是的,我认为未来成为程序员会很有趣。

是的,我真的很喜欢关于编程的这一点。很多时候,有两种方法可以走出去,一种是事先认真仔细地思考最好的方法,然后花你有限的工程时间来实际实现它。但是,我必须说,只是进入代码,你知道,尝试一下,看看它是什么样的,然后在上面快速迭代,这感觉更有趣。

是的,我开始生成样板代码就很好。所以,你只需要专注于困难的设计细微差别、困难的设计决策和迁移。我觉得这很酷。我觉得大型模型能够基本上将一种编程语言翻译成另一种语言,或者从广义上讲,翻译或迁移……但这只是当前的情况。

所以我的意思是,恐惧与以下内容有关:这些模型变得越来越好,你的创造性决策会越来越少,它将朝着一个你可以在自然语言或自然语言作为主要编程语言的设计空间中操作的方向发展。我想,我之所以被问到这个问题,是为了提供建议,比如,现在对编程感兴趣的人应该学习什么?比如,你们是从Java开始的。

你们是否接触过PHP、Objective-C、Objective-C?就是这样。我的意思是,最终,我们都知道JavaScript会获胜。

以及TypeScript,这将像Vanilla JavaScript一样统治世界,也许还有少量的PHP。我的意思是,这也引发了关于……我认为DK指出,一定比例的人口是极客。并且,编程需要一种特殊的思维方式和心理。他感觉越来越多的程序员应该能够、能够进行高级编程。我的意思是,我的意思是,我的意思是。

我认为不同的人进行编程的原因不同。但我认为真正的、也许最好的程序员……是那些真正热爱编程的人。

例如,我们团队中的一些人,当他们下班回家时,他们会去,然后他们会启动Cursor,然后他们会在整个晚上开始编写副项目代码,他们说,凌晨三点还在做这件事……当他们难过时,他们说,我只是真的需要编码。我认为,像这样的程序员,或者说,编程的这种细分和低级部分……我认为这造就了真正优秀的程序员。我认为这类人会真正深入了解事情是如何运作的。

我想我问的问题是,想想这样一个人,一年后,超级棒的程序员,超级棒的程序员,在团队中脱颖而出。

比任何人都多地点击。是的,这不仅仅是……

像按Tab键一样,只是按Tab键。这是在流行语中表达它的简单方法,你知道……但是当你按Tab键时,你实际上是在不断地注入意图……有时你在拒绝,有时你在输入更多字符……这就是你塑造正在创建的内容的方式。我认为编程会发生很大的变化,只是你想要让这种……

与计算机的沟通方式变得更高效,就像用更少的按键来表达意图一样。

我的意思是,让我们来看看这里,一篇题为“工程天才”的宣言,我们正在进行应用研究,构建非凡的人工智能系统产品。所以,谈到这种混合元素,首先,我们正在构建未来的工程师,一个人类人工智能程序员。这比任何一个工程师都要有效得多。

这位混合工程师将能够轻松控制他们的代码库,并且不会有低熵的按键。他们将以他们判断的速度迭代。即使在最复杂的系统中,通过结合人工智能和人类的独创性,他们将超越并超越最好的纯人工智能系统。

我们是一群研究人员和工程师。我们构建软件模型,以发明尽可能有用的东西。我们的工作已经改善了成千上万程序员的生活。并且,在通往那里的路上,至少会让编程变得更有趣。所以,谢谢你的谈话。

谢谢,谢谢。

感谢您收听与迈克尔、苏莱、阿维德和阿曼的对话。要支持本播客,请查看描述中的赞助商。现在,让我用我在Reddit上看到的随机、有趣且可能深刻的编程格言来结束:没有比临时解决方案更持久的了。谢谢您的收听,希望下次再见。