首页 > 其他分享 >VannaAI 介绍及使用 - 第三篇

VannaAI 介绍及使用 - 第三篇

时间:2024-07-15 20:56:29浏览次数:18  
标签:COMMENT 第三篇 介绍 client Vanna vn NULL VannaAI vanna

Vanna的多样化使用

前言

前面两篇,对Vanna的一些原理和基本使用进行的总结,本篇将根据Vanna提供的多样化配置进行体验尝试,并共同来探索一下Vanna源码,有不正之处请友友们指正。

先做一些说明:

1.我本地目前使用的是 python3.12版本,Vanna是0.5.5版本,不同版本的包可能源码会有些许区别,但主体是一致的。

2.因为Vanna默认是使用chatGPT3.5,我自己本地测试连接其他LLM是通过代理服务实现的,有条件的可以自己部署大模型尝试,本文仅作为自主体验的记录,仅供参考。

3.本篇会先对Vanna一些常用的源码进行说明, 并在此基础上进行一些改造尝试,有误之处请大家多多指正,抱拳抱拳~

一、自定义测试

1.大模型准备 

这里需要先推荐一个代理服务的使用教程链接KIMI AI Free 服务

 我本地试验是用的自己的云服务器,通过链接中的教程,部署了kimi服务。

 2.自定义初始化配置

from vanna.openai import OpenAI_Chat
from vanna.vannadb import VannaDB_VectorStore
from openai import OpenAI

# 使用自己的vanna模型及api key
MY_VANNA_MODEL = "my_vanna_model"
MY_VANNA_API_KEY = "my_vanna_api_key"

# 使用自己的llm模型及所需配置
refresh_token='refresh_token'
my_llm_base_url='http://127.0.0.1:8000/v1' #IP和端口号改为你自己的,我这里实际用的我的云服务器的地址
my_llm_name='kimi'

# 初始化客户端
client = OpenAI(
    api_key=refresh_token,
    base_url=my_llm_base_url,
    default_headers={"Authorization": f"Bearer {refresh_token}", "Content-Type": "application/json"}
)

class MyVanna(VannaDB_VectorStore, OpenAI_Chat):
    def __init__(self, client=None, config=None):
        VannaDB_VectorStore.__init__(self, vanna_model=MY_VANNA_MODEL, vanna_api_key=MY_VANNA_API_KEY, config=config)
        OpenAI_Chat.__init__(self, client=client, config=config)

# 使用自定义的大模型及vanna提供的向量库
vn = MyVanna(client=client, config={"model": my_llm_name, })

有朋友肯定会问,为什么我这里的初始化这么复杂,官网的初始化代码很简单嘛,这里做一些说明:

  1. 我这里使用的是openai的自定义配置,但是呢实际我是去请求我云服务器的kimi服务,他们的请求体是差不多的,所以可以直接套用,但是呢要将所需的参数都提前定义,一个是Vanna的apikey和model,在Vanna官网根据自己的账号获取,还有一个就是kimi大模型服务需要的token,接口url和model。
  2. 这里我比官网多了一个client客户端的初始化,实际Vanna源码中也是有client初始化的代码,但是我这里自定义了一个,满足需要就行了,client的作用主要就是传递相关参数,这里会用到的就是api_key,base_url,default_headers,为了方便测试,这里就提前定义好。

3. 数据库连接

以下是数据库连接方法,这里以mysql为例。Vanna还提供其他的数据库连接方式,都是以connect_to_数据库的方式命名。

# 初始化数据库连接
vn.connect_to_mysql(host="localhost", dbname="test", user="root", password="123456", port=3306)

 4.提问验证

其实这个时候就可以问问题了,我先问个‘你是谁’看看,然后执行。

vn.ask(question="你是谁")

 回答结果:

 连接成功啦,回答也是OK的,最后一行报错是因为当前kimi的回答无法作为sql去执行,这个没关系,我们换一个能生成sql的问题。

vn.ask(question="请帮我查一下student_info表score大于92的数据")

回答结果:

可以看到kimi是正常生成了sql的,并且Vanna通过sql也从数据库查到了数据,并让kimi生成相应的图形代码,展示出了图形。(这里我是提前准备了数据库的测试数据的,第二篇文章有建表语句和插入数据语句) 

5.训练数据 

刚才我们的提问是很详细具体的,我们加入一些训练数据,以实现能满足多样化的提问。

vn.train(ddl="CREATE TABLE student_info (id INT NOT NULL AUTO_INCREMENT COMMENT '唯一标识符',name VARCHAR(100) NOT NULL COMMENT '学生姓名',age INT NOT NULL COMMENT '年龄',province VARCHAR(100) NOT NULL COMMENT '省份',score DECIMAL(5,2) NOT NULL COMMENT '分数',PRIMARY KEY (id)) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='存储学生基本信息及成绩';")

vn.train(question="请查询student_info表中score大于90的数据", sql="SELECT * FROM student_info WHERE score > 90;")
vn.train(question='请查询分数小于85的省份', sql="SELECT DISTINCT province FROM student_info WHERE score < 85;")
#自己再加一些样例

然后我们再继续进行一些数据相关的问题。这里我就不做过多演示了,小伙伴们可以自己多多尝试。

vn.ask(question="请统计各省份的分数情况")

 从输出的内容我们看到除了生成的sql,查询到的数据,以及图表和代码,最前面还有一大堆东西,这些就是prompt提示词,这个我把它提取出来格式化一下。

