Visual Studio 使用 GitHub Copilot 与 IntelliCode 辅助编码_visual studio copilot
一、安装 GitHub Copilot
- 先决条件
- 确保拥有一个 GitHub 账户,可在 GitHub.com 上免费注册。
- GitHub Copilot 是一个付费服务,但提供 30 天的免费试用期,过后需订阅其中一种付费计划。若为通过验证的学生或 GitHub 上热门开放源代码项目的维护者,可免费使用。
- 安装步骤
- 打开 Visual Studio 并转到“Extensions”(扩展)菜单。
- 在“Manage Extensions”(管理扩展)窗口中,在“Online”(在线)选项卡中搜索“GitHub Copilot”。
- 下载完成后,关闭 Visual Studio 并运行 GitHub Copilot 扩展的安装程序。
- 再次打开 Visual Studio 并转到“工具”菜单,在“Options”(选项)窗口中,转到“GitHub Copilot”选项卡,登录后即可开始使用。
二、基本使用
- 代码建议(Inline Suggestions)
- 打开一个代码文件:在 Visual Studio 中打开或创建一个支持的编程语言文件(如.js、.py、.java、.cs 等)。
- 开始编写代码或注释:当开始输入函数名、变量名、注释或代码逻辑时,Copilot 会根据上下文预测可能要写的内容。
- 查看建议:Copilot 的建议会以淡灰色(或主题设定的颜色)文本形式显示在光标位置之后。
- 接受建议:如果建议是想要的,按下“Tab”键即可接受;忽略建议:如果建议不是想要的,按下“Esc”键即可忽略。
- 查看更多建议:有时 Copilot 会提供多个备选建议,可按下“Alt+[”(向前切换)和“Alt+]”(向后切换)来循环查看不同的建议。
- 内联聊天
- 通过将提示转换为代码,使用内联聊天可帮助编写方法、类和单元测试。
- 打开方式:在文本文件中右键单击并选择“询问 Copilot”或按“Alt + /`”来内联打开。
- 使用提示:使用“/”声明意图或使用“#”引用文件,例如“/test for #filename”。
- 聊天窗口
- 打开方式:
- 键盘快捷键:按下“Ctrl + \\ , C”(Windows/Linux)或“Cmd + Option + \\ , C”(macOS)。
- 侧边栏图标:点击 Visual Studio 侧边栏的 Copilot Chat 图标。
- 命令面板:按下“Ctrl + Shift + P”(Windows/Linux/macOS)打开命令面板,输入“Copilot Chat”或“Focus on Copilot Chat View”并选择对应的命令。打开后,Copilot Chat 面板通常会出现在侧边栏或底部面板中。
- 使用:在输入框中输入请求,使用自然语言清晰地表达想要 Copilot 做什么,例如“请解释一下这段代码是做什么的”“如何用 JavaScript 实现冒泡排序?”“帮我重构一下当前选中的函数,让它更具可读性”。发送消息:按下“Enter”键或点击输入框旁的发送按钮。等待响应:Copilot 会处理请求,并在聊天记录中显示其回答、建议或生成的代码。对于文字解释,直接阅读即可;对于代码块,通常会在代码块上方显示一些操作按钮,如“Insert into Cursor”(插入到光标位置)、“Insert into New File”(插入到新文件)、“Copy”(复制)、“Replace File Contents”(替换当前文件内容)等,点击这些按钮可以将生成的代码应用到项目中。
- 打开方式:
三、设置上下文
为 Copilot 提供明确的上下文是获得准确有用响应的关键。
- 自动上下文:Copilot Chat 通常会根据当前活动的文件或选中的代码自动添加上下文,输入框上方会显示当前的上下文来源(如#file、#selection)。
- 手动添加上下文指令:在输入框中输入“#”符号,Copilot 会弹出一个列表,显示可以添加的上下文来源。
- #file:引用当前活动文件或指定的文件。
- #selection:引用当前选中的代码块。
- #editor:引用当前编辑器中的内容。
- #terminal:引用当前终端窗口的输出(这需要终端视图可见并聚焦)。
- #workspace/#codebase:引用整个工作区或项目代码库。
- #symbol:引用工作区中的特定符号(类、函数等)。
- 在消息中直接提及:可以在请求中直接提及文件名、函数名等,Copilot 会尝试理解并利用这些信息作为上下文。例如,要让 Copilot 解释当前选中的代码,可以先选中代码,然后打开 Chat,输入框上方会显示#selection,然后输入“Please explain this selected code.”(请解释这段选中的代码);要询问关于另一个文件的内容,可以在输入框中输入#file path/to/another/file.js,然后输入请求。
四、使用斜杠命令
斜杠命令可帮助快速设置常见开发任务的意向,通过使用特定的斜杠命令来形成问题,可以获得更好的答案,而无需写出较长的问题。可以在聊天窗口中使用斜杠命令,或者借助内联代码帮助,直接将命令嵌入到想要修改的代码中。帮助修改或添加到编辑器中打开的代码文件的命令将同时在内联代码助手和聊天窗口中工作,而用于更常规编码问题的命令只能在聊天窗格中工作。
- /文档:为指定的或选定的代码添加注释。例子:“/doc DeleteBasketAsync method in BasketService.cs”。
- /解释:获取代码说明。例子:“/explain the AddItemToBasket method in BasketService.cs”。
- /修复:为所选代码中的问题建议修补程序。例子:“/fix the SetQuantities method in BasketService.cs”。
- /生成:生成代码以回答指定的问题。示例:“/generate code to add two numbers in Calculator.cs”。
- /帮助:获取有关使用 Copilot Chat 的帮助。
- /优化:分析和改进所选代码的运行时间。例子:“/optimize the AddItemToBasket method in BasketService.cs”。
- /测试:为所选代码创建单元测试。示例:选择所需的代码并输入“/tests using XUnit Framework”。
五、调试辅助
Copilot 可提供代码修复,以及有关代码工作原理的深入分析和解释。它有助于提供解决 bug 的建议修复方案,并解释异常等内容。Copilot 能够理解调用堆栈、帧、变量名称和值,可与调试器感知的 AI 进行交互,从而询问与代码相关的详细问题以及一般的调试问题。
- 使用内联聊天视图获取 AI 帮助:右键单击代码,并选择“询问 Copilot”以打开内联聊天视图。或者,可以在“自动变量”或“局部变量”窗口中,或者在数据提示中右键单击变量,然后选择“询问 Copilot”。这为 Copilot 提供了变量名称和上下文,因此不需要在聊天中自己提供上下文。在内联聊天视图中键入问题,按“Enter”时,Copilot 会根据对代码的理解来提供答案。如果 Copilot 为代码提供了建议的修复方法,则会显示;如果没有,则可要求 Copilot 提供代码建议。在内联聊天中,使用“#”符号并从下拉列表中进行选择,将特定信息移交给 Copilot,同时在问题中引用该信息。例如,如果选择部分代码,然后键入“#”,则可以从#下拉列表中选择该所选内容。还可以使用“#”符号来引用下拉列表中显示的 IDE 功能,例如“局部变量”窗口。
- 在遇到异常时获取 AI 帮助:当应用程序因异常而暂停时,选择“询问 Copilot”按钮。如果尚未打开,则将出现 Copilot 聊天窗口,并提供错误及其发生原因的评估。在此示例中,Copilot 标识了建议的代码修补程序、复制代码的按钮以及代码修补程序的“预览”按钮。如果对异常有疑问,请在“询问 Copilot”文本框中进行询问。选择预览按钮,Visual Studio 显示代码预览,其中包含建议的解决方法。查看建议的解决方法,然后选择“接受”以应用代码建议,重启调试程序。
- 获取关于条件断点和跟踪点的建议:在此示例中,展示了 AI 对条件断点的建议。对于跟踪点,AI 辅助的工作方式相同。单击当前断点或右键单击并选择“删除断点”,以删除当前断点。
Visual Studio IntelliCode 是 Visual Studio 中的一个 AI 辅助开发插件,它利用机器学习技术来理解代码和开发模式,为开发者提供智能的代码补全提示,可显著提升编码效率和代码质量,以下是对其功能的详细介绍:
智能代码补全
- 上下文感知:IntelliCode 使用开发者当前的代码上下文和模式来提供动态的代码补全列表,预测开发人员使用的最可能正确的方法或属性,而不只是按字母顺序排列的列表。
- 多语言支持:IntelliCode 支持多种编程语言,包括 C#、C++、XAML、JavaScript、TypeScript(需要 TypeScript 3.4.2 或更高版本)、Visual Basic 等。
- 参数完成:在调用方法时,IntelliCode 会对最有可能使用的参数名称进行星号标记,并将这些建议放置在完成列表的顶部。当在括号中键入内容或按 Ctrl+空格时,将出现完成列表。
- 整行自动补全:在 Visual Studio 2022 及更高版本中,C# 开发人员受益于整行自动完成功能,它根据当前代码预测下一个代码区块,并呈现为内联预测。
代码风格与一致性
- 学习团队代码风格:IntelliCode 能学习开发团队的代码风格,提供符合团队习惯的代码建议,确保代码风格的一致性。
- 代码风格智能分析:通过启用 IntelliCode 的代码风格智能分析,可以对不统一的代码风格进行重构。例如,将初始风格不一致的 JavaScript 函数重构为风格统一的函数。
- 自定义规则:支持自定义规则,允许团队根据自己的编码标准调整智能推荐。
- 团队共享的 AI 模型:确保即使是不同的开发者编写的代码也能保持一致的风格。
代码编辑辅助
- 重复编辑建议:IntelliCode 会在本地跟踪编辑,检测执行重复操作的时间,并提出建议以在其他类似的位置应用相同的操作(仅限 C#)。它了解代码的语义结构,用于检测可以应用更改的情况,即使变量名称不同也是如此。
- 快速操作:IntelliCode 建议具有“快速操作”菜单选项,当接受完成列表建议时,如果有可应用相同更改的其他位置,将看到具有操作的灯泡,该操作将显示找到的建议的列表。打开 IntelliCode 建议窗口,可以找到并处理建议。
- 忽略建议:由于 IntelliCode 建议会通过会话中的重复编辑进行学习,因此有时会提出不符合意向的建议。如果不想使用建议的更改,只需选择“忽略此类建议”操作。除非在后续编辑中重新创建该模式,否则 IntelliCode 不会再次建议该模式。需要注意的是,IntelliCode 建议是针对当前会话的,在关闭并重新打开 Visual Studio 后,这些建议不会显示。
模型与学习
- 基于开源项目学习:IntelliCode 通过分析大量的开源项目代码来学习不同语言的风格模式,利用机器学习算法对代码进行语义理解和风格识别,然后将这些分析得到的模式应用于新的代码中,提供智能的编码建议。
- 持续学习进化:IntelliCode 的机器学习模型不是静态的,会随着时间推移和新数据的输入而不断学习和进化,从而为开发人员提供更准确的代码建议。
在 Visual Studio 中组合使用 GitHub Copilot 和 IntelliCode 可以显著提升编码效率,以下是一些实用的组合使用技巧:
1. 先用 Copilot 生成代码框架,再用 IntelliCode 优化细节
- GitHub Copilot:适合通过自然语言描述快速生成代码框架或算法实现。例如,输入注释“# 实现快速排序算法”,Copilot 会直接生成完整的函数代码。
- IntelliCode:在 Copilot 生成的代码基础上,IntelliCode 会根据上下文提供更精准的代码补全建议(如参数提示、API 使用示例),并优化代码风格。
2. 利用 IntelliCode 的重复编辑建议补充 Copilot 的不足
- 场景:当 Copilot 生成的代码需要多次调整时(例如重命名变量、重构方法),IntelliCode 会检测重复编辑模式,并提示在其他位置应用相同的修改。
- 操作:在代码编辑器中右键选择“快速操作”,或查看 IntelliCode 建议窗口,批量应用优化。
3. 结合两者的上下文感知能力
- GitHub Copilot:通过注释或代码上下文生成代码,适合快速原型开发。
- IntelliCode:学习团队代码风格,提供符合项目规范的建议(如命名约定、设计模式)。例如,在调用方法时,IntelliCode 会优先推荐团队常用的参数顺序。
4. 调试时互补使用
- GitHub Copilot:在调试异常时,右键代码选择“询问 Copilot”,它会分析调用堆栈并提供修复建议(如条件断点、日志添加)。
- IntelliCode:在修复代码后,IntelliCode 会提示类似的重构建议,确保代码风格一致。
5. 调整建议的激进程度
- GitHub Copilot:在设置中调整建议的频率(如“高”“中”“低”),避免过度干扰。
- IntelliCode:在“工具 > 选项 > IntelliCode”中启用或禁用特定语言的建议。
6. 代码审查与验证
- 人工验证:生成的代码需要人工检查逻辑正确性,尤其是 Copilot 生成的复杂算法。
- 敏感项目:在敏感项目中关闭 Copilot 的云学习功能,避免代码泄露。
示例:C# Web API 开发
- 用 Copilot 生成控制器框架:
// 输入注释:“# 创建用户控制器,包含 GET 和 POST 方法”[ApiController][Route(\"api/[controller]\")]public class UsersController : ControllerBase{ private readonly List _users = new(); [HttpGet] public IActionResult GetUsers() => Ok(_users);}
- 用 IntelliCode 优化细节:
- 输入
[HttpPost]
后,IntelliCode 会提示添加[FromBody]
特性。 - 输入
ModelState.IsValid
后,IntelliCode 会建议返回BadRequest
。
- 输入
注意事项
- 版权问题:生成的代码可能基于开源项目,需确保符合许可证要求。
- 性能优化:在大型项目中,适当禁用不必要的建议(如关闭 IntelliCode 的重复编辑检测)。