北大用ChatGPT打造開(kāi)發(fā)團(tuán)隊(duì),無(wú)需人類(lèi)干預(yù),AI自主完成軟件開(kāi)發(fā)
「一個(gè)人的能力有限,一支團(tuán)隊(duì)的力量無(wú)限」,這一句話(huà)在現(xiàn)實(shí)世界的軟件開(kāi)發(fā)中體現(xiàn)的淋漓盡致。對(duì)于復(fù)雜的任務(wù),人們通過(guò)團(tuán)隊(duì)合作策略來(lái)解決。但在 AI 世界中,這樣的模式是否也適用呢?
北京大學(xué)李戈教授團(tuán)隊(duì)提出了一種全新的 self-collaboration(自合作)模式。它允許多個(gè)大模型模型扮演不同的角色,組成了一個(gè)無(wú)需人類(lèi)參與的軟件開(kāi)發(fā)團(tuán)隊(duì),通過(guò)大模型間的合作和交互,自主完成整個(gè)軟件開(kāi)發(fā)流程,甚至包括一些復(fù)雜的代碼生成任務(wù)。
論文鏈接:https://arxiv.org/pdf/2304.07590.pdf
盡管大型語(yǔ)言模型 (簡(jiǎn)稱(chēng)為:大模型) 在代碼生成方面已經(jīng)展示出了驚人的能力,但是在處理復(fù)雜任務(wù)上仍然存在挑戰(zhàn)。在現(xiàn)實(shí)中的軟件開(kāi)發(fā)過(guò)程中,人們通常通過(guò)協(xié)同團(tuán)隊(duì)工作的策略來(lái)解決復(fù)雜的任務(wù),這種策略能夠顯著地控制開(kāi)發(fā)的復(fù)雜性并提高軟件的質(zhì)量。
受此啟發(fā),研究者提出了一個(gè)使用大模型進(jìn)行代碼生成的 self-collaboration 框架。具體來(lái)說(shuō),通過(guò)角色指令,1) 多個(gè)大型語(yǔ)言模型扮演不同的 "專(zhuān)家" 角色,每個(gè)模型負(fù)責(zé)處理復(fù)雜任務(wù)中的特定子任務(wù);2) 規(guī)定合作和交互的方式,使不同的角色形成一個(gè)虛擬團(tuán)隊(duì),幫助彼此完成工作,最終無(wú)需人為干預(yù)就能共同完成代碼生成任務(wù)。
為了有效地組織和管理這個(gè)虛擬團(tuán)隊(duì),研究者巧妙地將軟件開(kāi)發(fā)方法論中的瀑布模型融入到了框架中,組建了一個(gè)由三個(gè) ChatGPT 角色(即分析師、程序員和測(cè)試員)組成的基礎(chǔ)團(tuán)隊(duì),實(shí)施軟件開(kāi)發(fā)過(guò)程中的分析、編碼和測(cè)試階段。
實(shí)驗(yàn)結(jié)果表明,與直接利用大模型代碼生成相比,self-collaboration 代碼生成的性能大幅提升,甚至讓 GPT-3.5 超越了 GPT-4。此外,研究者還展示了 self-collaboration 能使大模型有效地處理更復(fù)雜的實(shí)際代碼項(xiàng)目,而這些項(xiàng)目往往是直接代碼生成難以解決的。
圖1:用于代碼生成的 Self-collaboration 框架及其實(shí)例。
此項(xiàng)研究開(kāi)創(chuàng)了一種新的使用人工智能語(yǔ)言模型進(jìn)行軟件開(kāi)發(fā)的路徑,將人工智能與軟件開(kāi)發(fā)過(guò)程的各個(gè)階段緊密結(jié)合,既提高了開(kāi)發(fā)效率,也保證了軟件的質(zhì)量。通過(guò)利用 ChatGPT 等 LLMs 的潛力,可以為模型間合作和交互提供更強(qiáng)大的支持,從而促進(jìn)虛擬團(tuán)隊(duì)在處理復(fù)雜軟件開(kāi)發(fā)任務(wù)方面的成功。這種 self-collaboration 框架為自動(dòng)代碼生成提供了一種新的、更高效的方法,有助于推動(dòng)軟件開(kāi)發(fā)領(lǐng)域的創(chuàng)新和進(jìn)步。此外,這項(xiàng)工作還可以作為未來(lái)研究各個(gè)領(lǐng)域的自我合作方法以及開(kāi)發(fā)更先進(jìn)、更專(zhuān)業(yè)的虛擬團(tuán)隊(duì)來(lái)處理更復(fù)雜任務(wù)的基礎(chǔ)。
下面具體介紹一下 Self-collaboration 框架以及在該框架基礎(chǔ)上按照軟件開(kāi)發(fā)方法論組建虛擬團(tuán)隊(duì)的實(shí)例。
Self-collaboration 框架
給定需求 x,利用大模型執(zhí)行 Self-collaboration 以生成輸出 y。該任務(wù)定義為。Self-collaboration 框架由兩部分組成:分工和合作。
在分工部分,研究者運(yùn)用先驗(yàn)知識(shí)將復(fù)雜任務(wù)分解為一系列階段 并構(gòu)建一些不同的角色
,這些角色基于大模型和角色指令。每個(gè)階段
由一個(gè)或多個(gè)角色
負(fù)責(zé)。
眾所周知,大模型對(duì)上下文非常敏感,因?yàn)樗鼈冊(cè)谟?xùn)練時(shí),被要求根據(jù)前面的文字預(yù)測(cè)后續(xù)文字。因此,一種廣泛使用的方式是通過(guò)指令或提示來(lái)控制大模型的生成。研究者采用特定類(lèi)型的指令為大模型分配身份和職責(zé),被稱(chēng)為角色指令。具體來(lái)說(shuō),研究者要求大模型扮演與其職責(zé)緊密相關(guān)的特定角色并且傳達(dá)這個(gè)角色應(yīng)該執(zhí)行的詳細(xì)任務(wù)。
使用角色指令的優(yōu)勢(shì)在于它們僅需要在交互開(kāi)始時(shí)被提供一次。在隨后的交互中,傳達(dá)的只是意圖,而不是指令和意圖的組合。因此,角色指令提升了后續(xù)溝通合作的整體效率和清晰度。
在合作部分,研究者關(guān)注于促進(jìn)在 self-collaboration 框架內(nèi)承擔(dān)不同角色的大模型之間的有效交互。每個(gè)大模型在其指定角色指令的指導(dǎo)下,通過(guò)履行其分配的職責(zé)為整體任務(wù)做出貢獻(xiàn)。隨著階段的進(jìn)展,大模型與其他大模型交流他們的輸出,交互信息并輸出 y 。
利用角色指令,可以有效控制大模型的輸出格式。結(jié)合語(yǔ)言模型的基礎(chǔ)方面,這可以初步建立大模型之間的通信。
合作部分可以形式化為:
其中 是階段
的輸出,
表示
前提階段的輸出,
表示
對(duì)應(yīng)的角色。請(qǐng)注意,如果階段
之間的關(guān)系不是線(xiàn)性關(guān)系,self-collaboration 框架可以并行化。計(jì)算
被視為合作,其中角色
與每個(gè)前面階段的角色合作生成
。輸出 y 隨著階段
的進(jìn)展迭代更新:
其中 f 是一個(gè)更新函數(shù)。為了促進(jìn)有效合作,研究者建立了一個(gè)共享黑板,每個(gè)角色從中獲取所需的信息以完成各自的任務(wù) 。算法 1 給出了 self-collaboration 框架的完整算法。
實(shí)例化
研究者將軟件工程方法論中的經(jīng)典瀑布模型引入到自協(xié)作框架中,使代碼生成的團(tuán)隊(duì)協(xié)作更加高效。具體來(lái)說(shuō),研究者設(shè)計(jì)了一個(gè)由分析、編碼和測(cè)試三個(gè)階段組成的簡(jiǎn)化瀑布模型,作為自協(xié)作代碼生成的實(shí)例。該實(shí)例的工作流程遵循瀑布模型從一個(gè)階段流向下一階段,如果發(fā)現(xiàn)問(wèn)題,則返回上一階段進(jìn)行細(xì)化。因此,研究者建立了一個(gè)基本團(tuán)隊(duì),包括分析師、編碼員和測(cè)試員,負(fù)責(zé)分析、編碼和測(cè)試階段,如圖 1(右)所示。這三個(gè)不同的角色被分配以下任務(wù):
分析師:分析師的目標(biāo)是制定高層次的 plan 并專(zhuān)注于指導(dǎo)程序員編寫(xiě)程序,而不是深入研究實(shí)現(xiàn)細(xì)節(jié)。給定需求 x,分析師將 x 分解為幾個(gè)易于解決的子任務(wù),以方便程序員直接實(shí)施,并制定概述實(shí)施主要步驟的 plan。
程序員:作為該團(tuán)隊(duì)的核心角色,程序員將在整個(gè)開(kāi)發(fā)過(guò)程中接收來(lái)自分析師的 plan 或來(lái)自測(cè)試人員的測(cè)試報(bào)告。因此,研究者通過(guò)角色說(shuō)明將兩項(xiàng)主要職責(zé)分配給程序員:1. 編寫(xiě)滿(mǎn)足指定要求的代碼,遵守分析師提供的 plan。2. 修復(fù)或細(xì)化代碼,考慮到測(cè)試人員反饋的測(cè)試報(bào)告反饋。編碼器角色指令的詳細(xì)信息如圖 2 所示。
測(cè)試員:測(cè)試員獲取程序員編寫(xiě)的代碼,然后記錄包含各個(gè)方面(例如功能性、可讀性和可維護(hù)性)的測(cè)試報(bào)告。研究者提倡模型模擬測(cè)試過(guò)程并生成測(cè)試報(bào)告,而不是生成測(cè)試用例然后通過(guò)執(zhí)行手動(dòng)測(cè)試代碼,從而促進(jìn)交互并避免額外的工作。
研究者為該實(shí)例制定了角色指令來(lái)扮演這三個(gè)角色。編碼器角色指令的示例如圖 2 所示。在本例中,角色指令不僅包括角色描述(角色及其職責(zé)),還包括團(tuán)隊(duì)描述和用戶(hù)需求,它們將共同初始化 ChatGPT 代理,從而設(shè)置 ChatGPT 的行為。該實(shí)例僅在階段為 coding 時(shí)更新輸出
,并且此開(kāi)發(fā)過(guò)程在測(cè)試人員確認(rèn)
滿(mǎn)足要求時(shí)結(jié)束。
實(shí)驗(yàn)結(jié)果
研究者將 self-collaboration 代碼生成與各種最先進(jìn)(SOTA)方法進(jìn)行比較,實(shí)驗(yàn)結(jié)果表明,self-collaboration 框架顯著提高了基礎(chǔ)大模型的性能。值得注意的是,即使是一個(gè)簡(jiǎn)單的三人團(tuán)隊(duì)(包括分析師、程序員和測(cè)試員),基于 ChatGPT (GPT-3.5) 的 self-collaboration 代碼生成在四個(gè)代碼生成基準(zhǔn)測(cè)試中也取得了最佳性能,甚至超過(guò)了 GPT-4。考慮到基礎(chǔ)大模型本身的差距,將 self-collaboration 框架應(yīng)用于更強(qiáng)大的模型,例如 GPT-4,將產(chǎn)生更好的結(jié)果。
研究者進(jìn)一步研究了僅使用自然語(yǔ)言描述的代碼生成,這種設(shè)置更貼近實(shí)際的軟件開(kāi)發(fā)。在此設(shè)置下,研究者比較了由 self-collaboration 框架實(shí)例化的初等團(tuán)隊(duì)中每個(gè) ChatGPT 角色的表現(xiàn),如表 2 所示。實(shí)驗(yàn)結(jié)果表明,與僅使用程序員角色相比,無(wú)論是二位角色還是三位角色組建的團(tuán)隊(duì),性能都有顯著提高。
研究者還研究了在不同模型大小下大模型的自合作能力。研究者評(píng)估了 self-collaboration 方法在處理復(fù)雜任務(wù)時(shí)的有效性,特別是那些對(duì)直接代碼生成具有挑戰(zhàn)性的任務(wù)。對(duì)于此類(lèi)任務(wù),研究者采用 self-collaboration 策略作為解決方案。如圖 6 所示,隨著模型規(guī)模的擴(kuò)大,大模型的 coding 能力通常呈現(xiàn)出增加的趨勢(shì),而自合作能力在 7B 參數(shù)量左右開(kāi)始顯現(xiàn)出來(lái),隨后不斷提升。實(shí)驗(yàn)結(jié)果表明自合作有助于激發(fā)大模型的潛在智能。
此外,研究者展示了一個(gè) self-collaboration 代碼生成示例,如圖 4 所示。在這份測(cè)試報(bào)告中,測(cè)試員指出所實(shí)現(xiàn)的代碼可能會(huì)導(dǎo)致從列表中刪除重復(fù)元素,從而可能導(dǎo)致某些邊緣測(cè)試用例失敗。因此,建議從實(shí)現(xiàn)的代碼中刪除行 “l(fā)st = list (set (lst))”。程序員隨后根據(jù)測(cè)試報(bào)告中的反饋刪除了 “l(fā)st = list (set (lst))” 行。在最后一次交互中,測(cè)試員確認(rèn)修改后的代碼已經(jīng)通過(guò)所有測(cè)試,滿(mǎn)足要求,至此代碼生成過(guò)程結(jié)束。
研究者還將 self-collaboration 框架應(yīng)用于更復(fù)雜的實(shí)際代碼項(xiàng)目的兩個(gè)例子,分別是游戲開(kāi)發(fā)和網(wǎng)頁(yè)制作,如圖 5 和圖 9 所示。self-collaboration 可以生產(chǎn)完整的游戲邏輯和令人滿(mǎn)意的游戲界面,對(duì)于天氣預(yù)報(bào)網(wǎng)頁(yè)的開(kāi)發(fā),也可以正確調(diào)用外部天氣接口,實(shí)現(xiàn)所有功能。而直接代碼生成則并沒(méi)有覆蓋所有要求的功能并且存在 bug,效果不佳。
總之,self-collaboration 框架在代碼生成任務(wù)中表現(xiàn)出顯著的性能提升,與單一角色相比,多角色團(tuán)隊(duì)能夠更有效地處理各種問(wèn)題和挑戰(zhàn)。這種方法為自然語(yǔ)言處理和代碼生成領(lǐng)域提供了新的研究方向,值得進(jìn)一步探討和優(yōu)化。未來(lái)的工作可能包括對(duì)更多角色和更強(qiáng)大模型的探索,以及將 self-collaboration 框架應(yīng)用于其他自然語(yǔ)言處理任務(wù)。
結(jié)論
在該工作中,研究者提出了一種 self-collaboration 框架,其目的是通過(guò)合作和交互方法來(lái)增強(qiáng)大模型的問(wèn)題解決能力。具體而言,研究者探索了 ChatGPT 在促進(jìn)基于團(tuán)隊(duì)的代碼生成和合作方面的軟件開(kāi)發(fā)過(guò)程中的潛力。為此,研究者組建了一個(gè)由三個(gè)不同的 ChatGPT 角色組成的初等團(tuán)隊(duì),目的是全面解決代碼生成任務(wù)。為了評(píng)估 self-collaboration 框架的有效性和泛化性能,研究者針對(duì)各種代碼生成基準(zhǔn)進(jìn)行了廣泛實(shí)驗(yàn)。實(shí)驗(yàn)結(jié)果提供了大量證據(jù)支持 self-collaboration 框架的有效性和普適性。研究者認(rèn)為,讓模型能夠組建自己的團(tuán)隊(duì)并合作完成復(fù)雜的任務(wù)是實(shí)現(xiàn) AGI 的關(guān)鍵一步。未來(lái)該項(xiàng)研究技術(shù)也將直接應(yīng)用于aiXcoder(一款基于代碼大模型的智能化軟件開(kāi)發(fā)系統(tǒng))的產(chǎn)品中。