初創(chuàng)公司使用 AI “碼農(nóng)” Devin 一個(gè)月的體驗(yàn) 原創(chuàng) 精華
編者按: Devin 真的能像人類軟件工程師那樣工作嗎?作為 2024 年備受矚目的 AI Agent 產(chǎn)品,它的實(shí)際表現(xiàn)如何?
我們今天為大家?guī)?lái)的文章中,作者通過(guò)一個(gè)月的實(shí)際使用體驗(yàn),發(fā)現(xiàn) Devin 在處理簡(jiǎn)單、明確的編程任務(wù)時(shí)表現(xiàn)不錯(cuò),但距離達(dá)到初級(jí)軟件工程師的水平還有很長(zhǎng)的路要走。
文章詳細(xì)介紹了 Devin 的使用體驗(yàn),包括其出色的上手流程設(shè)計(jì)、與 GitHub 的便捷集成,以及實(shí)時(shí)代碼審查功能。在處理范圍狹窄、定義明確的代碼修改時(shí),特別是前端組件相關(guān)的任務(wù),Devin 表現(xiàn)相當(dāng)出色。然而,當(dāng)面對(duì)需要跨組件協(xié)作的全棧任務(wù)時(shí),即使是對(duì)初級(jí)工程師來(lái)說(shuō)較為簡(jiǎn)單的工作,Devin 也往往難以勝任。從成本效益來(lái)看,對(duì)于那些它能夠完成的小型任務(wù)(通?;ㄙM(fèi) 2-10 美元),Devin 確實(shí)能為團(tuán)隊(duì)節(jié)省寶貴的時(shí)間;但在處理較復(fù)雜任務(wù)時(shí),其成功率和性價(jià)比都令人失望。
本文系原作者觀點(diǎn),Baihai IDP 僅編譯轉(zhuǎn)載。
作者 | Vikram Sreekanti and Joseph E. Gonzalez
編譯 | 岳揚(yáng)
我們總是對(duì)新的人工智能產(chǎn)品充滿好奇,卻苦于沒(méi)有時(shí)間去親自體驗(yàn)。在最近的假期里,我們終于抓住機(jī)會(huì),使用了 Congition 公司推出的 Devin[1],這款產(chǎn)品在 2024 年可是備受矚目。
如果你一直未曾關(guān)注過(guò)這方面的事情,那么可能還不知道,Devin 在去年三月份[2]發(fā)布的一款軟件工程 AI Agent 曾引起了不小的轟動(dòng)。在相關(guān)演示視頻中,這款 Agent 能夠跨多個(gè)代碼文件,完成一項(xiàng)相當(dāng)復(fù)雜的編程任務(wù)。我們?cè)緦?duì)這個(gè) AI Agent 的普適性持保留態(tài)度,但 Cognition 在去年十二月[3]將 Devin 正式對(duì)外開放,于是我們決定在假期中好好體驗(yàn)一番 Devin。
圖片來(lái)源:DALL-E 3。AI 軟件工程師的潛力無(wú)疑是巨大的,但(提前預(yù)警?。┪覀冞€有很長(zhǎng)的路要走。
在我們?cè)敿?xì)介紹對(duì)該產(chǎn)品的使用體驗(yàn)之前,我們想先聲明,本文的任何負(fù)面觀點(diǎn),都不是為了貶低 Devin(或任何其他產(chǎn)品)。我們對(duì)所有致力于 AI 產(chǎn)品開發(fā)的人抱有極高的敬意 —— 技術(shù)的快速更迭和市場(chǎng)的不確定性已經(jīng)讓我們面臨了足夠多的挑戰(zhàn)。我們分享這些反饋意見(jiàn),既是為了更好地開發(fā) RunLLM[4],同時(shí)也希望我們的觀點(diǎn)能對(duì)他人有所啟發(fā)。如果我們有哪里說(shuō)錯(cuò)了,歡迎指正!
上個(gè)星期,我們看到了 Answer AI 發(fā)布的一篇關(guān)于 Devin 的博客文章[5]。我們尚未詳讀全文,但值得一提的是,他們的結(jié)論與我們的看法頗有幾分相似。
01 引言
Devin 是一款相當(dāng)謙遜、有自知之明的工具。它對(duì)自己的定位是,在得到明確指導(dǎo)的情況下,能夠像一名初級(jí)軟件工程師那樣完成任務(wù)。根據(jù)相關(guān)經(jīng)驗(yàn),它大約能獨(dú)立工作 3 小時(shí),之后才需要考慮是否會(huì)出現(xiàn)偏差。這種預(yù)期管理既清晰明確又非常實(shí)用,與我們此前關(guān)于 AI 工作流程[6]與人類工作交接[7]的論述不謀而合。
Cognition 公司的 CEO Scott Wu 在采訪中透露了他們團(tuán)隊(duì)使用 Devin 的思路[8],頗為引人入勝:正確的使用方法是在每天早上給 Devin 分配任務(wù),然后讓它在你忙于其他工作的時(shí)候自行運(yùn)行。幾小時(shí)后,你再回來(lái)查看它的工作進(jìn)度,并提供必要的指導(dǎo)。到了一天工作結(jié)束時(shí),Devin 應(yīng)當(dāng)能夠完成你所布置的任務(wù)。這種合作模式,與你在團(tuán)隊(duì)中與初級(jí)工程師的合作非常相似。
02 Devin 的使用體驗(yàn)和上手流程
Devin 的使用體驗(yàn)和上手流程設(shè)計(jì)得相當(dāng)出色。你只需將 Devin 連接到你的 GitHub 代碼庫(kù)。Devin 會(huì)分析你的代碼庫(kù),了解其中的主要組件,以及編譯步驟、代碼風(fēng)格、最佳實(shí)踐等。對(duì)于我們這樣的初創(chuàng)公司來(lái)說(shuō),這些內(nèi)容可能不算豐富,但 Devin 仍能自動(dòng)推理出構(gòu)建流程的基本要素。
完成初步分析后,Devin 會(huì)展示其分析結(jié)果,并邀請(qǐng)你根據(jù)每個(gè)源代碼目錄的需要,添加額外的安裝或配置步驟。為了檢查這些配置是否正確,它會(huì)嘗試執(zhí)行所有的安裝和配置步驟。
為 Devin 指派新任務(wù)非常直接。目前它尚未與 Linear 或 Jira 這類任務(wù)管理系統(tǒng)集成,僅提供了一個(gè)簡(jiǎn)單的文本框,供你輸入希望 Devin 完成的任務(wù)描述。(你也可以在 Slack 的摘錄對(duì)話串(Thread)中標(biāo)記(tag)任務(wù),但我們發(fā)現(xiàn)這種做法并不太實(shí)用。)
圖片來(lái)源:Cognition 的 Devin。使用 Devin 的聊天界面是最快捷的指派新任務(wù)方式。
當(dāng)你分配給 Devin 一個(gè)新任務(wù)時(shí),它首先會(huì)通過(guò)審查代碼庫(kù)來(lái)制定行動(dòng)方案,并確定它認(rèn)為應(yīng)該進(jìn)行的代碼修改,從而制定行動(dòng)計(jì)劃。你可以實(shí)時(shí)在 web app 中觀察它審查文件的過(guò)程和所做的代碼修改(這一功能相當(dāng)酷炫),一旦完成,它就會(huì)運(yùn)行代碼檢查和代碼測(cè)試(如果有的話),解決遇到的問(wèn)題,并創(chuàng)建一個(gè) PR(pull request)。你可以在 PR 中留下評(píng)論,指導(dǎo) Devin 進(jìn)行代碼修改或修復(fù) bugs。
簡(jiǎn)而言之:Devin 的使用體驗(yàn)既直觀又易于與工程團(tuán)隊(duì)的工作流程融合。
03 Devin 的強(qiáng)項(xiàng)
Devin 最擅長(zhǎng)的是進(jìn)行范圍狹窄、定義明確的代碼修改,這些代碼修改僅涉及單個(gè)組件和少數(shù)代碼文件。我們最初讓它完成的任務(wù)包括:優(yōu)化餅圖的顯示格式,修正 API 在返回?cái)?shù)據(jù)時(shí)遇到的邊界問(wèn)題,以及在創(chuàng)建新數(shù)據(jù)源時(shí)設(shè)定默認(rèn)的更新計(jì)劃。這些任務(wù)如果由人工來(lái)完成,每個(gè)大約需要一個(gè)小時(shí)的時(shí)間來(lái)研究、實(shí)施和測(cè)試。而有了 Devin,只需花費(fèi)一兩分鐘來(lái)描述任務(wù),并在將其完成的工作合并前用五分鐘來(lái)檢驗(yàn)。
圖片來(lái)源:Cognition 公司的 Devin。通過(guò)一個(gè)實(shí)時(shí)儀表板,我們可以看到 Devin 在 shell、代碼編輯器等環(huán)境中的操作過(guò)程。
盡管它有時(shí)會(huì)在通用最佳實(shí)踐與特定代碼庫(kù)的特定規(guī)則之間猶豫,但它很快就能根據(jù)你的指導(dǎo)做出反應(yīng) —— 隨著時(shí)間的推移,它會(huì)建立一個(gè)針對(duì)特定代碼庫(kù)的知識(shí)庫(kù),我們可以對(duì)其進(jìn)行檢查和編輯修改。例如,Devin 最初嘗試安裝并導(dǎo)入了 @tanstack/react-query 庫(kù),但這個(gè)庫(kù)并不適用于 RunLLM 的代碼庫(kù)。當(dāng)我們指出應(yīng)參考其他文件的實(shí)現(xiàn)方式時(shí),它立刻進(jìn)行了自我糾正。
根據(jù)我們的經(jīng)驗(yàn)(我們不確定這是否是普遍現(xiàn)象),Devin 在處理前端代碼時(shí)似乎表現(xiàn)得比處理后端代碼更為出色。例如,它能夠輕松處理相當(dāng)復(fù)雜的 Redux stores 來(lái)優(yōu)化狀態(tài)管理,然而卻在使用 Python 的 FastAPI 框架時(shí)遇到了困難 —— 即便面對(duì)的是相當(dāng)基礎(chǔ)的功能實(shí)現(xiàn)。
簡(jiǎn)而言之:Devin 在前端代碼庫(kù)中修復(fù)小 bugs 或進(jìn)行細(xì)微的優(yōu)化時(shí),能夠有效節(jié)省時(shí)間。
04 Devin 的局限
在完成了一些基礎(chǔ)任務(wù)后,我們決定交給 Devin 一個(gè)更具挑戰(zhàn)性的全棧任務(wù),我們認(rèn)為這個(gè)任務(wù)適合初級(jí)工程師去完成。這項(xiàng)任務(wù)需要添加一個(gè)新的(且獨(dú)立的)數(shù)據(jù)庫(kù)表,創(chuàng)建一個(gè)新的 API 接口,并將該接口集成到前端交互中。每處單獨(dú)的改動(dòng)并不復(fù)雜,但需要將各個(gè)部分整合在一起。正常情況下,工程師可能需要幾個(gè)小時(shí)就能搞定。
然而,事情并沒(méi)有按預(yù)期進(jìn)行。在最初的任務(wù)描述中,我們明確指出沒(méi)有現(xiàn)成的數(shù)據(jù)庫(kù)表來(lái)記錄所需信息。Devin 找到了一個(gè)功能類似的舊 API 接口,并試圖在此基礎(chǔ)上進(jìn)行調(diào)整,但它似乎誤以為舊接口的存在意味著數(shù)據(jù)庫(kù)中已有相應(yīng)的信息。盡管我們反復(fù)多次提示,它仍然無(wú)法在數(shù)據(jù)庫(kù)的 schema 中添加新表。
在前端部分,Devin 將新按鈕添加到了一個(gè)僅在特定條件下才會(huì)顯示的位置。我們多次要求它讓按鈕在所有情況下都顯示,但同樣,盡管反復(fù)提示,它還是無(wú)法實(shí)現(xiàn)這一需求。
在嘗試了多種不同的提示詞來(lái)解決上述問(wèn)題后,我們決定自己接管這部分工作,看看能否基于 Devin 的工作“半成品”將這個(gè) PR 調(diào)整到可用的狀態(tài)。但仔細(xì)檢查后發(fā)現(xiàn),Devin 添加的用于前端與新增 API 接口連接的代碼大多不可用 —— 它忽略了我們之前教給它的最佳實(shí)踐,處理 API 響應(yīng)的代碼也是一團(tuán)糟。此時(shí),我們決定從頭開始實(shí)現(xiàn)這一功能,因?yàn)檫@樣比修復(fù) Devin 編寫的代碼要容易得多。
有趣的是,我們還發(fā)現(xiàn) Devin 很容易陷入一種死循環(huán),它試圖解決代碼檢查器發(fā)現(xiàn)的問(wèn)題,卻又在之前所做的代碼更改之間來(lái)回打轉(zhuǎn)。在這個(gè)循環(huán)過(guò)程中,它似乎并沒(méi)有優(yōu)先考慮用戶對(duì) PR 中需要改進(jìn)之處的反饋。
我們并不清楚是什么原因?qū)е?Devin 出現(xiàn)這種混亂。每個(gè)組件的任務(wù)應(yīng)該都相當(dāng)簡(jiǎn)單,因此我們推測(cè),跨多個(gè)組件的協(xié)同工作可能是最讓 Devin 困擾的部分。它似乎無(wú)法將自身的規(guī)劃或我們提供的反饋獨(dú)立應(yīng)用于特定組件。
簡(jiǎn)而言之:一個(gè)我們期望初級(jí)工程師能在一天內(nèi)完成的全棧任務(wù),對(duì) Devin 來(lái)說(shuō)卻是一個(gè)難以逾越的挑戰(zhàn)。如果這是一個(gè)新招聘的工程師,我們可能不會(huì)考慮將其留在團(tuán)隊(duì)中。
05 成本效益分析
在 Devin 能夠順利完成任務(wù)的情況下,其經(jīng)濟(jì)效益是顯而易見(jiàn)的。 目前,500 美元可以購(gòu)買 250 個(gè) ACU( Devin 的工作量計(jì)算單位),而 Devin 完成那些小型任務(wù)通常只需要 1-5 個(gè)ACU(即 2-10 美元)。如果花幾美元就能修復(fù)小 bugs,并且每次至少節(jié)省一個(gè)小時(shí)的工作時(shí)間,這樣的交易無(wú)疑是劃算的 —— 無(wú)論何時(shí),我們都會(huì)選擇這樣做。但問(wèn)題在于,適合 Devin 處理的任務(wù)范圍非常有限,這些任務(wù)既需要工程師切換工作焦點(diǎn),又要在 Devin 的能力范圍內(nèi)完成。
當(dāng) Devin 無(wú)法完成任務(wù)時(shí),其經(jīng)濟(jì)效益就開始值得懷疑了。 我們嘗試的三個(gè)較大任務(wù)平均消耗了大約 20 個(gè)ACU,其中有兩個(gè)任務(wù)并沒(méi)有給出可用結(jié)果。雖然 40 美元對(duì)于完成這些任務(wù)來(lái)說(shuō)非常便宜,但根據(jù)我們有限的樣本來(lái)看,這些任務(wù)消耗的 ACU 數(shù)量與任務(wù)難度并不成正比 —— 它們并不比那些成功的小任務(wù)難上 5 到 10 倍。更重要的是,這些任務(wù)常常失敗,導(dǎo)致我們花費(fèi)的 40 美元打了水漂。
如果 RunLLM 是一家每月有 50 個(gè)以上明確界定的小錯(cuò)誤需要 Devin 修復(fù)的大公司,情況可能有所不同。但事實(shí)上,我們已經(jīng)讓 Devin 嘗試了大部分它能夠成功的任務(wù)。
簡(jiǎn)而言之:對(duì)于那些 Devin 能夠完成的任務(wù),為之支付費(fèi)用是絕對(duì)沒(méi)有問(wèn)題的。但當(dāng) Devin 無(wú)法完成任務(wù)時(shí),你會(huì)因?yàn)橘Y金浪費(fèi)而感到失望。
06 總結(jié)與展望
AI 軟件工程師的前景無(wú)疑是光明的,我們大力支持這種模式:將部分工作交給 AI 處理,從而讓我們可以集中精力處理更為關(guān)鍵的事務(wù)。從用戶體驗(yàn)的角度來(lái)看,Devin 確實(shí)能夠有效地支持這一過(guò)程。
然而,就像 AI 領(lǐng)域的許多創(chuàng)新一樣,這目前仍處于起步階段。我們很樂(lè)意嘗試使用 Devin,但我們的看法是,它尚未達(dá)到初級(jí)軟件工程師的水平。Devin 擅長(zhǎng)處理那些一個(gè)人大概需要一個(gè)小時(shí)就能解決的、定義明確的任務(wù)。一旦超出這個(gè)范圍,結(jié)果就會(huì)大相徑庭。
我們堅(jiān)信 Devin(及其底層技術(shù))將會(huì)不斷進(jìn)步,隨著技術(shù)的成熟,它實(shí)現(xiàn)這一承諾(能夠像一名初級(jí)軟件工程師那樣工作)的能力也將不斷提升。就目前而言,軟件工程師們還不需要擔(dān)心會(huì)因此失去工作,這一天還有很長(zhǎng)的距離。
Thanks for reading!
Hope you have enjoyed and learned new things from this blog!
About the authors
Vikram Sreekanti
Co-founder & CEO of RunLLM
Joseph E. Gonzalez
Professor at UC Berkeley and Co-Founder at Run LLM
本期互動(dòng)內(nèi)容 ??
?2-10 美元解決一個(gè)小時(shí)的編程任務(wù),這個(gè)投入產(chǎn)出比你覺(jué)得值得嗎?團(tuán)隊(duì)在考慮引入類似工具時(shí),你最關(guān)心哪些因素?
??文中鏈接??
[1]??https://devin.ai/??
[2]??https://www.cognition.ai/blog/introducing-devin??
[3]??https://www.cognition.ai/blog/devin-generally-available??
[5]??https://www.answer.ai/posts/2025-01-08-devin.html?utm_source=changelog-news??
[6]??https://frontierai.substack.com/p/the-rise-of-ai-work??
[7]??https://frontierai.substack.com/p/ai-products-should-be-built-for-human??
[8]??https://joincolossus.com/episode/building-cognition/??
原文鏈接:
??https://frontierai.substack.com/p/one-month-of-using-devin??
