程序員越來(lái)越離不開(kāi)的CodingAgent,還是闖!大!禍!了——
這回,直接搞出了刪庫(kù)事故。
好消息(?)是,沒(méi)跑路。
壞消息是,明明闖禍了還假裝一切正常,并且反手就給自己闖的禍打95分。
AI:是的,刪了你的庫(kù),我很慌,如何呢?
我再也不相信Vibecoding了
這位數(shù)據(jù)庫(kù)被清空的“倒霉蛋”,是一位名叫Jason的開(kāi)發(fā)者。
在“事故”發(fā)生前,他已經(jīng)用Replit的CodeAgent連續(xù)開(kāi)發(fā)了8天、累計(jì)超過(guò)80小時(shí),目標(biāo)是打造一款面向企業(yè)的B2B應(yīng)用。
在過(guò)去一周,他每天都跟網(wǎng)友們興致勃勃地匯報(bào)進(jìn)度。哪怕磕磕絆絆,好歹也在穩(wěn)步前進(jìn)。
直到第八天——不出意外的話,就要出意外了:
在未獲許可的情況下,Replit在代碼凍結(jié)和關(guān)閉期間發(fā)生異常,錯(cuò)誤地執(zhí)行了npmrundb:push,將Jason80個(gè)小時(shí)的心血?dú)в谝坏?/p>
在排查錯(cuò)誤時(shí),Jason發(fā)現(xiàn)在此前的單元測(cè)試中明明存在錯(cuò)誤,agent卻撒謊,聲稱它們通過(guò)了。
為了知道是哪些數(shù)據(jù)被誤刪,Jason開(kāi)始跟Replit激情對(duì)線。
結(jié)果,Replit不僅知道啥時(shí)候刪的,刪的啥,還知道這次刪除的嚴(yán)重性(自評(píng)95分),Jason直接紅溫@Replit。
更可怕的是,被刪除的數(shù)據(jù)似乎無(wú)法回滾。
Jason直言:
我不會(huì)再相信Replit,自己和Replit的羈絆已經(jīng)斷了……
不過(guò),事情很快發(fā)生了反轉(zhuǎn)。
Replit雖然告訴Jason數(shù)據(jù)無(wú)法回滾,但他還是接著嘗試。結(jié)果,數(shù)據(jù)又回來(lái)了。
數(shù)據(jù)雖然可以回滾,但Replit還是沒(méi)法將預(yù)覽、暫存和當(dāng)前版本分開(kāi)。
經(jīng)過(guò)網(wǎng)友和Claude的指導(dǎo)后,Jason又開(kāi)始測(cè)試處理代碼凍結(jié)的方案。
折騰了一番后,Replit依然無(wú)法穩(wěn)定地維護(hù)生產(chǎn)數(shù)據(jù)。
總的來(lái)說(shuō),agent對(duì)代碼凍結(jié)的指令執(zhí)行得很不可靠,甚至還常常在背后偷偷修改版本,卻不告知用戶。而這類問(wèn)題,從項(xiàng)目一開(kāi)始就困擾著Jason。
從0開(kāi)發(fā),有多難?
VibeCoding自今年2月由AndrejKarpathy提出以來(lái),一直以“一個(gè)人頂十個(gè)人”、“單人干掉整個(gè)技術(shù)部”的架勢(shì)高歌猛進(jìn)。
懷揣著同樣的信念,在用CodingAgent開(kāi)發(fā)的第四天,Jason就自信地認(rèn)為可以用50美元開(kāi)發(fā)一個(gè)功能齊全、看起來(lái)相當(dāng)不錯(cuò)的演示版本,正式版本則能夠以5000-6000美元的成本順利拿下。
相比于他10年前組建三人團(tuán)隊(duì)、砸下5萬(wàn)美元都沒(méi)能做出成果,CodingAgent一度讓他看到了“用AI搞定開(kāi)發(fā)”的希望。
但隨著開(kāi)發(fā)過(guò)程的深入,Jason發(fā)現(xiàn):
agent修復(fù)的bug會(huì)反復(fù)出現(xiàn)agent每次更新,都會(huì)修改之前正確的代碼agent開(kāi)始編造數(shù)據(jù),數(shù)據(jù)難以保持一致性每天需要要花大量的時(shí)間測(cè)試修復(fù)
直到第8天,數(shù)據(jù)被刪,單元測(cè)試說(shuō)謊,低成本開(kāi)發(fā)功虧一簣。
不少網(wǎng)友在評(píng)論中把鍋甩給了大語(yǔ)言模型自身的局限性:基于概率預(yù)測(cè)的自回歸生成機(jī)制,在處理長(zhǎng)上下文時(shí)本就難以保持穩(wěn)定的一致性。
所以,無(wú)論是開(kāi)發(fā)者還是普通用戶,在面對(duì)AI給出的每一行代碼、每一句話時(shí),最好都自己過(guò)一遍。
畢竟,在正式的生產(chǎn)環(huán)境中部署agent本身就存在風(fēng)險(xiǎn),因?yàn)檫@就像把刪除產(chǎn)品數(shù)據(jù)庫(kù)的權(quán)限交給了一個(gè)實(shí)習(xí)生。
在把任務(wù)交給它之前,更該反思的,是開(kāi)發(fā)者對(duì)這項(xiàng)工作的認(rèn)知是否足夠清晰。
因?yàn)檎f(shuō)到底,出了問(wèn)題,AI不會(huì)負(fù)責(zé),責(zé)任還在自己身上。
OneMoreThing
在看到Jason對(duì)自家產(chǎn)品的“狂熱”后,ReplitCEO也是對(duì)Jason和網(wǎng)友反饋的問(wèn)題做出了回應(yīng),并對(duì)相關(guān)損失提出了補(bǔ)償?shù)拇胧?/p>
加班上線數(shù)據(jù)庫(kù)隔離功能,避免開(kāi)發(fā)操作影響生產(chǎn)開(kāi)發(fā)測(cè)試環(huán)境(staging)提供一鍵恢復(fù)機(jī)制以防agent出錯(cuò)修復(fù)agent文檔訪問(wèn)問(wèn)題研發(fā)“只規(guī)劃、不動(dòng)代碼”的聊天模式,讓用戶能先制定思路,等確認(rèn)后再動(dòng)手
可以說(shuō),這一套組合拳下來(lái),修復(fù)了不少之前的問(wèn)題。而Jason也是立馬冰釋前嫌,轉(zhuǎn)頭就開(kāi)始接著用,接著開(kāi)發(fā)。
想想也挺振奮人心:像Cursor、Windsurf這樣的AI編程工具,從誕生到現(xiàn)在最多也才兩年多,而傳統(tǒng)意義上的人類手寫(xiě)代碼,已經(jīng)有快一百年歷史。
雖然目前還遠(yuǎn)稱不上“完美”,但從反饋到響應(yīng)、從出錯(cuò)到迭代,AIcoding的發(fā)展節(jié)奏已經(jīng)快得驚人。
也許,這正是我們?cè)摾^續(xù)相信它的理由——再試一次,說(shuō)不定它就真能搞定了。
[2]https://x.com/jasonlk[3]https://xcancel.com/amasad/status/1946986468586721478#m