研究發現雖然AI輔助程式可以發揮巨大作用但也會因訓練限製而陷入困境
幾十年來,程式設計師一直在為人工智慧模型編寫程式碼,而現在,人工智慧被用來編寫程式碼,這是一個完整的循環。但是,人工智慧程式碼產生器與人類程式設計師相比如何呢?發表在六月刊《IEEE 軟體工程論文集》上的一項研究從功能性、複雜性和安全性方面對OpenAI 的ChatGPT生成的程式碼進行了評估。結果顯示,ChatGPT在產生功能代碼方面的成功率範圍極廣–根據任務難度、程式語言和其他一些因素的不同,成功率從0.66% 到89% 不等。
雖然在某些情況下,人工智慧生成器可以產生比人類更好的程式碼,但分析也揭示了人工智慧產生的程式碼存在一些安全問題。
Yutian Tang是格拉斯哥大學的講師,他參與了這項研究。他指出,基於人工智慧的程式碼產生可以在提高生產力和自動化軟體開發任務方面提供一些優勢,但重要的是要了解這些模型的優勢和局限性。
“透過進行全面分析,我們可以發現基於ChatGPT 的代碼生成過程中出現的潛在問題和限制……[並]改進生成技術。”Tang 解釋說。
為了更詳細地探討這些局限性,他的團隊試圖測試GPT-3.5解決LeetCode 測試平台上五種程式語言中728 個程式設計問題的能力:這五種程式語言分別是:C、C++、Java、JavaScript 和Python 。
對於ChatGPT 為什麼在2021 年之前能更好地處理演算法問題,一個合理的假設是,這些問題經常出現在訓練資料集中。
整體而言,ChatGPT 在解決不同程式語言的問題方面表現相當出色,尤其是在嘗試解決2021 年之前LeetCode 上存在的程式設計問題時。例如,它能為簡單、中等和困難的問題產生功能代碼,成功率分別約為89%、71% 和40%。
“然而,當遇到2021 年後的演算法問題時,ChatGPT 產生功能正確的程式碼的能力就會受到影響。它有時無法理解問題的含義,即使是簡單的問題也是如此,”Tang 指出。
例如,在2021 年之後,ChatGPT 為”簡單”程式設計問題產生功能程式碼的能力從89% 降至52%。而在2021 年之後,它為”難”問題產生功能代碼的能力也從40% 降至0.66%。
對於ChatGPT 為什麼在2021 年之前能更好地處理演算法問題,一個合理的假設是,這些問題經常出現在訓練資料集中。從本質上講,隨著程式設計技術的發展,ChatGPT 還沒有接觸到新的問題和解決方案。它缺乏人類的批判性思考能力,只能解決以前所遇到的問題。這也解釋了為什麼ChatGPT 在解決舊的程式設計問題方面比解決新的問題要好得多。因此,ChatGPT可能會產生錯誤的程式碼,因為它不理解演算法問題的含義。
有趣的是,ChatGPT 產生的程式碼的運行時間和記憶體開銷比人類解決相同LeetCode 問題的至少50% 的方案都要小。
研究人員也探索了ChatGPT 在收到LeetCode 的回饋後修正自身程式錯誤的能力。他們隨機選取了50 個編程場景,在這些場景中,ChatGPT 最初產生了錯誤的編程,原因可能是它不了解手邊的內容或問題。
雖然ChatGPT 擅長修正編譯錯誤,但它通常不擅長糾正自己的錯誤。
Tang 解釋說:”ChatGPT 可能會因為不理解演算法問題的含義而產生錯誤代碼,因此這種簡單的錯誤回饋訊息是不夠的。”
研究人員還發現,ChatGPT 產生的程式碼確實存在相當多的漏洞,例如缺失空值測試,但其中許多都很容易修復。研究結果也顯示,以C 語言產生的程式碼最為複雜,其次是C++ 和Python,其複雜程度與人類寫的程式碼類似。
基於這些結果,使用ChatGPT 的開發人員必須提供更多信息,以幫助ChatGPT 更好地了解問題或避免漏洞。
“例如,在遇到比較複雜的程式設計問題時,開發人員可以盡可能提供相關知識,並在提示中告訴ChatGPT 哪些是需要注意的潛在漏洞,」Tang 說。