解开基于大模型的Text2SQL的神秘面纱
你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益:
- 了解大厂经验
- 拥有和大厂相匹配的技术等
希望看什么,评论或者私信告诉我!
文章目录
- 一、背景
- 二、NL2SQL 的实现方式
- 2.1 Vanna
- 2.2 DAIL-SQL
- 2.3 其他的实现方式
- 2.4 总结
- 三、实现样例
- 四、 text2sql 测试集介绍
- 4.1. **WikiSQL**
- 4.2. **Spider**
- 4.3. **BIRD**
- 五、EM 和 EX 介绍
- 七、总结
一、背景
关注 NL2SQL 也有一段时间了,刚好公司最近也要做 NL2SQL,我也刚好看了几个 NL2SQL 的开源项目以及 论文,所以现在总结一下。
二、NL2SQL 的实现方式
2.1 Vanna
先说一下目前比较火的开源项目 Vanna 的实现方式:RAG + LLM
这是它的整体架构和实现方式:
我也翻了一下它的源码,它内部实现特别暴力,通过用户的 question,将 schemal、doc 以及 sql 全部查出来,拼接 prompt 然后给大模型。
这是 vanna 源码的生成 sql 的逻辑
Uses the LLM to generate a SQL query that answers a question. It runs the following methods:- [`get_similar_question_sql`][vanna.base.base.VannaBase.get_similar_question_sql]- [`get_related_ddl`][vanna.base.base.VannaBase.get_related_ddl]- [`get_related_documentation`][vanna.base.base.VannaBase.get_related_documentation]- [`get_sql_prompt`][vanna.base.base.VannaBase.get_sql_prompt]- [`submit_prompt`][vanna.base.base.VannaBase.submit_prompt]
我自己基于 muilt-agent 开发了类似的功能,few-shot 的正确率确实要高一些
2.2 DAIL-SQL
DaIL-SQL 曾经的王者,在 Spider EX 正确率 86.6 %,我读了它的论文 ,它的核心在于 prompt :在 schemal 上增加了 相似问题和对应SQL,从而提高正确性

