本文通過實際應用場景和示例代碼展示了 GitHub Copilot Chat 在 Visual Studio 2022 中的優(yōu)勢和特點。最后,鼓勵讀者在實際工作中嘗試使用 Copilot Chat,以提升開發(fā)效率和代碼質量。希望這些信息和經(jīng)驗能為你在使用GitHub Copilot時提供幫助和啟發(fā)。
1. 背景
近年來,GitHub Copilot 的問世為軟件開發(fā)領域帶來了新的可能性。作為一款智能編程工具,它極大地提高了開發(fā)者的編程效率。為了更深入了解和掌握 GitHub Copilot 的使用技巧,我參加了一場名為“GitHub Copilot開發(fā)者訓練營”的活動。
2. 活動回顧
北京的線下場是在北京微軟大廈故宮會議室,這也是我第一次到微軟大廈。
本次活動可謂是收獲滿滿,會議中幾位老師,分享了 GitHub Copilot 使用技巧和最佳實踐,并做了實操的演示。我們探討了 GitHub Copilot 如何幫助開發(fā)者提高開發(fā)效率、助力創(chuàng)新以及彌補技能差距。通過使用 GitHub Copilot,開發(fā)者可以專注于解決關鍵和實際問題,加快原型創(chuàng)建,輕松學習新技術,從而提高生產(chǎn)力。此外,徐磊老師列舉了 10 個 AI 在編程場景中表現(xiàn)出色的例子,展示了AI如何在各種編程任務中取得優(yōu)異成果,包括正則表達式編寫、編寫測試代碼、使用難以記憶的關鍵字等。GitHub Copilot 作為一款智能編程工具,具有很大的潛力,能夠幫助開發(fā)者提升開發(fā)效率和代碼質量。
當然,也有一些稍微的小遺憾。我們胖胖的盧老師竟然在上海,不過能在線下看到徐磊老師也是非常棒的。另一個遺憾,大概是沒有趕上會前的拍照吧。因為上午幫我的大朋友搶六一兒童節(jié)的玩具,誤入了美術館,然后就看了一上午的美輪美奐的藝術品,流連忘返,誤了飯點。等到會議地點,已是正式開始的時間了??戳藭h相冊,我猜是早到有單獨拍照的環(huán)節(jié)??上Я?,上面只能單獨放一個展板咯。
在會議中,主要介紹了 Copilot 的功能,并展示了如何在 VS Code 中使用 Copilot Chat。結合 GitHub 的 Codespaces,我們可以在完全云端的開發(fā)環(huán)境中體驗到非常便捷和高效的編程過程。然而,如何在被譽為地表最強的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 查看。
其當前還是預覽狀態(tài),如果想使用該功能,首先你需要確保你已經(jīng)注冊并擁有了 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。
提交申請后,等待審核,審核結果會發(fā)送到你的郵箱,當你收到《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下載,完成后直接打開安裝即可。
安裝完成后,需要確保你已經(jīng)在 Visual Studio 中登錄了 Github 賬戶。如果你對對這一步操作不熟悉,可以前往幫助查看:在 Visual Studio 中使用 GitHub 帳戶。
若操作沒有問題,你就可以在頂部菜單的視圖中找到 Copilot Chat
:
4. 使用體驗
據(jù)說是與 Copilot 的溝通使用英文會更好,但是,當我看到 Copilot Chat 在 Visual Studio 中的界面后,我完全可以放心他的中文理解能力了:
4.1 如何交互
和 Copilot chat 的交互有兩種方式,除了可以通過打開的常駐對話框窗口外,你也可以通過右鍵菜單呼出對話浮窗(默認快捷鍵 Alt + /
)。
對于對話相關的代碼,你可以通過光標定位到某一行代碼,某一個類或者方法的開通結尾,當你激活對話框時,一個粉色的框會提示你當前對話相關的代碼區(qū)域,當然你也可以選擇相關區(qū)域后通過右鍵呼出:
4.2 分析當前異常
除了前面兩種交互形式,在當程序調試出現(xiàn) BUG 的時候,你也可以通過異常面板中“Copilot AI Assistant”快捷的詢問解決方案:
這里為了演示,我修改了正常項目的代碼,讓其出現(xiàn)了一個生命周期的相關異常。當你點擊了 “Copilot AI Assistant” 其動作其實就是在對話框輸入“Analyze the current exception”:
通過上面 Copilot chat 的回復結果我們會發(fā)現(xiàn),這里回復是英文的。熟悉 GPT 的同學應該清楚,AI 的回復會根據(jù)你提示的語言進行調整(畢竟不可見的輸入中給 AI 輸入了大量的英文報錯信息)。不過,在我再次詢問“程序當前的錯誤是怎么回事”時,他回復卻耐人尋味了起來:
當然,他的限制是必要的,畢竟他是作為一個編程伙伴。對于他對不理解我口語化的描述,我似乎也有些理解,就像 MOSS 的警告:禁止使用比喻,反問,暗示。
這里有個小技巧,當你的程序報錯時,你可以這樣提問得到中文的錯誤分析:“分析當前異常,使用中文回復”
4.3 簡單的測試
接下來我們簡單的進行幾個測試,感受一下 Copilot chat 帶來的一些便利。當然,AI 在許多編程場景可以完全碾壓人類,更多功能還需要大家自行去探索。唯一可以確定的是,以后編程基本可以脫離搜索引擎,享受到更高效的開發(fā)體驗了。
4.3.1 對話式編程
有了 Copilot chat ,其實我們完全可以通過不斷的與其聊天對話,完成我們的開發(fā)工作。接下來我嘗試讓其幫我創(chuàng)建一個微信用戶對象,用來存儲到數(shù)據(jù)庫:
這里我們不需要苦惱給對象起名,也不用考慮要存什么字段。更重要的是,他是懂我們的微信的,這里生成的結果完全沒有問題。甚至于他可以直接通過快捷方式放到我的項目當中,無需我復制粘貼。
4.3.2 代碼解釋
我們會有需要讀源碼的場景,比如:接手新的項目,學習開源項目等。Copilot chat 的代碼解釋功能可以幫助我們節(jié)省大量的時間和精力,他可以在幾毫秒中給你結果。以下是我用來詢問他的一段代碼:
/// <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 "";
}
以下是回復的內容:
這個函數(shù)是 VerifyURL。它有四個參數(shù):msg_signature,timestamp,nonce 和 echostr。這個函數(shù)的主要目的是用于驗證接口連接。
首先,這個函數(shù)會創(chuàng)建 WXBizMsgCrypt 的對象,該對象的實例用于微信消息的加解密。然后它會檢查 echostr 的值是否為非空,如果不為空,則需要將 echostr 的解密結果輸出。
為了完成解密過程,這個函數(shù)使用 wxcpt.VerifyURL(msg_signature, timestamp, nonce, echostr, ref sEchoStr) 方法,該方法返回一個 int 值。如果返回的不是 0,則表示解密失敗,函數(shù)會通過記錄日志輸出錯誤信息并返回空字符串。否則,將解密后的字符串 sEchoStr 返回。
如果 echostr 的值為空,則表示驗證失敗。函數(shù)會記錄一個錯誤日志信息并返回一個空字符串。
如果您需要進一步了解 WXBizMsgCrypt 和如何進行微信消息的加解密,請參考微信官方文檔。
4.3.3 問題解答
首先我們看一段代碼:
public DbSet<MsgList> MsgLists { get; private set; }
public DbSet<CursorCache> CursorCache { get; set; }
這段代碼的第二行是 AI 生成的,前面寫的代碼我采用了 private set
,這里我向其提問:這里采用 private set 和 set 有什么區(qū)別,哪個好?
這里 AI 的回復是非常準確的,詳細解釋了set和private set的訪問級別和用途。對于初學者,這無疑是非常有用的,他可以幫助你不斷提高編程水平。
set 和 private set 是兩種訪問器的訪問限定。 set 具有 public 的訪問級別,而 private set 只有類本身內部可以訪問。
當你使用 set 時,任何人都可以更改屬性的值。這意味著,如果屬性的值是不應該更改的,那么你應該使用 private set 而不是set。 這有助于保護對象不受不受控制的更改,并使代碼更加安全。
讓我們以 OnModelCreating 方法為例。這個方法只會在類內部中被訪問,而不會外部進行更改。因此,建議使用 private set 以保護代碼。
4.3.4 提供優(yōu)化建議
同時,他也可以幫助你審查代碼,提供修改建議。當然,這里的小技巧依舊適用,后面記得跟上“使用中文回復”,否則大段的英文會讓他忘記問題的提出是中文了。
4.4 編寫單元測試
單元測試是軟件開發(fā)過程中不可或缺的一部分,它可以幫助我們確保代碼的質量和功能的正確性。通過 Copilot chat ,可以幫助我們快速的創(chuàng)建單元測試,以下是其針對我的 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 領域,探索機器學習基礎知識、演示如何構建分類模型,然后介紹更高級的算法(稱為神經(jīng)網(wǎng)絡)及它們在計算機視覺中的應用。文章來源:http://www.zghlxwxcb.cn/news/detail-484632.html
最后,請牢記這句話:AI 本身不會取代你,但掌握 AI 技能的人可能會取代你。因此,希望大家能擁抱創(chuàng)新,嘗試新的工具,提高開發(fā)效率和代碼質量。讓我們共同期待 Copilot 等類似的 AI 工具不斷發(fā)展,助力更多開發(fā)者輕松應對編程挑戰(zhàn),編寫出更優(yōu)秀的軟件作品。文章來源地址http://www.zghlxwxcb.cn/news/detail-484632.html
到了這里,關于在 Visual Studio 2022 中使用 GitHub Copilot chat的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!