生成式人工智慧如何改變開發者的工作方式

生成式人工智慧如何改變開發者的工作方式

How generative AI is changing the way developers work

在電腦僅用於計算的時代,工程師Douglas Engelbart展示了“一切演示的母親”,他將電腦重新定位為一種能夠解決人類最複雜問題的協作工具。在演示開始時,他詢問觀眾成員,如果有一台能夠即時回應他們行為的電腦,他們將從中獲得多少價值。

您可以對生成式AI模型提出相同的問題。如果您有一個高度響應的生成式AI編碼工具來構思新想法,將大想法拆分成較小的任務並為問題提出新解決方案,您的創造力和生產力可能會提高多少?

這不是一個假設性的問題。隨著新的生成式AI編碼工具的出現,這些工具根據自然語言提示和現有代碼提供代碼建議和整個功能,AI輔助的工程工作流程正迅速崛起。這些工具以及它們可以幫助開發者完成的任務正在迅速改變。這使得每個開發者都有必要了解目前正在發生的事情以及對軟件建設方式的影響。

在本文中,我們將通過探討以下內容,介紹當今軟件開發中生成式AI的概貌:

生成式AI為開發者工作流程帶來的獨特價值

AI和自動化已經成為開發者工作流程的一部分。從機器學習驅動的安全檢查到CI/CD管道,開發者已經在使用各種自動化和AI工具,例如GitHub上的CodeQL

儘管這些類別之間存在重疊,但以下是生成式AI與自動化和其他AI編碼工具之間的區別:

自動化: 🛤
您知道需要完成的任務,並且知道每次都能找到可靠的方法。

基於規則的邏輯:🔎
您知道最終目標,但有多種方法可以實現。

機器學習:🧠
您知道最終目標,但實現方法的數量成指數增長。

生成式AI:🌐
您有宏偉的編碼夢想,並希望自由地將它們實現。

您希望確保提交到存儲庫的任何新代碼在合併到主分支之前都符合格式規範。您可以使用像GitHub Actions這樣的CI/CD工具在選擇的事件(如提交或拉取請求)上觸發自動化工作流程,而不是手動驗證代碼。

您知道一些SQL注入模式,但是在代碼中手動掃描它們很耗時。像Code QL這樣的工具使用規則系統來對代碼進行排序,以找到這些模式,因此您無需手動操作。

您希望掌握安全漏洞,但SQL注入列表持續增長。像Code QL這樣使用機器學習(ML)模型的編碼工具,經過培訓,不僅可以檢測已知的注入,還可以在尚未看到的數據中找到類似於這些注入的模式。這可以幫助您提高對確認漏洞的識別能力並預測新漏洞。

生成式AI編碼工具利用機器學習生成新穎的答案和預測編碼序列。像GitHub Copilot這樣的工具可以減少您切換出IDE查找樣板代碼的次數,或者幫助您腦力激盪編碼解決方案。通過將您的角色從瑣碎的寫作轉向戰略性決策制定,生成式AI可以幫助您在更高、更抽象的層次上思考代碼,讓您更專注於_要構建的內容_,而花更少的時間擔心_如何_。

想了解更多關於生成式AI的信息嗎?

查看我們的指南,了解從常見的生成式AI模型到其在代碼之外的應用,包括遊戲、金融和醫療等領域。

如何設計和構建生成式AI編碼工具?

構建生成式AI編碼工具需要通過深度學習在大量代碼上訓練AI模型。深度學習是一種讓計算機像我們一樣處理數據的方法,通過識別模式、建立連接並在有限指導下進行推理。

為了模仿人類學習模式的方式,這些AI模型使用大量節點網絡,這些節點可以處理和加權輸入數據,並且被設計成像神經元一樣工作。一旦在大量數據上訓練成功並能夠生成有用的代碼,它們就會被構建到工具和應用程序中。這些模型可以插入編碼編輯器和IDE,並根據自然語言提示或現有代碼對其進行響應,以建議新的代碼、函數和短語。

生成式AI讓開發人員可以專注於更大、更有意義的問題。

在編碼方面,這些模型仍處於初期階段,但自從兩年前推出GitHub Copilot以來,我們看到的收

穫非常明顯。在一項研究中,我們發現使用GitHub Copilot的開發人員報告稱自己的生產力提高了88%。這些報告得到了定量研究的支持,研究發現使用GitHub Copilot的開發人員編碼速度比沒有使用的人快55%。

在談論如何制作生成式AI編碼工具之前,讓我們先定義它們是什麼。它們始於LLM(大型語言模型),這是一組在大量代碼和人類語言上訓練的算法。正如我們上面提到的,它們可以預測編碼序列_並且_根據現有代碼或自然語言提示生成新內容。

今天最先進的LLM是變壓器。這意味著它們使用了一種稱為注意力機制的技術,可以在用戶輸入和模型已經生成的輸出之間靈活地建立不同的令牌連接。這使得它們可以提供比以前的AI模型更具上下文相關性的響應,因為它們擅長連接點和全局思考。