prompt = [{'role': 'system',
                        #你是一位SQL专家,请帮助生成一个SQL查询来回答这个问题。
           'content': "You are a SQL expert. Please help to generate a SQL query to answer the question. "
                      # 你的回答应该仅仅基于给定的上下文,并遵循回答指南和格式说明。
                      "Your response should ONLY be based on the given context and follow the response guidelines and format instructions."
                      # 我们的ddl建表语句
                      " \n===Tables \nCREATE TABLE student_info "
                      "(id INT NOT NULL AUTO_INCREMENT COMMENT '唯一标识符',"
                      "name VARCHAR(100) NOT NULL COMMENT '学生姓名',"
                      "age INT NOT NULL COMMENT '年龄',"
                      "province VARCHAR(100) NOT NULL COMMENT '省份',"
                      "score DECIMAL(5,2) NOT NULL COMMENT '分数',"
                      "PRIMARY KEY (id)) "
                      "ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='存储学生基本信息及成绩';"
                        # 回答指南
                        # 如果提供的上下文足够,针对问题生成一个有效的SQL查询,无需任何解释。
                        # 如果提供的上下文几乎足够,但需要了解特定列中的特定字符串知识,请生成一个中间SQL查询以查找该列中的不同字符串。在查询前加上注释,标记为intermediate_sql。
                        # 如果提供的上下文不足,请解释为什么无法生成查询。
                        # 请使用最相关的表。
                        # 如果问题之前已经被提出并回答过,请完全按照之前的答案重复回答。
                      "\n\n===Response Guidelines "
                      "\n1. If the provided context is sufficient, please generate a valid SQL query without any explanations for the question. "
                      "\n2. If the provided context is almost sufficient but requires knowledge of a specific string in a particular column,"
 

标签:COMMENT,第三篇,介绍,client,Vanna,vn,NULL,VannaAI,vanna
From: https://blog.csdn.net/Davis_Liyf/article/details/140326250

相关文章

  • 推荐好用的鼠标连点器,4个鼠标连点工具介绍,每秒点击上百下!
    鼠标连点器是鼠标可以在段时间内连续点击的工具,一般游戏玩家用的比较多。鼠标连点可以自由设置鼠标点击间隔时间及单击方式,只需要将鼠标移动到需要连点的地方,然后按相应热键就可以启动连点,再按下相应热键停止连点就可以了。鼠标连点在日常工作中蛮常见的,如果你需要用到鼠标连......
  • STM32标准库函数功能介绍————EXTI库
    1.voidEXTI_DeInit(void);函数解释:EXTI的反初始化函数,即恢复默认状态。参数解释:无参数2.voidEXTI_Init(EXTI_InitTypeDef*EXTI_InitStruct);函数解释:EXTI的初始化函数参数解释:注意要加&号3.voidEXTI_StructInit(EXTI_InitTypeDef*EXTI_InitStruct);函数解释:将EXTI......
  • Day34.异常处理介绍
    1.异常处理介绍 '''1.什么是异常异常是程序发生错误的信号,程序一旦出错就会抛出异常,程序的运行随即终止1.1异常处理的三个特征异常的追踪信息异常的类型异常的内容''''''2.为何处理异常为了增强程序的健壮性,即便是程序运行过程中出错,也不要终......
  • AI绘画Stable Diffusion 零基础入门 —AI 绘画原理与工具介绍,万字解析AI绘画的使用教
    大家好,我是设计师阿威想要入门AI绘画,首先需要了解它的原理是什么样的。其实很早就已经有人基于深度学习模型展开了对图像生成的研究了,但在那时,生成的图像分辨率和内容都非常抽象。直到近两年,AI产出的图像内容的质量变高、而且有一定的艺术价值,这时它才算正式拥有了理......
  • 04、组件介绍
    k8s里的资源对象在k8s里,yaml用来声明API对象的,那么API对象都有哪些?可以这样查看资源对象kubectlapi-resourcesyaml使用缩进表示层次,缩进不允许使用tab,只能用空格,缩进空格数多少不要求,只要保证同一层级空格数一样多即可使用#书写注释数组(列表)是使用-开头的清单形式对......
  • Python常用数据类型 新手必看 超详细介绍
    目录一、Int整型二、Float浮点型科学计数法三、Bool布尔类型bool函数四、Str字符型字符串的声明字符串的常见操作查找:计数:大小写转换:编码与解码:切割与拼接:替换:五、None六、List列表列表的声明列表的常见操作 增加元素:删除元素:其他:七、Tuple元组元组的......
  • 工作流-workflow_Dagster or Prefect介绍
    工作流预定工作流动态工作流根据具体的需求和场景选择合适的工作流引擎进行使用Dagster生态PrefectPrefect是一种新的工作流管理系统动态工作流程:Prefect允许用户创建可以基于输入数据或条件进行更改的动态工作流程Prefectisaworkfloworchestrationframewor......
  • 【简单介绍下K-means聚类算法】
    ......
  • HSQL 数据库介绍(2)--使用
    本文主要介绍HSQLDB的基本使用,文中所使用到的软件版本:Java11.0.22、HSQLDB2.7.2。1、进程内模式直接使用JDBC连接数据库即可,如果数据库不存在会自动创建。1.1、file数据库@TestpublicvoidinProcessFile()throwsSQLException{StringdbName="test";/......
  • postman安装介绍
    Postman是一款流行的API测试工具,广泛用于开发、测试和调试API。以下是对Postman接口工具测试的详细解释:安装和设置下载和安装:访问Postman官网下载并安装适用于你操作系统的版本。注册和登录:安装完成后,打开Postman,可以选择注册一个账户并登录,或者使用离线模......