本發(fā)明涉及l(fā)lm大語言模型和sca軟件供應(yīng)鏈安全領(lǐng)域,具體是基于大模型rag輔助建立開源組件許可證索引的方法。
背景技術(shù):
1、大部分軟件在開發(fā)過程中都會(huì)引用到各種各樣的開源組件,這樣可以減少很多基礎(chǔ)性的開發(fā)工作,開發(fā)人員可以將精力集中在開發(fā)業(yè)務(wù)相關(guān)的代碼上,這樣可以提升軟件開發(fā)效率,但是同時(shí)會(huì)面臨另一個(gè)問題:引入的這些開源庫,會(huì)有不同的開源協(xié)議,而這些開源協(xié)議一般都具有一些權(quán)利要求,如果項(xiàng)目不符合開源組件許可證的權(quán)利要求,則可能會(huì)面臨一些法律風(fēng)險(xiǎn),比如,項(xiàng)目中引用了一個(gè)pgl協(xié)議的開源組件,那么項(xiàng)目本身也需要遵循相同的協(xié)議進(jìn)行開源,而我們的項(xiàng)目特點(diǎn)可能無法滿足這樣的要求,這樣就會(huì)存在風(fēng)險(xiǎn)。為了避免這種風(fēng)險(xiǎn),就需要掌握項(xiàng)目中所引用的各個(gè)開源組件所使用的許可證以及風(fēng)險(xiǎn);
2、現(xiàn)有分析項(xiàng)目開源組件許可證的方法如下:
3、基于項(xiàng)目的軟件物料清單(sbom),分析每個(gè)組件的許可證信息:
4、方法1、通過各類開源組件倉庫開放接口查詢組件的許可證信息;
5、方法2、結(jié)合項(xiàng)目編譯環(huán)境,編譯過程中下載依賴的組件,通過解析許可證特征文件獲取組件的許可證信息;
6、方法3、建立開源組件的許可證信息庫,在進(jìn)行許可證風(fēng)險(xiǎn)分析時(shí)直接查詢建立好的許可證信息庫來獲取組件的許可證信息。建立信息庫的具體方式基本是基于1或2,根據(jù)接口查詢或特征文件解析等方法獲取組件的原始許可證描述信息,再通過有限枚舉映射、關(guān)鍵字匹配、人工校正等方式來處理不規(guī)范的許可證信息得到標(biāo)準(zhǔn)許可證名稱,來建立組件許可證信息庫。
7、上述方法1-3的缺點(diǎn)如下:
8、方法1:分析過程中需要依賴網(wǎng)絡(luò)環(huán)境,請(qǐng)求官方組件倉庫實(shí)時(shí)查詢組件的許可證信息,在無法訪問外網(wǎng)的環(huán)境則無法正常分析。
9、方法2:分析過程中需要結(jié)合項(xiàng)目編譯環(huán)境,獲取項(xiàng)目依賴的組件以及組件的許可證信息。這種方式需要依賴編譯環(huán)境,下載組件,不夠輕量靈活。
10、方法3:雖然能基于方法1和方法2提前建立開源組件許可證信息庫,但是組件許可證信息庫不全面、許可證信息不標(biāo)準(zhǔn)。因?yàn)橥ㄟ^組件倉庫官方接口查詢到的許可證信息很可能不是標(biāo)準(zhǔn)的許可證名稱,可能只是一段許可證文字描述,或者是非標(biāo)準(zhǔn)的許可證名稱,由于是人為填寫的并且沒有明確的規(guī)范約束,所以存在很多種可能。或者接口返回的許可證字段中并未包含許可證信息,而是在其他字段中出現(xiàn)許可證信息。此時(shí)需要通過程序來對(duì)獲取到的許可證信息進(jìn)行處理,轉(zhuǎn)化成標(biāo)準(zhǔn)的許可證。例如,將接口中獲取的不規(guī)范描述apache?license?version?2,apache?license?2.0或許可證的一段協(xié)議內(nèi)容等映射成標(biāo)準(zhǔn)的許可證apache-2.0,如圖3所示,圖3為python?pypi接口查詢到的某開源組件信息,供參考:接口返回的license字段并未包含許可證信息,但是在classifiers字段中包含許可證信息,雖然包含但是也并非標(biāo)準(zhǔn)的許可證名稱gpl-2.0,無法直接用于建立許可證索引庫,也就不能用于許可證風(fēng)險(xiǎn)分析。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明的目的在于提供基于大模型rag輔助建立開源組件許可證索引的方法,以解決上述背景技術(shù)中提出的問題。
2、為實(shí)現(xiàn)上述目的,本發(fā)明提供如下技術(shù)方案:
3、基于大模型rag輔助建立開源組件許可證索引的方法,其方法步驟如下:
4、步驟一:結(jié)合開源許可證知識(shí)庫進(jìn)行大模型rag;
5、步驟二:開源組件許可證索引庫構(gòu)建;
6、步驟三:開源組件許可證索引庫存儲(chǔ)。
7、作為本發(fā)明進(jìn)一步的方案:所述步驟一具體為基于spdx以及osi官方維護(hù)的開源許可證信息,整理得到開源許可證知識(shí)庫,并對(duì)每個(gè)開源許可證內(nèi)容進(jìn)行切割并進(jìn)行向量化存儲(chǔ),對(duì)通用大模型進(jìn)行開源許可證知識(shí)增強(qiáng)。
8、作為本發(fā)明再進(jìn)一步的方案:所述步驟二的開源組件許可證索引庫構(gòu)建方法步驟如下:
9、s1:基于組件倉庫的官方接口查詢已經(jīng)發(fā)布的組件列表以及定時(shí)查詢近期更新的組件列表,依次查詢獲取組件詳細(xì)信息;
10、s2:基于s1中獲得的組件信息,解析其中可能包含許可證描述信息的字段內(nèi)容,如果組件的許可證描述已經(jīng)是標(biāo)準(zhǔn)的許可證名稱,可以直接用于后續(xù)許可證索引庫的構(gòu)建;
11、s3:如果是非標(biāo)準(zhǔn)的許可證名稱,再進(jìn)一步基于許可證別稱的枚舉或關(guān)鍵字匹配來轉(zhuǎn)化為標(biāo)準(zhǔn)的許可證名稱,用于后續(xù)許可證索引庫的構(gòu)建;
12、s4:如果s3仍未解析到標(biāo)準(zhǔn)的許可證名稱,則基于s2得到的可能包含許可證描述的內(nèi)容,分別組裝成提示詞進(jìn)一步請(qǐng)求知識(shí)增強(qiáng)后的大模型,讓大模型返回與許可證描述最符合的一個(gè)標(biāo)準(zhǔn)許可證名稱,如果沒有最匹配的則返回空,不用展開闡述,基于得到的標(biāo)準(zhǔn)許可證名稱用于后續(xù)的許可證索引庫的構(gòu)建;
13、s5:如果s1-s4均未解析得到組件標(biāo)準(zhǔn)的許可證名稱,則將組件列入需要人工校驗(yàn)的列表,待后續(xù)人工確認(rèn)后補(bǔ)充許可證信息。
14、作為本發(fā)明再進(jìn)一步的方案:所述步驟三開源組件許可證索引庫存儲(chǔ)方法具體為基于步驟二獲取的組件信息以及組件的標(biāo)準(zhǔn)許可證信息,建立map格式索引文件,在進(jìn)行組件許可證風(fēng)險(xiǎn)分析時(shí),根據(jù)組件名稱的前綴從索引文件中檢索出所有符合前綴的組件以及許可證信息,進(jìn)一步檢索得到該組件的許可證列表,用于后續(xù)的許可證風(fēng)險(xiǎn)分析。
15、作為本發(fā)明再進(jìn)一步的方案:所述s1中組件倉庫包括但不限于maven,npm,pypi,go組件。
16、作為本發(fā)明再進(jìn)一步的方案:所述s2中標(biāo)準(zhǔn)的許可證名稱包括apache-1.0,apache-2.0,mit,gpl-2.0。
17、作為本發(fā)明再進(jìn)一步的方案:所述步驟三中的數(shù)據(jù)結(jié)構(gòu)形如:{“a”:{“a1”:[“apache-2.0”],“a2”:[“apache?2.0”,“mit”]},......},以二進(jìn)制文件進(jìn)行存儲(chǔ)。
18、與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:
19、1、本發(fā)明基于大模型rag技術(shù)結(jié)合官方許可證知識(shí)庫對(duì)大模型進(jìn)行知識(shí)增強(qiáng),結(jié)合大模型對(duì)開源組件的非標(biāo)準(zhǔn)的許可證描述信息進(jìn)行進(jìn)一步的加工處理,得到符合標(biāo)準(zhǔn)的許可證名稱用于建立開源組件許可證索引庫,相較于僅通過許可證別名有限枚舉或關(guān)鍵字匹配技術(shù)來校正許可證信息;
20、2、本發(fā)明進(jìn)一步提升索引庫組件許可證的覆蓋范圍,建立更全面的開源組件的許可證索引庫,提升開源組件許可證風(fēng)險(xiǎn)分析的組件覆蓋率和準(zhǔn)確率。
1.基于大模型rag輔助建立開源組件許可證索引的方法,其特征在于:其方法步驟如下:
2.根據(jù)權(quán)利要求1所述的基于大模型rag輔助建立開源組件許可證索引的方法,其特征在于:所述步驟一具體為基于spdx以及osi官方維護(hù)的開源許可證信息,整理得到開源許可證知識(shí)庫,并對(duì)每個(gè)開源許可證內(nèi)容進(jìn)行切割并進(jìn)行向量化存儲(chǔ),對(duì)通用大模型進(jìn)行開源許可證知識(shí)增強(qiáng)。
3.根據(jù)權(quán)利要求1所述的基于大模型rag輔助建立開源組件許可證索引的方法,其特征在于:所述步驟二的開源組件許可證索引庫構(gòu)建方法步驟如下:
4.根據(jù)權(quán)利要求1所述的基于大模型rag輔助建立開源組件許可證索引的方法,其特征在于:所述步驟三開源組件許可證索引庫存儲(chǔ)方法具體為基于步驟二獲取的組件信息以及組件的標(biāo)準(zhǔn)許可證信息,建立map格式索引文件,在進(jìn)行組件許可證風(fēng)險(xiǎn)分析時(shí),根據(jù)組件名稱的前綴從索引文件中檢索出所有符合前綴的組件以及許可證信息,進(jìn)一步檢索得到該組件的許可證列表,用于后續(xù)的許可證風(fēng)險(xiǎn)分析。
5.根據(jù)權(quán)利要求3所述的基于大模型rag輔助建立開源組件許可證索引的方法,其特征在于:所述s1中組件倉庫包括但不限于maven,npm,pypi,go組件。
6.根據(jù)權(quán)利要求3所述的基于大模型rag輔助建立開源組件許可證索引的方法,其特征在于:所述s2中標(biāo)準(zhǔn)的許可證名稱包括apache-1.0,apache-2.0,mit,gpl-2.0。
7.根據(jù)權(quán)利要求4所述的基于大模型rag輔助建立開源組件許可證索引的方法,其特征在于:所述步驟三中的數(shù)據(jù)結(jié)構(gòu)形如:{“a”:{“a1”:[“apache-2.0”],“a2”:[“apache2.0”,“mit”]},......},以二進(jìn)制文件進(jìn)行存儲(chǔ)。