探索大模型:袋鼠云在 Text To SQL 上的实践与优化

Text To SQL 指的是将自然语言转化为能够在关系型数据库中执行的结构化查询语言(简称 SQL)。近年来,伴随人工智能大模型技术的不断进步,Text To SQL 任务的成功率显著提升,这得益于大模型的推理、理解以及指令遵循等能力。

对于大数据平台来说,集成 Text To SQL 功能意义非凡。首先,这能够大幅优化用户体验;其次,Text To SQL 功能能够提高数据开发人员的工作效率,他们能够凭借自然语言描述来完成 SQL 任务的开发,进而极大地节省学习和编写复杂 SQL 语句的时间;最后,Text To SQL 功能降低了数据库查询的门槛,使得更多非技术人员能够参与到数据库查询工作中,让更多人得以享受大数据带来的便利。

本文将探讨袋鼠云在 Text To SQL 领域的探索与实践,分享如何实现更高效、更准确的自然语言到 SQL 的转换。

基于 LLM 实现 Text To SQL

设计基于大模型(LLM)的 Text To SQL 系统是一项复杂且精细的任务,包括多个步骤和环节,每个步骤都需要我们精心设计和处理。首先,我们需要将数据库中表的元信息进行组织。此步骤涉及到将每一个表的详细信息,如字段名称、类型、关系等,写入到向量数据库中,这样就可以为后续的 SQL 生成提供必要的信息,这一步对于后续的 SQL 生成至关重要。

接着,我们需要对用户输入的自然语言加以理解。在这一步,我们将会运用先进的 embedding 模型。凭借这种模型,能够将用户输入的语言实施向量化处理,把每一个词或者词组转化为一个具备特定维度的向量。随后,我们会前往向量数据库中展开查找,匹配相关的表元数据信息,如此一来,我们便能知晓用户的查询意图与哪些表存在关联。

最后,我们把上一步匹配所得的表元数据信息与用户的问题加以合并,生成最终的 prompt。此 prompt 包括了全部所需的信息,涵盖角色表述、用户的初始问题、我们匹配到的相关表元数据信息以及一些约束条件。而后,我们把这个 prompt 交付给 LLM 模型,让模型依据这些信息生成最终的 SQL 查询语句。这一过程需要大模型(LLM)强大的计算能力以及精准的理解能力,以保障生成的 SQL 语句能够确切地反映用户的查询意图。

file

在数栈中实现 Text To SQL

● 表 schema 写入向量数据库

file

为了便于将数据库元数据置入向量数据库,在数栈中,我们研发了能够一键导入数据库表元数据信息的功能,并且支持自动刷新,如上图所示。

在此过程里,最为重要的当属如何对表的元数据信息进行组织,这一步极为关键,因为它会直接作用于 SQL 生成的准确性。我们所设计的表元数据信息组织格式如下:

table_name(column_name column_type column_comment,[...]), table_comment=""

● 根据用户问题匹配相关表元数据

这一步所面临的关键问题在于如何精准匹配到与用户输入问题相关的所有表元数据信息。为此,我们选用了对中文支持良好的 bge-large-zh-v1.5 embedding 模型,来对用户输入的问题进行向量化处理,以便充分领会用户的意图。

而在检索元数据信息方面,我们采用了混合检索的模式,即将向量化检索与全文搜索相结合。具体来说,首先依据用户问题生成的向量,在向量数据库中匹配出 TopK 条信息;接着运用 bm25 算法对表元信息进行一次全文搜索并获取结果;最后将向量检索和全文搜索所获取的结果予以合并,并进行一次相关性排序,从而得到最终的结果。

● 生成 Prompt

构建请求大模型的 Prompt。这里分享一个小技巧,就是使用 XML 标签来分隔 Prompt 中的每一部分内容。这种方法非常有效,因为大语言模型已经接受了大量包含 XML 格式的网页内容的训练,因此能够理解其结构,这样就能很好的帮助大模型完整识别到 Prompt 中的每一部分。

