导言:Vanna作为一款优秀的llm生成sql(基于RAG)的python包,在github上获得了5K+的星,很受到开发人员的欢迎。本文是将vanna可以本地化应用,在100%离线的状态下,企业内网可以部署,根据用户自然语言指令,实现大模型生成sql。供企业高层或者数据分析人员使用。
一 官方信息
官网地址:Vanna.AI - Personalized AI SQL Agent; github地址:Vanna.AI (github.com)。 官网上举了一个在线使用例子,如下:
!pip install vanna
from vanna.remote import VannaDefault
vn = VannaDefault(model='chinook', api_key='XXXXXXXXXXX') vn.connect_to_sqlite('https://vanna.ai/Chinook.sqlite')
vn.ask('What are the top 10 artists by sales?')
from vanna.flask import VannaFlaskApp
VannaFlaskApp(vn).run()
很简洁的将vanna的实现逻辑和优势体现了出来,想学习的小伙伴可以登陆体验使用。
二 本地化部署
官网上有个Running Locally,可以根据实际情况,选择大模型类型,向量数据库类型,关系数据库类型,完毕后,下方有官方提供的写法,代码片段。 笔者据此,并参考gtihub上的写法,写了本地化的部署代码
(PS: 大模型如果用的是ollama,官方近期更新了支持ollama的包,所以不需要我们自己写 class MyCustomLLM(VannaBase): 只需要引用一下from vanna.ollama import Ollama即可)
main.py代码如下:
import sys
from vanna.chromadb.chromadb_vector import ChromaDB_VectorStore
from vanna.ollama import Ollama
from train import train_from_db
class MyVanna(ChromaDB_VectorStore, Ollama):
def __init__(self, config=None):
ChromaDB_VectorStore.__init__(self, config=config)
Ollama.__init__(self, config=config)
model = "gemma:7b" # 大模型
vn = MyVanna(config=dict(model=model, path="./.chroma")) # 本地向量数据库地址
train_from_db(vn)
q = "What are the top 10 artists by sales?"
response = vn.ask(q)
training_from _db 代码
from vanna.base import VannaBase
import pandas as pd
import cx_Oracle
def train_from_db(vn: VannaBase) -> None:
conn = cx_Oracle.connect("") # 数据库链接地址,此为oracle
def run_sql(sql: str) -> pd.DataFrame:
df = pd.read_sql_query(sql, conn)
return df
vn.run_sql = run_sql
vn.run_sql_is_set = True
df_information_schema = vn.run_sql(
) #训练语句
plan = vn.get_training_plan_generic(df_information_schema)
vn.train(plan=plan)
目前官方并没有提供一个100%的本地化部署的例子。笔者分享上面的思路。供参考。
vann作为去年8月份才出现的产品,一定会有不少需要优化的地方,官方人员也一直在更新,产品也会越来越可以商业化。
三 参考文献
justinmills/vanna-db-explorer: Testing out vanna.ai with ollama (github.com)