以下是變壓器如何工作的示例。假設您在代碼中遇到單詞log。位於該處的變壓器節點將使用注意力機制在上下文中預測序列中接下來會出現哪種類型的日誌。例如,在以下示例中,您輸入語句 from math import log。生成式AI模型將推斷您指的是對數函數。

如果您添加提示 from logging import log,它將推斷您正在使用日誌記錄功能。

儘管有時候日誌只是日誌。

除變壓器之外,還可以使用其他框架構建LLM。但是使用循環神經網絡或長短期記憶等框架的LLM在處理長句子和段落方面存在困難。

它們還通常需要在標記數據上進行訓練(使訓練成為勞動密集型過程)。這限制了它們輸出的復雜性和相關性以及它們可以學習的數據。

另一方面,變壓器LLM可以在無標籤數據上進行訓練。一旦給定基本學習目標,LLM會採用新輸入數據的一部分並用其練習學習目標。一旦在該部分輸入上實現了這些目標,它們就可以應用所學來理解輸入的其餘部分。這種自監督學習過程使得變壓器LLM能夠分析大量無標籤數據 – 而且,LLM接受的數據集越大,它們就越能通過處理該數據進行擴展。

為什麼開發人員應該關心變壓器和LLM?

像OpenAI的GPT-3、GPT-4和Codex模型這樣的LLM在大量自然語言數據和公開可用源代碼上進行了訓練。這就是為什麼像ChatGPT和GitHub Copilot這樣的工具可以產生上下文準確的輸出的部分原因。

以下是GitHub Copilot生成編碼建議的方式:

  • 將您迄今為止編寫的所有代碼或IDE中光標之前的代碼提供給一系列算法,這些算法將決定哪些部分的代碼將由GitHub Copilot處理。
  • 由於GitHub Copilot由基於變壓器的LLM提供支持,因此它將抽象出從訓練數據中學到的模式並將這些模式應用於您的輸入代碼。
  • 最終結果:具有上下文相關性的原創編碼建議。GitHub Copilot甚至會過濾掉已知的安全漏洞,容易受到攻擊的代碼模式以及與其他項目匹配的代碼。

**請記住:**創建新的內容,如文本,代碼和圖像是生成AI的核心。LLM擅長從訓練數據中抽象模式,將這些模式應用於現有語言,然後生成遵循這些模式的語言或代碼行。考慮到LLM的規模之大,它們可能會生成尚不存在的語言或代碼序列。就像審查同事的代碼一樣,您也應該評估和驗證AI生成的代碼。

無論您是開發人員,還是對AI技術感興趣的人,了解生成AI和其在軟件開發中的應用將使您在未來的工作中保持競爭力。隨著技術的發展,我們可以期待生成AI工具將繼續改變軟件開發的方式,為開發人員提供更多創新和高效的解決方案。

為什麼語境對AI編碼工具很重要

培養良好的提示生成技巧很重要,因為輸入代碼會經過一個稱為上下文窗口的東西,這在所有基於變換器的LLM中都存在。上下文窗口表示LLM可以處理的數據容量。雖然它不能處理無限量的數據,但它可以變得更大。目前,Codex模型具有一個上下文窗口,允許它處理幾百行代碼,這已經提高並加速了代碼完成和代碼變更摘要等編碼任務。

開發人員使用拉取請求、項目中的文件夾、打開的問題等細節來語境化他們的代碼。因此,在具有有限上下文窗口的編碼工具方面,挑戰在於找出除代碼之外的哪些數據會帶來最好的建議。

數據的順序也會影響模型的上下文理解。最近,GitHub對其對編程工具進行了更新,以便它不僅考慮光標之前的代碼,還考慮光標之後的一些代碼。這種範式被稱為Fill-In-the-Middle(FIM),它在代碼中間留下一個空位供GitHub Copilot填充,為工具提供了有關開發人員擬定的代碼以及它應如何與程序其餘部分對齊的更多上下文。這有助於產生更高質量的代碼建議,而無需增加延遲。

視覺效果也可以語境化代碼。多模態LLM(MMLLM)可以擴展變換器LLM,以便它們可以處理圖像和視頻以及文本。OpenAI最近發布了其新的GPT-4模型,微軟也公開了自己的MMLLM,名為Kosmos-1。這

些模型旨在回應自然語言和圖像,如交替的文本和圖像、圖像標題對以及文本數據。

GitHub的高級開發者倡導者Christina Warren分享了有關GPT-4以及它為開發者提供的創造潛力的最新信息:

我們在GitHub Next 的研發團隊一直在努力將AI超越編輯器,推出GitHub Copilot X。在這個AI驅動軟件開發的未來願景中,我們不僅採用了OpenAI的新GPT-4模型,還引入了聊天和語音功能,並將GitHub Copilot帶到拉取請求、命令行和文檔中。了解我們如何研究AI驅動軟件開發的未來>

開發人員如何使用生成式AI編碼工具

