SQL語句生成智能體——vanna項目介紹 原創
?“ Vanna的核心思想是由大模型替代DBA人員編寫SQL,能夠直接根據自然語言進行數據分析 。”
在大模型應用中有一種技術叫做NL2SQL——自然語言生成SQL語句;在基于人工智能的數據分析場景中,數據庫是必不可少的一個環節。但怎么處理數據庫中的數據卻有不同的思路,比如類似于傳統數據分析,使用SQL讀取數據庫,然后交給大模型進行分析;
第二,使用pandas這種數據分析工具,讓大模型調用pandas的函數執行獲取結果;因為存在即合理,因此不同的技術方案適合不同的業務場景。
而今天我們就來介紹一下基于大模型的SQL語句生成項目——Vanna。
SQL語句生成智能體
Vanna項目是一個讓用戶輸入自然語言,然后自動生成SQL語句進行數據分析的開源項目;其本質是使用RAG的技術,配合大模型進行SQL生成。
官網地址:??https://vanna.ai/docs/??
項目架構圖如下:
從架構圖中可以看出,項目是根據用戶的問題從向量數據庫中進行相似度檢索,然后再拼接成提示詞,最后由大模型生成SQL查詢語句交給數據庫引擎執行。
從文檔中可以看出,vanna項目的執行過程主要分為兩步,第一步是train也就是訓練,第二步是ask也就是用戶提問;訓練的過程,其實就是把數據庫結構和說明文檔保存到向量數據庫中,然后用戶提問時就可以根據用戶的語義對向量數據進行相似度檢索,獲取到用戶想要查詢的庫表結構。
然后再由大模型根據用戶的需求和庫表結構生成相對應的SQL語句進行執行。
如下圖所示:
而且,vanna項目提供了專門的訓練接口,讓開發者可以基于自己的庫表結果做訓練。并且,可以選擇對應的大模型,向量數據庫和關系型數據庫;而且,為了解決兼容性問題,還提供了基于pandas的數據結構分析接口。
而從源碼分析,vanna生成SQL語句是使用歷史記錄,數據庫DDL語句和說明文檔document一起拼接成Prompt提示詞交由大模型自動分析生成查詢語句。
如下圖所示:
當大模型分析生成SQL語句之后,再交由數據庫引擎進行執行;并且為了防止生成的SQL語句有問題,這里還專門用正則表達式進行處理。
那么通過這種生成SQL執行的好處是什么?
這種基于SQL的數據分析方式,其原理只是把本來由人工編寫SQL語句的過程交給了大模型;而數據處理的過程還是由數據庫引擎來執行。這種方式對比使用pandas有什么好處?
使用pandas進行數據處理,需要先把數據部分或全部讀取到內存中進行分析;雖然pandas也提供了分批讀取數據的方式,但我們都知道在數據分析中有些場景是沒辦法進行分批讀取的,比如說統計一個上千萬的表結構;最好的方式就是直接執行統計SQL,畢竟分批讀取無法直接獲取一共有多少條數據。
當然,使用pandas進行數據統計也有其好處,在數據量不大或內存足夠大的情況下;使用pandas進行數據分析,只需要在第一步去兼容不同的數據庫即可,之后的數據分析過程可以通用;但使用生成SQL的方式,就需要根據不同的數據庫引擎生成不同的SQL語句。
本文轉載自??AI探索時代?? 作者:DFires
