在 Visual Studio 2022 中使用 GitHub Copilot chat

[复制链接]
查看922 | 回复0 | 2023-8-16 16:31:46 | 显示全部楼层 |阅读模式
本文通过现实应用场景和示例代码展示了 GitHub Copilot Chat 在 Visual Studio 2022 中的上风和特点。末了,鼓励读者在现实工作中尝试使用 Copilot Chat,以提升开辟服从和代码质量。希望这些信息和经验能为你在使用GitHub Copilot时提供资助和启发。
  
  
1. 背景

比年来,GitHub Copilot 的问世为软件开辟范畴带来了新的大概性。作为一款智能编程工具,它极大地提高了开辟者的编程服从。为了更深入了解和把握 GitHub Copilot 的使用技巧,我加入了一场名为“GitHub Copilot开辟者训练营”的活动。

2. 活动回首

北京的线了局是在北京微软大厦故宫聚会会议室,这也是我第一次到微软大厦。

本次活动可谓是劳绩满满,聚会会议中几位老师,分享了 GitHub Copilot 使用技巧和最佳实践,并做了实操的演示。我们探讨了 GitHub Copilot 如何资助开辟者提高开辟服从、助力创新以及补充技能差距。通过使用 GitHub Copilot,开辟者可以专注于办理关键和现实标题,加速原型创建,轻松学习新技能,从而提高生产力。别的,徐磊老师枚举了 10 个 AI 在编程场景中表现出色的例子,展示了AI如何在各种编程任务中取得优秀结果,包括正则表达式编写、编写测试代码、使用难以影象的关键字等。GitHub Copilot 作为一款智能编程工具,具有很大的潜力,可以或许资助开辟者提升开辟服从和代码质量。

固然,也有一些稍微的小遗憾。我们胖胖的卢老师竟然在上海,不过能在线下看到徐磊老师也是非常棒的。另一个遗憾,大概是没有赶上会前的照相吧。由于上午帮我的大朋侪抢六一儿童节的玩具,误入了美术馆,然后就看了一上午的美轮美奂的艺术品,流连忘返,误了饭点。等到聚会会议所在,已是正式开始的时间了。看了聚会会议相册,我猜是早到有单独照相的环节。可惜了,上面只能单独放一个展板咯。
在聚会会议中,重要先容了 Copilot 的功能,并展示了如何在 VS Code 中使用 Copilot Chat。联合 GitHub 的 Codespaces,我们可以在完全云端的开辟情况中体验到非常便捷和高效的编程过程。然而,如何在被誉为地表最强的IDE —— Visual Studio 中使用 Copilot chat 呢?接下来,就让我们一起探讨一番。
3. 启用 Copilot Chat

3.1 确认权限

Copilot Chat 属于 GitHub Copilot X 中的一项本领,接纳 OpenAI GPT-4,关于它的先容可从前去 https://github.com/features/preview/copilot-x?WT.mc_id=DT-MVP-5005195 查察。
其当前还是预览状态,假如想使用该功能,起首你须要确保你已经注册并拥有了 Github Copilot 的权限:https://github.com/features/copilot/?WT.mc_id=DT-MVP-5005195
对于普通用户,可以试用 Copilot 一个月。当确认你拥有 Copilot 的使用权限后,你可以通过这里提交预览功能的访问申请:https://aka.ms/GHCopilotXPPSignup?WT.mc_id=DT-MVP-5005195。
提交申请后,等候稽核,稽核结果会发送到你的邮箱,当你收到《Welcome to the Copilot chat private beta!》的邮件就意味着你可以使用 Copilot chat 了。

3.2 安装插件

在 Visual Studio 2022 中安装 Copilot Chat 扩展非常简朴,只须要在扩展管理搜索 github 选择 Visual Studio Extension for GitHub Copilot Preview 即可。

你也可以直接前去 Marketplace下载,完成后直接打开安装即可。
安装完成后,须要确保你已经在 Visual Studio 中登录了 Github 账户。假如你对对这一步利用不熟悉,可从前去资助查察:在 Visual Studio 中使用 GitHub 帐户。
若利用没有标题,你就可以在顶部菜单的视图中找到 Copilot Chat:

4. 使用体验

听说是与 Copilot 的沟通使用英文会更好,但是,当我看到 Copilot Chat 在 Visual Studio 中的界面后,我完全可以放心他的中文明白本领了:

4.1 如何交互

和 Copilot chat 的交互有两种方式,除了可以通过打开的常驻对话框窗口外,你也可以通过右键菜单呼出对话浮窗(默认快捷键 Alt + /)。

对于对话相干的代码,你可以通过光标定位到某一行代码,某一个类大概方法的开通末了,当你激活对话框时,一个粉色的框会提示你当前对话相干的代码区域,固然你也可以选择相干区域后通过右键呼出:

