Vanna-AI实现自然语言转SQL

一、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模型

此步骤可以参考之前的博文:

CSDNicon-default.png?t=N7T8https://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()

》测试效果

启动成功后浏览器打开应用,输入文字,看看能不能查到你想要的数据。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值