System.ArgumentOutOfRangeException: 索引和長度必須引用該字符串內(nèi)的位置。 參數(shù)名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技術(shù)實(shí)現(xiàn)步驟摘要】
本公開涉及大語言模型,具體涉及一種子函數(shù)的代碼生成方法、裝置。
技術(shù)介紹
1、隨著大語言模型技術(shù)的發(fā)展,越來越多的人開始使用大模型解決軟件開發(fā)場景下的代碼補(bǔ)全任務(wù)。
2、現(xiàn)有的代碼補(bǔ)全模型輸出的補(bǔ)全代碼中可能存在未定義的子函數(shù),如果在代碼運(yùn)行過程中調(diào)用了一個(gè)未定義的子函數(shù),則可能出現(xiàn)程序運(yùn)行失敗的問題。
3、因此,亟需一種子函數(shù)的代碼生成方法,以解決上述技術(shù)問題。
技術(shù)實(shí)現(xiàn)思路
1、有鑒于此,本公開提出了一種子函數(shù)的代碼生成方法、裝置,以解決相關(guān)技術(shù)存在由于補(bǔ)全代碼中存在未定義的子函數(shù),導(dǎo)致程序運(yùn)行失敗的問題。
2、本公開第一方面實(shí)施例提出了一種子函數(shù)的代碼生成方法,所述方法包括:
3、接收代碼補(bǔ)全指令,所述代碼補(bǔ)全指令包括目標(biāo)子函數(shù)的函數(shù)類型和上下文代碼;所述目標(biāo)子函數(shù)表示待補(bǔ)全函數(shù)中的至少一個(gè)未定義的子函數(shù);
4、根據(jù)所述函數(shù)類型、所述上下文代碼以及第一代碼補(bǔ)全模型,確定所述目標(biāo)子函數(shù)的目標(biāo)補(bǔ)全代碼;
5、通過所述目標(biāo)補(bǔ)全代碼對(duì)待補(bǔ)全函數(shù)進(jìn)行補(bǔ)全,得到第一補(bǔ)全代碼。
6、本公開實(shí)施例,通過根據(jù)未定義的子函數(shù)的函數(shù)類型、上下文代碼以及第一代碼補(bǔ)全模型,確定未定義的子函數(shù)的目標(biāo)補(bǔ)全代碼,并利用該目標(biāo)補(bǔ)全代碼對(duì)待補(bǔ)全函數(shù)進(jìn)行補(bǔ)全,得到第一補(bǔ)全代碼,能夠確保生成的補(bǔ)全代碼是完整的,減少因未定義子函數(shù)導(dǎo)致的編譯或運(yùn)行錯(cuò)誤,大大提高了代碼補(bǔ)全的準(zhǔn)確性和代碼的可運(yùn)行性。
7、在本公開實(shí)施例中,在得
8、檢測所述第一補(bǔ)全代碼已補(bǔ)全的目標(biāo)子函數(shù)中是否存在未定義的新的子函數(shù);
9、如果存在所述未定義的新的子函數(shù),則將所述未定義的新的子函數(shù)確定新的目標(biāo)子函數(shù),并再次執(zhí)行接收代碼補(bǔ)全指令的操作。
10、本公開實(shí)施例,通過對(duì)補(bǔ)全得到的第一補(bǔ)全代碼進(jìn)行是否被定義的檢測,能夠保證所有子函數(shù)都被正確定義,減少代碼運(yùn)行時(shí)出現(xiàn)未定義函數(shù)調(diào)用的錯(cuò)誤,進(jìn)而大大提高了代碼補(bǔ)全的準(zhǔn)確性和代碼的可運(yùn)行性。
11、在本公開實(shí)施例中,根據(jù)所述函數(shù)類型、所述上下文代碼以及第一代碼補(bǔ)全模型,確定所述目標(biāo)子函數(shù)的目標(biāo)補(bǔ)全代碼,包括:
12、提取所述目標(biāo)子函數(shù)的上下文代碼的語義特征;
13、調(diào)用所述第一代碼補(bǔ)全模型根據(jù)所述語義特征以及所述函數(shù)類型確定所述目標(biāo)子函數(shù)的目標(biāo)補(bǔ)全代碼。
14、在本公開實(shí)施例中,還包括:訓(xùn)練得到所述第一代碼補(bǔ)全模型,所述第一代碼補(bǔ)全模型的模型訓(xùn)練步驟包括:
15、獲取多個(gè)第一樣本代碼;每個(gè)第一樣本代碼包括至少一個(gè)函數(shù)代碼片段,每個(gè)函數(shù)代碼片段包括至少一個(gè)子函數(shù)調(diào)用;
16、針對(duì)所述多個(gè)第一樣本代碼中的任意一個(gè)第一樣本代碼,將所述第一樣本代碼中的任意一個(gè)函數(shù)中調(diào)用的任意一個(gè)子函數(shù)的定義刪除,得到第二樣本代碼;
17、根據(jù)所述第二樣本代碼中的被刪除子函數(shù)的函數(shù)信息,以及與所述被刪除子函數(shù)對(duì)應(yīng)的前序代碼和后序代碼,對(duì)初始模型進(jìn)行訓(xùn)練,得到所述第一代碼補(bǔ)全模型;所述函數(shù)信息包括函數(shù)類型和函數(shù)名。
18、在本公開實(shí)施例中,在接收代碼補(bǔ)全指令之前,所述方法還包括:
19、獲取待補(bǔ)全的源代碼;
20、將所述待補(bǔ)全的源代碼輸入至訓(xùn)練好的第二代碼補(bǔ)全模型中,輸出第二補(bǔ)全代碼;
21、判斷所述第二補(bǔ)全代碼中是否存在未定義的子函數(shù);
22、如果所述第二補(bǔ)全代碼中不存在未定義的子函數(shù),則通過所述第二補(bǔ)全代碼對(duì)所述待補(bǔ)全的源代碼進(jìn)行補(bǔ)全;
23、如果所述第二補(bǔ)全代碼中存在未定義的子函數(shù),則執(zhí)行接收代碼補(bǔ)全指令的操作。
24、在本公開實(shí)施例中,在得到第一補(bǔ)全代碼之后,所述方法還包括:
25、如果所述第一補(bǔ)全代碼中不存在未定義的子函數(shù)時(shí),則通過所述第一補(bǔ)全代碼對(duì)所述待補(bǔ)全的源代碼進(jìn)行補(bǔ)全,得到可執(zhí)行的源代碼。
26、在本公開實(shí)施例中,訓(xùn)練得到所述第二代碼補(bǔ)全模型,所述第二代碼補(bǔ)全模型的模型訓(xùn)練步驟包括:
27、獲取多個(gè)第三樣本代碼;
28、針對(duì)所述多個(gè)第三樣本代碼中的任意一個(gè)第三樣本代碼,將所述第三樣本代碼轉(zhuǎn)換為對(duì)應(yīng)的第一抽象語法樹,得到與所述多個(gè)第三樣本代碼一一對(duì)應(yīng)的多個(gè)第一抽象語法樹;任一第一抽象語法樹包括多個(gè)分支結(jié)構(gòu),每個(gè)分支結(jié)構(gòu)包括所述第一抽象語法樹中除根節(jié)點(diǎn)之外的任意一個(gè)節(jié)點(diǎn),以及所述任意一個(gè)節(jié)點(diǎn)的所有子節(jié)點(diǎn);
29、針對(duì)所述多個(gè)第一抽象語法樹中的任意一個(gè)第一抽象語法樹,將所述第一抽象語法樹中的任意一個(gè)分支結(jié)構(gòu)刪除,得到第二抽象語法樹;
30、根據(jù)與所述多個(gè)第一抽象語法樹一一對(duì)應(yīng)的多個(gè)第二抽象語法樹,對(duì)第二初始模型進(jìn)行訓(xùn)練,以得到所述第二代碼補(bǔ)全模型。
31、本公開實(shí)施例通過將第一抽象語法樹中的任意一個(gè)分支結(jié)構(gòu)刪除,得到第二抽象語法樹;根據(jù)與多個(gè)第一抽象語法樹一一對(duì)應(yīng)的多個(gè)第二抽象語法樹,對(duì)初始模型進(jìn)行訓(xùn)練,得到第二代碼補(bǔ)全模型,通過這種模型訓(xùn)練方式得到的代碼補(bǔ)全模型能夠保證代碼補(bǔ)全的結(jié)構(gòu)完整性(這里的結(jié)構(gòu)完整性是指代碼的整體框架的完整性,與子函數(shù)未定義不沖突),從而達(dá)到補(bǔ)全后的源代碼能夠正常運(yùn)行的目的。
32、在本公開實(shí)施例中,根據(jù)與所述多個(gè)第一抽象語法樹一一對(duì)應(yīng)的多個(gè)第二抽象語法樹,對(duì)第二初始模型進(jìn)行訓(xùn)練,以得到所述第二代碼補(bǔ)全模型,包括:
33、針對(duì)所述多個(gè)第二抽象語法樹中的任意一個(gè)第二抽象語法樹,將所述第二抽象語法樹轉(zhuǎn)換為對(duì)應(yīng)的目標(biāo)字符序列;
34、確定所述第二抽象語法樹的被刪除分支結(jié)構(gòu)在所述目標(biāo)字符序列的目標(biāo)位置;
35、根據(jù)所述目標(biāo)位置,從所述目標(biāo)字符序列中確定出第一字符序列和第二字符序列;所述第一字符序列表示所述目標(biāo)字符序列的目標(biāo)位置前序部分的字符序列,所述第二字符序列表示所述目標(biāo)字符序列的目標(biāo)位置后序部分的字符序列;
36、訓(xùn)練所述初始模型根據(jù)所述第一字符序列和所述第二字符序列,預(yù)測所述被刪除分支結(jié)構(gòu)的字符序列。
37、本公開實(shí)施例通過目標(biāo)位置,從目標(biāo)字符序列中確定出第一字符序列和第二字符序列,并訓(xùn)練初始模型根據(jù)第一字符序列和第二字符序列,預(yù)測被刪除分支結(jié)構(gòu)的字符序列,能夠使模型考慮代碼的前序和后續(xù)的上下文,以更好地理解代碼的邏輯流程和結(jié)構(gòu),從而優(yōu)化模型性能,達(dá)到提高補(bǔ)全結(jié)構(gòu)的預(yù)測準(zhǔn)確性的目的。
38、在本公開實(shí)施例中,在將所述第一抽象語法樹中的任意一個(gè)分支結(jié)構(gòu)刪除,得到第二抽象語法樹之后,所述方法還包括:
39、從所述多個(gè)第一抽象語法樹中篩選出與所述第二抽象語法樹對(duì)應(yīng)的第一抽象語法樹;
40、將所述第一抽象語法樹中與所述第二抽象語法樹的被刪除分支結(jié)構(gòu)對(duì)應(yīng)的分支結(jié)構(gòu)進(jìn)行標(biāo)注。
41、本公開第二方面的實(shí)施例提供了一種子函數(shù)的代碼生成裝置,包括:
42、指令接收模塊,用于接收代碼補(bǔ)全指令,所述代碼補(bǔ)全指本文檔來自技高網(wǎng)...
【技術(shù)保護(hù)點(diǎn)】
1.一種子函數(shù)的代碼生成方法,其特征在于,所述方法包括:
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,在得到第一補(bǔ)全代碼之后,所述方法還包括:
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,根據(jù)所述函數(shù)類型、所述上下文代碼以及第一代碼補(bǔ)全模型,確定所述目標(biāo)子函數(shù)的目標(biāo)補(bǔ)全代碼,包括:
4.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,還包括:訓(xùn)練得到所述第一代碼補(bǔ)全模型,所述第一代碼補(bǔ)全模型的模型訓(xùn)練步驟包括:
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,在接收代碼補(bǔ)全指令之前,所述方法還包括:
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,在得到第一補(bǔ)全代碼之后,所述方法還包括:
7.根據(jù)權(quán)利要求5所述的方法,其特征在于,訓(xùn)練得到所述第二代碼補(bǔ)全模型,所述第二代碼補(bǔ)全模型的模型訓(xùn)練步驟包括:
8.根據(jù)權(quán)利要求7所述的方法,其特征在于,根據(jù)與所述多個(gè)第一抽象語法樹一一對(duì)應(yīng)的多個(gè)第二抽象語法樹,對(duì)第二初始模型進(jìn)行訓(xùn)練,以得到所述第二代碼補(bǔ)全模型,包括:
9.根據(jù)權(quán)利要求7所述的方法,其特征在于,在將
10.一種子函數(shù)的代碼生成裝置,其特征在于,所述裝置包括:
...【技術(shù)特征摘要】
1.一種子函數(shù)的代碼生成方法,其特征在于,所述方法包括:
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,在得到第一補(bǔ)全代碼之后,所述方法還包括:
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,根據(jù)所述函數(shù)類型、所述上下文代碼以及第一代碼補(bǔ)全模型,確定所述目標(biāo)子函數(shù)的目標(biāo)補(bǔ)全代碼,包括:
4.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,還包括:訓(xùn)練得到所述第一代碼補(bǔ)全模型,所述第一代碼補(bǔ)全模型的模型訓(xùn)練步驟包括:
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,在接收代碼補(bǔ)全指令之前,所述方法還包括:
6.根據(jù)權(quán)利要求5所述...
【專利技術(shù)屬性】
技術(shù)研發(fā)人員:蔣思源,李戈,劉洋,
申請(qǐng)(專利權(quán))人:北京硅心科技有限公司,
類型:發(fā)明
國別省市:
還沒有人留言評(píng)論。發(fā)表了對(duì)其他瀏覽者有用的留言會(huì)獲得科技券。