全球首個(gè)AI程序員當(dāng)老板!IOI金牌得主全部工作AI掌盤,技術(shù)細(xì)節(jié)報(bào)告公開
AI程序員Devin竟可以做老板的工作了?!
最近,Cognition AI的首席執(zhí)行官Steven Hao給了Devin訪問自己帳戶的權(quán)限,然后Devin便開始為他工作了...
比如,「他」向初創(chuàng)公司Modal支持團(tuán)隊(duì)寫了一封郵件,是詢問關(guān)于其產(chǎn)品Secrets更新后用多久再提供給正在運(yùn)行的應(yīng)用程序。
然后,「AI老板」Devin與技術(shù)團(tuán)隊(duì)進(jìn)行了無(wú)縫交流,最終解決了自己的疑惑。
就在最近,Cognition團(tuán)隊(duì)發(fā)布了Devin的最新技術(shù)報(bào)告。
開篇,Cognition提到團(tuán)隊(duì)的目標(biāo)之一,就是讓Devin成為一個(gè)專門從事軟件開發(fā)的AI智能體,能夠成功地為大型復(fù)雜代碼庫(kù)貢獻(xiàn)代碼。
Reddit網(wǎng)友稱,「所有否認(rèn)軟件工程師很快就會(huì)過時(shí)的人都太天真了。失業(yè)將對(duì)我們所有人造成沖擊」。
還有網(wǎng)友表示,AI正在迅速地重塑我們的現(xiàn)實(shí),以至于我們根本不知道發(fā)生了什么。
技術(shù)報(bào)告出爐
為了評(píng)估Devin,研究人員使用了SWE-BENCH——一個(gè)針對(duì)軟件工程系統(tǒng)的自動(dòng)化基準(zhǔn)測(cè)試,可以確定地評(píng)估(通過單元測(cè)試)系統(tǒng)在真實(shí)代碼庫(kù)中解決問題的能力。
https://www.swebench.com/
在SWE-bench中,Devin成功解決了13.86%的問題,遠(yuǎn)遠(yuǎn)超過了之前最高的1.96%無(wú)輔助基線。
即使給定要編輯的確切文件(「輔助」模式),之前的最好的模型也只能解決4.80%的問題。
方法
研究人員采用SWE-BENCH來評(píng)估智能體,這比原始的LLM評(píng)估設(shè)置更通用。
設(shè)置
- 使用標(biāo)準(zhǔn)化的提示從頭到尾運(yùn)行智能體,要求它僅根據(jù)GitHub問題描述編輯代碼。在運(yùn)行過程中,不會(huì)向智能體提供任何其他用戶輸入。
- 代碼倉(cāng)庫(kù)被克隆到智能體的環(huán)境中。只保留基礎(chǔ)提交(base commit)及其「祖先」提交在git歷史記錄中,以防止信息泄露給智能體。值得注意的是,研究人員移除了git遠(yuǎn)程倉(cāng)庫(kù),這樣git pull就不起作用。
- 在測(cè)試開始之前,設(shè)置了Python Conda環(huán)境。
- 將Devin的運(yùn)行時(shí)間限制在45分鐘,因?yàn)榕c大多數(shù)智能體不同的是,它具有無(wú)限期運(yùn)行的能力。如果愿意,它可以選擇提前終止。
Eval
- 智能體運(yùn)行退出后,研究人員會(huì)將所有測(cè)試文件重置為原始狀態(tài),以防智能體修改測(cè)試,并將文件系統(tǒng)中的所有其他差異提取為patch。
- 為了確定哪些文件是測(cè)試文件,研究人員采用在測(cè)試patch中修改的所有文件的集合。
- 將智能體的patch應(yīng)用到repo,然后是測(cè)試patch。
- 運(yùn)行SWE-BENCH提供的eval命令,并檢查是否所有測(cè)試都通過。
具體可以在如下鏈接中,找到研究人員改編的評(píng)估工具的代碼:
https://github.com/CognitionAI/devin-swebench-results.
結(jié)果
研究人員在SWE基準(zhǔn)測(cè)試集中,隨機(jī)抽取了25%的測(cè)試集(2294個(gè)測(cè)試集中的570個(gè))對(duì)Devin進(jìn)行了評(píng)估。
這樣做是為了縮短基準(zhǔn)測(cè)試的完成時(shí)間,與作者在原始論文中使用的策略相同。
Devin成功解決了570個(gè)問題中的79個(gè),成功率為13.86%。這明顯高于之前最佳輔助系統(tǒng)Claude 2的4.80%。
圖中的基線是在「assisted」設(shè)置中評(píng)估的,即向模型提供其需要編輯的確切文件。
基線在「unassisted」設(shè)置中表現(xiàn)較差,在這種情況下,一個(gè)單獨(dú)的檢索系統(tǒng)為L(zhǎng)LM選擇要編輯的文件(最佳模型是Claude 2+BM25檢索系統(tǒng),得分率為1.96%)。
在智能體環(huán)境中,Devin擁有整個(gè)軟件repo,可以自由瀏覽文件,因此研究人員選擇了較強(qiáng)的數(shù)據(jù)作為比較基準(zhǔn)。
案例分析
多步規(guī)劃
Devin可以執(zhí)行多步計(jì)劃,以接收來自環(huán)境的反饋。
72%的通過測(cè)試需要10分鐘以上的時(shí)間才能完成,這表明迭代能力有助于Devin取得成功。
定性示例
研究人員對(duì)Devin的結(jié)果進(jìn)行了一些定性分析?;叵胍幌拢珼evin只得到了問題描述和克隆存儲(chǔ)庫(kù)作為輸入。
示例1
最初,Devin被描述嚇了一跳,它在返回self之前添加了self.lower_bound_ = max_lower_bound。
這實(shí)際上是不正確的,因?yàn)樽兞可形炊x。
根據(jù)問題描述中提供的測(cè)試代碼,Devin會(huì)更新測(cè)試文件:
但在運(yùn)行測(cè)試并出現(xiàn)錯(cuò)誤后,Devin更正了文件:
在此修復(fù)后,Devin重新運(yùn)行測(cè)試,以使其通過并成功退出。
這個(gè)例子很有趣,原因有幾個(gè):
- 盡管不準(zhǔn)確,Devin還是非常嚴(yán)格地遵循了原版中的指示。這表明與用戶的首選項(xiàng)過于一致。
- 有了在環(huán)境中運(yùn)行測(cè)試的能力,Devin就能糾正自己的錯(cuò)誤。對(duì)于軟件開發(fā)人員來說,能夠迭代是至關(guān)重要的,而智能體也應(yīng)該能夠做到這一點(diǎn)。
示例2
Devin可以識(shí)別正確的文件 django/db/backends/postgresql/client.py ,并進(jìn)行完整編輯:
在這里,Devin能夠成功地修改一大段代碼。
SWE-BENCH中,許多成功編輯都由單行差異組成,但Devin能夠同時(shí)處理多行。
示例3
這是一項(xiàng)艱巨的任務(wù),涉及修改計(jì)算機(jī)代數(shù)系統(tǒng),以正確處理地板和天花板對(duì)象上,與可指定為正值或負(fù)值的值有關(guān)的比較運(yùn)算符。
這需要復(fù)雜的邏輯推理和多個(gè)推導(dǎo)步驟。
Devin錯(cuò)選了要編輯的正確類,他編輯的是frac類,而不是floor類和ceiling類。
此外,Devin只編輯了一個(gè)比較運(yùn)算符gt,而lt、le和ge也需要修改。這樣的編輯離正確還差得很遠(yuǎn)。
示例4
這項(xiàng)任務(wù)涉及向回購(gòu)中的所有數(shù)據(jù)集添加額外的退貨選項(xiàng)功能。Devin能夠成功地對(duì)幾個(gè)數(shù)據(jù)集進(jìn)行此編輯;下面顯示了一個(gè)示例。
Devin設(shè)法對(duì)數(shù)據(jù)集 california_housing.py 、 covtype.py 、 kddcup99.py 和 mldata.py (原始PR實(shí)際上排除了它們)進(jìn)行了類似的編輯。
不幸的是,Devin漏掉了兩個(gè)數(shù)據(jù)集, lfw.py 和 rcv1.py ,因此測(cè)試最終失敗。研究人員打算改進(jìn)Devin編輯多個(gè)文件的能力。
測(cè)試驅(qū)動(dòng)實(shí)驗(yàn)
研究人員又進(jìn)行了一次實(shí)驗(yàn),向Devin提供了最終的單元測(cè)試和問題陳述。
在這種「測(cè)試驅(qū)動(dòng)開發(fā)」的環(huán)境下,100個(gè)抽樣測(cè)試中,成功通過率提高到了23%。(請(qǐng)注意,對(duì)測(cè)試本身的任何修改都會(huì)在評(píng)估前被刪除)。
這一結(jié)果是無(wú)法與SWE-BENCH的其他結(jié)果相比較的,因?yàn)樵撝悄荏w可以訪問真值測(cè)試patch。
盡管如此,測(cè)試驅(qū)動(dòng)開發(fā)是軟件工程中的一種常見模式,因此這種設(shè)置是SWE-BENCH的自然擴(kuò)展。
人類給智能體一個(gè)有針對(duì)性的測(cè)試,來通過是人類工程師和智能體合作的一種自然方式,我們預(yù)計(jì)未來會(huì)看到更多測(cè)試驅(qū)動(dòng)的智能體。
Devin通過測(cè)試新解決的問題示例
Devin通過在函數(shù)前面添加一條Print語(yǔ)句,然后運(yùn)行單元測(cè)試,然后根據(jù)Print語(yǔ)句編輯文件,解決了這個(gè)問題。
新單元測(cè)試斷言會(huì)發(fā)出準(zhǔn)確的錯(cuò)誤信息:The value of 'filter_horizontal[0]' cannot include […]。
如果不知道錯(cuò)誤的確切措辭,就不可能通過測(cè)試。
這凸顯了該基準(zhǔn)的一個(gè)問題,說明不使用測(cè)試patches也不可能獲得滿分。
智能體仍在發(fā)展的初級(jí)階段,還有很大的改進(jìn)空間。Cognition團(tuán)隊(duì)相信智能體的能力將在未來顯著提高。