当我们最初着手在 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/

【译】Visual Studio Copilot 中更智能的人工智能编辑的更多相关文章

  1. 【广州.NET社区推荐】【译】Visual Studio 2019 中 WPF & UWP 的 XAML 开发工具新特性

    原文 | Dmitry 翻译 | 郑子铭 自Visual Studio 2019推出以来,我们为使用WPF或UWP桌面应用程序的XAML开发人员发布了许多新功能.在本周的 Visual Studio ...

  2. 【译】Visual Studio 2019 中 WPF & UWP 的 XAML 开发工具新特性

    原文 | Dmitry 翻译 | 郑子铭 自Visual Studio 2019推出以来,我们为使用WPF或UWP桌面应用程序的XAML开发人员发布了许多新功能.在本周的 Visual Studio ...

  3. Visual studio 2017中 Javascript对于Xrm对象模型没有智能提示的解决办法

    Visual studio 2017中 Javascript对于Xrm对象模型没有智能提示的解决办法 先上个图.语法提示支持到 Microsoft Dynamics xRM API 8.2 也就是cr ...

  4. Visual studio 2017 中的Javascript智能提示与调试

    1.智能提示 对于JS文件中的API,你若需要让那个JS文件中的方法能够在你写的那个JS文件中能够智能显示的话,直接把它拉进你的JS文件中就好了. 举个例子:你想 在你正在写的a.js文件中引用b.j ...

  5. ASP.NET 5系列教程 (五):在Visual Studio 2015中使用Grunt、Bower开发Web程序

    基于Visual Studio 2015,你可以: 方便的管理前端包,如jQuery, Bootstrap, 或Angular. 自动运行任务,如LESS.JavaScript压缩.JSLint.Ja ...

  6. Visual Studio Code中配置GO开发环境

    在Visual Studio Code中配置GO开发环境 一.GO语言安装 详情查看:GO语言下载.安装.配置 二.GoLang插件介绍 对于Visual Studio Code开发工具,有一款优秀的 ...

  7. Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用

    Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用 Grunt和Gulp是Javascript世界里的用来做自动压缩.Typescript编译.代码质量lint工具.cs ...

  8. ASP.NET5之客户端开发:Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用

    Grunt和Gulp是Javascript世界里的用来做自动压缩.Typescript编译.代码质量lint工具.css预处理器的构建工具,它帮助开发者处理客户端开发中的一些烦操重复性的工作.Grun ...

  9. 如何在Visual Studio 2012中发布Web应用程序时自动混淆Javascript

    同Java..NET实现的应用程序类似,Javascript编写的应用程序也面临一个同样的问题:源代码的保护.尽管对大多数Javascript应用公开源代码不算是很严重的问题,但是对于某些开发者来说, ...

  10. 在Visual Studio 2012中使用VMSDK开发领域特定语言(二)

    本文为<在Visual Studio 2012中使用VMSDK开发领域特定语言>专题文章的第二部分,在这部分内容中,将以实际应用为例,介绍开发DSL的主要步骤,包括设计.定制.调试.发布以 ...

随机推荐

  1. 2、Java语言基础知识

    数据类型及范围 四种:整型(byte,short,int,long).浮点型(float,double).字符型(char).布尔型(true,false) 类型 byte short int lon ...

  2. MySQL5.7小白安装教程(提供安装包)

    下载地址:https://dev.mysql.com/downloads/installer/ (如果网络不稳定下不下来,别急,我已经为你们下好了.到我公众号[勾玉技术]回复[mysql5.7]获取百 ...

  3. 记录一下 nas 当本地网络存储,玩大型游戏再也不用担心硬盘不够用了

    最近由于家里的PC 在玩steam的游戏,原来1T的固态,安装了几个大型的3A游戏,一个黑神话悟空就用了200多G,硬盘就不够用了 查看了京东的2T的固态,还是很贵,要大几百块钱.去年配了一台极空间的 ...

  4. docker | Ubuntu16.04安装与卸载docker

    安装docker sudo apt-get install docker-ce docker-ce-cli containerd.io 卸载docker apt-get purge卸载命令需要逐条执行 ...

  5. FFmpeg开发笔记(六十六)Windows给FFmpeg集成LC3音频的编码器liblc3

    <FFmpeg开发实战:从零基础到短视频上线>一书的第五章介绍了FFmpeg如何处理常见的MP3音频和AAC音频,其中MP3格式常用于音乐文件,而AAC格式常用于视频文件. 除此以外,近年 ...

  6. Centos设置Redis自启动(Systemd)

    前言 在生产环境中,我们在设置Redis服务自启动时有多种方式,这里采用Systemd管理方式进行设置Redis, Systemd管理起centos7版本中使用了systemd,systemd同时兼容 ...

  7. MySQL核心知识学习之路(1)

    作为一个后端工程师,想必没有人没用过数据库,跟我一起复习一下MySQL吧,本文是我学习<MySQL实战45讲>的总结笔记的第一篇,总结了MySQL的基础架构.一个查询语句的执行过程 以及 ...

  8. XML文件头命名空间——Spring

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  9. 你应该懂得AI大模型(十二)之 QLoRA

    一.显存和算力 1. 基本概念 显存 (Memory) 定义:GPU 用于临时存储数据的高速内存,类似于计算机的 RAM. 作用: 存储模型权重.中间激活值.梯度和优化器状态. 数据在显存与 GPU ...

  10. C# HttpListener 的使用方法

    关于监听回调两次的原因,可能是因为重新监听导致的,所以查到微软上面的解析是说 BeginGetContext方法开始异步 (非阻塞) 调用以接收传入的客户端请求. 在调用此方法之前,必须调用 Star ...