大模型的出現(xiàn)引發(fā)了一場軟件工程革命,它根本性地改變了軟件開發(fā)的流程和方式。當(dāng)下,越來越多的企業(yè)開始在實(shí)際的研發(fā)工作中,結(jié)合大模型增強(qiáng)軟件開發(fā)在設(shè)計(jì)、需求、測試、發(fā)布和運(yùn)維等各個(gè)環(huán)節(jié)中的能力,提高質(zhì)量和效率。
在接受 InfoQ 采訪時(shí),字節(jié)跳動算法專家張樹波表示,大語言模型是一項(xiàng)人工智能基礎(chǔ)技術(shù)的突破,必然會帶來多個(gè)行業(yè)的變革。2023 年初,字節(jié)跳動智能服務(wù)團(tuán)隊(duì)開始啟動大模型 X 智能單測項(xiàng)目。目前,大模型生成單元測試已經(jīng)在實(shí)際業(yè)務(wù)中落地。
單元測試是保障項(xiàng)目可靠性的重要手段。傳統(tǒng)的智能單測生成依賴靜態(tài)分析、動態(tài)分析等工具,對不同的語言需要重新適配。隨著模型參數(shù)規(guī)模的提升,模型的代碼理解、代碼生成能力也大幅提升,使用模型端到端的生成單元測試,可以低成本地將單元測試覆蓋到多種編程語言。然而大模型在單測生成任務(wù)上仍存在模型幻覺(隨機(jī)生成不存在變量名、方法名)和測試分支覆蓋不全的問題。
為解決以上問題,字節(jié)跳動智能服務(wù)團(tuán)隊(duì)發(fā)現(xiàn)通過任務(wù)微調(diào)、強(qiáng)化學(xué)習(xí)等技術(shù)可以提升語言模型的單元測試生成語法正確率和分支覆蓋率。經(jīng)過測試,他們的基于 Bloom 70 億參數(shù)模型的生成效果不弱于通用版 ChatGPT 的水平,并且在低端顯卡上的推理時(shí)延只有 ChatGPT 的 25%。且目前大模型單元測試生成分支覆蓋率在實(shí)際項(xiàng)目中達(dá)到 56%,同時(shí)在抖音的 Android、iOS 雙端落地,問題有效性達(dá)到 80%,修復(fù)率 65%。
在今年 9 月 3-5 日舉辦的 QCon 全球軟件開發(fā)大會·北京站中,張樹波將把以上經(jīng)驗(yàn)分享給大家。張樹波碩士畢業(yè)于清華大學(xué),先后就職于 vivo、字節(jié)跳動,從事 NLP 算法多年,在智能單測、智能客服、語音助手等業(yè)務(wù)場景有豐富的落地經(jīng)驗(yàn)。
在大會開始前,InfoQ 對張樹波進(jìn)行了專訪,探索字節(jié)跳動是如何在單元測試中落地大模型的,以及大模型對軟件研發(fā)工作流的改變。以下為對話實(shí)錄,經(jīng)編輯。
InfoQ:您在今年 9?舉辦的 QCon 全球軟件開發(fā)?會·北京站上的演講主題是《?模型助?智能單測?成》,為什么會選擇這?主題?
張樹波:2022 年底 OpenAI 發(fā)布 ChatGPT,其效果令人大為震撼,曾經(jīng)讓 NLPer 困擾的自然語言處理問題,例如歧義、長程依賴、知識缺失、推理能力不足等,都得到了很大程度的緩解和解決。大語言模型是一項(xiàng)人工智能基礎(chǔ)技術(shù)的突破,必然會帶來多個(gè)行業(yè)的變革。2023 年初,我們字節(jié)跳動智能服務(wù)團(tuán)隊(duì)啟動了大模型 X 智能單測項(xiàng)目,探索至今,大模型生成單元測試已經(jīng)在實(shí)際業(yè)務(wù)中落地。這其中我們總結(jié)出了一些經(jīng)驗(yàn),希望能夠幫助聽眾。
InfoQ:對于這波?模型結(jié)合軟件開發(fā)應(yīng)?熱潮,您觀察到哪些有趣的趨勢?
張樹波:大模型會讓開發(fā)更輕松。大模型代碼生成會降低開發(fā)者編寫重復(fù)性代碼,但是不意味者開發(fā)門檻降低,開發(fā)者需要具備辨識模型生成是否正確,以及對最終上線負(fù)責(zé)。當(dāng)前大模型生成的代碼還不能保證絕對正確,甚至有些隱蔽的錯(cuò)誤,不容易被新手開發(fā)者發(fā)現(xiàn)。從這個(gè)角度來看,大模型對有經(jīng)驗(yàn)的開發(fā)者助益更大。
大模型如何改變傳統(tǒng)單測生成? InfoQ:在?模型出現(xiàn)以前,傳統(tǒng)的智能單測?成?法是什么樣的?存在哪些痛點(diǎn)?
張樹波:傳統(tǒng)的單測生成應(yīng)用最廣、最成功的是基于搜索的單測生成,也就是很多場景都會提到的(search based software testing - SBST),其中集成了非常多的程序分析技術(shù),包括各種各樣的靜態(tài)分析、動態(tài)分析以及遺傳算法甚至 constrain solving。但因?yàn)檎Z言的特性不同,同樣的分析技術(shù)對不同的語言是需要重新實(shí)現(xiàn)的。雖然測試生成的原理在不同語言是通用的,但是強(qiáng)依賴于軟件分析技術(shù),那么每新增一種新的語言支持,就需要適配一整套分析技術(shù),成本較大。另外,精確的分析可能會依賴于編譯產(chǎn)物,例如動態(tài)分析,因此要求目標(biāo)項(xiàng)目進(jìn)行編譯后才能進(jìn)行測試生成,提高了生成所需的前置準(zhǔn)備要求。
而基于模型的生成可以直接分析源碼,無需編譯,降低生成的要求,大大擴(kuò)大適應(yīng)場景。近幾年來應(yīng)用 repository mining 提升 test generation 甚至 program repair 效果的工作也在逐漸的增加,說明 NLP 中的一些假設(shè)在軟工領(lǐng)域也是成立的,比如現(xiàn)有 repository 中包含了 test generation 甚至 program repair 中需要的知識,大家也做了相應(yīng)的嘗試,學(xué)習(xí)歷史知識并應(yīng)用到新的任務(wù)中在軟工領(lǐng)域也是大家認(rèn)可的思路。
InfoQ:應(yīng)??模型后,智能單測?成?法發(fā)?了哪些變化?實(shí)際效果如何?能完全替代傳統(tǒng)的智能單測?成?法嗎?
張樹波:這里先補(bǔ)充一個(gè)業(yè)務(wù)應(yīng)用背景,智能單測一般在開發(fā)者代碼編寫過程中 (IDE) 和在代碼提交后 (CI) 發(fā)揮作用,前者要求可讀性、正確性,后者要求正確性、覆蓋率指標(biāo)。應(yīng)用大模型后,智能單測由傳統(tǒng)模版生成 + 遺傳算法的方式向端到端的模型生成方式演化。傳統(tǒng)單測在正確性和覆蓋率指標(biāo)上仍然比大模型生成的要高,在 CI 過程中,仍占主導(dǎo)位置,大模型在其中作為補(bǔ)充。而在 IDE 中,大模型生成單測的可讀性更好,便于開發(fā)者修改,因此在 IDE 中單測更傾向使用大模型生成的結(jié)果。
我們智能服務(wù)團(tuán)隊(duì)的主要基于 Bloom、starcoder 等開源模型做了測試以及微調(diào),經(jīng)過測試,其中基于 Bloom 的 70 億參數(shù)模型的生成效果不弱于通用版 ChatGPT 的水平,并且在低端顯卡(A30)上的推理時(shí)延只有 ChatGPT 的 25%。目前,我們的大型模型單元測試生成分支覆蓋率在實(shí)際項(xiàng)目中達(dá)到 56%,同時(shí)在抖音的 Android、iOS 雙端落地, 問題有效性達(dá)到 80%,修復(fù)率 65%。同時(shí)我們也正在試用火山方舟上大模型的單測生成能力,效果正在評估中。
整體來看,大模型仍有一定局限,發(fā)展有個(gè)過程,各有千秋,取長補(bǔ)短,可以融合應(yīng)用 1+1>2,不同場景可以有不同的應(yīng)用方式。
InfoQ:?模型在智能單測?成中的應(yīng)?原理是什么?
張樹波:大模型單測生成屬于代碼生成、文本生成的范疇,旨在通過大模型完成端到端的單測代碼生成。大模型單測生成輸入是待測方法、以及上下文,輸出為單元測試函數(shù)。隨著模型規(guī)模的提升,模型的代碼理解、單測生成能力也大幅提升。
目前智能服務(wù)團(tuán)隊(duì)內(nèi)使用的大模型基座主要是開源模型,例如 Bloom、Starcoder,基于以上大模型,我們對裸模型以及使用單測訓(xùn)練數(shù)據(jù)微調(diào)之后模型,分別做了評估,當(dāng)前選擇了基于 Bloom7B 的微調(diào)模型落地。同時(shí)我們團(tuán)隊(duì)在 Java、Swift、Go 等多種編程語言的大模型落地計(jì)劃,廣泛收集了公開數(shù)據(jù)集、業(yè)務(wù)數(shù)據(jù)集用于微調(diào)。
如何提升?模型單測?成準(zhǔn)確性? InfoQ:您提到?模型在單測?成任務(wù)上仍存在模型幻覺和測試分?覆蓋不全的問題,對于這兩個(gè)問題,字節(jié)有哪些解決思路?如何提升?模型單測?成準(zhǔn)確性?
張樹波:當(dāng)前我們使用單測生成任務(wù)數(shù)據(jù)在大模型做了微調(diào),讓大模型專注單測生成。實(shí)驗(yàn)表明,通過構(gòu)建高質(zhì)量的訓(xùn)練數(shù)據(jù),可以顯著提升大模型單測分支覆蓋率指標(biāo)?;谖⒄{(diào)后的大模型,通過引入以編譯器、靜態(tài)分析結(jié)果作為獎勵的強(qiáng)化學(xué)習(xí),可以進(jìn)一步緩解模型幻覺的問題。微調(diào)和強(qiáng)化學(xué)習(xí)的基本假設(shè)是模型在預(yù)訓(xùn)練階段學(xué)習(xí)到了代碼相關(guān)知識,通過微調(diào)或強(qiáng)化學(xué)習(xí),可以激發(fā)模型的潛力,或讓模型跟隨特定偏好,輸出更好結(jié)果。如果預(yù)訓(xùn)練階段沒有過多的對應(yīng)任務(wù)領(lǐng)域的語料,通過繼續(xù)預(yù)訓(xùn)練的方式可以讓模型適配這一領(lǐng)域,然后進(jìn)行后面的微調(diào)和強(qiáng)化學(xué)習(xí),可以取得更好的結(jié)果。
除了以上方式,另外一種簡單粗暴的方式是提升模型規(guī)模,規(guī)模越大,能力上限越高。
InfoQ:除此之外,?模型在單測?成中還有那些局限性?是否會遇到數(shù)據(jù)質(zhì)量問題?是否需要考慮隱私和安全問題?有哪些措施可以確保數(shù)據(jù)安全?
張樹波:大模型在單測生成瓶頸在能給大模型提供多少背景信息,如果是一個(gè)簡單的函數(shù),沒有涉及任何其他自定義的類,大模型未來可以完美解決,但是涉及其他的類的,甚至是多層的,外層信息稀疏性,會提高輸入的上下文輸入長度,在實(shí)際落地中會在輸入長度和生成效果之間做一個(gè)取舍。微調(diào)數(shù)據(jù)質(zhì)量非常重要,決定模型是否可用的關(guān)鍵因素。關(guān)于數(shù)據(jù)安全問題,火山方舟提出了全方位的大模型安全架構(gòu),為模型訓(xùn)練方和使用者提供安全可信環(huán)境。
InfoQ:在?模型助?智能單測?成的過程中,字節(jié)團(tuán)隊(duì)內(nèi)還積累了哪些經(jīng)驗(yàn)和教訓(xùn)?對于希望在項(xiàng)?中應(yīng)??模型進(jìn)?智能單測?成的團(tuán)隊(duì),您會給他們提供哪些建議?
張樹波: 不僅是在大模型助力智能單測生成這個(gè)方向,所有大模型 X 某某類似的應(yīng)用落地都是一項(xiàng)系統(tǒng)工程。在大模型落地過程中,其他兄弟團(tuán)隊(duì)給予了大量的經(jīng)驗(yàn)和技術(shù)支持。
InfoQ:您認(rèn)為在?模型助?智能單測?成??,還有哪些需要進(jìn)?步研究和探索的領(lǐng)域 / 挑戰(zhàn)??模型在智能單測?成領(lǐng)域的未來發(fā)展趨勢是什么樣的?
張樹波:目前,我們對于 LLM 的應(yīng)用仍比較初級,所以首先是最基礎(chǔ)的研究,如何正確激發(fā)大模型在單測任務(wù)上的潛力,讓大模型發(fā)揮全部的效果。目前我們探索的手段包括但不限于任務(wù)微調(diào)、prompt engineering、RL,然后是下一個(gè)階段,如何讓模型不斷地增強(qiáng)在特定場景中的效果。另外,大模型的能力和發(fā)展讓原本一些無法通過自動化解決的問題有了新的可能性,比如經(jīng)典的 oracle problem,不僅僅是困擾單測生成,GUI 的測試、program repair 的落地都受限于這個(gè)經(jīng)典問題。如果大模型能夠解決 oracle problem,剛才提到的多種軟工技術(shù),會迎來又一個(gè)落地的春天,而我們對于這個(gè)趨勢充滿信心。
“大模型將對研發(fā)模式產(chǎn)生顛覆性改變” InfoQ:?模型在軟件研發(fā)?作流中最?的價(jià)值是什么??模型對軟件研發(fā)?作流的改變,將會如何影響軟件開發(fā)?業(yè)的未來發(fā)展趨勢?
張樹波:毫無疑問,大模型將對研發(fā)的模式產(chǎn)生顛覆性的改變,但這個(gè)改變并不會在一夜之間就發(fā)生,會是一個(gè)持續(xù)漸進(jìn)的過程,三年五年甚至十年。隨著大模型的不斷發(fā)展和進(jìn)化,對于研發(fā)工作流的影響程度會逐漸加深加強(qiáng)。副駕駛 Copilot 是一種比較可能的切入和演進(jìn)方式,一開始會在一些比較合適的小場景,Copilot 以半自動化的方式對特定任務(wù)進(jìn)行賦能和提效(比如單測的生成),然后隨著模型對代碼的理解能力和推理能力增強(qiáng),推理結(jié)果置信度提升,模型在任務(wù)中的重要程度逐步增加,在一些任務(wù)上達(dá)到和人類同等重要的參與程度。
同時(shí),能力可以泛化推廣到其他相似或者相關(guān)的任務(wù),比如 defect detection、fault localization、program repair 等等,成為開發(fā)者的“強(qiáng)化外骨骼”或者最佳搭檔。甚至有可能在不遠(yuǎn)的將來,實(shí)現(xiàn)通過 prompt 研發(fā)和調(diào)試軟件,就像《西部世界》中的場景一樣。
InfoQ:?前市?上存在很多結(jié)合?模型的研發(fā)效能?具,但在?些企業(yè)的端到端落地過程中并不理想,也沒有實(shí)現(xiàn)提效的突破,這背后可能存在哪些問題?不同規(guī)模的企業(yè)如何通過?模型實(shí)現(xiàn)最優(yōu)的研發(fā)效率和質(zhì)量?
張樹波:大模型適合做推理任務(wù),這是之前單體小模型不具備的能力。在這個(gè)基礎(chǔ)上,可以反觀大模型是否在做這類事情。另外當(dāng)前市面上的開源大模型或者大模型 API 都是通用大模型接口,如果直接在某個(gè)領(lǐng)域應(yīng)用可能存在領(lǐng)域的 gap。大模型本身也存在問題,例如大模型生成內(nèi)容是有偏的,而且存在模型幻覺、推理錯(cuò)誤等問題。同時(shí)研發(fā)效能工具的需要結(jié)合具體業(yè)務(wù)落地,我們智能服務(wù)團(tuán)隊(duì),在抖音、直播、剪映做了很多開創(chuàng)性的研發(fā)效能實(shí)踐,歡迎大家與我們合作。
大模型應(yīng)用可以分為幾個(gè)層次,API 調(diào)用、模型微調(diào)、模型繼續(xù)預(yù)訓(xùn)練、模型預(yù)訓(xùn)練,成本依次呈幾何級數(shù)遞增,不同規(guī)模企業(yè)可以簡單衡量下投入產(chǎn)出比,來確定在哪個(gè)層面應(yīng)用大模型。
InfoQ:?模型會對程序員帶來哪些沖擊?程序員和?模型如何更好地共?,實(shí)現(xiàn) 1+1>2 的效果?
張樹波:我不認(rèn)為大模型會減少對程序員的需求量,因?yàn)楝F(xiàn)在大模型還不能替代程序員,也不能為最終結(jié)果負(fù)責(zé)。在我們智能服務(wù)團(tuán)隊(duì)的實(shí)際業(yè)務(wù)中,我們把程序員當(dāng)成客戶,模型生成的單測為程序員服務(wù),自動化單測檢測出來的問題需程序員解決,大模型和程序本身是共生的關(guān)系。
大模型生成代碼能力增強(qiáng)的同時(shí),需要程序員提升自己的專業(yè)能力,能快速判斷大模型生成的代碼是否正確以及生成質(zhì)量的高低。程序員能力越強(qiáng),使用大模型生成代碼的質(zhì)量也會越高,因?yàn)橥ㄟ^使用不同的 prompt,可以生成不同質(zhì)量的代碼。程序員應(yīng)該擁抱大模型,它可以提高代碼編寫效率,對于一些常識性的問題,它也能做到有問必答,省去網(wǎng)上搜索的時(shí)間。
嘉賓簡介
張樹波,字節(jié)跳動算法專家,清華大學(xué)碩士畢業(yè),先后就職于 vivo、字節(jié)跳動。從事 NLP 算法多年,在智能單測、智能客服、語音助手等業(yè)務(wù)場景有豐富的落地經(jīng)驗(yàn)。將在 QCon 北京 2023 分享題為《大模型助力智能單測生成》的演講。
-
人工智能
+關(guān)注
關(guān)注
1789文章
46652瀏覽量
237070 -
字節(jié)跳動
+關(guān)注
關(guān)注
0文章
307瀏覽量
8894 -
大模型
+關(guān)注
關(guān)注
2文章
2274瀏覽量
2356
原文標(biāo)題:大模型顛覆研發(fā)模式:字節(jié)跳動是如何在單元測試中落地大模型的?
文章出處:【微信號:AI前線,微信公眾號:AI前線】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論