寫在最前面
Yihong Dong?, Xue Jiang?, Zhi Jin?, Ge Li? (Peking University)
arXiv May 2023
arXiv 2023.4.15
https://arxiv.org/pdf/2304.07590.pdf
一位不愿意透露姓名的朋友分享了Self-collaboration Code Generation via ChatGPT《基于ChatGPT的自協(xié)作代碼生成》
這篇論文是chatgpt的黑盒api調(diào)用,因此沒有關(guān)于模型的微調(diào)等操作,更多的是提示工程的框架設(shè)計(jì)(后面同學(xué)提到,和思維鏈的工作有相通之處)
同時(shí),由于是大模型,因此是零樣本和少樣本學(xué)習(xí)
如果之后有類似的idea,或許可以嘗試模仿論文中的圖設(shè)計(jì)、消融實(shí)驗(yàn)
朋友講解論文敘述框架性強(qiáng),梳理論文的邏輯清晰
PPT也很清晰明了,很多值得學(xué)習(xí)的細(xì)節(jié)
朋友分享的收獲與啟發(fā)
1.框架性的idea也是一種方向,有時(shí)也可以帶來顯著的結(jié)果,在AI領(lǐng)域不止有提升算法的思路。
2.實(shí)現(xiàn)這種idea也需要嚴(yán)謹(jǐn)完整的推理和驗(yàn)證,將high-level的想法落到細(xì)節(jié)
3.作者的結(jié)論里說明了自協(xié)作架構(gòu)還是要結(jié)合人類程序員的指導(dǎo),避免系統(tǒng)脫離需求,這說明ChatGPT暫時(shí)還不能完全自主地工作
課堂討論
框架性idea
實(shí)現(xiàn)idea,需要嚴(yán)謹(jǐn)完整的推理和驗(yàn)證
代碼生成如何協(xié)作,是一種方法嗎
漏洞檢測幫助這個(gè)框架,這個(gè)框架本身首先需要能檢測出漏洞,才能去輔助漏洞檢測
思路相同
思維鏈(2022),分步驟
三個(gè)人員可以用一個(gè)提示來完成文章來源:http://www.zghlxwxcb.cn/news/detail-769037.html
交互實(shí)用性
運(yùn)行時(shí)間上
將全部都用chatgpt,寫代碼換成codeX文章來源地址http://www.zghlxwxcb.cn/news/detail-769037.html
代碼生成與自協(xié)作框架 摘要
目的: 代碼生成旨在生成符合特定規(guī)范、滿足人類需求的代碼,以提高軟件開發(fā)效率和質(zhì)量,甚至推動生產(chǎn)模式的轉(zhuǎn)變。
創(chuàng)新點(diǎn): 本研究提出了一種自協(xié)作框架,使大型語言模型(LLM,例如ChatGPT)能夠應(yīng)對復(fù)雜的代碼生成任務(wù)。
方法: 該框架首先為三個(gè)不同角色的大型語言模型分配任務(wù),包括分析員(analyst,負(fù)責(zé)需求分析)、程序員(coder,負(fù)責(zé)編寫代碼)、測試員(tester,負(fù)責(zé)檢驗(yàn)效果),然后通過軟件開發(fā)方法(SDM)規(guī)定了這些角色之間的交互方式。
結(jié)果: 通過所提出的自協(xié)作框架,相較于ChatGPT3.5,實(shí)驗(yàn)結(jié)果顯示在四種不同基準(zhǔn)測試中,Pass@1的性能提高了29.9%至47.1%。
相關(guān)工作
PPT學(xué)習(xí)
大語言模型在代碼生成方向
自2021至現(xiàn)在,有許多團(tuán)隊(duì)證實(shí)了LLM在代碼生成領(lǐng)域的潛力
[Chen et al., 2021, Shen et al., 2022, Li et al., 2022, Dong et al., 2023a,Nijkamp et al., 2022, Fried et al., 2022, Zheng et al., 2023]
-
仍然存在的挑戰(zhàn)
在復(fù)雜任務(wù)上正確地生成代碼 -
解決方法
團(tuán)隊(duì)培訓(xùn)方法:團(tuán)隊(duì)合作理論+軟件工程實(shí)踐 -
好處
分解成子任務(wù),高效,可控;
加入錯(cuò)誤檢測和質(zhì)量控制;
保證與要求相符
提高生成的代碼的準(zhǔn)確性和質(zhì)量:預(yù)先、預(yù)后處理
預(yù)后處理(post-processing)和預(yù)先處理(prior-processing)
post-processing:對多個(gè)候選人重新排序,選出最正確的方案
CodeT[Chen et al., 2021]和Coder-Reviewer[Zhang et al.,2022]
問題:引入了額外的計(jì)算成本用于測試用例生成
post-processing:引導(dǎo)LLM進(jìn)行rubber duck debugging
self-debugging[Chen et al.,2023]
問題:依賴于few-shot prompting,要求對于每個(gè)數(shù)據(jù)集專門生成一些提示例子,耗時(shí)耗力
prior-processing:在代碼生成之前引入planning
self-planning[Jiang et al., 2023]
問題:并不完善
將團(tuán)隊(duì)協(xié)作理論應(yīng)用于代碼生成的研究
[Schick et al., 2022]
- 原理:先訓(xùn)練不同模型執(zhí)行對應(yīng)子任務(wù),然后用聯(lián)合訓(xùn)練增強(qiáng)相互理解
- 問題:這種訓(xùn)練方法非常costly;缺乏相關(guān)的訓(xùn)練數(shù)據(jù)
改進(jìn)
[Ouyang et al., 2022, Chung et al., 2022, OpenAI, 2023]
- 原理:經(jīng)過足夠的訓(xùn)練讓LLM在軟件開發(fā)的各個(gè)階段都可以出色地完成任務(wù),方便后續(xù)分配;根據(jù)人類命令做出調(diào)整,開發(fā)模型交互的潛力
- 問題:依賴于人類程序員的專業(yè)知識,依然耗時(shí)耗力
解決方法:本論文提出自協(xié)作框架,讓ChatGPT形成團(tuán)隊(duì)
成果和貢獻(xiàn)
提出LLM的自協(xié)作框架,以應(yīng)對“在復(fù)雜任務(wù)上生成正確的代碼”的挑戰(zhàn)
根據(jù)SDM實(shí)例化初始團(tuán)隊(duì),在software development環(huán)節(jié)分配三個(gè)角色負(fù)責(zé)不同stage
由GPT3.5組成的自協(xié)作虛擬團(tuán)隊(duì)在各種代碼生成的基準(zhǔn)測試上,性能超過了GPT-4
在現(xiàn)實(shí)場景下,自協(xié)作模式有效完成復(fù)雜任務(wù)
自協(xié)作框架原理
1、DOL任務(wù)分配
根據(jù)任務(wù)分配角色指令,然后將對應(yīng)的任務(wù)傳遞給角色
2、共享黑板協(xié)作
不同角色間,將輸出的信息共享
3、Instance實(shí)例化
1)采用SDM中的經(jīng)典瀑布模型 [Petersen et al., 2009],簡化為三個(gè)階段:分析、編碼、測試。
2)分析員:生成一個(gè)高維的計(jì)劃,著重指導(dǎo)程序員。程序員:根據(jù)分析員的計(jì)劃寫代碼;根據(jù)測試員的測試報(bào)告修改代碼。測試員:從功能性、可讀性和可維護(hù)性評判程序員的代碼
3)終止條件:達(dá)到最大交互次數(shù)n或者測試員報(bào)告沒有錯(cuò)誤
案例說明
簡單任務(wù):基本操作
1)分析員:分解任務(wù)
+制定high-level計(jì)劃
2)程序員:按照計(jì)劃生成對應(yīng)代碼
3)測試員:檢驗(yàn)代碼的功能性和邊緣測試情況,反饋錯(cuò)誤讓程序員修改
復(fù)雜任務(wù):游戲開發(fā)
未展示訓(xùn)練過程,僅說明結(jié)果
滿足所有游戲邏輯,保障了精確的角色控制,設(shè)置正確的碰撞檢測,必要的游戲資產(chǎn)加載和適當(dāng)?shù)膱D像縮放。此外,注意到了沒有直接規(guī)定但是符合常識的游戲邏輯,比如炸彈掉落至底部后會被重置位置
單個(gè)LLM只能生成腳本的粗略草稿
實(shí)驗(yàn)
設(shè)置
數(shù)據(jù)集
四個(gè)基準(zhǔn)測試(數(shù)據(jù)集)
1)MBPP(sanitized version) [Austin et al., 2021]
427個(gè)Python編程任務(wù),屬于調(diào)用標(biāo)準(zhǔn)庫功能函數(shù)的基礎(chǔ)代碼生成任務(wù)
包含:自然語言描述+編程計(jì)劃提示+3個(gè)測試用例
2)HumanEval [Chen et al., 2021]
164個(gè)編程任務(wù)
包含:自然語言描述+函數(shù)簽名+函數(shù)主體+單元測試
3)MBPP-ET
4)HumanEval-ET
比原本的數(shù)據(jù)集多100余個(gè)測試,包含邊緣案例
實(shí)驗(yàn)結(jié)果1:與其他代碼生成方法比較
輸入:自然語言+函數(shù)簽名+公共的測試用例
分析:相較于GPT-3.5增長了29.9%-34.6%;在后兩個(gè)數(shù)據(jù)集上表現(xiàn)更佳,證明自協(xié)作代碼生成的可靠性。
原因可能為:成員多可以考慮更多邊界條件
和處理常見bug
。
實(shí)驗(yàn)結(jié)果2:評估不同角色的影響
輸入:自然語言
分析:在HumanEval基準(zhǔn)測試上三角色團(tuán)隊(duì)效果最好,在MBPP基準(zhǔn)測試上coder-tester團(tuán)隊(duì)表現(xiàn)最好,
原因是:MBPP的兩個(gè)數(shù)據(jù)集任務(wù)較簡單,不需要計(jì)劃
實(shí)驗(yàn)結(jié)果3:評估有無角色的影響
few-shot prompting:每個(gè)階段給予一些案例提示
zero-shot:給予指令刪除角色,不給予提示
分析:角色指令的特定的上下文語境限制了LLM的生成空間,令其在場景約束下進(jìn)行推理,生成與命令一致的結(jié)果。few-shot比zero-shot表現(xiàn)差的原因是有限的例子提示不能完全反映目標(biāo)反而讓LLM的理解產(chǎn)生偏差,此外提示太長阻礙了LLM的理解。
實(shí)驗(yàn)結(jié)果4:評估交互次數(shù)的影響
Maximum Interaction(MI)=0, 相當(dāng)于只有coder
分析:大多數(shù)任務(wù)在兩輪內(nèi)就可以完成;輪數(shù)越大,效果越好,但是由于maximum token的限制只能做4輪交互
結(jié)論與展望
優(yōu)勢
自協(xié)作框架允許團(tuán)隊(duì)成員的數(shù)量被修改,以適應(yīng)不同難度的代碼生成任務(wù)
在通用人工智能(AGI)時(shí)代,也可以不受限制,創(chuàng)造新的軟件開發(fā)模型和新角色組成的虛擬團(tuán)隊(duì)
問題
完全自主的系統(tǒng),可能會脫離需求
有可能的解決方案:結(jié)合人類專家的指導(dǎo)監(jiān)督虛擬團(tuán)隊(duì)的操作
有價(jià)值的探索方向
通過外部工具彌補(bǔ)LLM自身存在的局限,比如通過角色指令調(diào)動Toolformer [Schick et al., 2023]
課堂討論
框架性idea
實(shí)現(xiàn)idea,需要嚴(yán)謹(jǐn)完整的推理和驗(yàn)證
代碼生成如何協(xié)作,是一種方法嗎
漏洞檢測幫助這個(gè)框架,這個(gè)框架本身首先需要能檢測出漏洞,才能去輔助漏洞檢測
思路相同
思維鏈(2022),分步驟
三個(gè)人員可以用一個(gè)提示來完成
交互實(shí)用性
運(yùn)行時(shí)間上
將全部都用chatgpt,寫代碼換成codeX
到了這里,關(guān)于【網(wǎng)安AIGC專題10.19】論文3代碼生成:ChatGPT+自協(xié)作代碼生成+角色扮演(分析員、程序員、測試員)+消融實(shí)驗(yàn)、用于MBPP+HumanEval數(shù)據(jù)集的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!