SQL語句生成智能體——vanna項目介紹 原創(chuàng)
?“ Vanna的核心思想是由大模型替代DBA人員編寫SQL,能夠直接根據(jù)自然語言進行數(shù)據(jù)分析 。”
在大模型應(yīng)用中有一種技術(shù)叫做NL2SQL——自然語言生成SQL語句;在基于人工智能的數(shù)據(jù)分析場景中,數(shù)據(jù)庫是必不可少的一個環(huán)節(jié)。但怎么處理數(shù)據(jù)庫中的數(shù)據(jù)卻有不同的思路,比如類似于傳統(tǒng)數(shù)據(jù)分析,使用SQL讀取數(shù)據(jù)庫,然后交給大模型進行分析;
第二,使用pandas這種數(shù)據(jù)分析工具,讓大模型調(diào)用pandas的函數(shù)執(zhí)行獲取結(jié)果;因為存在即合理,因此不同的技術(shù)方案適合不同的業(yè)務(wù)場景。
而今天我們就來介紹一下基于大模型的SQL語句生成項目——Vanna。
SQL語句生成智能體
Vanna項目是一個讓用戶輸入自然語言,然后自動生成SQL語句進行數(shù)據(jù)分析的開源項目;其本質(zhì)是使用RAG的技術(shù),配合大模型進行SQL生成。
官網(wǎng)地址:??https://vanna.ai/docs/??
項目架構(gòu)圖如下:

從架構(gòu)圖中可以看出,項目是根據(jù)用戶的問題從向量數(shù)據(jù)庫中進行相似度檢索,然后再拼接成提示詞,最后由大模型生成SQL查詢語句交給數(shù)據(jù)庫引擎執(zhí)行。
從文檔中可以看出,vanna項目的執(zhí)行過程主要分為兩步,第一步是train也就是訓(xùn)練,第二步是ask也就是用戶提問;訓(xùn)練的過程,其實就是把數(shù)據(jù)庫結(jié)構(gòu)和說明文檔保存到向量數(shù)據(jù)庫中,然后用戶提問時就可以根據(jù)用戶的語義對向量數(shù)據(jù)進行相似度檢索,獲取到用戶想要查詢的庫表結(jié)構(gòu)。
然后再由大模型根據(jù)用戶的需求和庫表結(jié)構(gòu)生成相對應(yīng)的SQL語句進行執(zhí)行。
如下圖所示:

而且,vanna項目提供了專門的訓(xùn)練接口,讓開發(fā)者可以基于自己的庫表結(jié)果做訓(xùn)練。并且,可以選擇對應(yīng)的大模型,向量數(shù)據(jù)庫和關(guān)系型數(shù)據(jù)庫;而且,為了解決兼容性問題,還提供了基于pandas的數(shù)據(jù)結(jié)構(gòu)分析接口。

而從源碼分析,vanna生成SQL語句是使用歷史記錄,數(shù)據(jù)庫DDL語句和說明文檔document一起拼接成Prompt提示詞交由大模型自動分析生成查詢語句。
如下圖所示:

當大模型分析生成SQL語句之后,再交由數(shù)據(jù)庫引擎進行執(zhí)行;并且為了防止生成的SQL語句有問題,這里還專門用正則表達式進行處理。

那么通過這種生成SQL執(zhí)行的好處是什么?
這種基于SQL的數(shù)據(jù)分析方式,其原理只是把本來由人工編寫SQL語句的過程交給了大模型;而數(shù)據(jù)處理的過程還是由數(shù)據(jù)庫引擎來執(zhí)行。這種方式對比使用pandas有什么好處?
使用pandas進行數(shù)據(jù)處理,需要先把數(shù)據(jù)部分或全部讀取到內(nèi)存中進行分析;雖然pandas也提供了分批讀取數(shù)據(jù)的方式,但我們都知道在數(shù)據(jù)分析中有些場景是沒辦法進行分批讀取的,比如說統(tǒng)計一個上千萬的表結(jié)構(gòu);最好的方式就是直接執(zhí)行統(tǒng)計SQL,畢竟分批讀取無法直接獲取一共有多少條數(shù)據(jù)。
當然,使用pandas進行數(shù)據(jù)統(tǒng)計也有其好處,在數(shù)據(jù)量不大或內(nèi)存足夠大的情況下;使用pandas進行數(shù)據(jù)分析,只需要在第一步去兼容不同的數(shù)據(jù)庫即可,之后的數(shù)據(jù)分析過程可以通用;但使用生成SQL的方式,就需要根據(jù)不同的數(shù)據(jù)庫引擎生成不同的SQL語句。
本文轉(zhuǎn)載自??AI探索時代?? 作者:DFires

















