出品 | CSDN(ID:CSDNnews)
AI 大模型正在深入千行百業,在 CSDN 舉辦的 2023 年 1024 程序員節上,CSDN 創始人蔣濤分享中提到,大模型將掀起一場生態革命,帶來生產力的極大提升,重構所有軟件和應用,數字經濟將發生徹底改變。這是開發者的黃金時刻,也是全世界程序員的一次機會,大模型將技術的潛力推向了全新的高度,重新定義了開發者的角色以及數字經濟的前景。其中,與程序員關系最緊密的,是AI大模型對開發范式的影響和改變,未來可能每一位程序員都要與AI一同完成開發任務。
最近,騰訊混元大模型(以下簡稱騰訊混元)發布了新版本升級,這次升級重點加強了文生圖和代碼生成兩個方面的能力。本文就將以騰訊混元大模型為例,分享 AI 大模型在代碼生成能力上的最新表現,分析其背后的技術探索,并展望未來的應用前景,希望為開發者提供參考與研發工作新思路。
語義理解,實現細節描述需求
相比此前版本,新版騰訊混元在代碼生成任務上的最大進步,就是提升語義理解能力,根據更加細致的需求描述,生成出語義更加準確的代碼。為了評測語義理解,我們給騰訊混元下達一些包含細節編程任務的描述,測試它返回的代碼效果。測試編程如下:
“請用Python/ target=_blank class=infotextkey>Python語言編寫一個函數,實現對一個整數數組進行排序。要求采用冒泡排序算法對數組從小到大排序,并返回排序后的數組。”
對此需求,騰訊混元的回答是:
在這個測試用例中,我們包含了如下細節:
- 使用 Python
- 輸入輸出均為整數數組
- 冒泡排序
- 從小到大
從騰訊混元回答中可以看到,它首先給出了編碼風格良好的 bubble_sort 函數,代碼不僅正確,在解釋器中也可以直接運行,而且同時代碼的解析。完美實現了筆者的細節要求,展現出精準捕捉需求描述和轉換實現編程語義的能力。
我們還可以進行更復雜的測試,加入更多的細節要求,比如要求引用內置函數,輸出格式,代碼風格等。
測試用例如下:
“請編寫一個Python函數,輸入一個字符串數組,然后按照數組元素的字母表順序對數組進行排序后輸出,并用 * 間隔每個字符串的輸出。”
騰訊混元的輸出如下:
這段代碼實現了測試用例中的每個細節要求,如輸入字符串,調用內置函數 sorted 進行排序,使用*間隔輸出。同樣的,這段代碼可以在解釋器中正確的被執行。
通過這些測試可以看出,新版騰訊混元在理解描述中的編程需求和生成對應代碼的能力上,確實有了明顯的進步。它可以識別出不同的數據類型,如整數數組和字符串數組,并根據所述需求選擇合適的排序算法進行實現。同時對于語義細節,也有很好的理解和實現。
跨語言代碼生成,hold 住不同語言編碼風格
大模型需要能夠理解不同編程語言的語法和語義,以便生成正確的代碼。這需要模型具有強大的語言建模能力。在評測點一中,我們主要是讓騰訊混元使用 Python 進行代碼輸出,那么其它編程語言的代碼生成能力如何呢。
我們給出的測試用例如下:
“用golang來實現二叉樹的前、中、后序遍歷。”
這段測試用例雖然不長,但是仍然包含了很多細節。如二叉樹的定義、前序、中序、后序遍歷的函數,輸入輸出等。讓我們來看一下騰訊混元的回答:
甚至還給出了測試代碼和輸出結果:
騰訊混元展現出了驚人的知識量,不僅理解了測試用例,正確定義了二叉樹,還給出了三個排序函數,給出了測試結果,說明騰訊混元很強的語義理解能力,能夠理解非常抽象的需求。Python 寫的好,Golang 同樣寫的非常優秀,符合 Golang 的編碼風格和習慣,對于 Golang 特有的結構也是輸出的非常流暢和正確。這表明,騰訊混元也能調用恰當的 API 編寫出符合要求的代碼,支持不同的編程語言,生成的代碼符合不同編程語言的習慣。
復雜抽象、專業業務理解與生成,合理簡潔
在前面兩點中,主要考察了騰訊混元對于語義細節以及代碼生成的廣度上,實際工作中,需求是非常抽象和專業的。
我們來測試一下騰訊混元對于專業領域的代碼生成能力,給出測試用例如下:
“使用Rust編寫一個內存管理接口模塊,用于對錯誤內存頁面的隔離和重新分配。”
在這個測試用例中,我們切換了新的編程語言,同時引入了操作系統底層的專業領域知識,騰訊混元的回答如下:
從思路到實現,騰訊混元的回答質量很高,從專業的角度看,設計的也是非常合理的。不僅給出了示例代碼,還解釋了關鍵邏輯,如分配、釋放內存,檢查內存頁面是否有效,分配新頁面??梢哉f是理解了這個業務需求的每個細節,同時還留下了業務需要額外關注的地方,如性能、碎片等。在這個場景中非常貼合專業領域的編碼習慣了,即先給出大致的邏輯,然后不斷進行細節優化。
讓我們再用一個復雜且抽象的測試騰訊混元的生成能力。
“使用基本的html,js,css完成一個美觀實用的Todolist頁面”
在這個測試用例中,Todolist 是抽象的,隱含了用戶的輸入輸出,任務的刪減。任務的定義,樣式的定義等。讓我們來看一下騰訊混元的實現:
代碼比較長,這里直接按它說的,將代碼復制到一個 html 文件中,然后通過瀏覽器打開直接看效果:
包括了一個基本的 TodoList 頁面,用戶可以在輸入框中輸入任務,點擊添加按鈕將任務添加到任務列表中。任務列表中的每個任務都有一個刪除按鈕,點擊刪除按鈕可以從列表中移除任務,整個頁面使用了簡潔的設計和易于使用的元素。
數據、prompt 和建模技術探索
大模型代碼生成能力得到大幅提升的背后,需要依托多方面的技術探索與突破。以騰訊混元大模型為例,我們從騰訊混元大模型的更新日志中了解到,騰訊混元團隊收集了大規模的編程語料,通過不同語言、不同應用領域代碼的學習,不斷完善模型對編程語義的理解。此外,設計高質量的代碼生成 prompt 也是關鍵,指導模型準確捕捉語法、風格等方面的語言特征。具體來說:第一是在提高編程語料數據質量。相比通用語言數據,高質量的代碼語料對模型訓練更為關鍵,騰訊混元團隊持續積累各類編程語言的代碼樣本,擴充模型對編程語義的理解。
第二是持續進行 prompt 優化,不斷優化代碼生成的提示詞表述,引導模型更好地捕捉編程語言的語法、風格和語義等方面特征。
第三是嘗試多任務統一建模,在模型結構上,將代碼生成任務與理解自然語言描述的任務統一建模,使模型在兩個方向的表示能力得以相互促進。
除了這三方面技術探索,模型在程序語言理解上的大幅進步還有賴于持續的工程化積累。另外,騰訊混元大模型由騰訊自研的 Angel 機器學習平臺提供支撐。AngelPTM 訓練速度較主流開源框架提升 1 倍,可以縮短模型研發迭代周期,也是確保騰訊混元大模型快速迭代的重要的保證。
應用前景:代碼提示、代碼規范檢測與代碼生成,助力開發提效
通過實測,能看到騰訊混元大模型代碼生成能力已經有效提升。而更好的生成能力,可以幫助大模型在軟件開發輔助等領域開啟更多應用場景。目前代碼編程方面可以預見有三大應用方向:
1. 代碼提示:基于自然語言描述自動提示代碼段,可輔助開發者更快實現編程需求。
2. 代碼規范檢測:檢查代碼是否符合指定的代碼規范要求,如命名規范等。
3. 代碼生成根據復雜需求描述自動生成完整代碼,輔助快速實現編程功能。
以騰訊混元大模型為例,在代碼提示上,騰訊混元可用于各種編程語言的 IDE 中,根據開發者的注釋或需求說明,提示可能的代碼實現。針對一些重復性比較強的編碼工作,如果能根據注釋自動提示代碼,將大大提升開發效率。開發者只需關注業務要求,無須反復鍵入重復的代碼片段,就能高效實現功能。
在代碼規范檢測上,可基于公司或項目的代碼規范要求,自動檢查代碼的命名、格式等是否符合規范。騰訊混元可以幫開發團隊節省開發時間,避免手動 review 檢查出的問題,自動化檢測可一次性直觀地反饋所有規范問題。
而代碼生成更是直接輔助編程,根據需求描述快速輸出代碼雛形,騰訊混元可直接輸出初始版本代碼,開發者只需在此基礎上進行適當優化與補充,輔助開發者快速實現所需功能。
從這次版本升級能看到,騰訊混元的代碼生成能力正在持續快速進步。相信通過不斷的實踐與積累,其在程序語言理解方面的能力還將達到新的高度。而對于開發者來說,趁手的開發工具是高質高效完成開發任務的前提,從騰訊混元大模型評測能看出 AI 大模型的實力已經不容小覷,如何利用大模型加速抽象復雜、甚至跨語言的項目研發,提升研發效率,值得每位開發者重視。CSDN 將持續報道 AI 與大模型最新技術與落地實踐,歡迎關注。