Vanna-ai -基于RAG的TextToSql实现方案

官方连接:Vanna.AI - Personalized AI SQL Agent

1.背景

基于大模型的TextToSql的关键为给大模型提供正确有效的数据库信息及问题,以提升大模型生成sql的正确率。database_info + question形成prompt,但是实际中通常会遇到一个问题,生产中的数据库结构之复杂,通常一个数据库可能200-500个表,那么prompt通常容不下这么多信息?这是面临的主要问题:如何在有效的prompt长度限制之内传递给大模型有效的信息辅助生成sql?

选表!

让大模型根据问题自动选择相关的表信息组合形成prompt。

完全可以借助RAG完成自动选表!将数据库相关信息存入向量知识库,每次查询检索相关表信息形成prompt,可以很好的解决上述问题。Vanna-ai正是借助RAG增强了大模型SQL的生成能力。

Vanna 使用一种称为 LLM(大型语言模型)的生成式人工智能。简而言之,这些模型是在大量数据(包括一堆在线可用的 SQL 查询)上进行训练的,并通过预测响应提示中最有可能的下一个单词或“标记”来工作。Vanna 优化了提示(通过向量数据库使用嵌入搜索)并微调 LLM 模型以生成更好的 SQL。

Vanna 正在使用和试验许多不同的LLM,以获得最准确的结果。OpenAI 的 GPT 模型通常表现出色,但有时 Google 的 Bard、Meta 的 LLAMA 和 Falcon 模型表现最好。

2.关于Vanna-ai

从本质上讲,Vanna 是一个 Python 包,它使用检索增强来帮助您使用 LLM 为数据库生成准确的 SQL 查询。

Vanna 的工作过程分为两个简单步骤 :

  • 在您的数据上训练 RAG“模型”-本质上是基于文档(建表语句、相关sql查询、表或者字段的comment)作为资料,进行Embedding后存入向量库
  • 然后提出问题,基于这些问题去向量库检索相关信息,这些问题传给大模型返回 SQL 查询,这些查询可以设置为在您的数据库上自动运行。

3.工作原理

当你向 Vanna 提出问题时,会执行以下过程

  1. 我们首先在我们的训练集中搜索过去提出过的类似问题。
  2. 如果我们发现类似的问题,我们会将这些问题中经过验证的 SQL 传递到我们的模型。
  3. 否则,我们会传入 DDL、文档或引导查询。 -本质上是一个检索增强的过程。
  4. 然后,您的架构特有的 Vanna 模型会生成 SQL。
  5. 然后我们运行 SQL 来验证它。如果经过验证,它将进入训练数据。
  6. 否则,分析师可以更正 SQL 并将其放入训练数据中。

随着时间的推移,Vanna 不断提高对您的模式的理解,并正确回答越来越多的问题。

4.Vanna-ai简单案例

import vanna
from vanna.openai.openai_chat import OpenAI_Chat
from vanna.chromadb.chromadb_vector import ChromaDB_VectorStoreclass MyVanna(ChromaDB_VectorStore, OpenAI_Chat):def __init__(self, config=None):ChromaDB_VectorStore.__init__(self, config=config)OpenAI_Chat.__init__(self, config=config)vn = MyVanna(config={'api_key': 'sk-*************', 'model': 'gpt-3.5-turbo'})# 训练向量库
vn.train(ddl="""SELECT customer_name, SUM(sales_amount) as total_sales
FROM sales_wn
GROUP BY customer_name
ORDER BY total_sales DESC
LIMIT 10;
""")vn.train(sql="SELECT name, age FROM my-table WHERE name = 'John Doe'")# 询问问题
vn.ask("What are the top 10 customers by sales?")

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# WinForm AndtUI第三方库 Tree控件使用记录

环境搭建 1.在NuGet中搜索AndtUI并下载至C# .NetFramework WinForm项目。 2.添加Tree控件至窗体。 使用方法集合 1.添加节点、子节点 using AntdUI; private void UpdateTreeView() {Tree tvwTestnew Tree();TreeItem rootTreeItem;TreeItem subTreeItem;Dictionary<str…

