#RAG##AIGC#开源 VannaSQL生成框架,与您的数据库聊天

Vanna是麻省理工学院授权的开源Python RAG(检索增强生成)框架,用于SQL生成和相关功能。
请添加图片描述

Vanna的工作原理

Vanna只需两个简单的步骤——在数据上训练RAG“模型”,然后提出问题,这些问题将返回SQL查询,这些查询可以设置为在数据库上自动运行。

  1. 根据您的数据训练RAG“模型”。
  2. 提出问题。
    请添加图片描述
    如果你不知道什么是RAG,不要担心——你不需要知道它是如何在引擎盖下使用的。你只需要知道你“训练”了一个模型,它存储了一些元数据,然后用它来“提问”问题。

有关如何在引擎盖下工作的更多详细信息,请参见基类。

用户接口

这些是我们使用Vanna构建的一些用户界面。您可以按原样使用这些,也可以将其作为自己自定义界面的起点。
Jupyter Notebook
vanna-ai/vanna-streamlit
vanna-ai/vanna-flask
vanna-ai/vanna-slack

开始

有关所需数据库、LLM等的详细信息,请参阅文档。
如果您想在训练后感受一下它的工作原理,可以尝试这款 Colab 笔记本。

安装

pip install vanna

import

import vanna as vn

训练

您可能需要也可能不需要运行这些 vn.train 命令,具体取决于您的用例。请参阅文档了解更多详细信息。这些陈述可以让您了解它是如何工作的。

使用DDL语句进行训练

DDL 语句包含有关数据库中的表名、列、数据类型和关系的信息。

vn.train(ddl="""
    CREATE TABLE IF NOT EXISTS my-table (
        id INT PRIMARY KEY,
        name VARCHAR(100),
        age INT
    )
""")

使用文档进行训练

有时您可能想要添加有关业务术语或定义的文档。
vn.train(documentation="Our business defines XYZ as ...")

使用 SQL 进行训练

您还可以将SQL查询添加到训练数据中。如果您已经有一些查询,这将非常有用。您只需从编辑器中复制并粘贴这些内容即可开始生成新的SQL。
vn.train(sql="SELECT name, age FROM my-table WHERE name = 'John Doe'")
你会得到 SQL

SELECT c.c_name as customer_name,
        sum(l.l_extendedprice * (1 - l.l_discount)) as total_sales
FROM   snowflake_sample_data.tpch_sf1.lineitem l join snowflake_sample_data.tpch_sf1.orders o
        ON l.l_orderkey = o.o_orderkey join snowflake_sample_data.tpch_sf1.customer c
        ON o.o_custkey = c.c_custkey
GROUP BY customer_name
ORDER BY total_sales desc limit 10;

如果您已连接到数据库,您将获得该表:

顾客姓名总销售额
Customer#0001435006757566.0218
Customer#0000952576294115.3340
Customer#0000871156184649.5176
Customer#0001311136080943.8305
Customer#0001343806075141.9635
Customer#0001038346059770.3232
Customer#0000696826057779.0348
Customer#0001020226039653.6335
Customer#0000985876027021.5855
Customer#0000646605905659.6159

您还将获得一个自动绘图:
请添加图片描述

RAG 与微调

RAG 检索增强生成技术
· 可跨LLM移植
· 如果培训数据中的任何一个已过时,则可以轻松删除这些数据
· 运行起来比微调便宜得多
· 更经得起未来考验——如果有更好的LLM问世,你可以把它换掉

FT 微调
· 如果您需要在提示中最小化令牌,这很好
· 起步缓慢
· 训练和运行费用高昂(通常)

