中文字幕无码日韩视频无码三区

代碼補全方法、裝置、相關設備及計算機程序產品與流程

文檔序號:39544240發(fa)布(bu)日(ri)期:2024-09-30 13:07閱讀(du):18來源:國知局
代碼補全方法、裝置、相關設備及計算機程序產品與流程

本(ben)技術涉(she)及(ji)代碼開發,更(geng)具體的說,是(shi)涉(she)及(ji)一種代碼補(bu)全方法、裝置、相關設備及(ji)計算機程(cheng)序產品。


背景技術:

1、在軟件(jian)開發(fa)的(de)過程中(zhong),集成開發(fa)環境(integrated?development?environment,ide)扮演(yan)著非常重要的(de)角(jiao)色,代碼(ma)補(bu)(bu)全(quan)則是其中(zhong)使用最為(wei)廣泛的(de)功能之一(yi)。代碼(ma)補(bu)(bu)全(quan)的(de)基本思想是:當開發(fa)人員開始鍵(jian)入代碼(ma)時,代碼(ma)編輯器會(hui)自(zi)動提供可能的(de)補(bu)(bu)全(quan)選項。

2、早(zao)期的(de)代(dai)(dai)碼(ma)補全(quan)(quan)系統主要依(yi)賴于(yu)靜態的(de)源代(dai)(dai)碼(ma)分析,這種(zhong)方(fang)法(fa)(fa)可以提供(gong)基(ji)于(yu)語法(fa)(fa)的(de)補全(quan)(quan),但是(shi)(shi)它(ta)無法(fa)(fa)理(li)解代(dai)(dai)碼(ma)的(de)語義(yi),因(yin)此(ci)提供(gong)的(de)補全(quan)(quan)選(xuan)項可能并(bing)不總(zong)是(shi)(shi)符合開發者(zhe)的(de)意圖。為(wei)了解決這個問題(ti),研究者(zhe)開始探索使用機器學(xue)習(xi),特別是(shi)(shi)深(shen)度(du)學(xue)習(xi)來進行代(dai)(dai)碼(ma)補全(quan)(quan)。這種(zhong)方(fang)法(fa)(fa)的(de)基(ji)本(ben)思想是(shi)(shi)訓練一個模型,使其學(xue)習(xi)代(dai)(dai)碼(ma)的(de)模式,并(bing)使用這些模式來生(sheng)成補全(quan)(quan)選(xuan)項。這種(zhong)方(fang)法(fa)(fa)可以提供(gong)更(geng)準確的(de)補全(quan)(quan),因(yin)為(wei)它(ta)可以理(li)解代(dai)(dai)碼(ma)的(de)語義(yi)。

