【译】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/

【译】Visual Studio Copilot 中更智能的人工智能编辑的更多相关文章
- 【广州.NET社区推荐】【译】Visual Studio 2019 中 WPF & UWP 的 XAML 开发工具新特性
原文 | Dmitry 翻译 | 郑子铭 自Visual Studio 2019推出以来,我们为使用WPF或UWP桌面应用程序的XAML开发人员发布了许多新功能.在本周的 Visual Studio ...
- 【译】Visual Studio 2019 中 WPF & UWP 的 XAML 开发工具新特性
原文 | Dmitry 翻译 | 郑子铭 自Visual Studio 2019推出以来,我们为使用WPF或UWP桌面应用程序的XAML开发人员发布了许多新功能.在本周的 Visual Studio ...
- Visual studio 2017中 Javascript对于Xrm对象模型没有智能提示的解决办法
Visual studio 2017中 Javascript对于Xrm对象模型没有智能提示的解决办法 先上个图.语法提示支持到 Microsoft Dynamics xRM API 8.2 也就是cr ...
- Visual studio 2017 中的Javascript智能提示与调试
1.智能提示 对于JS文件中的API,你若需要让那个JS文件中的方法能够在你写的那个JS文件中能够智能显示的话,直接把它拉进你的JS文件中就好了. 举个例子:你想 在你正在写的a.js文件中引用b.j ...
- ASP.NET 5系列教程 (五):在Visual Studio 2015中使用Grunt、Bower开发Web程序
基于Visual Studio 2015,你可以: 方便的管理前端包,如jQuery, Bootstrap, 或Angular. 自动运行任务,如LESS.JavaScript压缩.JSLint.Ja ...
- Visual Studio Code中配置GO开发环境
在Visual Studio Code中配置GO开发环境 一.GO语言安装 详情查看:GO语言下载.安装.配置 二.GoLang插件介绍 对于Visual Studio Code开发工具,有一款优秀的 ...
- Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用
Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用 Grunt和Gulp是Javascript世界里的用来做自动压缩.Typescript编译.代码质量lint工具.cs ...
- ASP.NET5之客户端开发:Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用
Grunt和Gulp是Javascript世界里的用来做自动压缩.Typescript编译.代码质量lint工具.css预处理器的构建工具,它帮助开发者处理客户端开发中的一些烦操重复性的工作.Grun ...
- 如何在Visual Studio 2012中发布Web应用程序时自动混淆Javascript
同Java..NET实现的应用程序类似,Javascript编写的应用程序也面临一个同样的问题:源代码的保护.尽管对大多数Javascript应用公开源代码不算是很严重的问题,但是对于某些开发者来说, ...
- 在Visual Studio 2012中使用VMSDK开发领域特定语言(二)
本文为<在Visual Studio 2012中使用VMSDK开发领域特定语言>专题文章的第二部分,在这部分内容中,将以实际应用为例,介绍开发DSL的主要步骤,包括设计.定制.调试.发布以 ...
随机推荐
- 2、Java语言基础知识
数据类型及范围 四种:整型(byte,short,int,long).浮点型(float,double).字符型(char).布尔型(true,false) 类型 byte short int lon ...
- MySQL5.7小白安装教程(提供安装包)
下载地址:https://dev.mysql.com/downloads/installer/ (如果网络不稳定下不下来,别急,我已经为你们下好了.到我公众号[勾玉技术]回复[mysql5.7]获取百 ...
- 记录一下 nas 当本地网络存储,玩大型游戏再也不用担心硬盘不够用了
最近由于家里的PC 在玩steam的游戏,原来1T的固态,安装了几个大型的3A游戏,一个黑神话悟空就用了200多G,硬盘就不够用了 查看了京东的2T的固态,还是很贵,要大几百块钱.去年配了一台极空间的 ...
- docker | Ubuntu16.04安装与卸载docker
安装docker sudo apt-get install docker-ce docker-ce-cli containerd.io 卸载docker apt-get purge卸载命令需要逐条执行 ...
- FFmpeg开发笔记(六十六)Windows给FFmpeg集成LC3音频的编码器liblc3
<FFmpeg开发实战:从零基础到短视频上线>一书的第五章介绍了FFmpeg如何处理常见的MP3音频和AAC音频,其中MP3格式常用于音乐文件,而AAC格式常用于视频文件. 除此以外,近年 ...
- Centos设置Redis自启动(Systemd)
前言 在生产环境中,我们在设置Redis服务自启动时有多种方式,这里采用Systemd管理方式进行设置Redis, Systemd管理起centos7版本中使用了systemd,systemd同时兼容 ...
- MySQL核心知识学习之路(1)
作为一个后端工程师,想必没有人没用过数据库,跟我一起复习一下MySQL吧,本文是我学习<MySQL实战45讲>的总结笔记的第一篇,总结了MySQL的基础架构.一个查询语句的执行过程 以及 ...
- XML文件头命名空间——Spring
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- 你应该懂得AI大模型(十二)之 QLoRA
一.显存和算力 1. 基本概念 显存 (Memory) 定义:GPU 用于临时存储数据的高速内存,类似于计算机的 RAM. 作用: 存储模型权重.中间激活值.梯度和优化器状态. 数据在显存与 GPU ...
- C# HttpListener 的使用方法
关于监听回调两次的原因,可能是因为重新监听导致的,所以查到微软上面的解析是说 BeginGetContext方法开始异步 (非阻塞) 调用以接收传入的客户端请求. 在调用此方法之前,必须调用 Star ...