TEXT2SQL工具vanna本地化安装和应用

Vanna和Text2SQL

TEXT2SQL即文本转SQL,是利用RAG和LLM来实现输入一段文本,系统自动生成SQL,甚至把数据结果用图表的方式展现出来,以下是一些典型的应用实例:

企业数据分析:企业内部的业务分析师或非技术员工可以通过自然语言提问,如“上个季度销售额最高的五个产品是什么?”Text2SQL系统能够自动将此类问题转换为SQL查询,从数据库中提取所需信息,无需手动编写SQL代码,大大提升了数据分析的效率和易用性。

智能客服系统:在客户服务场景中,Text2SQL可以帮助客服机器人理解用户的问题,比如查询订单状态、退换货政策等,并自动执行数据库查询以提供准确的答案,从而提升客服响应速度和服务质量。

个人助理与智能家居:在智能家居或个人助理应用中,用户可以通过语音或文本提出请求,如“明天早上7点提醒我开会”或“显示最近一周的电费消耗情况”,Text2SQL技术能够解析这些请求并转换成数据库查询指令,与家庭自动化系统或个人日程管理系统交互,实现智能化控制和信息反馈。

电子商务平台:电商平台可以利用Text2SQL快速处理用户的商品搜索请求,如“红色高跟鞋尺码37且价格低于500元”,系统自动构建SQL查询,从商品数据库中筛选出符合条件的商品列表。

金融行业报告生成:在金融分析领域,分析师可以提出复杂的需求,如“统计过去一年内公司A的日均交易量并对比行业平均值”,Text2SQL能够帮助自动生成相应的SQL查询,从海量金融数据中提取所需信息,辅助决策制定。

健康医疗信息查询:在医疗信息系统中,医生或研究人员可以通过自然语言查询患者病历、药物信息或疾病统计数据,Text2SQL能够将这些查询转换为SQL,快速检索电子病历系统或医学数据库中的相关记录。

这些场景展示了Text2SQL如何作为自然语言处理和数据库交互的桥梁,简化数据查询流程,提高数据获取的效率和灵活性。随着自然语言处理技术的进步,Text2SQL的应用将会越来越广泛,为跨领域用户提供更加便捷的数据访问方式。

环境安装和数据准备

此处使用私有化的ollama的环境和本地的向量数据库chromaDB和词向量嵌入模型all-MiniLM-L6-v2来搭建本地化环境,并连接到mysql数据库,进行数据分析。
这里使用的是centos7 ,并有一块11G显存的GeForce GTX 1080 Ti,本文编制的时候,使用的是vanna 0.5.4版本。

conda虚拟环境安装

此处默认已经安装了conda环境,创建虚拟环境:

conda create -n vanna -y python=3.9

激活环境

conda activate vanna

安装包,当然ipykernel可以不安装,看需要

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

数据准备

在待连接的mysql数据库的,demodb数据库中新建表和记录,当然可以在不同数据库里面创建表,并插入不同的数据,根据实际情况可以调整SQL,并调整后续步骤的python代码中连接数据库的内容。

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, '女', '西安');

ollama环境准备

ollama安装和运行

注:使用root或者有sudo权限的用户

curl -fsSL https://ollama.com/install.sh | sh
service ollama stop

默认是绑定在127.0.0.1的IP,若需要绑定到指定IP,那么采用如下:

export OLLAMA_HOST=xx.xx.xx.71:11434
nohup ollama serve &    

这样就绑定到某个非127.0.0.1的IP上了,方便其他服务器访问。

ollama下载模型

这里使用qwen的7b模型,根据实际情况,下载还是比较快的。
ollama run qwen:7b

下载后会自动进入命令行聊天交互界面,可以测试下,最后可以输入/bye退出聊天。

测试下API方式正常使用

curl http://xx.xx.xx.71:11434/api/chat -d '{
"model": "qwen:7b",
"messages": [
{ "role": "user", "content": "什么是股票?" }
]
}'

chromaDB的默认的embedding模型准备

当然这个模型在后续的VANNA脚本运行起来的时候会自动下载,但是可能有时候快有时候慢,在魔搭上传了一个模型
https://www.modelscope.cn/models/wengad/all-MiniLM-L6-v2/summary (80MB+),下载onnx.tar.gz后,直接放到$HOME/.cache/chroma/onnx_models/all-MiniLM-L6-v2/onnx目录下,解压开来即可。


到这里环境就基本准备好了,可以跑脚本,启动下服务了。

vanna脚本跑起来

这里连接的ollama模型名称,地址根据需要进行修改,还有连接的用于生成SQL数据分析的MYSQL数据库连接和库名等根据需要修改。

这里的脚本chroma使用的local的模型,运行了以下脚本后,会在运行的目录下生成chroma.sqlite3文件,存放训练的数据,别删了,删了那训练数据就没了,要重新来。

比如保存成testv.py

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': 'qwen:7b','ollama_host':'http://xx.xx.xx.71:11434'})





vn.connect_to_mysql(host='xx.xx.xx.101', dbname='demodb', user='root', password='99099a', port=3306)

# The information schema query may need some tweaking depending on your database. This is a good starting point.
df_information_schema = vn.run_sql("SELECT * FROM INFORMATION_SCHEMA.COLUMNS")

# This will break up the information schema into bite-sized chunks that can be referenced by the LLM
plan = vn.get_training_plan_generic(df_information_schema)


vn.train(ddl="""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;
""")

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

直接在以上创建的vanna虚拟环境中运行起来。

python testv.py