3、現有的(de)(de)(de)(de)代碼(ma)(ma)補(bu)全(quan)系(xi)統大(da)(da)(da)(da)(da)(da)(da)多(duo)是依(yi)賴大(da)(da)(da)(da)(da)(da)(da)型(xing)(xing)語(yu)(yu)言(yan)模型(xing)(xing)(llm)根據已(yi)有的(de)(de)(de)(de)代碼(ma)(ma),預(yu)測(ce)(ce)下一(yi)(yi)個可能的(de)(de)(de)(de)token(詞法單元,例(li)如變量和方法),可以在(zai)一(yi)(yi)定程(cheng)(cheng)(cheng)度上提高開發(fa)人員的(de)(de)(de)(de)代碼(ma)(ma)編(bian)寫效率。大(da)(da)(da)(da)(da)(da)(da)語(yu)(yu)言(yan)模型(xing)(xing)的(de)(de)(de)(de)參數規模大(da)(da)(da)(da)(da)(da)(da),可以更為準(zhun)確的(de)(de)(de)(de)預(yu)測(ce)(ce)所需補(bu)全(quan)的(de)(de)(de)(de)代碼(ma)(ma)。但(dan)是,大(da)(da)(da)(da)(da)(da)(da)語(yu)(yu)言(yan)模型(xing)(xing)的(de)(de)(de)(de)參數規模較(jiao)大(da)(da)(da)(da)(da)(da)(da),每次(ci)推(tui)理(li)時(shi)需要更多(duo)的(de)(de)(de)(de)計(ji)算(suan)資源(yuan)和時(shi)間,推(tui)理(li)速(su)度較(jiao)慢。當前的(de)(de)(de)(de)代碼(ma)(ma)補(bu)全(quan)系(xi)統是在(zai)檢測(ce)(ce)到光標停留時(shi)間超過(guo)閾值(zhi)時(shi)即觸發(fa)請(qing)(qing)求大(da)(da)(da)(da)(da)(da)(da)語(yu)(yu)言(yan)模型(xing)(xing)的(de)(de)(de)(de)過(guo)程(cheng)(cheng)(cheng)。而由于編(bian)程(cheng)(cheng)(cheng)場(chang)景的(de)(de)(de)(de)復雜(za)性,開發(fa)人員在(zai)編(bian)寫代碼(ma)(ma)的(de)(de)(de)(de)過(guo)程(cheng)(cheng)(cheng)中,并不是所有編(bian)程(cheng)(cheng)(cheng)場(chang)景都(dou)需要大(da)(da)(da)(da)(da)(da)(da)模型(xing)(xing)參與進(jin)行(xing)(xing)代碼(ma)(ma)補(bu)全(quan)。例(li)如,在(zai)一(yi)(yi)行(xing)(xing)代碼(ma)(ma)已(yi)經寫完但(dan)沒有回車寫下一(yi)(yi)行(xing)(xing)時(shi),此(ci)時(shi)當前行(xing)(xing)代碼(ma)(ma)已(yi)經完整寫完,無需向大(da)(da)(da)(da)(da)(da)(da)模型(xing)(xing)發(fa)送請(qing)(qing)求。然而,按照(zhao)現有的(de)(de)(de)(de)代碼(ma)(ma)補(bu)全(quan)系(xi)統仍會向大(da)(da)(da)(da)(da)(da)(da)語(yu)(yu)言(yan)模型(xing)(xing)發(fa)起(qi)請(qing)(qing)求,由大(da)(da)(da)(da)(da)(da)(da)模型(xing)(xing)來判斷(duan)此(ci)處應補(bu)什么(me)代碼(ma)(ma),這(zhe)無疑會導(dao)致無用的(de)(de)(de)(de)計(ji)算(suan)資源(yuan)和時(shi)間的(de)(de)(de)(de)消耗(hao)。


技術實現思路

1、鑒于(yu)上述問題(ti),提出了本(ben)技術以(yi)便提供(gong)一(yi)種代碼補(bu)全方法、裝置、相關設備及計(ji)算(suan)(suan)機程(cheng)序產品,以(yi)降低(di)代碼補(bu)全系統(tong)無用的(de)(de)計(ji)算(suan)(suan)資源和時間的(de)(de)消耗。具(ju)體方案(an)如下:

2、第一方面,提供(gong)了一種代碼補全方法,包(bao)括:

3、在檢測到滿足(zu)第一(yi)代(dai)碼補全(quan)(quan)條件時(shi),獲取(qu)待(dai)補全(quan)(quan)位(wei)置的(de)上文(wen)和/或下(xia)文(wen)設(she)定長度的(de)源代(dai)碼片(pian)段(duan),并采用設(she)定占位(wei)符標記(ji)所述(shu)待(dai)補全(quan)(quan)位(wei)置,得到待(dai)補全(quan)(quan)的(de)代(dai)碼片(pian)段(duan);

