[ { "i": 0, "speaker": "Speaker 1", "text": "你好,我是Sasha,这里是Cursor的研究员。我要谈谈Composer 2,这是我们内部开发的编码模型。Composer 2 是我们为智能体编码打造的模型,其能力非常强大" }, { "i": 1, "speaker": "Speaker 1", "text": "作为一个编码模型。发布时它的得分与Opus相近,为4.6分,稍低于GPT的5.4分。Composer 2 结合了非常强的编码速度和极具竞争力的价格。因此它极其" }, { "i": 2, "speaker": "Speaker 1", "text": "对各种编码任务都很高效。很多人说它只是飞速通过。而且每个词元的成本也非常低廉。因此我们一直在构建编码模型" }, { "i": 3, "speaker": "Speaker 1", "text": "在 Cursor 这个地方待了大约一年左右。我们第一代模型的目标是 Composer1,是要构建一个真正有帮助的、可交互的模型。我们发现用户正在从一种手动的编码流程,转向一种" }, { "i": 4, "speaker": "Speaker 1", "text": "更多地依赖智能体。这个过程在过去几个月里确实加快了。当我们最初设计这个模型时,目标是能够回答这些编码风格任务。因此,用户会提出一个问题,然后会发送给我们的模型。接着" }, { "i": 5, "speaker": "Speaker 1", "text": "用户会使用这些工具。因此这些工具可以读取文件、编辑文件、基于代码进行操作搜索、收集 LIM 的信息,并运行终端命令。智能体会在这些任务之间循环切换。" }, { "i": 6, "speaker": "Speaker 1", "text": "为了进行这些编辑,我们在过去几个月里已经看到一个重大变化是人们从单个代码修改转向完整的软件工程。并且,Composer 2 的目标是为这种环境构建一个编码智能体。" }, { "i": 7, "speaker": "Speaker 1", "text": "我们发现,对于一个典型的 Cursor 开发者来说,智能体会编写他们几乎 100% 的代码。他们会花时间做超出编码的事情,例如分解问题," }, { "i": 8, "speaker": "Speaker 1", "text": "审查成果,也许运行测试,并提供反馈。并且,人们期望你可以同时启动多个智能体。你不需要一直照看它们。你只需要期望它们能够完成任务。带着这个目标,我们开始" }, { "i": 9, "speaker": "Speaker 1", "text": "构建 Composer 2,有三个具体的子目标。我们希望智能体对代码有深入的了解。我们希望它能够完成困难任务。并且,我们希望它能够工作" }, { "i": 10, "speaker": "Speaker 1", "text": "好,对于人们正在考虑的现实任务类型。所以在本次演讲中,我将要讲述通过这些方面并讨论我们用来实现这些目标的一些机器学习技术" }, { "i": 11, "speaker": "Speaker 1", "text": "以一般聊天机器人般的知识来处理这些任务。因此,让我们从第一个目标开始,也就是Composer 2. 我们希望智能体对一般代码有深入的了解。我们希望它能够" }, { "i": 12, "speaker": "Speaker 1", "text": "运行复杂任务直至完成。因此,我们首先从一般聊天机器人般的知识开始知识。我们希望构建一个具有广泛代码知识的智能体。我们通过包含一个大规模的持续预训练阶段来实现这一目标。" }, { "i": 13, "speaker": "Speaker 1", "text": "这个额外阶段的目标是提升系统的核心知识,但不是以种类为单位对一般聊天机器人式知识的了解,而在特定类型的编码知识方面" }, { "i": 14, "speaker": "Speaker 1", "text": "做。为了促进这一过程,我们从一个强大的基础模型开始。因此我们使用了 Composer 2在决定使用哪种基础模型时,我们对几种不同的开源模型在多个不同基准测试中进行了测试。" }, { "i": 15, "speaker": "Speaker 1", "text": "其中一些会查看我们的内部代码,另一些则关注我们希望在最终模型中具备的其他特性。我们实际上发现很多开源模型在代码方面表现非常出色。" }, { "i": 16, "speaker": "Speaker 1", "text": "我们决定使用 Kimi 而不是其他模型,主要是基于基础设施因素,以及它适合我们已经开发的一些系统。当我们进行持续预训练时,我们会运行一个相对标准的流程,但我们会以非常大的规模进行。" }, { "i": 17, "speaker": "Speaker 1", "text": "所以我们将在许多词元上运行一种标准的短上下文预训练阶段。这里的目的是让模型更加了解我们在实际中希望使用的主题。" }, { "i": 18, "speaker": "Speaker 1", "text": "然后我们将运行一个长上下文扩展阶段,以提供256,000词元的更多数据。然后我们以最终的监督预训练结束。" }, { "i": 19, "speaker": "Speaker 1", "text": "然后我们运行最终的监督微调阶段,这看起来更像你在实际中可能会使用的智能体数据。在左侧,你可以看到我们的持续预训练图,它在预训练过程中具有你希望看到的良好结构,随着时间推移而下降。" }, { "i": 20, "speaker": "Speaker 1", "text": "一个问题是,这种持续预训练是否有必要来提升最终模型。我们发现,在实践中,它确实产生了良好的影响。为了测试这一点,我们考虑了三个不同的变量。" }, { "i": 21, "speaker": "Speaker 1", "text": "对于三种不同规模的预训练量,即小、中、大,这些最终都会得到不同的负对数似然值,我们在x轴上可以看到这些值。" }, { "i": 22, "speaker": "Speaker 1", "text": "我们发现,在运行完我们的标准强化学习阶段后,这三个不同的系统会得到不同的奖励。你始终要小心将预训练与最终模型联系起来,但如果你能负担得起运行这类实验,你就能看到其中的好处。" }, { "i": 23, "speaker": "Speaker 1", "text": "系统接下来且主要的阶段是长视野的强化学习。这旨在构建一个能够真正运行并完成非常困难任务的智能体模型。强化学习可以被看作尽可能贴近实际用户在Cursor中运行的查询。" }, { "i": 24, "speaker": "Speaker 1", "text": "会在Cursor中运行。此外,除了提升模型的智能水平,它还允许我们调整行为以使模型真正以最大化用户体验的方式良好运行智能体。为了运行强化学习,我们首先必须收集大量不同的问题" }, { "i": 25, "speaker": "Speaker 1", "text": "。我们所处理的问题,如左图所示,针对大量真实的现实世界编码问题。我们专注于功能迭代、代码调试和新增功能等方面。但我们也越来越包含看起来更像软件" }, { "i": 26, "speaker": "Speaker 1", "text": "开发过程中的任务,例如包含文档说明或进行迁移或各种管理不同项目结构。这些任务在难度上差异很大,其中一些问题很容易解决,而另一些则几乎不可能解决。" }, { "i": 27, "speaker": "Speaker 1", "text": "事实上,找到足够有挑战性的任务来真正考验模型并推动其进步,正变得越来越困难。在我们实际运行强化学习之前,我们会运行一个叫做自动安装的流程。自动安装是" }, { "i": 28, "speaker": "Speaker 1", "text": "这个系统我最喜欢的部分之一,因为它展示了如何通过开发模型来提升未来模型自身的不同版本。因此为了运行自动安装,我们使用我们之前的模型,Composer 1.0," }, { "i": 29, "speaker": "Speaker 1", "text": "1.5. 它分两个阶段运行。第一阶段,它会探索一个仓库并阅读文档。然后它会生成十个安装命令,它认为模型应该能够运行为了使其处于良好状态,它会编写一些测试来检查这些是否" }, { "i": 30, "speaker": "Speaker 1", "text": "可验证。在第二阶段,Composer 被分配了安装环境的任务。它将运行,我也不知道,UV的设置。它将运行所有它可能需要的不同命令。它甚至会采取更极端的措施。它会尝试" }, { "i": 31, "speaker": "Speaker 1", "text": "确保测试通过。它会模拟各种依赖项。它会安装其他可能在第一次尝试时未成功运行的包。如果它能通过第一阶段的验证,我们认为环境已准备就绪,并为RL训练做好准备。" }, { "i": 32, "speaker": "Speaker 1", "text": "在RL期间,我们运行一个相对简单但有效的流程。RL的工作方式是,你从上一步设置的问题之一开始。然后你运行几次" }, { "i": 33, "speaker": "Speaker 1", "text": "不同的 rollout。因此,每个 rollout 都包含环境的模拟版本。智能体被赋予了与在Cursor中相同的任务。并且它试图解决这个问题。" }, { "i": 34, "speaker": "Speaker 1", "text": "但要做到这一点,基础设施的挑战是巨大的。这些代理式 rollout 可以达到 200,000词元,并且可以调用数百个工具。我们还将为每一个" }, { "i": 35, "speaker": "Speaker 1", "text": "需要解决的问题准备很多这样的 rollout。这个RL过程的结果是,一些 rollout 的表现优于其他 rollout。其中一些解决了我们感兴趣的问题,而另一些则失败。" }, { "i": 36, "speaker": "Speaker 1", "text": "我们基本上会找到那些好的 rollout,并更新模型使其更接近它们。同时找到那些不好的 rollout,并远离它们进行更新。" }, { "i": 37, "speaker": "Speaker 1", "text": "除了尝试寻找在我们的基准测试中得分较高的 rollout 之外,我们还将考虑我们希望模型具备的行为特性。我们在开发能够帮助" }, { "i": 38, "speaker": "Speaker 1", "text": "塑造智能体行为并提供良好用户体验的奖励机制上投入了大量努力。其中最有趣的一个方面是尝试找出智能体希望扮演的角色。我们还将决定希望模型实际使用多少个词元。" }, { "i": 39, "speaker": "Speaker 1", "text": "我们探索了多种不同的惩罚机制,以惩罚词元模型过于健谈或不够健谈的情况。我们最终确定了一个非线性长度惩罚机制,如底部左侧所示。我们的想法是通过惩罚短序列来尝试让模型更加高效。" }, { "i": 40, "speaker": "Speaker 1", "text": "我们最终决定采用一种非线性的长度惩罚,如底部左侧所示。我们的想法是惩罚较短的序列,以尝试使其更加高效。如果问题比较简单,我们希望Composer 2能够高效地解决它并继续前进。" }, { "i": 41, "speaker": "Speaker 1", "text": "然而,如果问题非常具有挑战性,我们希望Composer能够花费更多的时间在上面尝试找到正确的答案。因此,在边际意义上,随着思考过程的延长,惩罚会逐渐降低。" }, { "i": 42, "speaker": "Speaker 1", "text": "此外,为了鼓励模型能够解决非常长的问题,我们开发了一个名为自我总结的系统。所以自我总结的工作方式是,模型被允许突破其长度限制。限制。" }, { "i": 43, "speaker": "Speaker 1", "text": "因此在这个例子中,左边的第一个例子可能运行时间比比如说200,000个词元更长。然后它会触发一个触发点。我们要求模型总结到目前为止所做的事情。" }, { "i": 44, "speaker": "Speaker 1", "text": "这个总结随后会被提供给下一步的智能体。它再次运行,可能再次触发总结,然后继续进行。因此,这个过程的好处是在RL期间,我们可以将这三个步骤都视为通向相同最终奖励的步骤。" }, { "i": 45, "speaker": "Speaker 1", "text": "这使我们能够训练模型在无限长度下有效工作,同时在 rollout 的每个部分实际使用的长度上进行一定程度的限制。我们发现这是一种让模型处理非常困难问题的有效方法。" }, { "i": 46, "speaker": "Speaker 1", "text": "所以这就是本次会议的结束。谢谢。非常感谢。非常感谢我的同事们在这里的中心非常感谢我的同事们都来自Center模型在多样性等属性的退化或多次调用时表现良好方面" }, { "i": 47, "speaker": "Speaker 1", "text": "模型多次调用时的表现。然而,在实践中,我们并未在我们的方法中观察到这种情况,即如果我们考虑最佳的16次表现,它也随着时间推移而提升。这表明该" }, { "i": 48, "speaker": "Speaker 1", "text": "模型并未过于聚焦于某一特定解决方案最后,我们的目标不仅仅是提升一些随机基准。我们希望在人们每天使用的Composer进行现实任务中表现良好" }, { "i": 49, "speaker": "Speaker 1", "text": "为此,我们构建了自己的内部评估体系,用于驱动现实编码任务的性能。这里的目的是拥有更接近软件工程师实际操作的查询和目标解决方案" }, { "i": 50, "speaker": "Speaker 1", "text": "要生成的查询和目标导向的解决方案看起来更接近软件工程师日常使用Composer处理的内容工程师们实际所做的工作。" }, { "i": 51, "speaker": "Speaker 1", "text": "为此,我们一直在开发一个名为Cursor Bench的基准测试。这是第三次迭代of the Cursor Bench 项目。我们实际上拥有很多解决方案," }, { "i": 52, "speaker": "Speaker 1", "text": "包含在 Cursor Bench 中,并且随着时间推移,它们变得越来越长也越来越难。因此这张图表左边显示的是平均修改的代码行数和修改的文件数量" }, { "i": 53, "speaker": "Speaker 1", "text": "对我们的基准中的每个示例进行评估。这个基准的目标是保持不受污染。我们不希望它被轻易在网络上找到。我们希望涵盖一系列不同的使用场景。并且我们希望测试的不仅仅是你是否通过了测试。" }, { "i": 54, "speaker": "Speaker 1", "text": "为了做到这一点,我们实际上使用了来自Cursor软件工程师的代码。因此是来自真实查询的实际问题,开发者们实际提出的问题。所以CursorBench具有一些有趣的特性," }, { "i": 55, "speaker": "Speaker 1", "text": "尤其是在与一些著名的公开基准进行比较时。其中一个特点是它使用了更长的代码差异。所以它不仅仅是在尝试进行几行代码的修改,但实际上,正如我之前提到的,是在多个文件中进行数百行的修改。" }, { "i": 56, "speaker": "Speaker 1", "text": "更有趣的是,这张右边的图表显示,平均问题描述长度,也就是我们提出问题的内容,我们让智能体执行的任务,实际上比其他基准要短得多。乍一看,这似乎是一个负面因素," }, { "i": 57, "speaker": "Speaker 1", "text": "因为问题的描述要模糊得多。但我们将这视为一个积极的方面。这看起来更接近智能体实际上需要解决的问题实践。因此,解决歧义或猜测用户意图实际上是一个核心部分" }, { "i": 58, "speaker": "Speaker 1", "text": "我们让智能体执行的任务。所以这就是这种情形的一个例子。通常会向模型提出一些非常困难的问题,并期望它能够自行解决。但我们在很多公开基准测试中并没有看到这种结构混乱的问题。" }, { "i": 59, "speaker": "Speaker 1", "text": "所以 CursorBench 的一个好处是它在某些其他基准测试中表现得更好将模型分开。因此我们能看到模型之间存在更广泛的差异,这些模型我们都知道是非常优秀的。" }, { "i": 60, "speaker": "Speaker 1", "text": "比如 Opus 4.6,以及我们认为表现较差或可能来自上一代的模型,比如 Sonnet 4.5。出于某种原因,这些模型在 CursorBench 上得分都非常高," }, { "i": 61, "speaker": "Speaker 1", "text": "但這可能只是因為他們針對這種類型的問題進行了針對性設計在过去的几年里表现得非常好。最终,我们可以使用像CursorBench这样的工具来了解模型的表现如何" }, { "i": 62, "speaker": "Speaker 1", "text": "模型的表现。因此我们可以看到从Composer 1.5到Composer 2的改进。我们也可以" }, { "i": 63, "speaker": "Speaker 1", "text": "将模型从CursorBench绘制到CursorBench。我们也可以将模型从CursorBenchGPT 5.4,实际上它们在回答问题方面的表现差异相当明显" }, { "i": 64, "speaker": "Speaker 1", "text": "取决于它们使用的词元数量。因此在这张图中,我们可以看到模型的中等、高和超高版本随着使用更多词元,模型也在这些基准测试中有所提升。不错。所以这就是我们大致在构建的内容。" }, { "i": 65, "speaker": "Speaker 1", "text": "Composer 2 几个月前发布了,我们现在正在发布过程中Composer 2.5 也即将发布我原本希望今天能和大家谈谈它,但它将在不久的将来发布" }, { "i": 66, "speaker": "Speaker 1", "text": "我们也在构建能够扩展到更大训练集群的模型因此我们正在使用 SpaceX 的集群来训练 Composer 3 及其后续版本所以代码模型表现非常出色" }, { "i": 67, "speaker": "Speaker 1", "text": "我认为我们都日常使用它们我们也看到了它们令人印象深刻的能力但我们认为还有更多可以做到。所以更大的预训练和更好的RL将继续提升性能。我可以给你一个Composer 2.5的简要预览。" }, { "i": 68, "speaker": "Speaker 1", "text": "所以这个模型即将推出,其终端基准得分也会更强,同时其他类似的基准。而这确实来自于对这个强化学习过程的不断优化,对这个持续预训练过程,并且正在我们的评估中朝着正确方向努力。" }, { "i": 69, "speaker": "Speaker 1", "text": "所以非常感谢大家的收听。而且我很乐意回答大家可能有的任何问题。" }, { "i": 70, "speaker": "Speaker 2", "text": "是的,我们有很多问题。而且谢谢,Sasha。我想第一个问题是来自Lonnie的,我们是否发现Composer在某些语言和框架上表现得更好?" }, { "i": 71, "speaker": "Speaker 1", "text": "这是一个非常好的问题。所以有几个原因可能导致这种情况。一个是某些语言在通用数据中表示得更多。所以像Python和TypeScript这样的语言非常常见,基本上被这些模型所广泛看到" }, { "i": 72, "speaker": "Speaker 1", "text": "程度更高。还有另一个问题是哪些语言可以在RL框架中被良好模拟。例如使用网页开发或较为简单的后端语言,对于RL来说是非常理想的因为我们可以模拟这些语言并获得良好的奖励。" }, { "i": 73, "speaker": "Speaker 1", "text": "但这些语言在我们的框架中仍然表现相对较好。" }, { "i": 74, "speaker": "Speaker 2", "text": "来自Andrew的一个一般性问题,他想知道当模型从从 Composer 1 到 Composer 2,是什么导致了这种跃升?这是否是原始大模型拥有更多访问权限" }, { "i": 75, "speaker": "Speaker 2", "text": "到更多互联网数据?我们是不是给了它更多数据?我们是否在改变训练方式?什么导致了这种能力的飞跃?" }, { "i": 76, "speaker": "Speaker 1", "text": "是的,我认为在能力提升方面有很多进展是在优化训练流程。所以我们会看到从 Composer 2 到 Composer 2.5,我们实际上并没有做太多改变" }, { "i": 77, "speaker": "Speaker 1", "text": "关于基础系统本身,但我们现在能够提供更干净的奖励。我们能够细化细节并优化数据组合。并且我们能够大致在用户体验方面取得平衡以更智能的方式进行。" }, { "i": 78, "speaker": "Speaker 1", "text": "这基本上就是我们所做工作的大部分内容以及在Cursor上投入的计算资源。" }, { "i": 79, "speaker": "Speaker 2", "text": "然后看到一些关于摘要的问题它是否使用当前版本的Composer模型来进行自我摘要?我们是否看到这影响了缓存率使得更长的时域任务变得更昂贵?" }, { "i": 80, "speaker": "Speaker 1", "text": "是的,这是一个非常好的问题。所以是的,我们称之为自我总结因为它实际上使用的是我们训练它的同一个模型。所以智能体执行每一个任务它触发了这个机制" }, { "i": 81, "speaker": "Speaker 1", "text": "然后我们基本上就在这里插入这个小小的总结提示语,它说根据你到目前为止所做的事如果你想继续下去的话你如何总结到目前为止发生的事情?然后这个总结就直接被放回模型中" }, { "i": 82, "speaker": "Speaker 1", "text": "本身。所以你能够做到这一点真的很棒。某种意义上说,这是缓存的最佳用法,因为这个总结实际上在你进行过程中使用的是相同的缓存。现在你说得对,当你进入这个阶段时" }, { "i": 83, "speaker": "Speaker 1", "text": "你基本上是在运行更多的词元,你正在构建一个新的,一个新的缓存来配合使用。因此,你可能还可以使用一些其他技巧来让这个过程更高效一些。" }, { "i": 84, "speaker": "Speaker 2", "text": "那么,数据管道方面投入了多少努力以及清理我们现有的数据,与编写软件来实际训练模型并评估模型?" }, { "i": 85, "speaker": "Speaker 1", "text": "是的,这是一个非常好的问题。我认为在构建大规模系统方面,一切都很具有挑战性RL 是具有挑战性的。我们这里有一个相对较小的团队。大约有40人参与" }, { "i": 86, "speaker": "Speaker 1", "text": "在 Composer 2 的开发中。大约一半是研究人员,一半是工程师。我认为数据和奖励机制占据了很大一部分。但事实上,这里有很多事情都很具有挑战性。" }, { "i": 87, "speaker": "Speaker 1", "text": "运行良好的、能稳定执行的评估测试是一个有趣的问题。构建底层内核和训练系统本身就是一个独立的挑战。然后是协调整个流水线比如如何构建分布式系统来运行所有这些任务," }, { "i": 88, "speaker": "Speaker 1", "text": "来构建所有这些任务,来构建所有这些任务,同时运行所有这些发布版本并且使其高效也是种巨大的挑战要协同工作。" }, { "i": 89, "speaker": "Speaker 2", "text": "然后我看到观众中有许多学生他们非常好奇,如果你有访问权限 GPU要如何学习这门技术,并且,你对学生想从事这方面工作有什么建议它涵盖了大型语言模型的所有细节," }, { "i": 90, "speaker": "Speaker 1", "text": "是的,在我之前在 Cursor 工作之前,我曾是一名教授。所以我以前曾实际教授过这些内容。有很多种不同的方法可以做到这一点。有很多种不同的方法可以做到这一点。" }, { "i": 91, "speaker": "Speaker 1", "text": "这方面有很多很棒的资源。我建议的一件事是,Stanford有一个很棒的课程讲解了大型语言模型的诸多细节,它们的工作原理、效率以及应使用哪些数据" }, { "i": 92, "speaker": "Speaker 1", "text": "等等这些内容。我认为这是一个非常好的资源。我认为所有的视频都可以在线观看。我个人也有一些资源,如果你感兴趣的话。我有一系列类似谜题的资料关于学习这类知识,可能会对你有帮助。" }, { "i": 93, "speaker": "Speaker 1", "text": "但当你拥有的工作非常少时,你将拥有大量时间。弄清楚它是如何运作的是有价值的。" }, { "i": 94, "speaker": "Speaker 2", "text": "然后我想关于这个Cursor还有一些问题,考虑使用不同的思维方式模式或思考努力模式。我知道其他一些实验室有高、中、低等不同等级。" }, { "i": 95, "speaker": "Speaker 1", "text": "哦,对。不,这是我们考虑过的事情。我认为可以将这些方式很好地融入系统中。正如我之前提到的,你可以在 RL 中强制执行某些属性,并拥有模型在某些能力下表现更好或更差。" }, { "i": 96, "speaker": "Speaker 1", "text": "我认为从产品角度来看,我们觉得它有点复杂,因此我们已经专注于单一版本。但我想未来我们可能会添加这一功能。" }, { "i": 97, "speaker": "Speaker 2", "text": "然后看到一些关于整体团队结构和我们如何做事,谁负责智能体的 harness 是什么?这是由产品团队还是研究团队驱动的?而且系统提示也类似。" }, { "i": 98, "speaker": "Speaker 1", "text": "是的,这也是一个非常好的问题。Cursor 是一家非常有趣的公司,因为我们正在开发一个全球性的 harness在所有模型中均有应用。" }, { "i": 99, "speaker": "Speaker 1", "text": "所以我们有一个完全独立的团队负责 harness 设计和工具使用以及类似的事情,因为这是我们的产品的一部分。某种意义上说,这正是我们的产品。" }, { "i": 100, "speaker": "Speaker 1", "text": "我们希望与Opus配合得非常好,与GPT模型配合得也非常出色。事实上,根据最近的人工分析评估,我们已经能够" }, { "i": 101, "speaker": "Speaker 1", "text": "看到在编码任务中表现最好的模型,比如Cursor、Harness以及其它智能体。这说明Harness的重要性非常关键。不过,也存在很多讨论,比如我们是否想要改变这一点?" }, { "i": 102, "speaker": "Speaker 1", "text": "这会如何影响训练?我们该如何训练某些内容或不训练?幸运的是,我认为目前情况已经稳定,模型表现也足够好,以至于这种情况下很难搞砸。但这是一个有趣的来回讨论。" }, { "i": 103, "speaker": "Speaker 2", "text": "太棒了。而且我知道我们已经没时间了,我看到聊天里有很多精彩的问题。但我想以为什么是Composer被命名为Composer结束?" }, { "i": 104, "speaker": "Speaker 1", "text": "哦,对了。我认为Cursor最初有一个名为Composer的智能体产品。然后在某个时候,‘智能体’这个词在全球范围内流行起来。因此,我们将那个产品名称改为了‘智能体’。" }, { "i": 105, "speaker": "Speaker 1", "text": "但我想在座的大家基本上都喜欢这个名字。我们希望保留这个名字。因此,我觉得我们决定借用这个名字作为模型本身的名称。本身。我认为这个名字真的很棒。" }, { "i": 106, "speaker": "Speaker 2", "text": "我觉得我们可以把它看作是一个交响乐团。你基本上是在指挥一群智能体协同工作的交响乐。嗯,感谢大家参加。感谢Sasha的精彩演示。之后我们会发送录制的视频。" }, { "i": 107, "speaker": "Speaker 2", "text": "祝大家一切顺利。" } ]