当前位置: 首页 > news >正文

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

TEXT2SQL工具vanna本地化安装和应用
  • Vanna和Text2SQL
  • 环境安装和数据准备
    • conda虚拟环境安装
    • 数据准备
    • ollama环境准备
      • ollama安装和运行
      • ollama下载模型
      • 测试下API方式正常使用
    • chromaDB的默认的embedding模型准备
  • 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//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_VectorStoreclass 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代码,搞定这事,就更好了,解放思路了,有搞头!

相关文章:

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

TEXT2SQL工具vanna本地化安装和应用 Vanna和Text2SQL环境安装和数据准备 conda虚拟环境安装数据准备ollama环境准备 ollama安装和运行ollama下载模型测试下API方式正常使用 chromaDB的默认的embedding模型准备 vanna脚本跑起来 Vanna和Text2SQL TEXT2SQL即文本转SQL&#xf…...

Bloom 效果

1、Bloom 效果是什么 Bloom效果(中文也可以叫做高光溢出效果),是一种使画面中亮度较高的区域产生一种光晕或发光效果的图像处理技术,Bloom效果的主要目的是模拟现实世界中强光源在相机镜头或人眼中造成的散射和反射现象&#xff…...

AWS 机器学习,推动 AI 技术的健康发展

目录 一、AI 正在改变生产方式二、从炒作走向务实1、选对场景2、重视数据3、产品思维4、持续优化 三、人才是最稀缺的资源四、负责任的 AI 开发五、未来已来六、启示与思考七、结语 如果说传统软件开发是手工作坊,那么 AI 就像工业革命带来的机器生产。 在最新的一…...

MCPTT 与BTC

