【译】Visual Studio Copilot 中更智能的人工智能编辑

当我们最初着手在 Visual Studio Copilot 中实现更智能的 AI 编辑功能时,我们就知道自己在应对一个极其复杂的问题。这不仅仅是生成出色的建议,还关乎弄清楚如何将这些建议无缝应用到你的代码中。虽然乍一看这个想法似乎很简单,但实际情况却绝非如此。

实现人工智能生成编辑的复杂性

让我们回顾一下我们早期的尝试。Copilot 可能会给你一个很棒的建议 ------ 一种新方法、一次有用的重构,甚至可能是一个修正后的逻辑块。但真正的挑战在于,当我们试图将这些更改插入现有文件而不破坏任何内容时。编辑应该放在哪里?如果文件在建议生成之后又进行了更新,会发生什么情况?如果模型的输出无意中引入冲突、与现有代码重叠,甚至遗漏了一个必需的括号,又会怎样呢?这些问题使得这个过程变得棘手,而由此产生的红色波浪线也让人难以信任人工智能的建议。

在早期,我们以尽可能直接的方式来处理这个问题:暴力破解。我们使用启发式方法和基于规则的技术,如字符串匹配和模式识别,来确定编辑可能适用的位置。这方法......有点效果。但结果往往不一致,尤其是对于跨多行的复杂编辑。随着 Copilot 的功能扩展到支持更多语言和场景,维护这些规则变得像追逐移动的目标 ------ 总是在变化,而且越来越难以管理。成功率徘徊在 50% 左右,远非理想状态。事后看来,越来越明显的是,我们无法用静态规则跟上不断演进的模型。

更优模型邂逅更智能的技术

随着人工智能技术的进步,我们看到了一个以全新视角重新审视这个问题的机会。人工智能领域的两项重大进展使我们能够重新思考如何在 Visual Studio Copilot 中实现更智能的编辑:具有更大上下文窗口的现代模型,以及一种名为推测解码的开创性技术。

推测解码成为加速人工智能辅助编辑的变革性技术。它的工作原理是将一个快速模型与一个更复杂的模型配对。快速模型提前为编辑生成 token 预测,而更智能的模型仅在需要完善或验证这些预测时介入。这种协作将平均 token 生成速度提高了2到3倍,并使利用模型实施生成的编辑成为可能,这在将更改整合到文件中时显著提高了准确性。

通过使用推测解码,我们采用了基于模型的方法来应用编辑,这种方法能够填补先前方法无法触及的空白。我们没有依赖规则集,而是使用了一个人工智能模型来模拟你的文件的 "理想" 版本,其中所选建议无缝整合。然后,一个智能差异算法将这个理想版本与你的实际文件进行比较,以查明并精确映射编辑内容。这使得整个过程能够比以往任何时候都更智能地处理边缘情况,如重叠代码或缺失语法。

平衡准确性与速度

虽然推测解码极大地提高了性能,但应用人工智能编辑仍伴随着一种自然的权衡:使用模型会引入延迟。此前,所有字符串计算都是在本地完成的,这意味着编辑几乎瞬间就能出现。现在,每次编辑都涉及网络调用和 token 生成 ------ 这是一个作为 token 流逐步展开的过程,而不是作为单个即时响应。

为了让用户觉得这种体验有意义,我们在编辑器中实现了流式动画。当检测到 token 流上的编辑时,用户会看到他们的文档逐行实时更新。这种动画有两个目的:展示进度,并让用户清楚了解更改是如何应用的。虽然这种方法牺牲了之前的速度以换取更高的准确性,但反馈表明,用户更看重精确性而非原始速度,尤其是在保持代码质量和减少混乱方面。

展望未来

这项工作为 Visual Studio Copilot 中的"Agent Mode"奠定了基础。该功能使人工智能不仅能提出改进建议,还能积极协助执行这些建议。为使智能体模式有效运行,所需的编辑必须精确、流畅且可靠,以便智能体能够构建、调试和测试代码。推测解码在平衡速度与准确性方面已取得重大进展,但我们不会就此止步。

我们的推测解码技术即将迎来更快的实现方式。这个更新版本将利用在 token 生成和模型配对方面的进展,在保持用户所期望的准确性的同时,进一步降低延迟。早期测试显示,与最初推出的版本相比,有望实现2至4倍的速度提升,朝着精准与近乎即时响应时间相结合的理想体验又迈进了一步。

原文链接:https://devblogs.microsoft.com/visualstudio/smarter-ai-edits-in-visual-studio-copilot/