当前位置: 首页 > news >正文

简单使用Vanna

简单使用Vanna

1 安装依赖环境

⚠️ 表结构等信息,请参考见“https://blog.csdn.net/make_progress/article/details/151905155”

安装依赖

pip install vanna
pip install PyMySQL
pip install cryptography
pip install vanna[chromadb,openai,bigquery]

2 构建模型

2.1 自定义CustomVanna

from abc import ABCfrom openai import OpenAI
from vanna.base import VannaBase
from vanna.chromadb import ChromaDB_VectorStoreclass CustomLLM(VannaBase, ABC):"""自定义虚拟基类大模型"""def __init__(self, config=None):# 调用超类super().__init__(config)if config is None:raise ValueError("For LLM, config must be provided with an api_key and model")if "base_url" not in config:raise ValueError("config must contain a LLM base_url")if "api_key" not in config:raise ValueError("config must contain a LLM api_key")if "model" not in config:raise ValueError("config must contain a LLM model")# 模型基本信息base_url = config["base_url"]api_key = config["api_key"]model = config["model"]# 构建客户端self.client = OpenAI(base_url=base_url, api_key=api_key)self.model = modeldef 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 generate_sql(self, question: str, **kwargs) -> str:# 调用超类生成sqlsql = super().generate_sql(question, **kwargs)# 用 "_" 替换 "\_"sql = sql.replace("\\_", "_")return sqldef submit_prompt(self, prompt, **kwargs) -> str:chat_response = self.client.chat.completions.create(model=self.model,messages=prompt,)return chat_response.choices[0].message.content# 继承虚拟基类
class CustomVanna(ChromaDB_VectorStore, CustomLLM):def __init__(self, config=None):# 注意会使用向量,模型默认是 all-MiniLM-L6-v2ChromaDB_VectorStore.__init__(self, config=config)CustomLLM.__init__(self, config=config)# 构建自定义Vanna
vn = CustomVanna(config={"base_url": "https://api.moonshot.cn/v1","api_key": "XXXX","model": "kimi-k2-0905-preview"
})

2.2 使用自定义的Vanna

from vanna.flask import VannaFlaskAppfrom my.custom_vanna import vn# 1 连接MySQL数据库
vn.connect_to_mysql(host="192.168.108.147", port=3306, dbname="company_salary", user="root",password="123456")# 2 训练数据
"""
# 此注释的内容可以不要
# 获取数据的属性信息
df_information_schema = vn.run_sql("SELECT * FROM INFORMATION_SCHEMA.COLUMNS")# 把信息模式分解为LLM可以引用的小块
plan = vn.get_training_plan_generic(df_information_schema)
vn.train(plan=plan)
"""# 添加表结构schema
vn.train(ddl="""CREATE TABLE salary_records (id INT AUTO_INCREMENT PRIMARY KEY COMMENT '主键自增ID',employee_id VARCHAR(10) NOT NULL COMMENT '员工编号唯一标识员工',name VARCHAR(50) NOT NULL COMMENT '员工姓名',department VARCHAR(50) COMMENT '所属部门如技术部、人事部等',position VARCHAR(50) COMMENT '职位名称',base_salary DECIMAL(10,2) DEFAULT 0.00 COMMENT '基本工资税前基础薪资',bonus DECIMAL(10,2) DEFAULT 0.00 COMMENT '奖金、绩效或项目奖励',deductions DECIMAL(10,2) DEFAULT 0.00 COMMENT '扣款含社保、公积金、个税等',net_salary DECIMAL(10,2) AS (base_salary + bonus - deductions) STORED COMMENT '实发工资自动计算字段',pay_date DATE COMMENT '发薪日期通常为每月固定日期',created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间') ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='员工工资记录表存储每位员工的月度工资明细'
""")# 训练数据说明
vn.train(documentation="数据中包括员工名称、部门名称、职位名称、基本工资等信息")
vn.train(documentation="统计员工的基本工资、奖金等")# 将示例SQL查询添加到训练数据中,越多越好
vn.train(question="查询单个用户信息", sql="SELECT * FROM salary_records WHERE name = '张伟'")
vn.train(question="统计不同部门人数", sql="SELECT department AS department_name, COUNT(*) AS employee_count FROM salary_records GROUP BY department ORDER BY employee_count DESC;")
vn.train(question="统计不同岗位的金额", sql="SELECT position AS job_position, COUNT(*) AS employee_count, SUM(net_salary) AS total_net_salary, AVG(net_salary) AS average_net_salary, MIN(net_salary) AS min_net_salary, MAX(net_salary) AS max_net_salary FROM salary_records GROUP BY position ORDER BY average_net_salary DESC;")# 调用问题,visualize=True会使用的token数量
data = vn.ask(question="查询单个用户信息", visualize=False)
# 返回的数据信息是个元组
print(data)# 用于启动可视化页面,根据自己的情况可以不要
VannaFlaskApp(vn).run()

3 使用截图

⚠️ 有的时候加载不出来下面的页面,关闭网络,再重新打开,就可以了。

(1)简单使用

查询用户孙浩信息

在这里插入图片描述

统计不同岗位的金额
在这里插入图片描述

(2)查看Training Data

在这里插入图片描述

http://www.dtcms.com/a/394511.html

相关文章:

  • 【面板数据】各省环境保护支出统计数据集(2007-2023年)
  • 无需格式转换!FileOptimizer将文件体积压至极致的软件
  • 【论文速递】2025年第17周(Apr-20-26)(Robotics/Embodied AI/LLM)
  • Spring Framework 入门:传统 XML 配置启动方式详解
  • 构建AI智能体:四十、K-Means++与RAG的融合创新:智能聚类与检索增强生成的深度应用
  • Python 中,判断元素是否存在于列表(list)和判断键是否存在于字典(dict)
  • 如何在 Windows 上恢复已删除/未保存的 PowerPoint 文件 - 4 种快速方法
  • 【含文档+PPT+源码】基于过滤协同算法的城市旅游网站的设计与实现
  • week 2
  • Core Animation基础
  • OpenVLC解析
  • 【AI论文】ScaleCUA:借助跨平台数据扩展开源计算机使用代理(系统/工具)规模
  • NW951NW916美光固态闪存NW926NW927
  • Python 如何优雅处理 100GB 数据集——实战案例
  • 快速学习Python(有其他语言基础)
  • 全网首发! Nvidia Jetson Thor 128GB DK 刷机与测评(六)常用功能测评 pi0、pi0.5 环境部署
  • git环境操作指南
  • 【C语言数据结构】题目解析:第1章课后习题
  • 数字魔方,完成二阶、三阶、四阶、五阶复原提示
  • 电子元器件-二级管终篇:基本原理,元件作用与应用场景、参数/数据手册详解,类型介绍/实战
  • AIGC技术深度解析:生成式AI的革命性突破与产业应用实战
  • 数据结构(C语言篇):(十九)归并排序和非比较排序
  • MySQL 字符串拼接
  • 安全运维-Nginx
  • 【Linux命令从入门到精通系列指南】reboot 命令详解:安全重启与关机的终极控制指南
  • LuaC API开发环境搭建保姆级教程
  • cmake安装踩坑笔记
  • 一文详解回归分析的探索、分析、检验阶段,以Stata和SPSS为例
  • 【设计模式】迭代器模式
  • 【论文速递】2025年第25周(Jun-15-21)(Robotics/Embodied AI/LLM)