MCPTT(Mission Critical Push-to-Talk)和B-TrunC(宽带集群)是两种关键通信标准,它们分别由不同的组织制定和推广。 MCPTT(Mission Critical Push-to-Talk)标准由3GPP(第三代合作伙伴…...

Jackson - JsonGenerator创建JSON、JsonParser解析JSON

以下是关于如何使用Jackson的JsonGenerator类来创建JSON内容以及如何使用JsonParser类来读取JSON内容的教程。 依赖项 首先&#xff0c;在pom.xml文件中添加以下依赖项以引入Jackson库&#xff1a; <dependency><groupId>com.fasterxml.jackson.core</groupI…...

Linux-音频应用编程

ALPHA I.MX6U 开发板支持音频&#xff0c;板上搭载了音频编解码芯片 WM8960&#xff0c;支持播放以及录音功能&#xff01;本章我们来学习 Linux 下的音频应用编程&#xff0c;音频应用编程相比于前面几个章节所介绍的内容、其难度有所上升&#xff0c;但是笔者仅向大家介绍 Li…...

《QT 示例宝库:探索丰富的编程世界》

《QT 示例宝库&#xff1a;探索丰富的编程世界》 一、QT 基础示例&#xff08;一&#xff09;QRadioButton 示例&#xff08;二&#xff09;拦截关闭事件示例 二、QT 常用代码示例&#xff08;一&#xff09;QObject 相关操作&#xff08;二&#xff09;Qt 基本容器遍历&#x…...

腾讯云流式湖仓统一存储实践

点击蓝字⬆ 关注我们 本文共计5107 预计阅读时长16分钟 &#xff0a; 本文将分享腾讯云流式湖仓的架构与实践。主要内容包括&#xff1a; 流计算Oceanus介绍腾讯云流式湖仓架构腾讯云流式湖仓实践腾讯云流式湖仓发展规划 一、流计算Oceanus介绍 随着大数据技术的发展&#xff0…...

18 设计模式之迭代器模式(书籍遍历案例)

一、什么是迭代器模式 迭代器模式&#xff08;Iterator Pattern&#xff09;是一种行为型设计模式&#xff0c;允许客户端通过统一的接口顺序访问一个集合对象中的元素&#xff0c;而无需暴露集合对象的内部实现。这个模式主要用于访问聚合对象&#xff08;如集合、数组等&…...

超清4K视频素材哪里找?优质下载资源网站分享

我是你们的自媒体UP主小李。现在是高清、4K视频大行其道的时代&#xff0c;想要制作出吸引眼球的优质内容&#xff0c;超清4K视频素材必不可少。今天就为大家分享几个宝藏网站&#xff0c;让你的视频创作更轻松、更出彩&#xff01; 蛙学网 首先推荐 蛙学网&#xff0c;这是国内…...

刷题日志【1】

目录 1.全排列【力扣】 代码1&#xff1a; 代码2&#xff1a; 2、子集【力扣】 3、全排列Ⅱ【力扣】 4、组合【力扣】 1.全排列【力扣】 代码1&#xff1a; class Solution {bool check[7];vector <int> path;vector<vector<int>> ret;public:vecto…...

【C++算法】32.前缀和_矩阵区域和

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a; 题目链接&#xff1a; 1314. 矩阵区域和 题目描述&#xff1a; 解法 防止有人看不明白题目&#xff0c;先解释一下题目 二维前缀和思想&#xff1a; 使用前缀和矩阵 ret [x1,y1]~[x2,y2] D …...

使用堆栈(Stack)

集合类型&#xff08;Collection)下篇_xml collection-CSDN博客 以上是堆栈的简单介绍&#xff0c;下方是堆栈的使用 题目&#xff1a;给定一个逆波兰表达式&#xff08;后缀表达式&#xff09;的字符串数组tokens&#xff0c;其中每个元素是一个操作数&#xff08;数字&…...

雨晨 2610(2)0.2510 Windows 11 24H2 Iot 企业版 LTSC 2024 极简 2in1

文件: 雨晨 2610(2)0.2510 Windows 11 24H2 Iot 企业版 LTSC 2024 极简 2in1 install.esd 索引: 1 名称: Windows 11 IoT 企业版 LTSC 极简 26100.2510 描述: Windows 11 IoT 企业版 LTSC 极简 26100.2510 By YCDISM RTM 2025 24-12-07 大小: 8,176,452,990 个字节 索引: 2 …...

HDD 2025年技术趋势深度分析报告

随着数据量的指数级增长以及人工智能&#xff08;AI&#xff09;、物联网&#xff08;IoT&#xff09;、云计算和视频监控等领域的需求激增&#xff0c;硬盘驱动器&#xff08;HDD&#xff09;行业正面临着前所未有的挑战与机遇。本报告旨在深入剖析2025年HDD技术的发展方向&am…...

算法-字符串-22.括号生成

一、题目 二、思路解析 1.思路&#xff1a; 生成所有可能并且有效的括号组合——回溯方法 2.常用方法&#xff1a; a.数组&#xff0c;因为需要增删元素&#xff0c;所以选择LinkedList LinkedList<String> resnew LinkedList<>(); b.StringBuilder创建&#xff0…...

Free-RTOS实现LED闪烁

开发板&#xff1a;正点原子探索者 F407 LED定时定时闪烁 本次实验验证&#xff1a; 配置文件 1、打开CubeMX 2、选择芯片型号&#xff0c;然后点击开始项目 3、配置时钟 配置烧录引脚&#xff0c;与FreeRTOS系统时钟 选择FreeRTOS 这里已经默认有一个任务&#xff…...

NLP论文速读(斯坦福大学)|使用Tree将语法隐藏到Transformer语言模型中正则化

论文速读|Sneaking Syntax into Transformer Language Models with Tree Regularization 论文信息&#xff1a; 简介&#xff1a; 本文的背景是基于人类语言理解的组合性特征&#xff0c;即语言处理本质上是层次化的&#xff1a;语法规则将词级别的意义组合成更大的成分的意义&…...

再谈多重签名与 MPC

目录 什么是 MPC 钱包以及它们是如何出现的 多重签名和智能合约钱包已经成熟 超越 MPC 钱包 关于小队 多重签名已经成为加密货币领域的一部分&#xff0c;但近年来&#xff0c;随着 MPC&#xff08;多方计算&#xff09;钱包的出现&#xff0c;多重签名似乎被掩盖了。MPC 钱包之…...

CTF学习24.11.19[音频隐写]

MISC07[音频隐写] 隐写术 隐写术是一门关于信息隐藏的技巧与科学&#xff0c;所谓信息隐藏指的是不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容。隐写术的英文叫做Steganography&#xff0c;来源于特里特米乌斯的一本讲述密码学与隐写术的著作Steganograp…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...