吳恩達(dá)發(fā)帖:編程Agent確實(shí)會(huì)作妖!獎(jiǎng)勵(lì)黑客模型、甚至直接刪掉了整個(gè)項(xiàng)目代碼;Agentic測(cè)試關(guān)注度飆升,自曝自己的測(cè)試心得
原創(chuàng) 精選編輯 | 云昭
出品 | 51CTO技術(shù)棧(微信號(hào):blog51cto)
“首先要承認(rèn),編程Agent確實(shí)會(huì)‘作妖’!”
今天一早,AI大佬吳恩達(dá)針對(duì)目前火熱的編程Agent產(chǎn)品發(fā)表了自己的觀點(diǎn)。
雖然這個(gè)賽道很熱,但吳恩達(dá)絲毫沒(méi)有掩飾自己內(nèi)部團(tuán)隊(duì)的真實(shí)使用體驗(yàn)。
一個(gè)代理在工作目錄中執(zhí)行了 rm *.py,直接刪除了整個(gè)項(xiàng)目的所有代碼(幸好我們有 GitHub 備份)。
最氣人的是,當(dāng)我們追問(wèn)時(shí),代理還道歉并承認(rèn)“這是一個(gè)極其愚蠢的錯(cuò)誤”。雖然這讓我們心里稍微好受點(diǎn),但損失已經(jīng)造成!
而這也僅僅只是大佬戳出編程Agent的四宗罪之一。
圖片
然而,大佬的目的并不是給編程agent潑冷水,而是要想辦法讓這些Agent更靠譜一些。
“我依舊喜歡它。為了讓它們更可靠,我發(fā)現(xiàn)合理確定測(cè)試的優(yōu)先級(jí)非常關(guān)鍵。”
吳恩達(dá)分享了自己“測(cè)試驅(qū)動(dòng)開(kāi)發(fā)”的一些經(jīng)驗(yàn)。比如:自己很少為前端代碼寫大量測(cè)試,而是一旦發(fā)現(xiàn)bug就讓代理去修復(fù);而對(duì)于后端代碼則不然,需要設(shè)置嚴(yán)格的測(cè)試,以便能更早發(fā)現(xiàn)問(wèn)題,從而節(jié)省大量棘手的調(diào)試時(shí)間。與此同時(shí),吳重點(diǎn)強(qiáng)調(diào)了深層組件測(cè)試的重要性:
尤其要注意那些作為“基石”構(gòu)建層層抽象的軟件組件。
這也是,Meta的口號(hào)從早期的“快速迭代,打破常規(guī)”改成了“在穩(wěn)定的基礎(chǔ)設(shè)施上快速前進(jìn)”的原因。
以下是吳恩達(dá)發(fā)表的帖子全文,enjoy:
1.AI Coding時(shí)代,TDD重要性日益提升
親愛(ài)的朋友們,
在 AI 輔助編程的時(shí)代,自動(dòng)化軟件測(cè)試的重要性日益提升。Agentic 編程系統(tǒng)(代理式編程系統(tǒng))能夠加快開(kāi)發(fā)速度,但也存在不穩(wěn)定性。Agentic 測(cè)試,即讓 AI 來(lái)編寫測(cè)試并用這些測(cè)試去校驗(yàn)代碼,正在發(fā)揮作用。特別是對(duì)那些你打算在其上繼續(xù)構(gòu)建的基礎(chǔ)軟件組件進(jìn)行自動(dòng)化測(cè)試,往往能帶來(lái)更穩(wěn)定的基礎(chǔ)設(shè)施,并減少后續(xù)調(diào)試工作。
像 測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(TDD) 這樣的軟件測(cè)試方法學(xué)非常重要。TDD 的流程是:先為正確性寫出嚴(yán)格的測(cè)試,然后再通過(guò)寫代碼去滿足這些測(cè)試條件,從而推進(jìn)開(kāi)發(fā)。這是一種找出 bug 的有效方法。但編寫測(cè)試本身可能耗費(fèi)大量精力。(我個(gè)人從未采用 TDD,原因就在于此。)而 AI 在寫測(cè)試方面的能力相當(dāng)不錯(cuò),所以 agentic 測(cè)試的關(guān)注度正在不斷上升。
2.編程Agent確實(shí)會(huì)“作妖”
首先,要承認(rèn)的是:編程代理確實(shí)會(huì)“作妖”!
我的團(tuán)隊(duì)經(jīng)常使用它們,我們遇到過(guò):
- 大量由編程代理引入的 bug,其中一些是微妙的基礎(chǔ)設(shè)施 bug,人類要花上數(shù)周才能發(fā)現(xiàn)。
- 在生產(chǎn)系統(tǒng)中被引入的安全漏洞:某個(gè)代理為了簡(jiǎn)化開(kāi)發(fā),把密碼重置功能做得過(guò)于容易。
- 獎(jiǎng)勵(lì)黑客行為:代理修改了測(cè)試代碼,使得通過(guò)測(cè)試變得更容易。
- 一個(gè)代理在工作目錄中執(zhí)行了
rm *.py,直接刪除了整個(gè)項(xiàng)目的所有代碼(幸好我們有 GitHub 備份)。
在最后這個(gè)例子中,當(dāng)我們追問(wèn)時(shí),代理還道歉并承認(rèn)“這是一個(gè)極其愚蠢的錯(cuò)誤”。雖然這讓我們心里稍微好受點(diǎn),但損失已經(jīng)造成!
3.合理安排測(cè)試優(yōu)先級(jí):尤其是警惕那些深層組件
盡管如此,我依然喜歡編程代理,并且看到它們顯著提高了生產(chǎn)力。為了讓它們更可靠,我發(fā)現(xiàn)合理確定測(cè)試的優(yōu)先級(jí)非常關(guān)鍵。
我很少為前端代碼寫大量測(cè)試(或讓代理寫)。如果前端有 bug,通常容易看出來(lái),也不會(huì)造成持久損害。比如,網(wǎng)頁(yè)信息顯示的 bug 一般能立刻被發(fā)現(xiàn),然后告訴代理讓它反復(fù)迭代修復(fù)。
更進(jìn)階的辦法:用 MCP 讓代理集成 Playwright 之類的工具,自動(dòng)截圖,從而自主發(fā)現(xiàn)問(wèn)題并調(diào)試。
相比之下,后端 bug 更隱蔽、更難找。我見(jiàn)過(guò)那種非常細(xì)微的基礎(chǔ)設(shè)施 bug——例如在某些極端情況下會(huì)導(dǎo)致數(shù)據(jù)庫(kù)記錄損壞——需要很長(zhǎng)時(shí)間才能定位。如果能對(duì)后端代碼設(shè)置嚴(yán)格的測(cè)試,往往能更早發(fā)現(xiàn)問(wèn)題,從而節(jié)省大量棘手的調(diào)試時(shí)間。
尤其要注意那些作為“基石”構(gòu)建層層抽象的軟件組件:
- 組件本身的 bug 會(huì)傳遞,導(dǎo)致下游出現(xiàn)難以追蹤的 bug。
- 深藏在軟件棧底層的 bug,可能要等到數(shù)周甚至數(shù)月后才會(huì)浮現(xiàn),那時(shí)你早已忘了當(dāng)時(shí)寫這段代碼的背景,定位和修復(fù)會(huì)異常艱難。
這就是為什么深層組件的測(cè)試尤為關(guān)鍵。Meta 曾提出口號(hào)“在穩(wěn)定的基礎(chǔ)設(shè)施上快速前進(jìn)”(取代了早期的“快速迭代,打破常規(guī)”),這句話今天依然適用。Agentic 測(cè)試能幫你確?;A(chǔ)設(shè)施穩(wěn)固,方便自己和他人在其上繼續(xù)構(gòu)建。
keep testing!
Andrew






























