Vanna使用ollama分析本地MySQL数据库

简介: 这篇文章详细介绍了如何使用Vanna结合Ollama框架来分析本地MySQL数据库,实现自然语言查询功能,包括环境搭建和配置流程。

上一章节中已经实现了vanna的本地运行,但是大模型和数据库都还是远程的,因为也就没办法去训练,这节一起来实现vanna分析本地mysql数据库,因为要使用本地大模型,所以开始之前需要给本地安装好大模型,我这里用ollama下载了llama3,这节就用llama3作为大模型分析,如果本地没有ollama的可以参考我之前的章节安装一下,同时本地还需要安装mysql数据库,并创建一个表作为接下来用大模型分析的对象。

我这里的数据表如下:

因为需要连接mysql数据库,因此需要安装mysql-connecter-python,同时我们将向量数据库换为ChromDB,在pycharm的命令提示符执行

pip install vanna
pip install ollama
pip install ChromaDB
pip install mysql-connector-python
pip install 'vanna[chromadb,ollama,mysql]'

安装完成后,按照vanna的官方文档,实现MyVanna的方法

class MyVanna(ChromaDB_VectorStore, Ollama):
    def __init__(self, config=None):
        ChromaDB_VectorStore.__init__(self, config=config)
        Ollama.__init__(self, config=config)

然后需要连接本地的ollama中的llama3,输入模型名称llama3:8b,并设置访问地址,然后替换连接的数据库,我的数据库在局域网,因此填写局域网的数据库IP,和账号密码

vn = MyVanna(config={'model': 'llama3:8b','ollama_host':'http://127.0.0.1:11434'})

def run_sql(sql: str) -> pd.DataFrame:
    cnx = mysql.connector.connect(user='root',password='123456',host='192.168.30.169',database='vanna')
    cursor = cnx.cursor()
    cursor.execute(sql)
    result = cursor.fetchall()
    columns = cursor.column_names
    # print('columns:',columns)
    df = pd.DataFrame(result, columns=columns)
    return df

# 将函数设置到vn.run_sql中
vn.run_sql = run_sql
vn.run_sql_is_set = True

此时已经可以连接到大模型,并访问数据库了,但是大模型并不知道数据结构,所以要对vanna进行简单的训练,官方的训练分为三种,DDL,Document,SQL,DDL就是建表语句,告诉大模型表结构,Document存放的是数据库中的一些专业术语,比如你要查询成年人的数量,那就要在document中记录,成年人是指大于18岁的人。SQL就是正常的sql语句了,另外每次的提问也会作为问答记录存到训练数据中,也可以提前手动添加问答训练数据。我们这里就只放一个建表语句,

vn.train(ddl="""
CREATE TABLE `book`  (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '表唯一ID',
  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
  `book_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '书的名字',
  `book_code` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '书的编号',
  `book_introduction` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '书的简介',
  `book_publisher` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '书的出版社',
  `book_image` longtext CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL COMMENT '书的图片',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = 'book表' ROW_FORMAT = Dynamic;
""")

然后运行项目,运行成功后会在控制台打印访问地址:

打开访问地址

然后可以在提问框开始提问了,这里输入每种书各有多少本,然后回车,

最终返回结果如下,vanna不仅先返回了正确的sql,同时会把结果以表格的形式展示,提供导出功能,最终还会根据结果的数据结构,选择适合的图表做展示。

如果需要完整源码或者其他问题可以给我留言

相关文章
|
25天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
17天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
4天前
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
阿里云百炼产品月刊【2024年9月】
|
1天前
|
人工智能 Rust Java
10月更文挑战赛火热启动,坚持热爱坚持创作!
开发者社区10月更文挑战,寻找热爱技术内容创作的你,欢迎来创作!
263 12
|
19天前
|
人工智能 IDE 程序员
期盼已久!通义灵码 AI 程序员开启邀测,全流程开发仅用几分钟
在云栖大会上,阿里云云原生应用平台负责人丁宇宣布,「通义灵码」完成全面升级,并正式发布 AI 程序员。
|
21天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2582 22
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
3天前
|
存储 人工智能 搜索推荐
数据治理,是时候打破刻板印象了
瓴羊智能数据建设与治理产品Datapin全面升级,可演进扩展的数据架构体系为企业数据治理预留发展空间,推出敏捷版用以解决企业数据量不大但需构建数据的场景问题,基于大模型打造的DataAgent更是为企业用好数据资产提供了便利。
170 2
|
1天前
|
编译器 C#
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
101 65
|
21天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1578 16
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
5天前
|
Linux 虚拟化 开发者
一键将CentOs的yum源更换为国内阿里yum源
一键将CentOs的yum源更换为国内阿里yum源
263 2