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

news2025/5/11 12:11:34
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_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代码,搞定这事,就更好了,解放思路了,有搞头!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2255689.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

标书里的“废标雷区”:你踩过几个?

在投标领域,标书的质量不仅决定了中标的可能性,更是体现企业专业度的关键。但即便是经验丰富的投标人,也难免会在标书编制过程中踩中“废标雷区”。这些雷区可能隐藏在技术方案的细节中,也可能是投标文件格式的规范问题。以下&…

操作系统——I/O系统

笔记内容及图片整理自XJTUSE “操作系统” 课程ppt,仅供学习交流使用,谢谢。 概述 计算机的两个主要工作是I/O和处理。I/O系统的目标是提高设备利用率,尽量提高CPU与I/O设备间的并行工作程度,I/O主要技术包括中断技术、DMA技术、…

【 工具变量】IPCC碳排放因子数据测算表

一、数据简介: 排放因子法是IPCC提出的一种碳排放估算方法,也是目前适用范围最广、应用最为普遍的方法。将各类能源消耗的实物统计量转变为标准统计量,再乘以各自的碳排放因子,加总之后就可以得到碳排放总量。如果按照ISO14064标…

无插件直播流媒体音视频播放器EasyPlayer.js播放器的g711系列的音频,听起来为什么都是杂音

在数字化时代,流媒体播放器已成为信息传播和娱乐消遣的重要工具。随着技术的进步,流媒体播放器的核心技术和发展趋势不断演变,以满足用户对于无缝播放、低延迟和高画质的需求。 EasyPlayer播放器属于一款高效、精炼、稳定且免费的流媒体播放…

63 基于单片机的四个速度比较

所有仿真详情导航: PROTEUS专栏说明-CSDN博客 目录 一、主要功能 二、硬件资源 三、主程序编程 四、资源下载 一、主要功能 基于51单片机,采用四个滑动变阻器连接数模转换器模拟四个速度值,通过LCD1602显示,然后检测出最高的…

4.模块化技术之子程序

总学习目录请点击下面连接 SAP ABAP开发从0到入职,冷冬备战-CSDN博客 目录 ​编辑 1.模块化基础和概述 使用模块化有什么好处 两大类模块化技术 程序局部的模块化 SAP系统内全局模块化 封装有什么好处? 2.子程序模块化 三种传递类型 子程序结构…

利用Python实现子域名简单收集

免责申明 本文仅是用于学习研究子域名信息收集,请勿用在非法途径上,若将其用于非法目的,所造成的一切后果由您自行承担,产生的一切风险和后果与笔者无关;本文开始前请认真详细学习《‌中华人民共和国网络安全法》【学法…

k8s,进一步理解Pod

比如,凡是调度、网络、存储,以及安全相关的属性,基本上是Pod 级别的。 这些属性的共同特征是,它们描述的是“机器”这个整体,而不是里面运行的“程序”。比如,配置这个“机器”的网卡(即&#…

Unity 使用LineRenderer制作模拟2d绳子

效果展示: 实现如下: 首先,直接上代码: using System.Collections; using System.Collections.Generic; using UnityEngine;public class LineFourRender : MonoBehaviour {public Transform StartNode;public Transform MidNod…

博物馆导览系统方案(一)背景需求分析与核心技术实现

维小帮提供多个场所的室内外导航导览方案,如需获取博物馆导览系统解决方案可前往文章最下方获取,如有项目合作及技术交流欢迎私信我们哦~撒花! 一、博物馆导览系统的背景与市场需求 在数字化转型的浪潮中,博物馆作为文化传承和知…

14.在 Vue 3 中使用 OpenLayers 自定义地图版权信息

在 WebGIS 开发中,默认的地图服务通常会带有版权信息,但有时候我们需要根据项目需求自定义版权信息或添加额外的版权声明。在本文中,我们将基于 Vue 3 的 Composition API 和 OpenLayers,完成自定义地图版权信息的实现。 最终效果…

详解下c语言中的typedef

相信学习过c语言的很多同学都对typedef很陌生,感觉它离自己很遥远,自己很少用到。但实际上,我们看很多地方,包括很多大神级别的代码中,它却又经常使用。今天我们就详细描述下它,使我们对它有一个更深的认识…

19. Three.js案例-创建一个带有纹理映射的旋转平面

19. Three.js案例-创建一个带有纹理映射的旋转平面 实现效果 知识点 WebGLRenderer (WebGL渲染器) WebGLRenderer 是 Three.js 中用于渲染场景的主要类。它利用 WebGL 技术在浏览器中绘制 3D 图形。 构造器 new THREE.WebGLRenderer(parameters)参数类型描述parametersobj…

Ensemble Learning via Knowledge Transfer for CTR Prediction 论文阅读

Abstract:点击率(CTR)预测在推荐系统和网络搜索中起着关键作用。虽然许多现有的方法利用集成学习来提高模型性能,但它们通常将集成限制在两个或三个子网络中,很少探索更大的集成。在本文中,我们研究了更大的集成网络&a…

苍穹外卖项目练习总结

做这个练习项目已经接近两年之久,现在拿出来复习一遍,主要就是里面处理问题的流程,以及整体思考的逻辑需要重新回顾一遍,后续会逐渐总结这一段时间以来学习到的知识。 项目整体包含两部分,一个是管理端,一…

数学拯救世界(三)———破魔

题目一: 还记不记得,出现带分数的话可以怎么办? 题目二: 还记不记得,昨天讲的重叠数 题目三: 提公因数,抓住问题本质 题目四:

JAVA |日常开发中连接Sqlite数据库详解

JAVA |日常开发中连接Sqlite数据库详解 前言一、SQLite 数据库概述1.1 定义与特点1.2 适用场景 二、Java 连接 SQLite 数据库的准备工作2.1 添加 SQLite JDBC 驱动依赖2.2 了解 JDBC 基础概念 三、建立数据库连接3.1 代码示例3.2 步骤解析 四、执行 SQL 语句4.1 创建…

对 JavaScript 说“不”

JavaScript编程语言历史悠久,但它是在 1995 年大约一周内创建的。 它最初被称为 LiveScript,但后来更名为 JavaScript,以赶上 Java 的潮流,尽管它与 Java 毫无关系。 它很快就变得非常流行,推动了 Web 应用程序革命&…

解谜类游戏《迷失岛2》等如何抽象出一套通用高效开发框架?

解谜类游戏以精妙的谜题设计和引人入胜的故事叙述为特点,考验着玩家的智慧与观察力。《迷失岛2》与《南瓜先生2九龙城寨》正是这一领域的佳作。游戏以独特的艺术风格和玩法设计吸引了大量玩家,而它们背后隐藏着一套强大的框架。 上海胖布丁游戏的技术总…

CID引流电商

ClickID技术是基于多家媒体平台开发的电商引流服务,通过媒体提供的宏参数,间接解决电商平台订单数据的回传问题,帮助账户收集到极致精准的数据模型,搭建不同媒体往各平台引流的桥梁。简单来说就是通过ClickID数据监测到另外一个平…