在 Visual Studio 2022 中使用 GitHub Copilot chat
时间:2024-05-02 21:40:47 来源:网络cs 作者:晨起 栏目:监控软件 阅读:
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 的代码解释功能可以帮助我们节省大量的时间和精力,他可以在几毫秒中给你结果。以下是我用来询问他的一段代码:
/// <summary>/// 验证来源/// </summary>/// <param name="msg_signature">微信的签名</param>/// <param name="timestamp">时间戳</param>/// <param name="nonce">随机字符</param>/// <param name="echostr">加密的字符串</param>/// <returns></returns>public string VerifyURL(string msg_signature, string timestamp, string nonce, string echostr){ // 微信加解密库 var wxcpt = new WXBizMsgCrypt(_wechat.Value.Token, _wechat.Value.EncodingAesKey, _wechat.Value.CorpId); // 接入验证,需要输出 EchoStr 的解密结果 if (!string.IsNullOrWhiteSpace(echostr)) { string sEchoStr = ""; var ret = wxcpt.VerifyURL(msg_signature, timestamp, nonce, echostr, ref sEchoStr); if (ret != 0) { _logger.LogError("ERR: VerifyURL fail, ret: " + ret); return ""; } return sEchoStr; } _logger.LogError("ERR: VerifyURL fail, empty echostr"); return "";}
以下是回复的内容:
这个函数是 VerifyURL。它有四个参数:msg_signature,timestamp,nonce 和 echostr。这个函数的主要目的是用于验证接口连接。首先,这个函数会创建 WXBizMsgCrypt 的对象,该对象的实例用于微信消息的加解密。然后它会检查 echostr 的值是否为非空,如果不为空,则需要将 echostr 的解密结果输出。为了完成解密过程,这个函数使用 wxcpt.VerifyURL(msg_signature, timestamp, nonce, echostr, ref sEchoStr) 方法,该方法返回一个 int 值。如果返回的不是 0,则表示解密失败,函数会通过记录日志输出错误信息并返回空字符串。否则,将解密后的字符串 sEchoStr 返回。如果 echostr 的值为空,则表示验证失败。函数会记录一个错误日志信息并返回一个空字符串。如果您需要进一步了解 WXBizMsgCrypt 和如何进行微信消息的加解密,请参考微信官方文档。
4.3.3 问题解答
首先我们看一段代码:
public DbSet<MsgList> MsgLists { get; private set; }public DbSet<CursorCache> CursorCache { get; set; }
这段代码的第二行是 AI 生成的,前面写的代码我采用了 private set
,这里我向其提问:这里采用 private set 和 set 有什么区别,哪个好?
这里 AI 的回复是非常准确的,详细解释了set和private set的访问级别和用途。对于初学者,这无疑是非常有用的,他可以帮助你不断提高编程水平。
set 和 private set 是两种访问器的访问限定。 set 具有 public 的访问级别,而 private set 只有类本身内部可以访问。当你使用 set 时,任何人都可以更改属性的值。这意味着,如果属性的值是不应该更改的,那么你应该使用 private set 而不是set。 这有助于保护对象不受不受控制的更改,并使代码更加安全。让我们以 OnModelCreating 方法为例。这个方法只会在类内部中被访问,而不会外部进行更改。因此,建议使用 private set 以保护代码。
4.3.4 提供优化建议
同时,他也可以帮助你审查代码,提供修改建议。当然,这里的小技巧依旧适用,后面记得跟上“使用中文回复”,否则大段的英文会让他忘记问题的提出是中文了。
4.4 编写单元测试
单元测试是软件开发过程中不可或缺的一部分,它可以帮助我们确保代码的质量和功能的正确性。通过 Copilot chat ,可以帮助我们快速的创建单元测试,以下是其针对我的 minimal web API 项目生成的单元测试:
using Microsoft.AspNetCore.Hosting;using Microsoft.AspNetCore.TestHost;using Microsoft.Extensions.DependencyInjection;using Microsoft.Extensions.Hosting;using Moq;using System.Net.Http;using System.Threading.Tasks;using WeChatCustomerAzureOpenAI.WeChat;using Xunit;public class WeChatCustomerAzureOpenAITest{ private readonly TestServer _server; private readonly HttpClient _client; public WeChatCustomerAzureOpenAITest() { _server = new TestServer(new WebHostBuilder() .UseEnvironment("Development") .UseStartup<Startup>()); _client = _server.CreateClient(); } [Fact] public async Task Verify_WeChatURL() { //Arrange var url = "/wechatback?msg_signature=test×tamp=0&nonce=0&echostr=123"; //Act var response = await _client.GetAsync(url); //Assert response.EnsureSuccessStatusCode(); var responseString = await response.Content.ReadAsStringAsync(); var expectedString = "123"; Assert.Equal(expectedString, responseString); } [Fact] public async Task Check_Decrypt_Msg() { //Arrange var sMsg = "123"; var requestContent = new StringContent(sMsg); var context = new DefaultHttpContext(); context.Request.ContentLength = requestContent.Headers.ContentLength; context.Request.Body = await requestContent.ReadAsStreamAsync(); var wechat = new Mock<WechatServices>().Object; var mediator = new Mock<IMediator>().Object; var expectedString = sMsg; //Act var result = await _server.Host.GetService<WechatServices>().DecryptMsg(sMsg, It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()); await _server.Host.GetService<Mediator>().Publish(new UserBack(result)); //Assert Assert.Equal(expectedString, result); }}
这里的单元测试,当然是不能直接使用的,但是他完成了一个从零到一的过程。通过不断的对话调整,就会生成我们满意的结果。
5. 最后
如果你对 Copilot 和人工智能感兴趣并希望进一步了解,那么这里有一个 Microsoft Learn 的免费课程非常适合你:使用 GitHub Copilot 学习 AI。此系列视频可以指导你进入 AI 领域,探索机器学习基础知识、演示如何构建分类模型,然后介绍更高级的算法(称为神经网络)及它们在计算机视觉中的应用。
最后,请牢记这句话:AI 本身不会取代你,但掌握 AI 技能的人可能会取代你。因此,希望大家能拥抱创新,尝试新的工具,提高开发效率和代码质量。让我们共同期待 Copilot 等类似的 AI 工具不断发展,助力更多开发者轻松应对编程挑战,编写出更优秀的软件作品。
本文链接:https://www.kjpai.cn/news/2024-05-02/164380.html,文章来源:网络cs,作者:晨起,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!
上一篇:大模型发展进入深水区,企业如何打造专属AI原生应用?
下一篇:返回列表