????????上一章節中已經實現了vanna的本地運行,但是大模型和數據庫都還是遠程的,因為也就沒辦法去訓練,這節一起來實現vanna分析本地mysql數據庫,因為要使用本地大模型,所以開始之前需要給本地安裝好大模型,我這里用ollama下載了llama3,這節就用llama3作為大模型分析,如果本地沒有ollama的可以參考我之前的章節安裝一下,同時本地還需要安裝mysql數據庫,并創建一個表作為接下來用大模型分析的對象。
我這里的數據表如下:
? ? ? ? 因為需要連接mysql數據庫,因此需要安裝mysql-connecter-python,同時我們將向量數據庫換為ChromDB,在pycharm的命令提示符執行
pip install vanna
pip install ollama
pip install ChromaDB
pip install mysql-connector-python
pip install 'vanna[chromadb,ollama,mysql]'
安裝完成后,按照vanna的官方文檔,實現MyVanna的方法
class MyVanna(ChromaDB_VectorStore, Ollama):def __init__(self, config=None):ChromaDB_VectorStore.__init__(self, config=config)Ollama.__init__(self, config=config)
然后需要連接本地的ollama中的llama3,輸入模型名稱llama3:8b,并設置訪問地址,然后替換連接的數據庫,我的數據庫在局域網,因此填寫局域網的數據庫IP,和賬號密碼
vn = MyVanna(config={'model': 'llama3:8b','ollama_host':'http://127.0.0.1:11434'})def run_sql(sql: str) -> pd.DataFrame:cnx = mysql.connector.connect(user='root',password='123456',host='192.168.30.169',database='vanna')cursor = cnx.cursor()cursor.execute(sql)result = cursor.fetchall()columns = cursor.column_names# print('columns:',columns)df = pd.DataFrame(result, columns=columns)return df# 將函數設置到vn.run_sql中
vn.run_sql = run_sql
vn.run_sql_is_set = True
????????此時已經可以連接到大模型,并訪問數據庫了,但是大模型并不知道數據結構,所以要對vanna進行簡單的訓練,官方的訓練分為三種,DDL,Document,SQL,DDL就是建表語句,告訴大模型表結構,Document存放的是數據庫中的一些專業術語,比如你要查詢成年人的數量,那就要在document中記錄,成年人是指大于18歲的人。SQL就是正常的sql語句了,另外每次的提問也會作為問答記錄存到訓練數據中,也可以提前手動添加問答訓練數據。我們這里就只放一個建表語句,
vn.train(ddl="""
CREATE TABLE `book` (`id` int NOT NULL AUTO_INCREMENT COMMENT '表唯一ID',`create_time` datetime NULL DEFAULT NULL COMMENT '創建時間',`book_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '書的名字',`book_code` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '書的編號',`book_introduction` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '書的簡介',`book_publisher` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '書的出版社',`book_image` longtext CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL COMMENT '書的圖片',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = 'book表' ROW_FORMAT = Dynamic;
""")
然后運行項目,運行成功后會在控制臺打印訪問地址:
打開訪問地址
然后可以在提問框開始提問了,這里輸入每種書各有多少本,然后回車,
最終返回結果如下,vanna不僅先返回了正確的sql,同時會把結果以表格的形式展示,提供導出功能,最終還會根據結果的數據結構,選擇適合的圖表做展示。
如果需要完整源碼或者其他問題可以給我留言