Vanna的本地化部署

3,123 阅读2分钟

导言: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)