如下是我们定义生成 Text To SQL 的 Prompt 模版, XML 标签中包含和用户问题相关的表元数据信息。 XML 标签中定义了角色和一些约束信息。

<context>表结构信息如下:{{表结构信息}}
</context>
<objective>你是一个高级SQL生成器,能够根据不同的SQL方言生成相应的SQL语句。你需要将用户输入的自然语言转化为SQL,请按照以下步骤操作:1. 请一步步思考并仔细分析用户的自然语言输入,确保充分理解用户的意图。2. 识别目标数据库类型为{{SQL方言}} SQL3. 考虑该数据库类型的特定语法和函数。4. 根据理解的用户意图,设计SQL查询的基本结构。5. 应用数据库特定的语法规则,对基本结构进行调整。6. 优化查询以提高性能(如适用)。7. 生成最终的SQL语句。在生成SQL时,请特别注意以下几点:- 使用{{SQL方言}} SQL特有的函数和语法结构 - 考虑该数据库类型的查询优化技巧 - 确保生成的SQL语句在语法和逻辑上的正确性如果用户的请求不明确或需要额外信息,请提出澄清性问题。
</objective>

● Prompt 构建完成后请求 LLM,生成 SQL

Prompt 构建完成后将 Prompt 发给大模型(LLM)执行,经过大模型(LLM)的推理能力生成 SQL。

file

Text To SQL 的优化手段

上文介绍了 Text To SQL 的一般流程,在这个流程中还可以加入一些优化手段来进一步提高生成 SQL 的准确率,下面分享两个优化技巧。

● Prompt Engineering - 动态少样本

Medprompt 是微软提出的一种极为有效的提示策略,动态少样本则属于 Medprompt 提示策略中的一项技巧。使用动态少样本可以进一步挖掘大模型的能力,提升响应的准确率。

在 Text To SQL 中如何使用动态少样本,首先可以结合自己的业务场景写出一些具有针对性的 SQL 生成问答对,然后将生成的这些问答对写入到向量数据库中,构建 Prompt 时根据用户输入问题进行一次向量检索然后将结果写入到 Prompt 中。

大模型存在不能理解某些领域的专有词汇问题,这个问题也可以通过这种方法解决,对于不能识别的词汇语句可以提前生成 SQL 生成问答对,生成 Prompt 时进行动态匹配,作为上下文发送给 LLM,这样 LLM 就能理解了。

● 模型微调

大模型(LLM)自身已然拥有 Text To SQL 的能力,而且通常模型规模越大,Text To SQL 的能力便越强。不管是大模型还是小模型,均能够通过微调来进一步增强 Text To SQL 的能力。当下,与 Text To SQL 相关的开源数据集众多,例如 WikiSQL、Spider 等等。

目前我们所采用的模型为阿里开源的通义千问 Qwen1.5-14B-Chat ,并运用 Spider 数据集进行了微调,模型微调前后在 Spider 数据集上的评测数据如下:

file

Text To SQL 在数栈中的应用

数栈作为一个大数据开发平台,始终专注于推动技术创新,提升用户体验。为了更进一步提高开发人员的工作效率并简化数据处理流程,数栈开发团队研发了「栈语妙编」智能助手。

「栈语妙编」智能助手能够把用户的自然语言描述转换为 SQL 语句,开发人员只需将待开发的 SQL 任务以自然语言进行描述,「栈语妙编」助手便会生成相应的 SQL ,如此一来,显著提升了开发人员的工作效率,使其能够将更多精力聚焦于数据分析和业务逻辑方面。

file

「栈语妙编」智能助手不仅可以根据自然语言生成 SQL,还可以对已有的 SQL 任务进行智能优化、SQL 纠错、代码补全和添加注释。

file

指标平台在数据驱动决策中扮演着至关重要的角色,为了使指标平台进入到一个新的智能化阶段,我们正在积极结合大模型(LLM)来提升指标平台的易用性、智能化程度和降低使用门槛,Text To SQL就是其中之一。

「袋鼠云指标管理平台」引入 Text To SQL 技术后,用户可以通过日常使用的自然语言来查询复杂的指标数据,并能基于查询结果进行深入分析,而无需掌握专业的 SQL 语法或了解底层数据结构。

