用SQL示例增加自然語言生成復(fù)雜SQL準(zhǔn)確性的方法
技術(shù)領(lǐng)域
[0001] 本發(fā)明涉及自然語言轉(zhuǎn)為數(shù)據(jù)庫的結(jié)構(gòu)化查詢語言技術(shù)領(lǐng)域,特別是涉及一種用SQL示例增加自然語言生成復(fù)雜SQL準(zhǔn)確性的方法。
背景技術(shù)
[0002] 自然語言轉(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ù)庫進(jìn)行交互。由于用戶問題表達(dá)方式的多樣性、數(shù)據(jù)庫表結(jié)構(gòu)和SQL的復(fù)雜性,從自然語言問題中生成準(zhǔn)確的SQL是一項具有挑戰(zhàn)性的任務(wù)。
[0003] 傳統(tǒng)的NL2SQL系統(tǒng)通?;谝?guī)則和深度學(xué)習(xí)網(wǎng)絡(luò)的方法,雖然取得了不錯的性能,但基于規(guī)則的方法依賴于人工,因此成本昂貴。而傳統(tǒng)基于神經(jīng)網(wǎng)絡(luò)的方法需要不斷地根據(jù)業(yè)務(wù)的領(lǐng)域來微調(diào)模型,在數(shù)據(jù)庫越來越復(fù)雜的當(dāng)下,?非常不靈活。
[0004] 近年來,隨著大語言模型(Large?Language?Models,LLM)的流行,基于LLM的NL2SQL成為了廣受關(guān)注的探索方向。LLM憑借強(qiáng)大的語言理解能力,可以在不需要微調(diào)的情況下,僅憑借提示詞就獲得不錯的效果?;诖笳Z言模型的NL2SQL雖然相比于之前的方法取得了突破,但對于復(fù)雜的SQL依然難以準(zhǔn)確地生成。
[0005] 復(fù)雜的SQL可能需要使用到外聯(lián)、子查詢,窗口函數(shù)等操作,通常這類SQL長度更長,涉及的表更多。目前的大語言模型在訓(xùn)練階段所使用的數(shù)據(jù)集中出現(xiàn)包含這幾類操作的SQL的數(shù)量少,現(xiàn)有技術(shù)中大語言模型并不擅長生成復(fù)雜的SQL。
[0006] 因此,針對現(xiàn)有技術(shù)不足,提供一種基于大語言模型的用SQL示例增加自然語言生成復(fù)雜SQL準(zhǔn)確性的方法以克服現(xiàn)有技術(shù)不足甚為必要。
發(fā)明內(nèi)容
[0007] 本發(fā)明的目的在于避免現(xiàn)有技術(shù)的不足之處而提供一種用SQL示例增加自然語言生成復(fù)雜SQL準(zhǔn)確性的方法,借助用戶添加的SQL示例,增強(qiáng)了LLM生成的SQL的準(zhǔn)確性,同時降低了用戶的等待時間,在生成復(fù)雜SQL時,性能優(yōu)良。
[0008] 本發(fā)明的目的通過以下技術(shù)措施實現(xiàn)。
[0009] 提供一種用SQL示例增加自然語言生成復(fù)雜SQL準(zhǔn)確性的方法,對于用戶的請求Query,按照如下步驟處理:
[0010] S100.對用戶的請求進(jìn)行重寫;
[0011] S200.檢索與請求Query相關(guān)的數(shù)據(jù)庫模式,從數(shù)據(jù)庫中檢索出相關(guān)的表模式;
[0012] S300.檢索與請求Query相關(guān)的SQL示例;
[0013] 通過向量檢索和全文檢索的混合,從數(shù)據(jù)庫中檢索出相關(guān)的SQL示例;
[0014] S400.?基于SQL示例的請求Query復(fù)雜度評估,即為請求Query要生成的SQL進(jìn)行難度評估,若評估結(jié)果是該請求Query只需要簡單SQL即可完成查詢,則進(jìn)入S500;否則進(jìn)入流程S900;
[0015] S500.提示詞構(gòu)建,即將Query、表模式、SQL示例填入prompt模板中;
[0016] S600.PreSQL生成,即將構(gòu)建好的提示詞輸入大語言模型,由大語言模型進(jìn)行處理得到SQL;
[0017] S700.執(zhí)行SQL,若執(zhí)行過程中不報錯則執(zhí)行步驟S1400,若執(zhí)行過程中報錯則執(zhí)行步驟S800;
[0018] S800.檢查SQL示例中是否包含SQL模板,如果包含則進(jìn)入步驟S900,否則進(jìn)行步驟S1100;
[0019] S900.基于Function?call的示例增強(qiáng),即用步驟S300中匹配到的SQL示例來創(chuàng)建Function?call的請求Json,并使用大語言模型來執(zhí)行,將結(jié)果構(gòu)建成SQL;
[0020] S1000.將示例增強(qiáng)生成的SQL、該SQL的執(zhí)行結(jié)果、Query構(gòu)建為提示詞后輸入給大語言模型,判斷SQL的執(zhí)行結(jié)果能否回答Query,如大語言模型判斷為“能”則執(zhí)行步驟S1400,否則執(zhí)行步驟S1200;
[0021] S1100.?基于PreSQL的提示詞構(gòu)建,即通過向量檢索和全文檢索的混合,從數(shù)據(jù)庫中檢索出與PreSQL相關(guān)的SQL示例和表模式,并通過PreSQL中使用的表對查詢出的表模式進(jìn)行過濾,過濾后的表模式去掉PreSQL中未使用的列,最后用步驟S200中檢索出的數(shù)據(jù)庫模式、步驟S300中檢索出的SQL示例、本步驟中檢索出的SQL示例和模式描述進(jìn)行兩兩組合,構(gòu)建出4組提示詞模板;
[0022] S1200.基于PreSQL的示例增強(qiáng),即根據(jù)步驟S1100輸入的提示詞生成SQL語句;
[0023] S1300.先過濾掉執(zhí)行出錯的結(jié)果,然后對正確執(zhí)行的SQL的執(zhí)行結(jié)果進(jìn)行投票,得票最多的結(jié)果作為最終結(jié)果返回;當(dāng)出現(xiàn)平票時,由LLM選擇最合適的結(jié)果;