深圳網(wǎng)站建設(shè)怎樣容易南寧網(wǎng)絡(luò)推廣品牌
在眾多的 AI 大模型的應(yīng)用場(chǎng)景中,Text-to-SQL,也就是文本轉(zhuǎn) SQL,是其中實(shí)用性很高的一個(gè)。Text-to-SQL 充分利用了大模型的優(yōu)勢(shì),把用戶提供的自然語言描述轉(zhuǎn)換成 SQL 語句,還可以執(zhí)行生成的 SQL 語句,再把查詢結(jié)果返回給用戶。
在實(shí)際的業(yè)務(wù)系統(tǒng)中,絕大部分?jǐn)?shù)據(jù)都保存在數(shù)據(jù)庫中,其中以關(guān)系數(shù)據(jù)庫為主流。這使得 SQL 成為了很多人的必備技能,除了程序員之外,還包括大量非技術(shù)的分析人員。這些人沒有技術(shù)背景, 學(xué)習(xí) SQL 對(duì)他們來說有一定的難度。但是他們懂得自己的數(shù)據(jù)需求,知道如何用自然語言來描述自己的需求,但是 SQL 嚴(yán)格的語法會(huì)成為他們的障礙。大模型可以成為他們的助手。只需要把查詢需求輸入大模型,大模型可以根據(jù)描述生成 SQL 語句。通過大模型的方法調(diào)用,還可以直接運(yùn)行生成的 SQL 語句,得到結(jié)果之后返回給用戶。
文本轉(zhuǎn) SQL 的實(shí)現(xiàn)所涉及的方面比較多,可以很簡單,也可以很復(fù)雜。實(shí)現(xiàn)的復(fù)雜度和幾個(gè)因素有關(guān)。
第一個(gè)因素是數(shù)據(jù)庫中表的數(shù)量。在給大模型的提示中,需要包含數(shù)據(jù)庫中表的元數(shù)據(jù),包括表的名稱、描述、表中列的名稱、類型和描述等。大模型根據(jù)這些信息來生成 SQL。如果數(shù)據(jù)庫中的表的數(shù)量較少,全部這些表的元數(shù)據(jù)可以直接內(nèi)嵌在提示中。如果數(shù)據(jù)庫中的表很多,超過了大模型的上下文窗口的長度限制,那就需要用到檢索增強(qiáng)生成(RAG)技術(shù)。把全部數(shù)據(jù)庫和表的元數(shù)據(jù),保存在向量數(shù)據(jù)庫中。根據(jù)用戶的查詢,從向量數(shù)據(jù)庫中檢索到可以滿足用戶查詢需求的表的元數(shù)據(jù),僅把這些表的元數(shù)據(jù)包含在提示中就足夠了。
第二個(gè)因素是生成 SQL 語句的驗(yàn)證。大模型生成的 SQL 語句,不一定總是正確的,可能有語法錯(cuò)誤,也可能有邏輯錯(cuò)誤。具體的問題,只有真正執(zhí)行了 SQL 語句之后才能知道??梢园褕?zhí)行時(shí)的錯(cuò)誤信息,和 SQL 語句一起,再次發(fā)送給大模型,由大模型對(duì)錯(cuò)誤的 SQL 語句進(jìn)行修改。這樣重復(fù)迭代多次,從而得到最終正確的結(jié)果。
這里給出了一個(gè)簡單的代碼示例,不考慮使用檢索增強(qiáng)生成,以及 SQL 的驗(yàn)證。對(duì)于較小規(guī)模的數(shù)據(jù)庫,以及相對(duì)簡單的查詢需求,一次生成的 SQL 語句的準(zhǔn)確性已經(jīng)比較高了。
這個(gè)例子使用 Spring AI 開發(fā),使用 JDBC 提取出數(shù)據(jù)庫的元數(shù)據(jù),以 JSON 格式嵌入在發(fā)送給大模型的提示中,另外創(chuàng)建了一個(gè)大模型使用的工具,可以執(zhí)行 SQL 語句。完整的代碼在 GitHub (https://github.com/JavaAIDev/simple-text-to-sql) 上。
這里通過一個(gè) Netflix 上的節(jié)目的數(shù)據(jù)庫來作為演示,這個(gè)數(shù)據(jù)庫里面只有一張表。表的結(jié)構(gòu)和包含的數(shù)據(jù)如下所示。
使用 JDBC 提取出來數(shù)據(jù)庫的元數(shù)據(jù),所生成的 JSON 格式的內(nèi)容如下所示。
輸入的查詢是, how many movies are produced in United States?,意思是“在美國制作的電影的數(shù)量”。大模型的輸出如下所示,數(shù)量是 2058。
所生成的 SQL 語句如下所示。在生成的 SQL 語句中,根據(jù) type 和 country 進(jìn)行了過濾。在 SQL 客戶端中執(zhí)行所生成的語句,可以得到同樣的結(jié)果。
以上就是使用大模型進(jìn)行文本轉(zhuǎn) SQL 的基本實(shí)現(xiàn)方式。