从零开始本地部署vanna

一、前言

        本文是作者在实习过程中零基础部署vanna的流程,vanna是一个开源的框架,可以基于RAG的自然语言生成SQL。由于作者的本专业并非人工智能,对于原理并不能解释的十分详尽,所以本文中会避免进行原理说明,只进行操作指导。同时,这也是作者第一次接触大模型在数据库方面的应用,摸索的过程中难免走些弯路,在部署过程中可能存在部分冗余、缺失以及错误的步骤,如有发现,欢迎在评论区批评指正。

二、Docker Desktop的安装与部署

2.1 下载与安装

        注:Docker Desktop需要win10及以上的版本,版本过低可以尝试升级系统或者更换设备

2.1.1 获取安装包的两种途径

        (1)官网下载(可能需要挂梯子):飞雷神

        (2)CSDN下载(非最新版):飞雷神

2.1.2 安装

        打开installer.exe,一路点下去,Configuration那里有两个选项,按默认的都打钩就行

2.2 配置

2.2.1 开启Hyper-V

        打开系统-控制面板-程序-启动或关闭Windows功能-勾选【Hyper-V】、【适用于Linux的Windows子系统】【虚拟机平台】

        注:Hyper-V功能的第二项(Hyper-V 平台)如果没有启动,可以进入电脑的BIOS界面,找到Advanced --> Intel virtualization technology,选择为enable。

 2.2.2 配置wsl

(1)按下windows + R打开cmd,在终端中输入下面的代码下载wsl

wsl --install

(2)使用下面的指令查看版本,作者用的版本号是2

wsl --status

这一步之后再运行一下这行代码更新,然后重启电脑

wsl --update

三、Ollama的安装与配置

3.1 下载与安装

        官网链接:飞雷神,点击download,选择windows版本下载即可,这一步也需要挂梯子,要不然速度会很慢

3.2 配置

3.2.1 打开Docker Desktop

        打开Docker Desktop, 第一次打开时可能会提示你登录以及询问下载docker的用途,选择不登录直接使用,用途随便写就行了(图有点糊抱歉)

3.2.2 安装open webui

        进入open webui官网:飞雷神,复制指令在cmd中运行

       

docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main

         如果速度比较慢可以参考 这篇文章 换成国内镜像下载

3.2.3 启动open webui

        下载完成后,docker中会多出open webui的选项

        在Actions下选择运行(注意端口那里改成3000,效果如上图中Port(s)列下面所示),然后点击左边的open-webui,当显示如图时

        就可以点Port(s)下的地址开启浏览器,不行的话等几秒再点就行了

3.2.4 下载大模型

(1)第一次使用时会要求注册,注册讯息只会保存在本地且第一个注册的人会成为管理员

(2)进入界面后,点击左下角的头像,依次选择设置-管理员设置-模型,在图中框中的部分可以拉取大模型,可以在下面查看支持的模型,我用的是qwen2:1.5b,电脑配置高的话可以换更好的模型(b前面的数字越大越好,但同时对配置的要求也会更高)

 四、Vanna的安装与部署

注:本部分建议在Pycharm中使用Jupyter Notebook进行代码运行,会方便很多,由于PyCharm与Jupyter Notebook的安装与配置并非本文的主要讨论内容,因此不再赘述,下面给出相关教程,可以参考:

4.1 Vanna包安装

        本部分中需要安装大模型、向量库与数据库的相关包,具体情况根据自身选择加以修改即可,这里以Ollama、ChromaDB和MySQL为例

4.1.1 包的选择

        首先进入官方操作文档:飞雷神

        LLM就是大模型,我们用的是Ollama,这里就选择Ollama

        这里的向量库我们选择ChromaDB

         数据库我们选择MySQL

4.1.2 安装相关包

        选择完成后,在Setup下面会生成响应的代码,复制即可

        这一步是安装相关包,后续再次启动无需重复执行,只需第一次执行就可以

%pip install 'vanna[chromadb,ollama,mysql]'

       注:本人在公司电脑上配置包时提示需要安装Visual Studio的C++开发环境,这里给出配置链接:飞雷神 只需下载Visual Studio的C++开发环境即可,不需要创建项目,也不需要下载VS Code

4.2 本地部署

        接下来按照官方文档中的代码一部分一部分执行下去即可

from vanna.ollama import Ollama
from vanna.chromadb import ChromaDB_VectorStore
class MyVanna(ChromaDB_VectorStore, Ollama):
    def __init__(self, config=None):
        ChromaDB_VectorStore.__init__(self, config=config)
        Ollama.__init__(self, config=config)

