深度学习系列75:sql大模型工具vanna

server/2025/1/23 23:56:02/

1. 概述

vanna是一个可以将自然语言转为sql的工具。简单的demo如下:

!pip install vanna
import vanna
from vanna.remote import VannaDefault
vn = VannaDefault(model='chinook', api_key=vanna.get_api_key('my-email@example.com'))
vn.connect_to_sqlite('https://vanna.ai/Chinook.sqlite')
vn.ask("What are the top 10 albums by sales?")

执行下面的代码运行图形界面

from vanna.flask import VannaFlaskApp
VannaFlaskApp(vn).run()

2. 配置

数据库可以是任何数据库,比如mysql如下:

import pandas as pd
import psycopg2def run_sql(sql):conn = psycopg2.connect(host="localhost",database="my_database",user="my_user",password="my_password")return pd.read_sql(sql, conn)vn.run_sql = run_sql
vn.run_sql_is_set = True

向量数据库稍微麻烦一些,目前支持的包括:
参考代码如下:

from vanna.chromadb.chromadb_vector import ChromaDB_VectorStore
class MyVanna(ChromaDB_VectorStore):def __init__(self, config=None):ChromaDB_VectorStore.__init__(self, config=config)vn = MyVanna(config={'path': '/path/to/chromadb'})

3. 训练

训练数据可以是:DDL、documentation、sql以及Question-SQL Pairs

vn.train(ddl="CREATE TABLE my_table (id INT, name TEXT)")
vn.train(documentation="Our business defines XYZ as ABC")
vn.train(sql="SELECT col1, col2, col3 FROM my_table")

可以设置auto_train = True

4. 询问

vn.ask("What are the top 10 customers by sales?")

它包含下列几个函数:

vn.generate_sql
vn.run_sql
vn.generate_plotly_code
vn.get_plotly_figure

visualize=False

5. 启用服务

参考https://github.com/vanna-ai/vanna-flask,将LLM、embedding、vectorStore都改造成自己的代码。
首先是LLM,改造框架为:

from vanna.base import VannaBase
class MyLLM(VannaBase):def __init__(self,config=None):VannaBase.__init__(self, config=config)...def system_message(self, message: str) -> any:return {"role": "system", "content": message}def user_message(self, message: str) -> any:return {"role": "user", "content": message}def assistant_message(self, message: str) -> any:return {"role": "assistant", "content": message}def submit_prompt(self, prompt, **kwargs) -> str:...

然后是embedding,需要定义encode_documents和encode_queries两个函数,例如:

class BgeM3:def __init__(self, url):self.url = urldef encode_documents(self, docs):....def encode_queries(self, queries):....

接下来是vectorStore,我们使用milvus,它会自动调用config中的embedding_function,我们把它定义成上面的BegM3即可:

class MyVanna(Milvus_VectorStore, QwenLLM):def __init__(self, config=None):Milvus_VectorStore.__init__(self, config=config)QwenLLM.__init__(self, config=config)vn = MyVanna(config={'milvus_client': MilvusClient(...),'embedding_function':BgeM3(...)})

然后定义连接的数据库,可以换成任意的其他数据库:

def run_sql(sql: str) -> pd.DataFrame:cnx = mysql.connector.connect(...)cursor = cnx.cursor()cursor.execute(sql)result = cursor.fetchall()columns = cursor.column_namesdf = pd.DataFrame(result, columns=columns)return dfvn.run_sql = run_sql
vn.run_sql_is_set = True 

接着执行python app.py即可启用服务,访问localhost:5000可以打开页面:
在这里插入图片描述
同时也可以调用接口:

import requests
response = requests.get(url+'/api/v0/get_training_data',headers={'Content-Type':'application/json'})
response.json()

所有可用的接口清单可以参考app.py。


http://www.ppmy.cn/server/160882.html

相关文章

基于.Net Core+Vue的文件加密系统

1系统架构图 2 用例图 管理员角色的用例: 文件分享大厅:管理员可以访问文件分享大厅,下载文件。个人信息管理:管理员可以更新自己的个人信息,修改密码。用户管理:管理员负责创建、更新或删除用户账户&…

CSS语言的学习路线

CSS语言的学习路线 CSS(层叠样式表,Cascading Style Sheets)是网页设计和开发中不可或缺的一部分。它主要用于控制网页的视觉表现,通过选择器、属性和样式规则,将HTML结构与其设计分离,从而实现更灵活的设…

AIGC时代:如何快速搞定Spring Boot+Vue全栈开发

文章目录 一、Spring Boot基础二、Vue.js基础三、Spring Boot与Vue.js集成四、性能优化与最佳实践《快速搞定Spring BootVue全栈开发》 内容简介作者简介目录前言/序言本书内容本书特点读者对象 随着人工智能生成内容(AIGC)技术的迅速发展,…

OpenCV相机标定与3D重建(65)对图像点进行去畸变处理函数undistortPoints()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 从观测到的点坐标计算理想点坐标。 该函数类似于 undistort 和 initUndistortRectifyMap,但它操作的是稀疏点集而不是光栅图像。此外…

如何下载对应城市的地理json文件

这里采用的是阿里地图工具进行查找: DataV.GeoAtlas地理小工具系列 由阿里云DataV数据可视化团队出品,多年深耕数据可视化领域,数据大屏业务开拓者和领航者。致力用震撼而清晰的视觉语言,让更多人读懂大数据,受惠数据驱动的决策方式 第一步打开网站 : …

蓝桥杯不熟知识整理

第一章 1.using namespace std; using namespace std; 是⼀种简单粗暴的做法,直接这样使⽤,就意味着后续在 std 这个名字空间中的各种定义都可以直接使⽤,但是我们往往只是使⽤部分。所以名字空间其实也 可以这样使⽤:std::cout…

HTML中的`<!DOCTYPE html>`是什么意思?

诸神缄默不语-个人CSDN博文目录 在学习HTML时&#xff0c;我们经常会看到HTML文档的开头出现<!DOCTYPE html>&#xff0c;它是HTML文件的第一行。很多初学者可能会疑惑&#xff0c;为什么需要这行代码&#xff1f;它到底有什么作用呢&#xff1f;在这篇文章中&#xff0…

【2025 ODA teigha .NET系列开发教程 第五章】给CAD实体添加附属数据XDATA,包括源码

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 2025 O…