为什么是Vanna?

  1. 在复杂数据集上具有高精度。
    · Vanna的能力与您提供的训练数据息息相关
    · 更多的训练数据意味着大型复杂数据集的准确性更高
  2. 安全且私密。
    · 您的数据库内容永远不会发送到LLM或矢量数据库
    · SQL执行发生在您的本地环境中
  3. 自学。
    · 如果通过Jupyter使用,您可以选择在成功执行的查询上“自动训练”它
    · 如果通过其他界面使用,则可以让界面提示用户提供对结果的反馈
    · 存储正确的问题到SQL对以供将来参考,并使将来的结果更加准确
  4. 支持任何SQL数据库。
    · 该包允许您连接到任何SQL数据库,否则您可以使用Python连接到这些数据库
  5. 选择你的前端。
    · 大多数人从Jupyter笔记本开始。
    · 通过Slackbot、web应用程序、Streamlight应用程序或自定义前端向您的最终用户展示。

扩展Vanna

Vanna设计用于连接任何数据库、LLM和矢量数据库。有一个VannaBase抽象基类定义了一些基本功能。该包提供了与OpenAI和ChromaDB一起使用的实现。您可以很容易地扩展Vanna以使用您自己的LLM或矢量数据库。有关更多详细信息,请参阅文档。

参考文献

https://vanna.ai/docs/ vanna.ai
https://vanna.ai/ Let Vanna.AI write your SQL for you
https://github.com/vanna-ai/vanna 代码仓库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/324674.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软件测试|使用matplotlib绘制多种柱状图

简介 在数据可视化领域,Matplotlib是一款强大的Python库,它可以用于创建多种类型的图表,包括柱状图。本文将介绍如何使用Matplotlib创建多种不同类型的柱状图,并提供示例代码。 创建基本柱状图 首先,让我们创建一个…

【论文阅读】Speech Driven Video Editing via an Audio-Conditioned Diffusion Model

DiffusionVideoEditing:基于音频条件扩散模型的语音驱动视频编辑 code:GitHub - DanBigioi/DiffusionVideoEditing: Official project repo for paper "Speech Driven Video Editing via an Audio-Conditioned Diffusion Model" paper&#…

基于YOLOv8深度学习的苹果叶片病害智能诊断系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

软件测试|如何使用selenium处理iframe富文本输入框

简介 在网页开发中,富文本框是常见的元素,用于输入富文本内容,如富文本编辑器或邮件编辑器。如果我们要使用Python和Selenium进行自动化测试或操作这种富文本框,可能会遇到一些挑战。本文将详细介绍如何使用Python和Selenium来向…

GoZero微服务个人探究之路(零)个人对微服务产生原因的思考,对前三篇的补充

为什么产生了微服务架构--必要性 这里我觉得看GoZero作者写的博文就可以有很好的体会 具体的,他画了这一张图(以电商后台系统为例子) 所以,我个人产生了如下思考 1.业务逻辑越来越复杂,层层嵌套,分解成微…

基于SSM的驾校信息管理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue、HTML 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是…

快速前端开发02-CSS快速入门

CSS快速入门 1.CSS案例1.1 内容回顾1.2 案例:二级菜单1.2.1 划分区域1.2.2 搭建骨架1.2.3 Logo区域1.2.4 菜单部分 1.3 案例:顶部菜单 二级菜单小结 1.4 案例:推荐区域1.4.1 划分区域1.4.2 搭建骨架1.4.3 案例的实现小结 2. CSS知识点2.1 ho…

Puppeteer让你网页操作更简单(1)屏幕截图

网页自动化设计爬虫工具 中就使用了Puppeteer进行对网页自动化处理,今天就来看看它是什么东西! 我们将学习什么? 在本教程中,您将学习如何使用JavaScript自动化和抓取 web。 为此,我们将使用Puppeteer。 Puppeteer是一个Node库API,允许我们控制无头Ch…

修改和调试 onnx 模型

1. onnx 底层实现原理 1.1 onnx 的存储格式 ONNX 在底层是用 Protobuf 定义的。Protobuf,全称 Protocol Buffer,是 Google 提出的一套表示和序列化数据的机制。使用 Protobuf 时,用户需要先写一份数据定义文件,再根据这份定义文…