vn = MyVanna(config={'model': 'mistral'})

        注:官方文档中的这一步是需要进行自定义修改的,直接执行会Time out报错,以作者的为例,应修改为如下所示(只变动了最后一行,实操时可只修改model后面的大模型名称)

class MyVanna(ChromaDB_VectorStore, Ollama):
    def __init__(self, config=None):
        ChromaDB_VectorStore.__init__(self, config=config)
        Ollama.__init__(self, config=config)

vn = MyVanna(config={'model': 'qwen2:1.5b','ollama_host':'http://localhost:11434'})

 4.3 连接数据库 

        链接数据库,这一部分按自己的数据库填写即可

vn.connect_to_mysql(host='my-host', dbname='my-db', user='my-user', password='my-password', port=123)

        为了便于测试,作者给出一组测试数据

CREATE TABLE IF NOT EXISTS vuser (
    `id` INT PRIMARY KEY COMMENT '用户ID', 
    username VARCHAR(50) COMMENT '用户名',
    email VARCHAR(100) COMMENT '电子邮件', 
    age INT COMMENT '年龄',
    gender VARCHAR(10) COMMENT '性别(男/女)',
    city VARCHAR(50) COMMENT '城市'
) COMMENT='用户信息表' CHARACTER SET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO vuser (`id`, username, email, age, gender, city) VALUES
(1, '张三', 'zhangsan@example.com', 30, '男', '北京'),
(2, '李四', 'lisi@example.com', 25, '女', '上海'),
(3, '王五', 'wangwu@example.com', 40, '男', '广州'),
(4, '赵六', 'zhaoliu@example.com', 35, '女', '深圳'),
(5, '小明', 'xiaoming@example.com', 28, '男', '成都'),
(6, '小红', 'xiaohong@example.com', 45, '女', '重庆'),
(7, '小华', 'xiaohua@example.com', 32, '男', '天津'),
(8, '小丽', 'xiaoli@example.com', 27, '女', '南京'),
(9, '小李', 'xiaoli2@example.com', 38, '男', '武汉'),
(10, '小美', 'xiaomei@example.com', 33, '女', '西安');

4.4 训练

        Vanna在官方文档中给出了训练的方法:

# The following are methods for adding training data. Make sure you modify the examples to match your database.

# DDL statements are powerful because they specify table names, colume names, types, and potentially relationships
vn.train(ddl="""
    CREATE TABLE IF NOT EXISTS my-table (
        id INT PRIMARY KEY,
        name VARCHAR(100),
        age INT
    )
""")

# Sometimes you may want to add documentation about your business terminology or definitions.
vn.train(documentation="Our business defines OTIF score as the percentage of orders that are delivered on time and in full")

# You can also add SQL queries to your training data. This is useful if you have some queries already laying around. You can just copy and paste those from your editor to begin generating new SQL.
vn.train(sql="SELECT * FROM my-table WHERE name = 'John Doe'")

        用人话说,vanna的训练方法就是通过表结构、SQL或者是文本直接训练,同一张表在不改变数据的前提下只需训练一次即可

        以4.3中给出的数据为例,进行如下训练

vn.train(ddl="""
    CREATE TABLE `vuser` (
  `id` int NOT NULL COMMENT '用户ID',
  `username` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '用户名',
  `email` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '电子邮件',
  `age` int DEFAULT NULL COMMENT '年龄',
  `gender` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '性别(男/女)',
  `city` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '城市',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户信息表';
""")

        训练完成后,会生成一个id,如下图

        到这里训练就结束了

4.5 对话 

        我们有两种方法与其对话,但由于在Jupyter Notebook中对话的可视化效果并不非常美观,这里我们只介绍第二种方法:启动内置的集成flask框架的web界面

from vanna.flask import VannaFlaskApp
app = VannaFlaskApp(vn)
app.run()

         运行后如下提示,我们就可以在8084上看到我们的前端页面

        比如你可以提问,年龄大于20的用户数量是多少,就会返回相应结果,同时,你的每一次对话也可以对模型进行训练,几次对话后效果会更好。

五、后记

        这是作者第一次接触大模型的应用,说实话当第一次对话成功的时候,就像是看见自己的孩子第一次走路一样,很开心。当然,以上只是我个人粗浅的一些经历,欢迎大家的批评指正。

  • 15
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值