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
