最新情侣飞行棋源码完全解析+搭建教程:让爱情在游戏中升温!

游戏玩法 摇筛子自动走棋:再也不用手动掷骰子,轻轻一点,棋子自动前进。让游戏更加轻松愉快。任务挑战:每个格子都藏有不同的任务。这些任务既有趣又挑战性,需要你们共同思考、协作完成。当然,你们也可以选…

URL编码_解码详解

当 URL 路径或者查询参数中,带有中文或者特殊字符的时候,就需要对 URL 进行编码(采用十六进制编码格式)。URL 编码的原则是使用安全字符去表示那些不安全的字符。 安全字符:指的是没有特殊用途或者特殊意义的字符。 URL基本组成 …

linux终端查看文件

ls 命令:ls 命令用于列出当前目录下的文件和子目录。默认情况下,它以字母顺序列出文件和目录的名称。例如,要列出当前目录下的所有文件和目录,可以运行以下命令: ls ls -l 命令:ls -l 命令以长格式显示文件…

S-DES加密算法的分析与代码实现(C语言)

目录 基本概念 打印函数 子密钥生成 初始化必要数组 获取初始密钥k 获取初始密钥k的十个二进制位 获取PC-1 转换字符数组至整型数组 利用PC-1改变数组K中元素的排列顺序 拆分元素顺序改变后的数组K 拆分后数组元素向左循环位移 将左移后的数组合并 获取PC-2 获取…

矩阵行列式的四大应用

目录 一. 介绍 二. 行列式的基本性质 2.1 单位阵的行列式 2.2 交换行位置的行列式 三. 矩阵求逆与行列式 四. 体积与行列式 五. 矩阵主元与行列式 六. 解方程与矩阵行列式 七. 小结 一. 介绍 行列式可以反应矩阵的很多性质,比如可以求矩阵的逆&#xff0c…

vue el-table 多选框回填

主要代码: //选中列,所有列,表名toggleSelection(selectRows, totalRows, tablename) {this.$refs.table.clearSelection();if (selectRows.length > 0) {this.$nextTick(() > {selectRows.forEach(item > {totalRows.forEach(item1 > {if (…

ucloud轻量云(wordpress)配置ssl

ucloud 轻量云(wordpress)配置ssl 1、上传ssl证书到/usr/local/software/apache/conf,这里的文件名和内容与ucloud控制台下载下来的文件名和内容保持一致 2、修改httpd.conf文件 vim /usr/local/software/apache/conf/httpd.conf 找到下面两行,去掉注…

【极光系列】springboot集成redis

【极光系列】springboot集成redis tips:主要用于快速搭建环境以及部署项目入门 gitee地址 直接下载源码可用 https://gitee.com/shawsongyue/aurora.git模块:aurora_rediswindow安装redis安装步骤 1.下载资源包 直接下载解压:https://pa…

【深入剖析Java】「重塑技术功底」攻破Java技术盲点之剖析注解技术的实现原理和开发指南

攻破Java技术盲点之剖析注解技术的实现原理和开发指南 什么是Annotation注解Annotation的定义Annotation的作用Annotation不会影响程序代码的执行什么是metadata(元数据)Annotation和Annotation类型AnnotationAnnotation类型注解的分类(参数个…

C++|29.纯虚函数/接口(待完成)

纯虚函数是一种特殊的虚函数。 普通的虚函数允许子类的同名函数对其进行重写,同时普通的虚函数本身是可以单独进行使用的。 而纯虚函数是一个空壳,强制要求所派生的类在继承的过程中必要将该虚函数进行实现。 如上图,纯虚函数只需要在vir…

汇编和c++初学,c++字符串加整型,导致的字符串偏移

从汇编角度分析"helloworld"1 “helloworld”1对应 mov dword ptr [a],1 mov eax,dword ptr [a] add eax,offset string "helloworld" (03CCCBCh)eax地址偏移加了1, lea ecx,[test]最终取的内存偏移地址&#xf…