file 《行业指标体系白皮书》下载地址:https://www.dtstack.com/resources/1057?src=szsm

《数栈产品白皮书》下载地址:https://www.dtstack.com/resources/1004?src=szsm

《数据治理行业实践白皮书》下载地址:https://www.dtstack.com/resources/1001?src=szsm

想了解或咨询更多有关大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=szcsdn

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

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

相关文章

自闭症学校排名前十:为星儿点亮未来

在自闭症教育领域&#xff0c;有许多优秀的学校和机构为自闭症儿童提供着专业的帮助和支持。 星贝育园&#xff1a;以其独特的教育理念和个性化的教学方法脱颖而出。学校拥有一支经验丰富、富有爱心的教师团队&#xff0c;为孩子们提供全方位的关爱和教育。注重培养孩子的综合能…

手机通讯录大营救,恢复sim卡联系人的3个重要方法

在数字化世界的浩瀚海洋中&#xff0c;手机通讯录就像一艘承载着人际关系的生命之船。然而&#xff0c;当这艘船遭遇风浪&#xff0c;即sim卡上的联系人信息意外丢失时&#xff0c;我们该如何进行一场惊心动魄的大营救&#xff0c;找回那些珍贵的联系人呢&#xff1f;别担心&am…

Backend - C# 的日志Lognet4

目录 一、安装 log4net 插件 &#xff08;一&#xff09;作用 &#xff08;二&#xff09;操作 &#xff08;三&#xff09;注意 二、配置 &#xff08;一&#xff09;配置AssemblyInfo.cs &#xff08;二&#xff09;配置log4net.config 1. 创建log4net.config文件&#xff08…

空间自回归模型及 Stata 具体操作步骤

目录 一、理论原理 二、数据准备 三、程序代码及解释 四、代码运行结果 一、理论原理 空间自回归模型&#xff08;Spatial Autoregressive Model&#xff0c;SAR&#xff09;是一种用于分析具有空间相关性的数据的统计模型。它假设观测值之间的相关性不仅取决于传统的时间或…

xxl-job从2.3.0升级到2.4.1版本遇到的问题及解决方法

一、maven升级版本 <!-- xxl-job包 --> <dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.4.1</version> </dependency> 二、在nacos对应服务的配置文件增加accessToken配…

精益创业方法论在创业实践中的应用:以乔布斯视角探索创新与变革的艺术——张驰咨询

史蒂夫乔布斯以其非凡的愿景、不懈的迭代精神与对产品极致的追求&#xff0c;成为无数创业者心中的灯塔。本文将借鉴乔布斯的创新思维与精益创业方法论相结合&#xff0c;构建一套融合理论与实践的深度框架&#xff0c;旨在指导创业者在不确定的市场环境中高效探索、快速验证并…

用C# 代码调整16位整数大小端的4种方法