生成式AI領域充滿了實驗和探索,以揭示技術的全部功能以及它們如何實現有效的開發人員工作流程。生成式AI工具已經改變了開發人員編寫代碼和構建軟件的方式,從提高生產力到幫助開發人員專注於更大的問題。

儘管軟件開發中生成式AI的應用仍在積極定義中,但今天,開發人員正在使用生成式AI編碼工具來:

  • 在複雜的代碼翻譯任務上提前著手。 2021年國際智能用戶界面會議上發表的一項研究發現,生成式AI為開發人員提供了一個框架,將遺留源代碼翻譯成Python。即使建議並非始終正確,開發人員也發現評估並修復這些錯誤比從頭開始手動翻譯源代碼更容易。他們還指出,這種審查和糾正的過程與他們在處理同事產生的代碼時已經在做的事情相似。

通過GitHub Copilot Labs,開發人員可以使用伴隨VS Code擴展(與GitHub Copilot擴展分開但依賴)將代碼翻譯成不同的編程語言。觀看GitHub開發者倡導者Michelle Mannering如何使用GitHub Copilot Labs將其Python代碼翻譯成Ruby的幾個步驟。

  • **更高效地編碼。**儘管自動完成功能已經出現在現代IDE中多年,LLM可以生成較長的建議-有時是多行代碼-這些建議通常更相關。 2022年發表在計算機編程語言協會學報(PACMPL)上的一項研究觀察了20位與GitHub Copilot互動的程序員。他們發現,由於對函數調用和參數完成的行尾建議,開發人員能夠更快地編碼並保持更長時間的工作流。

我們自己的研究也支持這些發現。正如我們之前提到的,我們發現使用GitHub Copilot的開發人員的編碼速度比那些不使用的開發人員快高達55%。但生產力的提高不僅僅在於速度,還有74%的開發人員報告說,在編碼時他們感到更少的挫折,並且能夠專注於更令人滿意的工作。

  • 解決新問題並激發創意。 PACMPL研究還發現,當開發人員不確定如何繼續時,他們使用GitHub Copilot尋找創意解決方案。這些開發人員搜尋下一個可能的步驟,並依賴生成式AI編碼工具來協助處理不熟悉的語法,查找合適的API或找到正確的算法。

我是編寫GitHub Copilot的開發人員之一,但在那之前,我從未編寫過一行Type Script代碼。這不是問題,因為我使用了GitHub Copilot的第一個原型來學習該語言,最終幫助發布了世界上第一個大規模生成式AI編碼工具。

– Albert Ziegler,首席機器學習工程師 // GitHub

  • 在不離開IDE的情況下找到答案。 PACMPL研究中的一些參與者還將GitHub Copilot的多建議窗格視為StackOverflow。由於他們可以用自然語言描述目標,因此參與者可以直接提示GitHub Copilot生成實現目標的想法,然後按Ctrl/Cmd + Enter查看10個建議。儘管這種探索不會帶來深入的知識,但它幫助一位開發者有效地使用不熟悉的API。

GitHub在計算機協會隊列雜誌上發表的2023年研究還發現,生成式AI編碼工具節省了開發人員在線上搜索答案的精力。這為他們提供了更直接的答案,減少了上下文切換,並節省了心力

GitHub對AI驅動的軟件開發未來的新願景的一部分是在您的編輯器中直接提供類似ChatGPT的體驗。觀看GitHub的開發者關係副總裁Martin Woodward如何使用GitHub Copilot Chat找到並修復他的代碼中的錯誤。

https://github.blog/wp-content/uploads/2023/03/01-Copilot-Chat-Debug-Blog.mp4

  • **構建更好的測試覆蓋率。**一些生成式AI編碼工具擅長識別和完成模式。開發人員正在使用這些工具通過自然語言提示來構建單元和功能測試,甚至是安全測試。一些工具還提供安全漏洞過濾功能,因此如果開發者在他們的代碼中無意中引入了漏洞,將會收到提醒。

想看看實際操作的例子嗎?查看GitHub的開發者倡導者Rizel Scarlett如何使用GitHub Copilot為她的代碼庫開發測試

  • **發現他們不知道自己需要的技巧和解決方案。**Scarlett還寫了八個開發人員可以用GitHub Copilot的意想不到的方法 – 從提示它創建一個包含兩個字母ISO國家代碼及其相應國家名稱的字典,到幫助開發人員退出Vim,這是一個有時候難以關閉的編輯器。想了解更多?查看完整指南>

結語

生成式AI為人類提供了一種新的互動模式 – 它不僅減輕了軟件開發的瑣碎部分,而且還激發了開發人員更具創造力,使他們有能力解決重大問題,並以以前無法實現的方式對大型複雜解決方案進行建模。從提高生產力,提供替代解決方案,到幫助您建立新技能 – 例如學習新語言或框架,甚至撰寫清晰的註釋和文檔 – 有很多理由對軟件開發的下一波浪潮感到興奮。這只是開始。

其他 AI 於軟體開發的資源