augment code的分享
引言
AI驱动的编码工具同时面临三个难题:AI研究的卓越性、直观的用户体验和产品设计,以及强大的系统工程。当其中任何一个环节出现问题,整个体验就会崩溃。
这正是我们在开发Next Edit时面临的挑战。Next Edit是我们的一项功能,它能够预测代码库中某一部分的更改如何影响整个代码库,并建议接下来需要更新的内容。
当Next Edit的早期测试显示我们的UI方法和模型行为未能达到标准时,我们面临着一个艰难的决定:分叉VS Code以"掌控"编辑器,还是暂停并重新构想整个体验。
我们为专业的软件工程师构建工具------这些人对自己的工具感到无比自豪,我们也是如此。做好这件事不仅仅是为了发布一个功能,更是为了打造一个值得成为开发者日常工作流程一部分的体验。
最终,我们决定暂停并努力使VS Code API适应Next Edit的需求。在这个过程中,我们学到了很多关于如何让AI编码体验恰到好处的经验。
什么是Next Edit?
Next Edit通过理解更改在整个工作区中的连锁反应,建议光标之外的代码更改。
例如,当您向数据类添加一个新的session_id
字段时,Next Edit会自动识别所有需要更新的地方------直接使用、SQL查询、相关类和测试------使您的代码保持同步,而无需手动查找。
我们通过研究三个核心AI挑战开始了Next Edit的开发:
- 弄清楚用户试图完成的任务
- 确定在代码库中何处进行这些更改
- 准确高效地执行这些更改
我们发现,与简单地使用单一的商业化基础模型相比,采用三模型方法能带来更高的准确性:
- 位置模型:观察您的编辑历史,预测您可能进行下一次编辑的位置(无论是在同一文件中还是在更广泛的代码库中)。
- 生成模型:一旦确定了位置并理解了意图,建议实际的代码更改。
- 描述模型:为建议的代码更改提供简短的描述,帮助用户快速理解更改。
我们的第一次尝试:悬停提示
最初,我们通过基于悬停的UI显示Next Edit的建议。虽然内部测试表明这种方法有潜力,但我们需要真实的用户反馈来确认它是否真正让用户满意------或者是否过于侵入。
波浪式发布
我们没有进行大规模发布,而是采用了"波浪"式发布,首先从Wave-1用户组开始。这种方法借鉴了大规模分布式系统中的金丝雀部署,让我们能够在最小化用户干扰的情况下,逐步将Next Edit暴露在真实环境中。
我们发现的问题:两极分化的用户体验和过于急切的模型
反馈非常直接。首先,基于悬停的方法引起了极大的分歧。我们发现了四个不同的用户群体:
- "高级用户"群体喜欢这个功能,并对其潜力感到非常兴奋。
- 另一组用户对用户体验感到非常沮丧,以至于他们关闭了Next Edit("不满意的用户")。
- 中间群体不理解如何充分利用该功能("中间派")。
- 一些用户尽管对用户体验不满意,但因为其带来的价值而喜欢它。
另一个令人担忧的问题是我们AI模型的行为。在早期试验中,我们的生成模型过于急切,生成了并不总是相关的建议。它过于草率,用低质量的建议打断了开发者的工作,而这些建议并不值得被打断。
我们感到反馈是分裂的:一些用户非常喜欢这个产品,并对其充满热情,而另一些用户则干脆关闭了该功能。
我们面临一个问题:我们应该发布Next Edit,假设并非每个功能都适合所有人吗?还是应该重新开始?最终,决定归结为为用户提供价值。我们坚信Next Edit为进行重大重构的软件工程师提供了很高的价值,我们不希望他们错过。于是,我们决定重新开始。
我们如何修复用户体验和模型质量问题
优化模型
我们的第一步是修复模型表现出的急切和草率。然而,当研究团队训练模型减少打断时,我们发现钟摆摆向了另一个极端。模型变得懒惰,让希望获得更频繁建议的高级用户感到沮丧。它没有足够频繁地提出建议,即使是在它本可以提供真正价值的情况下。
通过迭代调整和更好的数据质量,我们找到了一个平衡点------改进我们的训练集,以平衡模型的急切性和准确性。我们退后一步,投资于更高质量的训练数据,这些数据更好地代表了开发者实际重视的重构机会。
最终,我们找到了一种平衡的方法,生成了用户真正满意的建议------既不过于激进,也不过于保守,而是恰到好处地增强专业开发者的工作流程。
重新设计用户体验
对于UI挑战,我们重置了我们的方法,探索了不同的方式来展示建议,这些方式不会打断编码流程,但仍然易于发现和操作。
在这个过程中,分叉VS Code的问题反复出现。我们曾试图通过分叉来解决UI问题,但我们坚持了不进行分叉的立场,因为我们坚信这对用户不利。这一限制迫使我们在VS Code的原生功能中更具创造力。例如,团队将API推到了极限,并开发了在编辑器中渲染内联差异的方法。
重新发布后的用户反馈
对于Next Edit,我们关注两个维度的成功:可发现性和参与度。鉴于Next Edit是"在开发者流程中"的,我们从Wave 1用户那里获得了反馈,并有意弱化了可发现性,转而强调微妙性,更喜欢一个不会打断用户工作流程的界面。

结果不言自明:一旦开发者发现了Next Edit,我们的数据显示了高参与率,这强烈表明了该功能的价值。用户不仅仅尝试了一次------他们将其融入了日常工作中。
早期反馈非常积极------一些用户甚至从竞争工具切换过来,只为使用Next Edit。
团队结构如何促成了我们的成功
这种关键的重设计之所以可能,是因为我们的跨职能团队结构。Next Edit是由一个紧密团结的团队构建的,其中包括:
- AI研究人员:微调和后训练模型,以适应真实的编码环境。
- UX和设计工程师:在VS Code的约束下塑造产品的外观和感觉。
- UI和后端工程师:将AI建议无缝集成到IDE中,并拥有强大且高性能的后端。
所有这些角色都在一个团队中,确保了用户体验和模型开发共同进化------而不是在最后才拼凑在一起。当我们遇到问题时,我们可以快速跨学科协调,制定整体解决方案。
这种跨职能合作对于共同设计AI和界面至关重要,尤其是在重构等复杂任务中。
下一步
我们当前的任务很明确:如何通过AI为专业软件工程师提供价值,消除繁琐工作,并使团队更快乐、更高效?我们正在为那些对自己的技艺深感自豪的开发者构建一个强大的工具,而这仅仅是个开始。对于那些密切关注Augment的人来说,当我们准备发布我们的IDE代理时,您将看到Next Edit的教训在我们处理用户反馈、设计以及集成到开发者日常工作流程中的方法中得到体现。