openGL 透视投影矩阵

openGL 透视投影矩阵 什么是透视投影&#xff1f; 模型都是3D的&#xff0c;但屏幕是2D的。如何将3D空间投影到2D平面&#xff0c;还能保持深度的视觉效果&#xff1f;在OpenGL中&#xff0c;采用透视投影矩阵作用顶点来实现&#xff0c;即完成缩放、选择、位移之后&#xff…

CSS_实现三角形和聊天气泡框

如何用css画出一个三角形 1、第一步 写一个正常的盒子模型&#xff0c;先给个正方形的div&#xff0c;便于观察&#xff0c;给div设置宽高和背景颜色 <body><div class"box"></div> </body> <style>.box {width: 100px;height: 100px…

Windows已经安装了QT 6.3.0,如何再安装一个QT 5.12

要在Windows上安装Qt 5.12&#xff0c;您可以按照以下步骤操作&#xff1a; 下载Qt 5.12&#xff1a;访问Qt官方网站或其他可信赖的来源&#xff0c;下载Qt 5.12的安装包。 下载安装地址 下载安装详细教程 安装问题点 qt安装时“Error during installation process(qt.tools…

opencart3 添加速卖通商品脚本

非爬虫&#xff0c;只能把速卖通商品信息拿下来解析插入到自己的项目里。 刚接触opencart3没多久&#xff0c;有一些新项目需要添加商品&#xff0c;每次手动从速卖通复制信息又很慢&#xff0c;就自己写了一个脚本。 思路&#xff1a;速卖通商品详情页有一段数据包含了几乎所…

Springboot 过滤器、拦截器、全局异常处理

Springboot 过滤器、拦截器、全局异常处理 一 过滤器&#xff08;Filter&#xff09; 过滤器是JavaWeb三大组件&#xff08;Servlet&#xff0c;Filter&#xff0c;Listener&#xff09;之一。 Filter可以把对资源的请求拦截下来&#xff0c;从而实现一些功能。 注意&#…

这本书太好了!150页就能让你上手大模型应用开发

如果问个问题&#xff1a;有哪些产品曾经创造了伟大的奇迹&#xff1f;ChatGPT 应该会当之无愧入选。仅仅发布 5 天&#xff0c;ChatGPT 就吸引了 100 万用户——当然&#xff0c;数据不是关键&#xff0c;关键是其背后的技术开启了新的 AI 狂潮&#xff0c;成为技术变革的点火…

Ubantu 18.04 配置固定IP

1.首先在终端里输入命令,将你的网关和ip&#xff0c;记下来 ifconfig 2. 执行命令&#xff1a; sudo gedit /etc/network/interfaces 3.在弹出来的框里输入 auto后面的就是网关&#xff0c;address是你虚拟机的ip&#xff0c;gateway是你的网关ip&#xff0c;netmask是你的子…

非阻塞实现高效键盘扫描功能(STM32F4XX)

目录 概述 1 原理分析 1.1 技术背景 1.2 系统硬件 1.3 STM32 IO&#xff08;输入模式&#xff09;寄存器分析 1.3.1 输入IO的功能描述 1.3.2 输入配置 1.3.3 GPIO 寄存器&#xff08;输入模式相关&#xff09; 1.3.3.1 GPIO 端口模式寄存器 1.3.3.2 GPIO 端口上拉/下拉…

挑战给女神节送礼物,怎么寄快递才能快速的送到他手中呢?

马上就是三八女神节了&#xff0c;怎么样&#xff1f;你给心爱的她或者敬爱的她准备礼物了吗&#xff0c;如果已经准备好&#xff0c;你该怎么送给她呢&#xff1f;是当面送给她&#xff1f;还是通过快递打包送给她呢&#xff1f;这里推荐使用闪侠惠递寄快递发货给他吧&#xf…

Zookeeper3:客户端命令