4.2 分析当前非常

除了前面两种交互情势,在当程序调试出现 BUG 的时候,你也可以通过非常面板中“Copilot AI Assistant”快捷的扣问办理方案:

这里为了演示,我修改了正常项目的代码,让其出现了一个生命周期的相干非常。当你点击了 “Copilot AI Assistant” 其动作实在就是在对话框输入“Analyze the current exception”:

通过上面 Copilot chat 的复兴结果我们会发现,这里复兴是英文的。熟悉 GPT 的同砚应该清楚,AI 的复兴会根据你提示的语言举行调整(毕竟不可见的输入中给 AI 输入了大量的英文报错信息)。不过,在我再次扣问“程序当前的错误是怎么回事”时,他复兴却耐人寻味了起来:

固然,他的限定是须要的,毕竟他是作为一个编程伙伴。对于他对不明白我口语化的描述,我似乎也有些明白,就像 MOSS 的告诫:克制使用比喻,反问,暗示。
这里有个小技巧,当你的程序报错时,你可以如许提问得到中文的错误分析:“分析当前非常,使用中文复兴”

4.3 简朴的测试

接下来我们简朴的举行几个测试,感受一下 Copilot chat 带来的一些便利。固然,AI 在许多编程场景可以完全碾压人类,更多功能还须要大家自行去探索。唯一可以确定的是,以后编程根本可以离开搜索引擎,享受到更高效的开辟体验了。
4.3.1 对话式编程

有了 Copilot chat ,实在我们完全可以通过不绝的与其聊天对话,完成我们的开辟工作。接下来我尝试让其帮我创建一个微名誉户对象,用来存储到数据库:

这里我们不须要苦恼给对象起名,也不用思量要存什么字段。更重要的是,他是懂我们的微信的,这里天生的结果完全没有标题。甚至于他可以直接通过快捷方式放到我的项目当中,无需我复制粘贴。
4.3.2 代码表明

我们会有须要读源码的场景,比如:接办新的项目,学习开源项目等。Copilot chat 的代码表明功能可以资助我们节省大量的时间和精神,他可以在几毫秒中给你结果。以下是我用来扣问他的一段代码:
  1. /// <summary>
  2. /// 验证来源
  3. /// </summary>
  4. /// <param name="msg_signature">微信的签名</param>
  5. /// <param name="timestamp">时间戳</param>
  6. /// <param name="nonce">随机字符</param>
  7. /// <param name="echostr">加密的字符串</param>
  8. /// <returns></returns>
  9. public string VerifyURL(string msg_signature, string timestamp, string nonce, string echostr)
  10. {
  11.     // 微信加解密库
  12.     var wxcpt = new WXBizMsgCrypt(_wechat.Value.Token, _wechat.Value.EncodingAesKey, _wechat.Value.CorpId);
  13.     // 接入验证,需要输出 EchoStr 的解密结果
  14.     if (!string.IsNullOrWhiteSpace(echostr))
  15.     {
  16.         string sEchoStr = "";
  17.         var ret = wxcpt.VerifyURL(msg_signature, timestamp, nonce, echostr, ref sEchoStr);
  18.         if (ret != 0)
  19.         {
  20.             _logger.LogError("ERR: VerifyURL fail, ret: " + ret);
  21.             return "";
  22.         }
  23.         return sEchoStr;
  24.     }
  25.     _logger.LogError("ERR: VerifyURL fail, empty echostr");
  26.     return "";
  27. }
复制代码
以下是复兴的内容:
  1. 这个函数是 VerifyURL。它有四个参数:msg_signature,timestamp,nonce 和 echostr。这个函数的主要目的是用于验证接口连接。
  2. 首先,这个函数会创建 WXBizMsgCrypt 的对象,该对象的实例用于微信消息的加解密。然后它会检查 echostr 的值是否为非空,如果不为空,则需要将 echostr 的解密结果输出。
  3. 为了完成解密过程,这个函数使用 wxcpt.VerifyURL(msg_signature, timestamp, nonce, echostr, ref sEchoStr) 方法,该方法返回一个 int 值。如果返回的不是 0,则表示解密失败,函数会通过记录日志输出错误信息并返回空字符串。否则,将解密后的字符串 sEchoStr 返回。
  4. 如果 echostr 的值为空,则表示验证失败。函数会记录一个错误日志信息并返回一个空字符串。
  5. 如果您需要进一步了解 WXBizMsgCrypt 和如何进行微信消息的加解密,请参考微信官方文档。
复制代码

4.3.3 标题解答

起首我们看一段代码:
  1. public DbSet<MsgList> MsgLists { get; private set; }
  2. public DbSet<CursorCache> CursorCache { get; set; }
