Vanna利用ollama分析本地数据库

打印 上一主题 下一主题

主题 958|帖子 958|积分 2874

这节一起用Vanna来实现自然语言转SQL,之前的大模子不停停留在问答阶段,答案根本都是大模子提供的,至多是加点本地知识库,text,pdf等文档,丰富大模子的内容,但是想要大模子与一些管理体系对接还是无能为力,这节就一起尝试下用Vanna对接数据库,将自然语言转成标准的SQL对数据库进行查询。这也是许多管理体系的开发者最须要落地实践的内容。
             利用Vanna之前须要打开Vanna的官网申请一个key,假如之前没有注册过的话,还须要先注册一个vanna的账号,注册乐成后,在 申请KEY的页面申请key申请之后鼠标悬停在中心的输入框上,key就会表现出来。
     

     由于vanna是python实现的,我这里也用python开发,用的pycharm编辑器,须要导入Vanna组件,在pycharm的下令提示符输入:
                                   登录后复制                        
  1. pip install vanna
复制代码
      

  • 1.
                       

     等待安装乐成后,按照官网的步调对接Vanna,这里利用的是Vanna提供的的sqlite数据库,且已经练习好了,有了一些基础的练习数据。背面可以直接问答了。
                                   登录后复制                        
  1. from vanna.remote import VannaDefault
  2. vn = VannaDefault(model='chinook', api_key='your_key')
  3. vn.connect_to_sqlite('https://vanna.ai/Chinook.sqlite')
  4. from vanna.flask import VannaFlaskApp
  5. VannaFlaskApp(vn).run()
复制代码
      

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
                       然后点击运行,运行乐成后,会在控制台打印出访问地址,打开后页面如下
     

     在输入框输入问题后,他会将问题转化成标准的SQL语句进行查询,并用表格展示,同时,vanna会根据自己的理解利用恰当的图表展示
     

     

     但是这种方法只能连接长途的Vanna,须要申请vanna的key,且在线的数据库也没办法练习,下面尝试自己做一个本地摆设的Vanna。要实现Vanna分析本地mysql数据库,也要利用本地大模子,以是开始之前须要给本地安装好大模子,我这里用ollama下载了llama3,这节就用llama3作为大模子分析,假如本地没有ollama的可以参考我之前的章节安装一下,同时本地还须要安装mysql数据库,并创建一个表作为接下来用大模子分析的对象。mysql可以docker安装,也可以手动下载安装文件安装。
     我这里安装好了,并建好了数据库和表,数据表如下:
     

     由于须要连接mysql数据库,因此须要安装mysql-connecter-python,同时我们将向量数据库换为ChromDB,在pycharm的下令提示符实行
                                   登录后复制                        
  1. pip install vanna
  2. pip install ollama
  3. pip install ChromaDB
  4. pip install mysql-connector-python
  5. pip install 'vanna[chromadb,ollama,mysql]'
复制代码
      

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
                       安装完成后,按照vanna的官方文档,实现MyVanna的方法
                                   登录后复制                        
  1. class MyVanna(ChromaDB_VectorStore, Ollama):
  2.     def __init__(self, config=None):
  3.         ChromaDB_VectorStore.__init__(self, config=config)
  4.         Ollama.__init__(self, config=config)
复制代码
      

  • 1.
  • 2.
  • 3.
  • 4.
                       然后须要连接本地的ollama中的llama3,输入模子名称llama3:8b,并设置访问地址,然后替换连接的数据库,我的数据库在局域网,因此填写局域网的数据库IP,和账号密码。
                                   登录后复制                        
  1. vn = MyVanna(config={'model': 'llama3:8b','ollama_host':'http://127.0.0.1:11434'})
  2. def run_sql(sql: str) -> pd.DataFrame:
  3.     cnx = mysql.connector.connect(user='root',password='123456',host='192.168.30.169',database='vanna')
  4.     cursor = cnx.cursor()
  5.     cursor.execute(sql)
  6.     result = cursor.fetchall()
  7.     columns = cursor.column_names
  8.     # print('columns:',columns)
  9.     df = pd.DataFrame(result, columns=columns)
  10.     return df
  11. # 将函数设置到vn.run_sql中
  12. vn.run_sql = run_sql
  13. vn.run_sql_is_set = True
复制代码
      

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
                       此时已经可以连接到大模子,并访问数据库了,但是大模子并不知道数据结构,以是要对Vanna进行简朴的练习,官方的练习分为三种,DDL,Document,SQL,DDL就是建表语句,告诉大模子表结构,Document存放的是数据库中的一些专业术语,比如你要查询成年人的数量,那就要在document中记载,成年人是指大于18岁的人。SQL就是正常的sql语句了,另外每次的提问也会作为问答记载存到练习数据中,也可以提前手动添加问答练习数据。我们这里就只放一个建表语句,让大模子知道我们的数据结构是什么样的,以及每个字段代表的意思。
                                   登录后复制                        
  1. vn.train(ddl="""
  2. CREATE TABLE `book`  (
  3.   `id` int NOT NULL AUTO_INCREMENT COMMENT '表唯一ID',
  4.   `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
  5.   `book_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '书的名字',
  6.   `book_code` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '书的编号',
  7.   `book_introduction` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '书的简介',
  8.   `book_publisher` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '书的出版社',
  9.   `book_image` longtext CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL COMMENT '书的图片',
  10.   PRIMARY KEY (`id`) USING BTREE
  11. ) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = 'book表' ROW_FORMAT = Dynamic;
  12. """)
复制代码
      

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
                       然后运行项目,运行乐成后会在控制台打印访问地址:
     

     打开访问地址:http://localhost:8084,是和刚才一样的页面,只不过这里是本地摆设的了,
     

     此时可以针对本地的数据库进行提问:可以在提问框里输入每种书各有多少本,然后回车,
     

     终极返回结果如下,vanna不但先返回了正确的sql,同时会把结果以表格的情势展示,提供导出功能,终极还会根据结果的数据结构,选择适合的图表做展示。不过假如电脑的性能比较差,可能须要耽误好一会才会有答复,在利用的时间须要耐烦等待。
     

     


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

千千梦丶琪

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表