文章目录 客户端命令连接服务端Zookeeper客户端内置命令 ls - 节点信息 客户端命令 连接服务端Zookeeper //客户端连接服务端zookeeper 默认连的本机2181端口的zookeeper cd /opt/module/zookeeper-3.9.1/bin && sh zkCli.sh//客户端连接远程服务端zookeeper cd /op…

MySQL高可用性攻略:快速搭建MySQL主从复制集群 !

MySQL高可用性攻略&#xff1a;快速搭建MySQL主从复制集群 &#xff01; MySQL基础知识&#xff1a;介绍MySQL数据库的基本概念和常用命令&#xff0c;如何创建数据库、表、用户和权限管理等。 MySQL安装教程&#xff1a;Centos7 安装MySQL5.7.29详细安装手册 MySQL数据类型&…

【Docker】Docker:解析容器化技术的利器与在Linux中的关键作用

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Linux ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 Docker 是什么&#xff1f; Docker 的作用 Docker 在 Linux 中的重要性 结语 我的其他博客 前言 随着软件开发的不断发展&…

猴子吃桃问题(python版)

文章预览&#xff1a; 题目python解法一&#xff1a;运行结果 python解法二&#xff1a;运行结果 python解法三&#xff1a;运行结果 题目 猴子吃桃问题&#xff1a;猴子第一天摘下若干个桃子&#xff0c;当即吃了一半&#xff0c;还不过瘾&#xff0c;又多吃了一个。 第二天早…

计算机网络-网络安全(二)

1.应用层安全协议&#xff1a; S-HTTP或SHTTP&#xff08;Sec HTTP&#xff09;&#xff0c;安全超文本传输协议&#xff0c;是HTTP扩展&#xff0c;使用TCP的80端口。HTTPS&#xff1a;HTTPSSL&#xff0c;使用TCP的443端口。和TLS&#xff08;传输层安全标准&#xff09;是双…

安达发|APS自动排程软件的三种模式

APS自动排程软件是一种用于生产计划和调度的工具&#xff0c;它可以帮助制造企业实现生产过程的优化和效率提升。根据不同的需求和应用场景&#xff0c;APS自动排程软件通常有三种模式&#xff1a;基于模拟仿真模式、基于TOC的模式和扩展以及基于数学建模。下面我将详细介绍这三…

解决在 Mac 上安装 Adobe 软件弹出提示:安装包已经被损坏并且不能被打开。

问题&#xff1a; “INSTALLER” is damaged and can’t be opened. You should eject the disk image. 解决方法和步骤&#xff1a; 打开安装包&#xff1b;将安装包 “INSTALLER” 拖动复制到某个文件夹&#xff0c;复制后的文件路径例如像这样&#xff1a;/Users/michael…

Qt绘制动态罗盘

介绍&#xff1a;罗盘指针以30角旋转巡逻&#xff0c;扫描航海范围内的点位&#xff0c;并绘制点云。字段信息在表格中显示&#xff0c;该数据都存储在数据库中。选择不同的范围&#xff0c;显示该范围内的点位。 #include "mainwindow.h" #include "ui_mainwi…

element-ui附件上传及在线查看详细总结,后续赋源码

一、附件上传 1、在element-ui上面复制相应代码 a、accept"image/*,.pdf,.docx,.xlsx,.doc,.xls" 是规定上传文件的类型&#xff0c;若是不限制&#xff0c;可以直接将accept‘all即可&#xff1b; b、:action"action" 这个属性就是你的上传附件的地址&am…

7款炫酷的前端动画特效分享(三)(附效果图及在线演示)

分享7款好玩的前端动画特效 其中有CSS动画、SVG动画、js小游戏等等 下方效果图可能不是特别的生动 那么你可以点击在线预览进行查看相应的动画特效 同时也是可以下载该资源的 CSS3模仿四季交替动画 基于HTML5CSS3实现的卡通风格一年四季交替动画特效 以下效果图只能体现框架的…