一、Vanna-AI概述
Vanna-AI是一款能够将自然语言查询转换为SQL语句的智能助手。它通过深度学习和自然语言处理技术,理解用户的查询意图,并自动生成相应的SQL语句。这一功能极大地简化了数据库查询的过程,提高了工作效率。
SQL作为数据库管理的核心语言,在数据检索、更新、删除等方面发挥着至关重要的作用。在日常工作中,无论是数据分析师、数据库管理员还是普通用户,都需要频繁地使用SQL来操作数据库。然而,手动编写SQL语句不仅耗时耗力,而且容易出错。这时,Vanna-AI的Text-to-SQL功能便显得尤为重要。
Vanna-AI在SQL生成领域的优势与价值主要体现在以下几个方面。首先,它能够快速准确地理解用户的查询意图,并生成符合要求的SQL语句,大大提高了工作效率。其次,Vanna-AI的智能化特性使得生成的SQL语句更加准确可靠,减少了因人为错误导致的数据问题。最后,Vanna-AI的易用性和可扩展性使得它能够满足不同用户的需求,为数据库管理带来了更加便捷和高效的解决方案。
二、Vanna安装
》此处默认已经安装了conda环境,创建虚拟环境:
conda create -n vanna -y python=3.9
》激活环境
conda activate vanna
》准备测试数据(找个mysql数据库执行以下脚本)
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 '城市',
dt datetime COMMENT '创建日期'
) COMMENT='用户信息表' CHARACTER SET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO vuser (`id`, username, email, age, gender, city,dt) VALUES
(1, '张三', 'zhangsan@example.com', 30, '男', '北京','2024-06-09'),
(2, '李四', 'lisi@example.com', 25, '女', '上海','2024-06-09'),
(3, '王五', 'wangwu@example.com', 40, '男', '广州','2024-07-09'),
(4, '赵六', 'zhaoliu@example.com', 35, '女', '深圳','2024-03-09'),
(5, '小明', 'xiaoming@example.com', 28, '男', '成都','2024-07-16'),
(6, '小红', 'xiaohong@example.com', 45, '女', '重庆','2024-06-09'),
(7, '小华', 'xiaohua@example.com', 32, '男', '天津','2024-06-09'),
(8, '小丽', 'xiaoli@example.com', 27, '女', '南京','2024-06-16'),
(9, '小李', 'xiaoli2@example.com', 38, '男', '武汉','2024-06-23'),
(10, '小美', 'xiaomei@example.com', 33, '女', '西安','2024-06-12');
》安装vanna
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 'vanna[chromadb,ollama,mysql]'
》安装ollama并且运行qwen2:7b模型
此步骤可以参考之前的博文:
CSDNhttps://mp.csdn.net/mp_blog/creation/editor/140666695
》准备python测试脚本test.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': 'qwen2:7b','ollama_host':'http://10.33.19.16:11434'})
vn.connect_to_mysql(host='ip', dbname='langchat', user='xxx', password='xxx', 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 '城市',
dt datetime COMMENT '创建日期'
) COMMENT='用户信息表' CHARACTER SET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
""")
from vanna.flask import VannaFlaskApp
app = VannaFlaskApp(vn)
app.run()
》测试效果
启动成功后浏览器打开应用,输入文字,看看能不能查到你想要的数据。