在这里插入图片描述
如果前面嵌入模型没准备好,那么在问答的时候,第一次会下载模型,类似如下:
在这里插入图片描述

这样,就可以访问8084端口,进入页面,开始和系统交互了。

注意:如果没有训练数据,那么点击Trainning Data,界面会提示错误。
在这里插入图片描述
这个是在代码里面添加了DDL语句,直接显示在界面了。在这里插入图片描述

交互实例:
在这里插入图片描述如果结果是正确的,那么点击 Were the results correct?下的YES按钮,那么系统会将问答的过程加入到训练的数据中,类似如下:
在这里插入图片描述
统计+图表分析
在这里插入图片描述点击结果正确,就可以将问答又加入到库中
在这里插入图片描述
也可以通过“Add training data”自行添加。


完结,有啥问题也可以留言沟通


展望:如果这玩意能够生成ETL代码,搞定这事,就更好了,解放思路了,有搞头!

<think>好的,我现在需要帮助用户了解如何部署Vanna平台。首先,用户提到了站内引用中的四个参考资料,其中引用[1]提到Vanna安装配置指南,引用[3][4]是关于本地部署源码分析的。用户可能希望得到一个详细的部署步骤,包括安装、配置数据库连接、模型训练以及使用自然语言查询的流程。 首先,我应该从安装开始。根据引用[1],安装Vanna需要使用pip命令,可能需要指定版本。然后,配置数据库连接是关键步骤,用户需要选择适合的数据库类型,比如Snowflake、Postgres等,或者使用其他方式连接。这里可能需要提供具体的代码示例,比如使用Snowflake时需要账户、用户名、密码等信息,而Postgres则需要主机、数据库名、用户名密码。 接下来是模型训练部分。Vanna需要训练模型来生成准确的SQL,用户可以选择预训练模型或者自己训练。引用[3][4]提到本地部署源码分析,可能涉及到自定义训练的方法。需要说明如何添加DDL、文档、SQL查询等训练数据,以及使用自然语言提问的示例。 然后,用户可能关心如何实际使用Vanna进行查询,比如通过ask函数提问,并获取结果。需要提供代码示例,并解释每个步骤的作用。 在注意事项部分,应该提到安全性问题,比如引用[2]中的提示符注入漏洞,建议用户遵循安全指南,例如参数化查询输入验证。此外,权限管理也很重要,确保数据库用户只有必要权限。 最后,生成相关问题,帮助用户进一步了解Vanna的其他方面,比如支持的数据库、模型训练方法、处理复杂查询的能力以及安全性措施。这些问题应该覆盖用户可能感兴趣的扩展话题,并引导他们深入探索。 需要确保整个回答结构清晰,步骤明确,代码示例正确,并且引用相关的参考资料。同时,使用中文回答,遵循格式要求,数学表达式用$...$,独立公式用$$...$$,但在这个问题中可能涉及数学较少,主要关注代码步骤。检查LaTeX语法是否正确,比如变量或公式是否需要使用$符号,但当前内容可能不需要复杂的数学公式。 总结步骤: 1. 安装Vanna 2. 配置数据库连接(不同数据库的示例) 3. 模型训练(预训练或自定义) 4. 使用自然语言查询 5. 注意事项(安全性、权限) 6. 相关问题 需要确保每个步骤都有对应的代码示例解释,引用正确的文献,比如安装步骤引用[1],安全性引用[2],本地部署引用[3][4]。同时,保持语言简洁明了,避免技术术语过多,适合不同层次的用户理解。</think>### Vanna 部署指南 以下是部署 Vanna 平台的详细步骤: --- #### 1. **安装 Vanna** 通过 `pip` 安装 Vanna 包(需指定版本以兼容最新功能): ```bash pip install vanna ``` 安装后可通过 `import vanna` 验证是否成功[^1]。 --- #### 2. **配置数据库连接** Vanna 支持多种数据库类型,配置方法如下: - **Snowflake 示例**: ```python from vanna import Vanna vn = Vanna() vn.connect_to_snowflake( account="YOUR_ACCOUNT", username="YOUR_USERNAME", password="YOUR_PASSWORD", database="YOUR_DATABASE" ) ``` - **Postgres 示例**: ```python vn.connect_to_postgres( host="localhost", dbname="mydb", user="postgres", password="postgres", port=5432 ) ``` - **其他数据库**:可通过自定义函数或 ODBC 连接[^3][^4]。 --- #### 3. **模型训练** Vanna 需训练模型以生成准确 SQL,有两种方式: - **使用预训练模型**: ```python vn.use_model("model_name") # 例如 "chinook" ``` - **自定义训练**: 添加 DDL、文档或 SQL 查询作为训练数据: ```python # 添加 DDL vn.train(ddl="CREATE TABLE users (id INT, name VARCHAR(255))") # 添加 SQL 查询与自然语言对应 vn.train(question="查询用户数量", sql="SELECT COUNT(*) FROM users") # 添加文档(如数据字典) vn.train(documentation="用户表包含 ID 姓名字段") ``` --- #### 4. **使用自然语言查询** 通过 `ask` 函数提问: ```python question = "2023 年销售额最高的产品是什么?" sql = vn.generate_sql(question) # 生成 SQL result = vn.run_sql(sql) # 执行查询 print(f"生成的 SQL: {sql}\n结果: {result}") ``` --- #### 5. **注意事项** - **安全性**:避免提示注入攻击,需对用户输入做过滤参数化查询[^2]。 - **权限管理**:确保数据库用户仅拥有必要权限[^2]。 - **本地部署**:若需完全离线运行,可参考源码自定义模型连接逻辑。 ---
评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wengad

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值