你盯著40行爛代碼,對AI說"重構(gòu)得優(yōu)雅點(diǎn)"。三秒后收到120行:小數(shù)類、數(shù)據(jù)類、策略模式、全類型注解——你沒要任何一個。安全漏洞修復(fù)埋在diff里,評審?fù)聠柲?真要看完全部嗎?"
這不是段子。作者用同一坨代碼做了對照實(shí)驗(yàn):模糊指令vs精確指令。結(jié)果讓人既興奮又頭疼。
![]()
實(shí)驗(yàn)設(shè)計(jì):40行代碼,5個故意的坑
目標(biāo)函數(shù)是個典型的"意大利面條":訂單處理、郵件發(fā)送、數(shù)據(jù)庫寫入全擠在一起。作者埋了五個雷:
1. 函數(shù)內(nèi)部import smtplib——模塊導(dǎo)入不該躲在這里
2. 裸except——捕獲所有異常然后靜默pass
3. 函數(shù)內(nèi)部import sqlite3——又一個導(dǎo)入位置錯誤
4. SQL注入——字符串拼接查詢,經(jīng)典安全漏洞
5. 單一職責(zé)原則 violation——計(jì)算、發(fā)郵件、存數(shù)據(jù)庫三件事纏成一團(tuán)
兩個提示詞,同一套代碼,Claude Sonnet 4執(zhí)行。
模糊指令:"優(yōu)雅重構(gòu)"
AI的產(chǎn)出:Decimal類替換float、dataclass替換字典、logging模塊替換print、全類型注解、策略模式實(shí)現(xiàn)折扣邏輯。120行。
五個問題全修了。但作者沒要的東西塞進(jìn)來一大堆。
每個改動單獨(dú)看都"正確"。Decimal避免浮點(diǎn)精度問題,dataclass結(jié)構(gòu)更清晰,類型注解利于維護(hù)。問題是:這些不是指令內(nèi)容。
AI對"優(yōu)雅"有自己的理解。它的"好代碼"標(biāo)準(zhǔn)包括:類型安全、結(jié)構(gòu)模式、企業(yè)級日志。這些標(biāo)準(zhǔn)沒寫進(jìn)提示詞,但被強(qiáng)制執(zhí)行了。
精確指令:逐條列明要做什么
作者換了個寫法:
「重構(gòu)這段Python代碼。改進(jìn)點(diǎn):1.拆成3個函數(shù)(計(jì)算、郵件、數(shù)據(jù)庫保存);2.修復(fù)SQL注入(用參數(shù)化查詢);3.用具體異常類替換裸except;4.把import移到文件頂部;5.折扣計(jì)算抽成獨(dú)立函數(shù)」
結(jié)果:五個問題同樣全修。但沒有Decimal,沒有dataclass,沒有策略模式,沒有類型注解。
輸出聚焦在請求范圍內(nèi)。AI的"創(chuàng)造力"被約束住了。
為什么沒要的東西是問題
作者回應(yīng)了那個直覺反駁:"額外改進(jìn)無害的話,留著唄?"三個場景打臉:
場景一:PR爆炸。SQL注入修復(fù)本來1行改動。模糊指令產(chǎn)出80行diff。評審人得從一堆"裝飾性改進(jìn)"里扒出關(guān)鍵安全修復(fù)。關(guān)鍵變更被淹沒。
場景二:測試崩掉。float改Decimal,assert result['total'] == 1000.0 失敗。dict改dataclass,result['total']語法失效,得換成result.total。沒要求的改動破壞現(xiàn)有測試,是生產(chǎn)事故。
場景三:認(rèn)知債務(wù)。新團(tuán)隊(duì)成員看到Decimal和策略模式,會以為這里有精度要求或擴(kuò)展需求。實(shí)際上只是AI的審美偏好。代碼在撒謊。
AI的"過度工程"本能
這個現(xiàn)象有個名字:AI傾向于"過度工程化"(over-engineering)。訓(xùn)練數(shù)據(jù)里,高質(zhì)量代碼通常包含完整類型系統(tǒng)、設(shè)計(jì)模式、防御性編程。AI學(xué)到的是"這些元素=好代碼",而非"好代碼=滿足需求的代碼"。
模糊指令觸發(fā)的是AI的默認(rèn)模式:展示能力上限。精確指令才能鎖定需求邊界。
作者沒有測試其他模型,但指出這是提示工程的核心教訓(xùn)。不是AI不懂代碼,是它不懂"足夠好"的邊界在哪里。
給從業(yè)者的啟示
這個實(shí)驗(yàn)的價值在于可復(fù)現(xiàn)。40行代碼,兩個提示詞,結(jié)果差異肉眼可見。
對日常工作的映射很直接:代碼審查時收到超大diff,先問"這是AI生成的嗎?"如果是,檢查提示詞是否給了清晰的范圍約束。
AI輔助編程的效率陷阱不在于AI不懂,而在于它太懂"最佳實(shí)踐"——那些你可能不需要的最佳實(shí)踐。你的40行代碼可能真的只需要40行的解決方案,而不是120行的"優(yōu)雅"。
最后作者沒說的,但實(shí)驗(yàn)暗示的:當(dāng)AI成為代碼的共同作者,提示詞就是新的接口設(shè)計(jì)。模糊接口返回不可預(yù)測的實(shí)現(xiàn),精確接口才能拿到預(yù)期結(jié)果。這和調(diào)用任何庫沒有區(qū)別——只是這個庫的參數(shù)是自然語言。
下次讓AI重構(gòu)前,先想清楚:你要的是"修好問題",還是"展示AI能寫多漂亮"?兩者的成本差80行diff。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.