4、采用配置的(de)(de)補(bu)(bu)全(quan)預(yu)測模(mo)型(xing),預(yu)測所(suo)(suo)述(shu)(shu)待補(bu)(bu)全(quan)的(de)(de)代(dai)碼片段(duan)中所(suo)(suo)述(shu)(shu)占(zhan)位符位置是(shi)否需要補(bu)(bu)全(quan)代(dai)碼,得到第一(yi)預(yu)測結果(guo),所(suo)(suo)述(shu)(shu)補(bu)(bu)全(quan)預(yu)測模(mo)型(xing)的(de)(de)參數規模(mo)小于(yu)配置的(de)(de)代(dai)碼補(bu)(bu)全(quan)模(mo)型(xing);

5、僅(jin)在(zai)所述(shu)(shu)第一預測(ce)結果表示所述(shu)(shu)占位符位置需要補(bu)全代(dai)(dai)碼(ma)時,調用所述(shu)(shu)代(dai)(dai)碼(ma)補(bu)全模型,生成對所述(shu)(shu)待補(bu)全的代(dai)(dai)碼(ma)片段中所述(shu)(shu)占位符位置的補(bu)全代(dai)(dai)碼(ma);

6、輸出所述(shu)補全代碼。

7、在一(yi)種可能的設計中(zhong),在本技術實施例的第(di)一(yi)方面的另一(yi)種實現(xian)方式中(zhong),所(suo)述補全預測模型為分類(lei)模型,用于預測所(suo)述待補全的代(dai)(dai)碼(ma)片段中(zhong)所(suo)述占(zhan)位符位置是否需(xu)要(yao)補全代(dai)(dai)碼(ma)的分類(lei)標(biao)簽(qian)(qian),所(suo)述分類(lei)標(biao)簽(qian)(qian)包括(kuo)第(di)一(yi)標(biao)簽(qian)(qian)和第(di)二(er)標(biao)簽(qian)(qian),所(suo)述第(di)一(yi)標(biao)簽(qian)(qian)表(biao)示需(xu)要(yao)補全代(dai)(dai)碼(ma),所(suo)述第(di)二(er)標(biao)簽(qian)(qian)表(biao)示不(bu)需(xu)要(yao)補全代(dai)(dai)碼(ma);

8、或,

9、所(suo)述補(bu)全(quan)預測模(mo)型(xing)為(wei)生成式模(mo)型(xing),用(yong)于生成表(biao)示所(suo)述占(zhan)位符位置(zhi)是否需要補(bu)全(quan)代碼的預測結果。

10、在一(yi)(yi)種可能的設(she)計中(zhong),在本技術實(shi)施例(li)的第(di)一(yi)(yi)方面(mian)的另(ling)一(yi)(yi)種實(shi)現方式中(zhong),調用所述(shu)代碼補(bu)全(quan)模型生成的補(bu)全(quan)代碼包(bao)括第(di)一(yi)(yi)數(shu)量(liang)n1條補(bu)全(quan)代碼;

11、該方法還(huan)包括:

12、調用配置的評(ping)分(fen)模型對每條(tiao)所(suo)述(shu)補全代碼進行質量評(ping)分(fen),得到每條(tiao)所(suo)述(shu)補全代碼的質量得分(fen);

13、所(suo)(suo)述輸出所(suo)(suo)述補全代碼的過程,包括:

14、將質量(liang)得分滿足設定得分要求的補全代碼(ma)作為最終(zhong)結果輸出。

15、在(zai)一種可能(neng)的設計中,在(zai)本技術實(shi)(shi)施例的第一方面的另一種實(shi)(shi)現方式(shi)中,還包括:

16、當檢測(ce)到用戶強制觸(chu)發補全的指令時,若所述(shu)代(dai)碼(ma)(ma)補全模(mo)型生成的各條(tiao)所述(shu)補全代(dai)碼(ma)(ma)的質(zhi)量得(de)分均不滿足設定得(de)分要求,則將質(zhi)量得(de)分最高的一條(tiao)補全代(dai)碼(ma)(ma)作(zuo)為最終結果輸出。

17、在(zai)一種(zhong)可能的設(she)計中,在(zai)本(ben)技術實施例的第一方面的另一種(zhong)實現方式中,所述補全預(yu)測模型的訓練過(guo)程,包(bao)括:

