解开基于大模型的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 提供了以下几种类型的路由守卫…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
