實(shí)踐表明,GitHub Copilot、DeepDev、IntelliCode和其他以代碼為中心的機(jī)器學(xué)習(xí)應(yīng)用程序可以幫助開(kāi)發(fā)人員提供更好、更快的代碼。
由于冠狀病毒疫情突然加速,突出顯示了大多數(shù)企業(yè)在數(shù)字化轉(zhuǎn)型方面的準(zhǔn)備不足。他們?nèi)匀幻媾R的最大問(wèn)題之一是“應(yīng)用程序差距”,即缺乏最終用戶(hù)有效完成工作所需的應(yīng)用程序。雖然低代碼和無(wú)代碼工具通過(guò)用戶(hù)界面(UI)構(gòu)建器和機(jī)器人流程自動(dòng)化在一定程度上填補(bǔ)了空白,但仍有很多工作要做。
一種選擇是使用機(jī)器學(xué)習(xí)來(lái)提高開(kāi)發(fā)人員的生產(chǎn)力。一些開(kāi)發(fā)人員已經(jīng)在使用基于規(guī)則的基本工具來(lái)提供代碼補(bǔ)全并公開(kāi)方法,那么為什么不進(jìn)一步建立在公共代碼的海量數(shù)據(jù)集上以分享如何應(yīng)用常見(jiàn)的設(shè)計(jì)模式?在什么情況下使用什么算法?以及開(kāi)發(fā)人員如何利用公共API?
GitHub Copilot:人工智能編碼助手
GitHub就是這樣做的,使用OpenAI的Codex機(jī)器學(xué)習(xí)模型(一種以代碼為中心的語(yǔ)言模型,類(lèi)似于熟悉的GPT-3)來(lái)構(gòu)建和訓(xùn)練一個(gè)服務(wù),該服務(wù)與代碼編輯器一起工作,以在工作時(shí)提出下一步建議。GitHub將其稱(chēng)為Copilot,將其描述為“人工智能配對(duì)程序員”。這是一種有趣的方式,表明Copilot是一種協(xié)作工具,而不是規(guī)定性工具。
Copilot已經(jīng)接受了公共存儲(chǔ)庫(kù)中數(shù)百萬(wàn)行代碼的訓(xùn)練,并作為VisualStudio Code擴(kuò)展安裝,Copilot在當(dāng)前編輯器窗口的場(chǎng)景中工作,根據(jù)開(kāi)發(fā)人員鍵入的內(nèi)容提供建議,并反饋其使用的內(nèi)容的詳細(xì)信息。開(kāi)發(fā)人員的私有代碼不用于使用新代碼示例訓(xùn)練服務(wù)。唯一的信號(hào)是其正在使用的代碼。
開(kāi)發(fā)人員不應(yīng)該一開(kāi)始就期望Copilot生成的代碼是正確的。一方面,這種類(lèi)型的應(yīng)用程序還處于早期發(fā)展階段,除了初始數(shù)據(jù)集之外幾乎沒(méi)有進(jìn)行訓(xùn)練。隨著越來(lái)越多的人使用Copilot,并且它借鑒了他們?nèi)绾问褂闷浣ㄗh進(jìn)行強(qiáng)化學(xué)習(xí),其建議應(yīng)該會(huì)得到改進(jìn)。但是,開(kāi)發(fā)人員仍然需要就其使用的代碼段以及如何使用它們做出決定。出于安全原因,還需要小心Copilot生成的代碼。GitHub不可能審核它用于訓(xùn)練Copilot的所有代碼。即使使用Dependabot和CodeQL安全掃描器等工具,仍有大量低質(zhì)量的代碼表現(xiàn)出不良模式和常見(jiàn)錯(cuò)誤。
盡管存在風(fēng)險(xiǎn),但Copilot中有一些有趣的想法:它將接收開(kāi)發(fā)人員的評(píng)論并將其轉(zhuǎn)換為代碼,或者它如何建議可用作持續(xù)集成(CI )/持續(xù)部署(CD)流程一部分的測(cè)試。將人工智能構(gòu)建到持續(xù)集成(CI )/持續(xù)部署(CD)開(kāi)發(fā)運(yùn)營(yíng)模型的開(kāi)發(fā)和測(cè)試部分很有意義,因?yàn)樗梢詭椭鷾p輕開(kāi)發(fā)人員的負(fù)擔(dān),讓他們專(zhuān)注于代碼開(kāi)發(fā)。同時(shí),開(kāi)發(fā)人員仍然需要確保這些測(cè)試是合適的,并且它們提供了正確的代碼覆蓋級(jí)別。開(kāi)發(fā)人員一次不限于一個(gè)解決方案,因?yàn)榭梢栽诰庉嬈髦蟹喗Y(jié)果,在接受之前查看最適合的解決方案。
DeepDev:面向開(kāi)發(fā)人員新的人工智能模型
微軟公司正在開(kāi)發(fā)自己的機(jī)器學(xué)習(xí)模型集,以支持應(yīng)用程序開(kāi)發(fā)人員。它的原型DeepDev服務(wù)尚未公開(kāi)可用,但可以看到一些文檔。從已發(fā)布的內(nèi)容來(lái)看,DeepDev似乎使用了與GitHub的Copilot類(lèi)似的技術(shù),但可能具有更廣泛的模型集。
與Copilot一樣,DeepDev也接受了混合開(kāi)源代碼和一般文檔的訓(xùn)練,重點(diǎn)是理解和使用源代碼。它的一些模型更通用,需要根據(jù)開(kāi)發(fā)人員的源代碼庫(kù)進(jìn)行額外訓(xùn)練,而其他模型則旨在處理特定的常見(jiàn)任務(wù)。
開(kāi)發(fā)人員需要一個(gè)適當(dāng)?shù)腁PI密鑰來(lái)訪(fǎng)問(wèn)DeepDev,可以在將這些工具構(gòu)建到自己的代碼中之前對(duì)其進(jìn)行試驗(yàn)。DeepDev似乎是使用微軟公司的機(jī)器學(xué)習(xí)模型擴(kuò)展自己的工具的一種方式,允許將這些模型構(gòu)建到持續(xù)集成(CI )/持續(xù)部署(CD)管道中,以便在代碼簽入時(shí)生成測(cè)試。
從Intell iSense到IntelliCode
人工智能輔助的編碼是一個(gè)有趣的發(fā)展,應(yīng)該會(huì)產(chǎn)生更好的開(kāi)發(fā)工具。Visual Studio的IntelliSense和IntelliCode等技術(shù)已經(jīng)可以使用代碼完成和實(shí)時(shí)編譯工具在編寫(xiě)代碼時(shí)調(diào)試代碼,從而提高開(kāi)發(fā)效率。IntelliCode一直在使用GitHub公共存儲(chǔ)庫(kù)構(gòu)建代碼完成模型,使用GitHub作為代碼質(zhì)量的指標(biāo)。
場(chǎng)景是任何機(jī)器學(xué)習(xí)編碼工具的關(guān)鍵。如果開(kāi)發(fā)人員使用一組API,該工具需要響應(yīng)其使用這些API的方式,而不是其他人使用它們的方式。同樣,該工具需要根據(jù)開(kāi)發(fā)人員編寫(xiě)的代碼為方法提供適當(dāng)?shù)闹剌d。擁有足夠大的訓(xùn)練數(shù)據(jù)集和響應(yīng)模型至關(guān)重要。需要的是可以幫助開(kāi)發(fā)人員更快地交付其想要交付的東西的一種工具,而不是在其他項(xiàng)目中重復(fù)相同的錯(cuò)誤。
IntelliCode可能是最成熟的人工智能助手,也是最不引人注目的,但很像IntelliSense的擴(kuò)展。開(kāi)發(fā)人員不只是在Visual Studio中使用它,它也可用作Visual Studio Code擴(kuò)展,因此可以將其用作日常開(kāi)發(fā)環(huán)境選擇的一部分。除了標(biāo)準(zhǔn)版本之外,微軟公司還提供了Insider版本,讓開(kāi)發(fā)人員可以試驗(yàn)即將推出的功能。當(dāng)前Insider版本中的一個(gè)有用工具是Python的API示例,顯示對(duì)已識(shí)別API的示例調(diào)用。開(kāi)發(fā)人員會(huì)在單獨(dú)的編輯器窗口中發(fā)現(xiàn)它們按受歡迎程度進(jìn)行分組,因此可以復(fù)制并粘貼到其代碼中,或者只是將它們用作如何使用API的指南,使用Visual Studio Code的內(nèi)置REPL查找調(diào)用為開(kāi)發(fā)人員提供所需的響應(yīng)。其他Insider工具包括一種為常見(jiàn)JavaScript庫(kù)生成日期/時(shí)間格式的方法,通過(guò)舉例可以說(shuō)明如何顯示它們。
為數(shù)據(jù)轉(zhuǎn)換生成代碼
像這樣的示例編程是將人工智能輔助添加到開(kāi)發(fā)過(guò)程的另一種有用方法。微軟研究院的PROSE(使用示例進(jìn)行程序合成)已經(jīng)在Excel和許多Azure和Power Platform工具以及SQLServer中使用。Visual Studio將其用作IntelliCode重構(gòu)工具的一部分,在開(kāi)發(fā)人員的代碼中查找模式,并建議可以重用它們的位置。這也是一種提取數(shù)據(jù)并對(duì)其進(jìn)行一致轉(zhuǎn)換、生成接受輸入并以預(yù)期輸出格式交付的代碼的有用方法。
最好將人工智能輔助開(kāi)發(fā)工具視為內(nèi)置于編輯器中的配對(duì)程序員。它并不是為開(kāi)發(fā)人員生成代碼的機(jī)器。與其相反,將其視為可以加快開(kāi)發(fā)過(guò)程、減少錯(cuò)誤和自動(dòng)執(zhí)行重復(fù)任務(wù)的建議。讓開(kāi)發(fā)人員的編輯器建議測(cè)試有助于采用測(cè)試驅(qū)動(dòng)開(kāi)發(fā),并且可以根據(jù)預(yù)期輸出生成正則表達(dá)式和轉(zhuǎn)換,從而簡(jiǎn)化字符串和數(shù)據(jù)操作。
如果要克服這個(gè)應(yīng)用差距,開(kāi)發(fā)人員需要更快、更一致地交付代碼。將機(jī)器學(xué)習(xí)添加到開(kāi)發(fā)過(guò)程中,而不會(huì)中斷流程。Stack Overflow等工具通過(guò)提供其他開(kāi)發(fā)人員如何解決相同或類(lèi)似問(wèn)題的示例來(lái)提供幫助。
這些基于人工智能的新工具更進(jìn)一步解析和理解所有數(shù)百萬(wàn)行未記錄的代碼,并在開(kāi)發(fā)人員需要時(shí)找到有用的片段,而無(wú)需搜索它們。開(kāi)發(fā)人員需要做的就是編寫(xiě)代碼,并在問(wèn)題出現(xiàn)時(shí)尋求解決辦法。
版權(quán)聲明:本文為企業(yè)網(wǎng)D1Net編譯,轉(zhuǎn)載需注明出處為:企業(yè)網(wǎng)D1Net,如果不注明出處,企業(yè)網(wǎng)D1Net將保留追究其法律責(zé)任的權(quán)利。