四种方法: short BLC(short s) {byte high (byte)((s - s % 256) / 256); //数字减去 低8位, 得到的数字再除以256得到高8位byte low (byte)(s % 256); //数字对256取余数, 得到低8位byte[] change1 { high, low };return BitConverter.ToInt16(change1); }short BLC2(sh…

使用ffmpeg将一个目录下的mkv格式的视频文件转换成mp4格式

最近学剪辑&#xff0c;从BT种子下载的素材资源都是mkv格式的&#xff0c;不能直接导入到视频剪辑软件中。这种情况下需要用一些格式转换工具进行转换&#xff0c;也可以使用ffmpeg进行编辑。 ffmpeg是一个命令行工具&#xff0c;用来对本地的音频视频软件进行编辑。ffmpeg我也…

【动态规划】回文串问题

一、经验总结 对于回文串问题&#xff0c;传统的以i位置为结尾的状态表示已经不能满足要求&#xff0c;无法推导状态转移方程。应该创建一个二维dp表&#xff0c;将所有子串[i, j]的状态表示出来二维dp表的初始化和填表顺序略微复杂&#xff0c;有时需要借助网格图像分析 二、…

Web安全:SQL注入

一、SQL注入三要素 1、用户可以对输入的参数值进行修改。 2、后端不对用户输入的参数值进行严格过滤。 3、用户修改后的参数值可以被带入后端中成功执行&#xff0c;并返回一定结果。 二、SQL注入原理 简单来说&#xff0c;用户输入的值会被插入到SQL语句中&#xff0c;然后…

秋招突击——7/10——复习{}——新作{在排序数组中查找元素的第一个最后一个位置、搜索旋转排序数组}

文章目录 引言复习新作在排序数组中查找元素的第一个和最后一个位置个人实现参考实现 搜索旋转排序数组个人实现参考实现 总结 引言 复习 新作 在排序数组中查找元素的第一个和最后一个位置 题目链接 注意 非递减序列》元素是递增或者相等&#xff0c;并不是严格递增的找到…

什么软件可以AI生成PPT?交给这5款AI PPT工具就完事

话说在当下快节奏的工作中&#xff0c;PPT制作几乎已经成为不可或缺的一部分~每天不是在做PPT的路上&#xff0c;就是在改PPT的途中。 好在幸运的是&#xff0c;现在可有不少好用的AI PPT制作工具能够来帮助我们轻松应对这一难题&#xff01;今天就来给大家分享5款实在又百搭的…

Autosar网络管理:发出第一帧网络管理报文的方法

Autosar网络管理:发出第一帧网络管理报文的方法 1. 为什么要第一帧发出网络管理报文 很多OEM要求CAN网络管理第一帧发出的是网络管理报文,目的是为了快速唤醒CAN网络 2. 节点外发第一帧报文不是网络管理报文的原因 首先根据AUTOSAR CANNM规范要求,节点要能够发出网络管理…

TCP协议双向网络通讯---Python实现

本篇文章是博主在人工智能、网络通讯等领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅解。文章分类在Python…

捷配笔记-PCB阻焊颜色对产品有什么影响?

阻焊层也称为阻焊层或阻焊剂。它是一种薄的聚合物层&#xff0c;应用于&#xff08;PCB&#xff09;。阻焊层的目的是保护PCB表面&#xff0c;并有助于防止焊桥。焊桥是两个导体之间的无意连接&#xff0c;通常是由于存在一小块焊料。需要注意的是&#xff0c;阻焊层被视为其单…

electron实现右键菜单保存图片功能

1.创建窗口&#xff0c;加载页面&#xff0c;代码如下&#xff1a; //打开窗口const {ipcMain, BrowserWindow} require("electron") const saveImage require("../ipcMain/saveImage") let win null; ipcMain.handle(on-open-event, (event, args) &g…

数字信号处理及MATLAB仿真(5)——z变换

采样的其他概念咱们后面再慢慢的讲述吧&#xff0c;先把z变换的程序给大家展示一下&#xff0c;总的来说呢&#xff0c;就用一个函数——ztran就行了。在 MATLAB 中&#xff0c;可以使用 ztrans 函数来进行 Z 变换。ztrans 函数用于对离散时间信号或系统进行 Z 变换&#xff0c…

mysql中select语句的执行顺序

执行顺序是什么&#xff1f; Form 这一阶段读取表的数据&#xff0c;并准备执行后续的操作。如果有多表连接&#xff0c;这一步也会涉及连接操作&#xff08;INNER JOIN、LEFT JOIN、RIGHT JOIN、CROSS JOIN 等&#xff09;。 ON 在进行表连接时&#xff0c;使用 ON 关键字指…

C++入门 模仿mysql控制台输出表格

一、 说明 控制台输出表格&#xff0c;自适应宽度 二、 源码 #include <iostream> #include <map> #include <string> #include <vector>using namespace std;void printTable(vector<vector<string>> *pTableData) {int row pTableDa…

VS2022 git拉取/推送代码错误

第一步&#xff1a;打开VS2022 第二步&#xff1a;工具->选项->源代码管理->Git 全局设置 第三步&#xff1a;加密网络提供程序设置为&#xff1a;OpenSSL 完结&#xff1a;