18、構建樣本(ben)(ben)代(dai)(dai)(dai)碼(ma)數(shu)據庫(ku),所述數(shu)據庫(ku)中包(bao)含已知需(xu)要(yao)(yao)進行補全的樣本(ben)(ben)代(dai)(dai)(dai)碼(ma)片(pian)段,以及不需(xu)要(yao)(yao)進行補全的樣本(ben)(ben)代(dai)(dai)(dai)碼(ma)片(pian)段;

19、利用所述(shu)樣本(ben)代碼數據庫(ku)中各(ge)條(tiao)樣本(ben)代碼片段訓練分類模型,將(jiang)訓練后的分類模型作為(wei)補全(quan)預測模型。

20、在一種可能的(de)設計中(zhong)(zhong),在本(ben)技術實施例(li)的(de)第一方(fang)面的(de)另一種實現方(fang)式(shi)中(zhong)(zhong),所述構建樣本(ben)代碼(ma)數據庫的(de)過程,包括:

21、獲取開源代碼(ma)組成代碼(ma)庫;

22、按照設定的(de)第(di)一(yi)數(shu)據構造(zao)規則,對(dui)所述代(dai)(dai)碼庫(ku)中(zhong)的(de)代(dai)(dai)碼進行編輯處理,得(de)到需要進行補全(quan)的(de)樣本代(dai)(dai)碼片段;

23、按照(zhao)設定的第二(er)數據構造規(gui)則,對所(suo)述代(dai)(dai)碼(ma)(ma)庫中(zhong)的代(dai)(dai)碼(ma)(ma)進(jin)行編(bian)輯(ji)處理,得到不需(xu)要進(jin)行補全的樣本代(dai)(dai)碼(ma)(ma)片(pian)段。

24、在(zai)一(yi)種可能的(de)設計中,在(zai)本(ben)技術實(shi)(shi)施例的(de)第一(yi)方(fang)面(mian)的(de)另一(yi)種實(shi)(shi)現方(fang)式(shi)中,所述第一(yi)數據構(gou)造規則包括如(ru)下至(zhi)少一(yi)項:

25、將任一函(han)(han)數(shu)(shu)實(shi)現部(bu)(bu)分(fen)(fen)全部(bu)(bu)刪(shan)除,只保留函(han)(han)數(shu)(shu)聲明部(bu)(bu)分(fen)(fen),刪(shan)除部(bu)(bu)分(fen)(fen)使用(yong)占位符替(ti)換(huan);

26、將(jiang)任一(yi)函數實現部分(fen)按照代碼塊量級刪除,每次(ci)只刪除一(yi)個(ge)代碼塊,刪除部分(fen)使用占(zhan)位符替換;

27、將任(ren)一具有(you)實際語(yu)義(yi)信息的代碼行刪除,刪除部分使(shi)用(yong)占位符替換;

28、將(jiang)任一具(ju)有實際語義信息的代碼塊刪除,刪除部分(fen)使用占位符替換;

29、將(jiang)任一具有實際(ji)語義(yi)信(xin)息(xi)的代碼行(xing),按(an)照隨機保留該(gai)代碼行(xing)有效長度的第一百(bai)分(fen)比(bi)值刪除部(bu)(bu)分(fen)內(nei)容,刪除部(bu)(bu)分(fen)使用占位符替換;

30、將任(ren)一具有實際語義信息的代(dai)碼塊(kuai),按照隨機保留該代(dai)碼塊(kuai)行數的第二百分比值刪(shan)除部分內容,刪(shan)除部分使(shi)用占(zhan)位(wei)符替換。

31、在一種可能(neng)的設計中,在本技(ji)術實(shi)施例的第(di)一方(fang)面的另(ling)一種實(shi)現方(fang)式中,所述(shu)第(di)二數(shu)據構造規則包括如(ru)下(xia)至少一項:

32、在任一語義完整的代碼行(xing)的行(xing)尾插入(ru)占位符;

