这节一起用Vanna来实现自然语言转SQL,之前的大模型一直停留在问答阶段,答案基本都是大模型提供的,至多是加点本地知识库,text,pdf等文档,丰富大模型的内容,但是想要大模型与一些管理系统对接还是无能为力,这节就一起尝试下用Vanna对接数据库,将自然语言转成标准的SQL对数据库进行查询。这也是很多管理系统的开发者最需要落地实践的内容。
使用Vanna之前需要打开Vanna的官网申请一个key,如果之前没有注册过的话,还需要先注册一个vanna的账号,注册成功后,在 申请KEY的页面申请key申请之后鼠标悬停在中间的输入框上,key就会显示出来。
因为vanna是python实现的,我这里也用python开发,用的pycharm编辑器,需要导入Vanna组件,在pycharm的命令提示符输入:
等待安装成功后,按照官网的步骤对接Vanna,这里使用的是Vanna提供的的sqlite数据库,且已经训练好了,有了一些基础的训练数据。后面可以直接问答了。
然后点击运行,运行成功后,会在控制台打印出访问地址,打开后页面如下
在输入框输入问题后,他会将问题转化成标准的SQL语句进行查询,并用表格展示,同时,vanna会根据自己的理解使用适当的图表展示
但是这种方法只能连接远程的Vanna,需要申请vanna的key,且在线的数据库也没办法训练,下面尝试自己做一个本地部署的Vanna。要实现Vanna分析本地mysql数据库,也要使用本地大模型,所以开始之前需要给本地安装好大模型,我这里用ollama下载了llama3,这节就用llama3作为大模型分析,如果本地没有ollama的可以参考我之前的章节安装一下,同时本地还需要安装mysql数据库,并创建一个表作为接下来用大模型分析的对象。mysql可以docker安装,也可以手动下载安装文件安装。
我这里安装好了,并建好了数据库和表,数据表如下:
因为需要连接mysql数据库,因此需要安装mysql-connecter-python,同时我们将向量数据库换为ChromDB,在pycharm的命令提示符执行
安装完成后,按照vanna的官方文档,实现MyVanna的方法
然后需要连接本地的ollama中的llama3,输入模型名称llama3:8b,并设置访问地址,然后替换连接的数据库,我的数据库在局域网,因此填写局域网的数据库IP,和账号密码。
此时已经可以连接到大模型,并访问数据库了,但是大模型并不知道数据结构,所以要对Vanna进行简单的训练,官方的训练分为三种,DDL,Document,SQL,DDL就是建表语句,告诉大模型表结构,Document存放的是数据库中的一些专业术语,比如你要查询成年人的数量,那就要在document中记录,成年人是指大于18岁的人。SQL就是正常的sql语句了,另外每次的提问也会作为问答记录存到训练数据中,也可以提前手动添加问答训练数据。我们这里就只放一个建表语句,让大模型知道我们的数据结构是什么样的,以及每个字段代表的意思。
然后运行项目,运行成功后会在控制台打印访问地址:
打开访问地址:http://localhost:8084,是和刚才一样的页面,只不过这里是本地部署的了,
此时可以针对本地的数据库进行提问:可以在提问框里输入每种书各有多少本,然后回车,
最终返回结果如下,vanna不仅先返回了正确的sql,同时会把结果以表格的形式展示,提供导出功能,最终还会根据结果的数据结构,选择适合的图表做展示。不过如果电脑的性能比较差,可能需要延迟好一会才会有回答,在使用的时候需要耐心等待。