复制代码
这段代码的第二行是 AI 天生的,前面写的代码我接纳了 private set,这里我向其提问:这里接纳 private set 和 set 有什么区别,哪个好?
这里 AI 的复兴是非常正确的,详细表明白set和private set的访问级别和用途。对于初学者,这无疑是非常有效的,他可以资助你不绝提高编程水平。
  1. set 和 private set 是两种访问器的访问限定。 set 具有 public 的访问级别,而 private set 只有类本身内部可以访问。
  2. 当你使用 set 时,任何人都可以更改属性的值。这意味着,如果属性的值是不应该更改的,那么你应该使用 private set 而不是set。 这有助于保护对象不受不受控制的更改,并使代码更加安全。
  3. 让我们以 OnModelCreating 方法为例。这个方法只会在类内部中被访问,而不会外部进行更改。因此,建议使用 private set 以保护代码。
复制代码

4.3.4 提供优化建议

同时,他也可以资助你审查代码,提供修改建议。固然,这里的小技巧仍然实用,背面记得跟上“使用中文复兴”,否则大段的英文会让他忘记标题的提出是中文了。

4.4 编写单元测试

单元测试是软件开辟过程中不可或缺的一部门,它可以资助我们确保代码的质量和功能的正确性。通过 Copilot chat ,可以资助我们快速的创建单元测试,以下是其针对我的 minimal web API 项目天生的单元测试:
  1. using Microsoft.AspNetCore.Hosting;
  2. using Microsoft.AspNetCore.TestHost;
  3. using Microsoft.Extensions.DependencyInjection;
  4. using Microsoft.Extensions.Hosting;
  5. using Moq;
  6. using System.Net.Http;
  7. using System.Threading.Tasks;
  8. using WeChatCustomerAzureOpenAI.WeChat;
  9. using Xunit;
  10. public class WeChatCustomerAzureOpenAITest
  11. {
  12.     private readonly TestServer _server;
  13.     private readonly HttpClient _client;
  14.     public WeChatCustomerAzureOpenAITest()
  15.     {
  16.         _server = new TestServer(new WebHostBuilder()
  17.             .UseEnvironment("Development")
  18.             .UseStartup<Startup>());
  19.         _client = _server.CreateClient();
  20.     }
  21.     [Fact]
  22.     public async Task Verify_WeChatURL()
  23.     {
  24.         //Arrange
  25.         var url = "/wechatback?msg_signature=test&timestamp=0&nonce=0&echostr=123";
  26.         //Act
  27.         var response = await _client.GetAsync(url);
  28.         //Assert
  29.         response.EnsureSuccessStatusCode();
  30.         var responseString = await response.Content.ReadAsStringAsync();
  31.         var expectedString = "123";
  32.         Assert.Equal(expectedString, responseString);
  33.     }
  34.     [Fact]
  35.     public async Task Check_Decrypt_Msg()
  36.     {
  37.         //Arrange
  38.         var sMsg = "123";
  39.         var requestContent = new StringContent(sMsg);
  40.         var context = new DefaultHttpContext();
  41.         context.Request.ContentLength = requestContent.Headers.ContentLength;
  42.         context.Request.Body = await requestContent.ReadAsStreamAsync();
  43.         var wechat = new Mock<WechatServices>().Object;
  44.         var mediator = new Mock<IMediator>().Object;
  45.         var expectedString = sMsg;
  46.         //Act
  47.         var result = await _server.Host.GetService<WechatServices>().DecryptMsg(sMsg, It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>());
  48.         await _server.Host.GetService<Mediator>().Publish(new UserBack(result));
  49.         //Assert
  50.         Assert.Equal(expectedString, result);
  51.     }
  52. }
复制代码

这里的单元测试,固然是不能直接使用的,但是他完成了一个从零到一的过程。通过不绝的对话调整,就会天生我们满意的结果。
5. 末了

假如你对 Copilot 和人工智能感爱好并希望进一步了解,那么这里有一个 Microsoft Learn 的免费课程非常得当你:使用 GitHub Copilot 学习 AI。此系列视频可以引导你进入 AI 范畴,探索呆板学习底子知识、演示如何构建分类模型,然后先容更高级的算法(称为神经网络)及它们在计算机视觉中的应用。
末了,请牢记这句话:AI 自己不会代替你,但把握 AI 技能的人大概会代替你。因此,希望大家能拥抱创新,尝试新的工具,提高开辟服从和代码质量。让我们共划一待 Copilot 等雷同的 AI 工具不绝发展,助力更多开辟者轻松应对编程挑衅,编写出更良好的软件作品。

来源:https://blog.csdn.net/marin1993/article/details/130833441
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则