前言
Vanna可以將 Table Schema, 文件說明, 問題/SQL 存到向量資料庫之中。當使用者提出問題時,會以取出相關的 Table 資訊,結合 Prompt 去詢問 LLM 來產生 SQL 。
再執行 SQL ,並以不同格式來呈現結果。
以下就以 MSSQL 的 AdventureWorks2022 DB 來練習。
環境: Windows 10, VS Code, chromadb, openai, SQL Server
練習
1.建立 text2sql 目錄
2.透過 VS Code 開啟 text2sql 目錄
3.建立 vannasql.ipynb
,選擇 python
4.安裝 vanna 並包含 chromadb, openai
1 | %pip install vanna[chromadb,openai] |
- 註: 如果沒安裝過 pyodbc ,也請安裝它
%pip install pyodbc
5.建立 vanna instance
1 | class MyVanna(ChromaDB_VectorStore, OpenAI_Chat): |
6.連接 db
1 | vn.connect_to_mssql(odbc_conn_str='DRIVER={ODBC Driver 17 for SQL Server};SERVER=.;DATABASE=AdventureWorks2022;Trusted_Connection=yes;') |
7.取出 Table Schema,建立訓練資料
1 | df_information_schema = vn.run_sql("SELECT * FROM INFORMATION_SCHEMA.COLUMNS") |
- 註:在目錄中,它會產生
chroma.sqlite3
及許多的Guid
的目錄,就是 Vanna 的訓練資料,
如果要重新訓練資料,就將這些目錄及檔案刪除掉。
8.詢問問題
訓練好之後,就可以開始詢問它,如下,
1 | vn.ask('Find out the top 5 best salespeople') |
9.執行 vanna.flask 來建立 Vanna Web 網站
1 | from vanna.flask import VannaFlaskApp |
當網站建立起來後,可以在網頁中進行查詢。
如果查詢結果有錯誤,可以進行手動修正。
每個 Table 它會建立的訓練資料如下,
1 | The following columns are in the SalesTaxRate table in the AdventureWorks2022 database: |
參考資源
Generating SQL for Microsoft SQL Server using OpenAI, ChromaDB
Vanna
AI 与数据库交互