33、在任一語義完整的函數末尾以及回車下一行插入(ru)占位符(fu);

34、在任一語義完整(zheng)的函數內部最后(hou)一行插入(ru)占位符(fu);

35、在注(zhu)釋與完整的函數(shu)之(zhi)間插入占位符;

36、在兩個(ge)語義完整的函數(shu)之間(jian)插(cha)入占位符;

37、在(zai)相鄰兩個語義完(wan)整的代碼(ma)行之間插入占位符(fu);

38、在(zai)語(yu)義完(wan)整的(de)代碼(ma)片段(duan)中相鄰兩行之間插入占位符。

39、第二(er)方面,提供了一種代碼(ma)補全裝置,包括:

40、待補全(quan)代碼片段獲取(qu)單元,用(yong)于在檢測到滿足第一(yi)代碼補全(quan)條件時,獲取(qu)待補全(quan)位(wei)置的(de)上文和/或下文設定(ding)長度的(de)源代碼片段,并采用(yong)設定(ding)占位(wei)符標(biao)記(ji)所述待補全(quan)位(wei)置,得到待補全(quan)的(de)代碼片段;

41、決策單元,用(yong)于采用(yong)配(pei)置的補(bu)全(quan)(quan)預(yu)(yu)測(ce)模型,預(yu)(yu)測(ce)所(suo)述待(dai)補(bu)全(quan)(quan)的代碼(ma)片段(duan)中所(suo)述占位符位置是否(fou)需要補(bu)全(quan)(quan)代碼(ma),得到第一預(yu)(yu)測(ce)結果,所(suo)述補(bu)全(quan)(quan)預(yu)(yu)測(ce)模型的參數規模小(xiao)于配(pei)置的代碼(ma)補(bu)全(quan)(quan)模型;

42、代(dai)碼(ma)生成單元,用于僅在所(suo)(suo)述(shu)(shu)第一預測(ce)結(jie)果(guo)表(biao)示所(suo)(suo)述(shu)(shu)占位(wei)符位(wei)置需要補(bu)全代(dai)碼(ma)時(shi),調用所(suo)(suo)述(shu)(shu)代(dai)碼(ma)補(bu)全模型,生成對(dui)所(suo)(suo)述(shu)(shu)待補(bu)全的(de)(de)代(dai)碼(ma)片段中所(suo)(suo)述(shu)(shu)占位(wei)符位(wei)置的(de)(de)補(bu)全代(dai)碼(ma);

43、代(dai)碼輸(shu)出單元,用于輸(shu)出所(suo)述補(bu)全代(dai)碼。

44、第三方(fang)面,提供了一種電子設備,包括(kuo):存儲器和處理器;

45、所述存(cun)儲器,用于(yu)存(cun)儲程(cheng)序;

46、所述(shu)(shu)(shu)處理器,用于(yu)執行所述(shu)(shu)(shu)程序,實現本技術前(qian)述(shu)(shu)(shu)第(di)一方(fang)(fang)面中任(ren)一項(xiang)所描述(shu)(shu)(shu)的代碼(ma)補全(quan)方(fang)(fang)法。

47、第(di)(di)四方(fang)(fang)面,提供(gong)了一種可讀存儲(chu)介質,其(qi)上存儲(chu)有計(ji)算(suan)機程序(xu),所述(shu)計(ji)算(suan)機程序(xu)被處理器(qi)執行時,實(shi)現(xian)本技術前述(shu)第(di)(di)一方(fang)(fang)面中(zhong)任一項所描述(shu)的(de)代(dai)碼(ma)補(bu)全方(fang)(fang)法。

48、第五方面(mian),提供(gong)了一(yi)(yi)種計算機程序產品,包(bao)括計算機程序,該計算機程序被處(chu)理器(qi)執行時,實現(xian)本技術前述第一(yi)(yi)方面(mian)中任一(yi)(yi)項(xiang)所描述的代碼補全方法(fa)。

