本發(fā)明涉及自然語言轉(zhuǎn)為數(shù)據(jù)庫的結(jié)構(gòu)化查詢語言,特別是涉及一種通過構(gòu)建表模式與sql轉(zhuǎn)換降低自然語言生成復雜sql的方法。
背景技術(shù):
1、自然語言轉(zhuǎn)sql(natural?language?to?structured?query?language,?nl2sql)任務(wù)是將自然語言轉(zhuǎn)為數(shù)據(jù)庫的結(jié)構(gòu)化查詢語言(structured?query?language,?sql),該技術(shù)能使用戶在不會sql的情況下,通過自然語言與數(shù)據(jù)庫進行交互。由于用戶問題表達方式的多樣性、數(shù)據(jù)庫表結(jié)構(gòu)和sql的復雜性,從自然語言問題中生成準確的sql是一項具有挑戰(zhàn)性的任務(wù)。
2、傳統(tǒng)的nl2sql系統(tǒng)通?;谝?guī)則和深度學習網(wǎng)絡(luò)的方法,?雖然取得了不錯的性能,?但基于規(guī)則的方法依賴于人工,?因此成本昂貴。而傳統(tǒng)基于神經(jīng)網(wǎng)絡(luò)的方法需要不斷地根據(jù)業(yè)務(wù)的領(lǐng)域來微調(diào)模型,?在數(shù)據(jù)庫越來越復雜的當下,?非常不靈活。
3、近年來,隨著大語言模型(large?language?models,llm)的流行,基于llm的nl2sql成為了廣受關(guān)注的探索方向。llm憑借強大的語言理解能力,可以在不需要微調(diào)的情況下,僅憑借提示詞就獲得不錯的效果。基于大模型的nl2sql雖然相比于之前的方法取得了突破,但依然存在以下問題:
4、1.?llm對數(shù)據(jù)庫模式的理解弱:?llm理解數(shù)據(jù)庫中表名、列名和各種表之間的關(guān)系,是準確生成sql查詢的基礎(chǔ)。然而,數(shù)據(jù)庫模式通常是復雜的,并且不總是符合最理想的設(shè)計規(guī)范,在不同領(lǐng)域也有很大的差異.如何準確地表示數(shù)據(jù)庫模式是一項具有挑戰(zhàn)性的任務(wù)。
5、2.?生成的復雜sql不符合預期:?為了完成實現(xiàn)用戶的查詢,可能需要使用到外聯(lián),子查詢,窗口函數(shù)等操作,這幾類sql通常比較長,涉及的表和操作類型更多,因此llm準確生成sql的難度更大。同時主流大模型在訓練階段所使用的數(shù)據(jù)集中出現(xiàn)包含這幾類操作的sql的數(shù)量少,因此主流大模型并不擅長生成復雜的sql。
6、因此,針對現(xiàn)有技術(shù)不足,提供一種通過構(gòu)建表模式與sql轉(zhuǎn)換降低自然語言生成復雜sql的方法以克服現(xiàn)有技術(shù)不足甚為必要。
技術(shù)實現(xiàn)思路
1、本發(fā)明的目的在于避免現(xiàn)有技術(shù)的不足之處而提供一種通過構(gòu)建表模式與sql轉(zhuǎn)換降低自然語言生成復雜sql的方法,具有復雜查詢更加準確、維護成本更低、耗時更短的特點。
2、本發(fā)明的目的通過以下技術(shù)措施實現(xiàn)。
3、提供一種通過構(gòu)建表模式與sql轉(zhuǎn)換降低自然語言生成復雜sql的方法,包括:預先配置數(shù)據(jù)庫模式和對用戶的請求進行處理;
4、預先配置數(shù)據(jù)庫模式,具體配置步驟如下:
5、1.1用戶配置數(shù)據(jù)庫的連接信息,以獲得數(shù)據(jù)庫中目標數(shù)據(jù)庫的讀權(quán)限;
6、1.2根據(jù)步驟1.1中用戶配置的信息,從目標數(shù)據(jù)庫讀取表模式信息,同時隨機讀取兩條記錄并分別命名為數(shù)據(jù)1和數(shù)據(jù)2,將所讀取的表模式信息和讀取的記錄以表為單位,存儲到數(shù)據(jù)庫中,作為表模式;所存儲的表模式的集合構(gòu)成數(shù)據(jù)庫模式;
7、系統(tǒng)對用戶的請求query的處理,具體步驟如下:
8、2.1檢索與query相關(guān)的數(shù)據(jù)庫模式,具體通過向量檢索和全文檢索的混合,?從數(shù)據(jù)庫中檢索出相關(guān)的表模式;
9、2.2檢索與query相關(guān)的sql示例,具體通過向量檢索和全文檢索的混合,?從數(shù)據(jù)庫中檢索出相關(guān)的sql示例;
10、2.3提示詞構(gòu)建,具體是將query、表模式、sql示例填入prompt模板中;
11、2.4?通過llm模型生成sql;
12、2.5重寫sql,將原本復雜的sql操作簡化為單表操作sql;
13、2.6?sql執(zhí)行。
14、優(yōu)選的,上述的通過構(gòu)建表模式與sql轉(zhuǎn)換降低自然語言生成復雜sql的方法,步驟1.2中的所述表模式信息為表名、表描述、模式名、字段名、字段類型、字段描述。
15、優(yōu)選的,上述的通過構(gòu)建表模式與sql轉(zhuǎn)換降低自然語言生成復雜sql的方法,還包括步驟1.3對讀取到的數(shù)據(jù)庫模式進行修改,得到修改后的數(shù)據(jù)庫模式及對應(yīng)的表模式。
16、優(yōu)選的,上述的通過構(gòu)建表模式與sql轉(zhuǎn)換降低自然語言生成復雜sql的方法,步驟1.3中,對讀取到的數(shù)據(jù)庫模式進行修改,具體是刪除nl2sql中不會用到的表模式以及刪除表模式中用不到的字段。
17、優(yōu)選的,上述的通過構(gòu)建表模式與sql轉(zhuǎn)換降低自然語言生成復雜sql的方法,所述數(shù)據(jù)庫模式的表含有表名、表描述和csv格式的字段申明;csv格式的字段申明中含有5個字段,?分別為字段名、數(shù)據(jù)類型、描述、數(shù)據(jù)1和數(shù)據(jù)2。
18、優(yōu)選的,上述的通過構(gòu)建表模式與sql轉(zhuǎn)換降低自然語言生成復雜sql的方法,在基于csv格式的數(shù)據(jù)庫模式上,構(gòu)建偽表,通過偽表將原本涉及到多張表的查詢操作簡化為單表操作。
19、優(yōu)選的,上述的通過構(gòu)建表模式與sql轉(zhuǎn)換降低自然語言生成復雜sql的方法,通過將兩張表的字段在邏輯上進行合并得到偽表,將邏輯上合并的表的模式稱為偽表模式。
20、優(yōu)選的,上述的通過構(gòu)建表模式與sql轉(zhuǎn)換降低自然語言生成復雜sql的方法,大模型根據(jù)用戶的query生成的sql中使用到了偽表模式,則將sql根據(jù)規(guī)則重寫為操作原始表的sql。
21、優(yōu)選的,上述的通過構(gòu)建表模式與sql轉(zhuǎn)換降低自然語言生成復雜sql的方法,步驟1.3中,根據(jù)實際業(yè)務(wù)需求,對讀取到的數(shù)據(jù)庫模式進行修改,得到修改后的標準數(shù)據(jù)庫模式及對應(yīng)的標準表模式。
22、本發(fā)明的通過構(gòu)建表模式與sql轉(zhuǎn)換降低自然語言生成復雜sql的方法,包括:預先配置數(shù)據(jù)庫模式和對用戶的請求進行處理;預先配置數(shù)據(jù)庫模式,具體配置步驟如下:1.1用戶配置數(shù)據(jù)庫的連接信息,以獲得數(shù)據(jù)庫中目標數(shù)據(jù)庫的讀權(quán)限;1.2根據(jù)步驟1.1中用戶配置的信息,從目標數(shù)據(jù)庫讀取表模式信息,同時隨機讀取兩條記錄并分別命名為數(shù)據(jù)1和數(shù)據(jù)2,將所讀取的表模式信息和讀取的記錄以表為單位,存儲到數(shù)據(jù)庫中,作為表模式;所存儲的表模式的集合構(gòu)成數(shù)據(jù)庫模式;系統(tǒng)對用戶的請求query的處理,具體步驟如下:2.1檢索與query相關(guān)的數(shù)據(jù)庫模式,具體通過向量檢索和全文檢索的混合,?從數(shù)據(jù)庫中檢索出相關(guān)的表模式;2.2檢索與query相關(guān)的sql示例,具體通過向量檢索和全文檢索的混合,?從數(shù)據(jù)庫中檢索出相關(guān)的sql示例;2.3提示詞構(gòu)建,具體是將query、表模式、sql示例填入prompt模板中;2.4?通過llm模型生成sql;2.5重寫sql,將原本復雜的sql操作簡化為單表操作sql;2.6?sql執(zhí)行。
23、與現(xiàn)有其他技術(shù)方案相比,本發(fā)明具有如下優(yōu)勢:
24、1.復雜查詢更加準確的。本發(fā)明首創(chuàng)的偽表模式和sql重寫技術(shù)能有效地降低復雜查詢時llm所需生成的sql的復雜度,降低生成的sql無法執(zhí)行的概率,同時降低sql完整生成所需的耗時。另一方面,本發(fā)明基于csv對表模式進行描述,使得表模式除了其他工作中也能包含的字段名、字段類型、字段備注外,還能額外包含表記錄,使得模型能學習到表中記錄的具體存儲格式。
25、2.維護成本更低。本發(fā)明基于csv組織表模式,相比于其他nl2sql中基于數(shù)據(jù)庫的表創(chuàng)建語句進行對表模式的描述,本發(fā)明更容易被非技術(shù)人員維護。
26、3.耗時更短:nl2sql的耗時主要在于大模型所需生成的token數(shù),?sql重寫技術(shù),使得原本需要生成長sql才能完成的操作,現(xiàn)在只要生成更短的sql即可完成,因此大幅降低了時間消耗。