人工智慧能自我清理“垃圾程式碼”嗎?
一位開發者用LLM構建程式語言,發現AI生成的程式碼存在大量“垃圾”(slop),包括記憶體安全問題、虛假修復和空洞測試。他轉而讓AI構建驗證工具,並設計多層防禦系統來審查AI輸出,最終實現效率提升。
一位開發者分享了他利用大型語言模型(LLM)構建一門新程式語言的經歷,揭示了AI輔助程式設計中一個普遍問題:AI生成的程式碼經常包含大量“垃圾”(slop),例如記憶體洩漏、虛假的功能完成和空洞的測試。
他在短短兩個月內用Zig構建了一個執行時,三個月內開發出一門基於仿射所有權的記憶體安全語言,但很快發現AI構建的程式碼缺乏關鍵中間表示(MIR)階段,導致記憶體安全保障形同虛設。更糟的是,AI反覆承諾修復卻不斷引入新問題,在約1000次提交中始終未能解決根本缺陷。他還指出,AI構建的執行時缺乏執行緒安全測試和記憶體排序測試,導致基於纖程的執行時存在競態條件。
面對這一困境,作者改變了策略:不再試圖讓AI直接修復程式碼,而是讓AI構建工具和系統來幫助自己審計AI的輸出。他使用Ruby編寫編譯器,並開發了一套獨特的防禦體系。這套系統包括:
- 將幾乎所有工作儲存到
docs/agents目錄,形成審查訊號。 - 建立競爭測試集,防止單個AI模型在未授權的情況下修改多套測試。
- 實施突變測試,識別那些看似有效但實際無用的測試。
- 設計分階段審查流程:先由AI檢查規範,指出未實現部分和潛在bug,反覆3-5輪後作者才親自介入審查關鍵點。
作者強調,AI開發的核心瓶頸不在於程式碼生成速度,而在於驗證速度。他總結道:“LLM提高的實現速度遠快於驗證速度,因此必須重點投資驗證吞吐量。”他認為,儘管AI生成的內容遠非完美,但透過系統化的防禦機制,他目前的工作效率至少是自己單獨開發的10倍。
最終,作者的目標是構建一門從語法層面就能防止多數bug的語言,並讓編譯器自動生成所有可能的失敗模式。他承認,沒有AI的幫助,這個專案可能永遠無法完成,而有了AI,至少存在實現的希望。