49、借(jie)由上(shang)述技(ji)術(shu)(shu)方(fang)案(an),本(ben)技(ji)術(shu)(shu)在編程開(kai)發場景下(xia)檢測(ce)(ce)(ce)(ce)到滿足第(di)一(yi)代(dai)(dai)碼(ma)(ma)(ma)補(bu)全(quan)(quan)(quan)條件時(shi)(示例如光(guang)標停(ting)留時(shi)間(jian)超(chao)過閾值,等),并非直(zhi)接調(diao)用代(dai)(dai)碼(ma)(ma)(ma)補(bu)全(quan)(quan)(quan)模(mo)(mo)型(xing)進行補(bu)全(quan)(quan)(quan)代(dai)(dai)碼(ma)(ma)(ma)的(de)(de)預(yu)(yu)(yu)(yu)測(ce)(ce)(ce)(ce),而(er)是(shi)(shi)采用預(yu)(yu)(yu)(yu)先配(pei)置的(de)(de)補(bu)全(quan)(quan)(quan)預(yu)(yu)(yu)(yu)測(ce)(ce)(ce)(ce)模(mo)(mo)型(xing),預(yu)(yu)(yu)(yu)測(ce)(ce)(ce)(ce)待補(bu)全(quan)(quan)(quan)的(de)(de)代(dai)(dai)碼(ma)(ma)(ma)片段中占位(wei)(wei)符(fu)位(wei)(wei)置(也即(ji)待補(bu)全(quan)(quan)(quan)位(wei)(wei)置)是(shi)(shi)否需要補(bu)全(quan)(quan)(quan)代(dai)(dai)碼(ma)(ma)(ma),得到第(di)一(yi)預(yu)(yu)(yu)(yu)測(ce)(ce)(ce)(ce)結果,僅在第(di)一(yi)預(yu)(yu)(yu)(yu)測(ce)(ce)(ce)(ce)結果表示占位(wei)(wei)符(fu)位(wei)(wei)置需要補(bu)全(quan)(quan)(quan)代(dai)(dai)碼(ma)(ma)(ma)時(shi),才調(diao)用代(dai)(dai)碼(ma)(ma)(ma)補(bu)全(quan)(quan)(quan)模(mo)(mo)型(xing)進行補(bu)全(quan)(quan)(quan)代(dai)(dai)碼(ma)(ma)(ma)的(de)(de)預(yu)(yu)(yu)(yu)測(ce)(ce)(ce)(ce)。本(ben)技(ji)術(shu)(shu)配(pei)置的(de)(de)補(bu)全(quan)(quan)(quan)預(yu)(yu)(yu)(yu)測(ce)(ce)(ce)(ce)模(mo)(mo)型(xing)的(de)(de)參數規模(mo)(mo)小于(yu)代(dai)(dai)碼(ma)(ma)(ma)補(bu)全(quan)(quan)(quan)模(mo)(mo)型(xing),通過配(pei)置該補(bu)全(quan)(quan)(quan)預(yu)(yu)(yu)(yu)測(ce)(ce)(ce)(ce)模(mo)(mo)型(xing)可(ke)(ke)以(yi)(yi)以(yi)(yi)盡量小的(de)(de)資源消耗快速預(yu)(yu)(yu)(yu)測(ce)(ce)(ce)(ce)占位(wei)(wei)符(fu)位(wei)(wei)置是(shi)(shi)否需要進行代(dai)(dai)碼(ma)(ma)(ma)補(bu)全(quan)(quan)(quan),若預(yu)(yu)(yu)(yu)測(ce)(ce)(ce)(ce)結果為不(bu)需要,則(ze)可(ke)(ke)以(yi)(yi)不(bu)用請求代(dai)(dai)碼(ma)(ma)(ma)補(bu)全(quan)(quan)(quan)模(mo)(mo)型(xing),從而(er)極大降低了無用的(de)(de)計算資源和時(shi)間(jian)的(de)(de)消耗。

當前第1頁1 2 
網(wang)友(you)詢(xun)問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1