2.3 其他的实现方式
目前这一块在学术界不断的创新,每隔一段时间就会有新的方式出来来刷新之前的最好成绩,感兴趣的可以看一下 Awesome-Text2SQL
2.4 总结
目前我了解到的所有的实现方式都逃不过:RAG +LLM,目前可以优化的点无非就是
- RAG 想办法提高 RAG 数据的正确率
- 元数据,元数据有问题,RAG的正确率再高也无济于事
- prompt,通过优化 prompt,比如 MCS-SQL 利用多个提示和多项选择来生成文本到 SQL
- LLM 目前的初步结论是参数越多效果越好
三、实现样例
有一个张 a
CREATE TABLE aa (`all_dau` BIGINT COMMENT 'DAU',`long_dau` BIGINT COMMENT '长DAU',`short_dau` BIGINT COMMENT '短DAU',`date` INT COMMENT '分区')
PARTITIONED BY (date)
我现在要查询表 a 最近 7 天 长DAU 和是多少? 应该怎么做。
- 将 表 a 相关的元数据,本例子就是 DDL 写入到向量数据库
- 根据用户提问查询 RAG 得到表 a 相关的信息
- 拼接 prompt
- 发给大模型
比如,拼接 prompt 为
CREATE TABLE aa (`all_dau` BIGINT COMMENT 'DAU',`long_dau` BIGINT COMMENT '长DAU',`short_dau` BIGINT COMMENT '短DAU',`date` INT COMMENT '分区')
PARTITIONED BY (date)要查询表 a 最近 7 天 长DAU 和是多少?返回对应的SQL
发给大模型,大模型返回结果为
要查询表 `aa` 中最近 7 天的长 DAU (`long_dau`) 数量,您可以使用以下的 SQL 查询语句,假设 `date` 列存储的是日期的整数表示(例如 UNIX 时间戳或特定的日期编码):```sql
SELECT SUM(long_dau) AS total_long_dau
FROM aa
WHERE date >= CURDATE() - INTERVAL 7 DAY;
这里,我们使用了 SUM 函数来计算 long_dau 的总和,并且使用 WHERE 子句来过滤出最近 7 天的数据。CURDATE() 函数返回当前日期,然后通过 INTERVAL 7 DAY 添加 7 天的间隔,然后使用 - 操作符来得到 7 天前的日期。这样,您就可以得到最近 7 天的长 DAU 的总和。
四、 text2sql 测试集介绍
是的,WikiSQL、Spider 和 BIRD 是常用的 Text-to-SQL 测试集,它们用于评估模型在自然语言查询到结构化查询语言(SQL)转换方面的能力。以下是它们的简要介绍:
4.1. WikiSQL
-
概述:
- WikiSQL 是一个大规模的 Text-to-SQL 数据集,包含了由自然语言查询生成的 SQL 查询。数据集来自维基百科中的表格。
-
特点:
- 包含 80,000 条自然语言查询和相应的 SQL 查询。用户可以通过简单地询问表格中的信息来生成 SQL。
- 确保多样性,通过多种问题类型测试模型的灵活性。
4.2. Spider
-
概述:
- Spider 是一个大规模的、跨数据库的 Text-to-SQL 数据集,旨在测试模型在不同数据库架构下的泛化能力。
-
特点:
- 包含 10,000 多个自然语言查询与 SQL 查询配对,涉及 200 多种不同的数据库结构。
- 支持复杂的 SQL 查询,如嵌套查询和联合查询。
- 设计以提高模型的实际应用能力,更接近真实世界的使用场景。
4.3. BIRD
-
概述:
- BIRD 是一个专注于信息抽取的 Text-to-SQL 数据集,主要来源于真实的数据库和自然语言问题。
-
特点:
- 旨在评估模型的鲁棒性,特别是在面对模糊或含糊的问题时。
- 提供多样化的问题类型和复杂的 SQL 逻辑,挑战模型的理解和推理能力。
这些测试集为评估和推动 Text-to-SQL 模型的发展提供了标准化的基准,帮助研究人员在自然语言理解和数据库查询方面进行有效比较。通过这些挑战,模型能够逐步提高在实际应用中的准确性和效率。
五、EM 和 EX 介绍
这里以 Spider Exact Match (EM) 和 Spider Exact Execution (EX) 为例介绍:
在 Text-to-SQL 测试集领域,Spider Exact Match (EM) 和 Spider Exact Execution (EX) 是两种评估模型性能的指标,它们都与 Spider 数据集相关,但评估的侧重点有所不同。
联系:
两者都是用来评估 Text-to-SQL 模型性能的指标。它们都需要模型根据输入的文本描述生成相应的 SQL 查询语句。这两个指标都是在 Spider 数据集上使用的,关注模型的查询生成能力与真实数据库执行结果的一致性。
区别:
- Spider Exact Match (EM):主要关注生成的 SQL 查询是否与数据集中提供的标准查询语句完全匹配。它评估模型是否能够准确生成与参考查询语句结构、语法和语义完全一致的 SQL 代码。如果生成的 SQL 查询与参考查询完全一致,则被认为是正确的。这种评估更侧重于模型的查询生成能力。
- Spider Exact Execution (EX):更关注生成的 SQL 查询在实际数据库上的执行结果是否与预期结果一致。它不仅检查查询语句的语法和结构,还检查查询的执行结果是否正确。这意味着模型不仅要生成结构正确的查询语句,还要保证这些查询能够在数据库上返回正确的结果。这种评估方式更全面地考虑了模型的性能,包括查询生成能力和数据库执行能力。
简而言之,EM 主要关注查询语句本身的准确性,而 EX 则更关注查询在实际数据库上的执行结果的准确性。在实际应用中,可以根据需求选择合适的评估指标。
七、总结
本文对Text2SQL的实现方式、测试集和评估指标进行了介绍和总结,全面了解了Text2SQL技术的相关内容,对于从事Text2SQL的研究者具有一定的参考意义。
相关文章:
解开基于大模型的Text2SQL的神秘面纱
你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…...
对象转化成base64-再转回对象
title: 对象转化成base64,再转回对象 date: 2024-08-01 17:54:02 tags: vue3 对象转为base64 /** 将本地对象转为base64 */ function toBase(str) {// 将对象转换为JSON字符串const jsonString JSON.stringify(str);// 使用encodeURIComponent将JSON字符串转换为UTF-8的百分…...
vue运行或打包报错 “‘node --max-old-space-size=10240“‘ 不是内部或外部命令
"node --max-old-space-size10240" 不是内部或外部命令,也不是可运行的程序 解决办法: 在 node_modules 文件夹搜索 "%_prog%" 替换成 %_prog% (即去掉双引号)...
反爬虫限制:有哪些方法可以保护网络爬虫不被限制?
目前,爬虫已经成为互联网数据获取最主流的方式。但为了保证爬虫顺利采集数据,需要防范网站的反爬虫机制,降低IP被限制的风险,这样才能提高爬虫工作的效率。那么,如何防止网络爬虫被限制呢?下面介绍几种有效…...
『 Linux 』基于阻塞队列的生产者消费者模型
文章目录 生产者-消费者模型概述生产者消费者模型的高效性虚假唤醒信号丢失生产者消费者模型的模拟实现参考代码 生产者-消费者模型概述 生产者消费者模型是一种多线程设计模式,常见于解决多个生产者线程和多个消费者线程之间如何安全有效地共享数据; 该模型中存在三种关系,两个…...
vite+typescript项目 报错:找不到模块“./*.vue”或其相应的类型声明——解决方案
declare module *.vue {import type { DefineComponent } from vueconst vueComponent: DefineComponent<{}, {}, any>export default vueComponent }...
连锁企业组网的优化解决方案
对于连锁企业来说,建立高效的网络组网很重要,因为它直接影响到各分支机构之间的信息共享、管理效率和业务流程的顺畅。一个理想的解决方案需要从多个角度入手,以确保网络的稳定性、安全性和可扩展性。 首先,需要选择合适的网络拓扑…...
网络通信---UDP
前两天做了个mplayer项目,今日继续学习 网络内容十分重要!!! 1.OSI七层模型 应用层:要传输的数据信息,如文件传输,电子邮件等(最接近用户,看传输的内容类型到底是什么) …...
从零开始学习网络安全渗透测试之基础入门篇——(四)反弹SHELL不回显带外正反向连接防火墙出入站文件上传下载
一、反弹SHELL 反弹SHELL(Reverse Shell)是一种网络攻击技术,它允许攻击者在一个被入侵的计算机上执行命令,即使该计算机位于防火墙或NAT(网络地址转换)之后。通常,当攻击者无法直接连接到目标…...
Nginx(1)
文章目录 概述基本的HTTP服务器功能其他 HTTP 服务器功能邮件代理服务器功能TCP/UDP代理服务器功能架构和可扩展性 Nginx特性web服务器负载均衡邮件代理服务器 小结 概述 Nginx是http和反向代理服务器,邮件代理服务器,以及lgor Sysoev最初编写的通用TCP…...
C# 构建观测者模式(或者为订阅者模型)
前言: 观测者模型的基本理念,就是,我有一个公共的事件,定义好他的事件的触发、数据接口。然后,通过增加订阅者(实例)来订阅这个事件的,或者说观察这个事件。如果事件发生࿰…...
MyBatis入门如何使用操作数据库及常见错误(yml配置)
一,什么是MyBatis 是一款优秀的持久层框架,用于简化jdbc的开发 持久层:指的就是持久化操作的层,通常也就是数据访问层(dao),也就是用来操作数据库。 也就是MyBatis是让你更加简单完成程序与数…...
大数据信用查询什么样的平台比较靠谱?
随着互联网的发展和普及,大数据技术逐渐应用到各行各业中,其中之一就是信用查询领域,大数据信用查询平台能够为用户提供全面、准确的大数据信用评估,然而,由于市场上出现了许多不同的大数据信用查询平台,我…...
后端程序员常犯的错误-本地缓存相关bug和技术思考
1 springboot集成本地缓存基本常识: SpringBoot集成本地缓存性能之王Caffeine示例详解 SpringBoot 缓存之 Cacheable介绍 2 线上问题 2.1 发现过程 接口内的rpc调用报错,error级别的日志被监控平台报警。 2.2 故障排查 2.2.1 代码 Cacheable(cach…...
【收集表单数据】
07 【收集表单数据】 在 React 里,HTML 表单元素的工作方式和其他的 DOM 元素有些不同,这是因为表单元素通常会保持一些内部的 state。例如这个纯 HTML 表单只接受一个名称: <form><label>名字:<input type"text"…...
【前端面试】九、框架
目录 1 Vue2 实现方式 2 Vue3 实现方式 3 React 实现方式 4 Angular 实现方式 1 Vue2 实现方式 Vue2 是目前仍被广泛使用的前端框架之一,其特点包括响应式数据绑定、组件化开发等。 响应式系统:Vue2 使用 Object.defineProperty 来实现数据的响应式。…...
水泥电阻在电源电路中的作用
水泥电阻是将电阻线绕在无碱性耐热瓷件上,外面加上耐热、耐湿及耐腐蚀之材料保护固定并把绕线电阻体放入方形瓷器框内,用特殊不燃性耐热水泥充填密封而成。水泥电阻的外侧主要是陶瓷材质(一般可分为高铝瓷和长石瓷)。 水泥电阻器…...
报销管理软件怎么选?主流的10款对比
国内外排名前十的报销软件大对比:合思、Zoho Expense、金蝶财务报销系统、每刻报销、慧算账、Expensify、齐业成、汇联易、分贝通、QuickBooks Online。 在小型企业中,报销管理可能还可以由财务人员手工完成。然而,对于中到大型企业和快速发展…...
人工智能对就业产生怎样的影响?
在这个飞速发展的时代,人工智能(AI)如同一股不可阻挡的潮流,深刻地影响着我们的工作方式和生活模式。它既是技术革命的产物,也是推动社会进步的重要力量。然而,随着AI技术的普及和应用,关于其对…...
Vue Router 路由守卫详解
Vue Router 的路由守卫功能使我们能够在路由导航的不同阶段执行代码,提供了极大的灵活性和控制力。路由守卫可以帮助我们在用户导航到特定路由之前、之后或取消导航时执行逻辑,例如权限验证、数据获取或取消操作等。 路由守卫类型 Vue Router 提供了以下几种类型的路由守卫…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
