【Text2SQL 论文】MAC-SQL:多个 Agents 合作来解决 Text2SQL

论文:MAC-SQL: A Multi-Agent Collaborative Framework for Text-to-SQL

⭐⭐⭐⭐

arXiv:2312.11242, 北航 & Tencent

Code: MAC-SQL | GitHub

文章目录

    • 一、论文速读
    • 二、MAC-SQL
      • 2.1 Selector agent
      • 2.2 Decomposer agent
      • 2.3 Refiner agent
    • 三、指令微调的 SQL-Llama
    • 四、实验
    • 五、总结

一、论文速读

本文提出了一个使用多个 agents 进行互相合作的框架 MAC-SQL 来解决 Text2SQL 任务。

MAC-SQL 主要由 3 种 agents 组成:

  • Selector:通过去除掉 inference 时无关的信息来把一个大的数据库分解为更小的数据库
  • Decomposer:通过 prompt 的方法来把一个复杂的 question 分解为渐进性的几个可以被独立解决的 sub-questions
  • Refiner:用于检测和自动改正 SQL 的错误

原论文对三者的描述:

Specifically, the Decomposer disassembles complex questions into simpler sub-questions and addresses them sequentially through chain-of-thought reasoning. If required, the Selector decomposes a large database into smaller sub-databases to minimize interference from irrelevant information. Meanwhile, the Refiner utilizes an external tool for SQL execution, acquires feedback, and refines any incorrect SQL queries.

下面是基于三个 agents 来实现 MAC-SQL 的算法流程:

1717468121886(1)

二、MAC-SQL

2.1 Selector agent

The Selector agent is designed to automatically decompose a large database into smaller sub-databases to minimize interference from irrelevant information.

由于现实世界种的数据库特别大,包含了许多 tables 和 columns,一次 LLM 的 API Call 可能无法处理这些多的 schemas,因此需要使用 Selector 来去除掉无关信息并得到的一个较小的 schema。

如下是一个使用 Selector 的 prompt 示例:

20240604103503

可以看到,Selector 的 prompt 包含四部分:task desc、instruction、demonstrations 和一个 text example,期望的输出是一个 JSON,里面枚举了所有选择后的 tables,并将它们分成 3 类:

  • “keep_all”
  • “drop_all”
  • 一个相关的 column list

这个 JSON 中的 schema 输入给 Decomposer agent。

2.2 Decomposer agent

The primary purpose of the Decomposer is to systematically decompose complex questions into progressively refined sub-questions, which can then be solved individually.

当面对复杂问题时,生成的 SQL 经常会有缺陷,因此一个自然的想法就是像 CoT 一样将其分解为 sub-questions 再解决。

图示:

20240604104837

可以看到,最后一个 sub-question 就是原来的 user question 了,所以最后一步生成的 SQL 就是 Decomposer 输出的 SQL。

具体来说,Decomposer 可以用 CoT 或者 least-to-most 两种 prompt 策略来实现。

2.3 Refiner agent

The primary function of the Refiner is to detect and automatically rectify SQL errors.

对于一个 SQL,Refiner 首先从下面三个角度来诊断:

  • 句法正确性
  • 可执行性
  • DB 检索后是否为非空结果

如果检查通过,这个 SQL 被输出为最终答案,否则,就执行 correction 操作。之后,修正后的 SQL 仍需重新诊断,重复这个过程直至检查通过或者达到最大重复次数。

具体的 correction 过程包括基于原始 SQL 和错误反馈信息或修改引导信号进行推理,生成修改后的结果。

图示:

20240604110556

最后论文还指出,单靠一个 refiner agent 提供的帮助也是有限的,不可避免还存在一些错误的问题,这需要再系统层面进行更多的优化。

三、指令微调的 SQL-Llama

本文基于 Code Llama 7B,使用前面介绍的 3 个 agents 的指令数据进行微调,得到了 SQL-Llama,让 model 在 database simplification、question decomposition、SQL generation 和 SQL correction 方面的能力得到增强。

用于微调的数据是基于三个 agents 在 BIRD 和 Spider 数据集上得到的。

这个过程的关键挑战是:model 的训练过程需要平衡它的 complexity 和 performance。也就是需要在维持其较高的 performance 时有效处理 db 相关任务的复杂度。

四、实验

论文在 BIRD 数据集上做的测试,baseline 只选择了 LLM-based 的方案,并没有选择非 LLM 的 baseline。实验结果如下图所示:

20240604113131

论文还做了消融实验,证明了三个 agents 在提高 acc 方面都发挥了重要的作用。

另外论文还发现,ICL 中增加 demonstrations 的数量可以让效果更好。

论文最后还给出了 error cases 的统计分析,可以参考原论文。

五、总结

本论文利用多个 agents 合作的思路来解决 Text2SQL 任务,同时提供了一个开源的 SQL-Llama 模型,在 BIRD 数据集上实现了 SOTA 效果。

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

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

相关文章

2024.06.07【读书笔记】丨生物信息学与功能基因组学(第十一章 分子水平的系统发生和进化 第四部分)【AI测试版】

读书笔记四:《生物信息学与功能基因组学》第十一章第四部分 分子系统发生的专用名词与树的拓扑结构 在《生物信息学与功能基因组学》第十一章的第四部分,作者介绍了分子系统发生分析中的专用名词,并详细解释了系统发生树的拓扑结构和分支长…

【Python Cookbook】S02E04 文本模式的匹配和查找 match()、search()、findall() 以及 捕获组和 + 的含义

目录 问题解决方案讨论 问题 本文讨论一些按照特定的文本模式进行的查找和匹配。 解决方案 如果想要匹配的只是简单文字,通常我们使用一些内置的基本字符串方法即可,如:str.find(),str.startwith(),str.endswith() …

Day49 动态规划part08

LC139单词拆分(未掌握) 未掌握分析:将字符串s中的各个字符看成是背包,思考成了多重背包问题单词就是物品,字符串s就是背包,单词能否组成字符串s,就是问物品能不能把背包装满。拆分时可以重复使用字典中的单词&#xf…

转速传感器介绍

一、概述 RPM(Revolutions Per Minute)转速传感器是一种用于测量旋转机械设备转速的传感器。它可以检测旋转部件上的特定位置标记(如齿轮、凸起或磁铁),并根据这些标记的通过频率来计算转速。发电额定频率是50hz和60z…

ubuntu18.04环境下,arduino ide在打开串口监视器时报错

ubuntu18.04环境下,arduino ide在打开串口监视器时报错 Exception in thread “AWT-EventQueue-0” java.lang.UnsatisfiedLinkError: /home/lzx/.jssc/linux/libjSSC-2.8_x86_64.so: /home/lzx/.jssc/linux/libjSSC-2.8_x86_64.so: file too short 这个错误表明 li…

力扣1574.删除最短的子数组使剩余数组有序

力扣1574.删除最短的子数组使剩余数组有序 剩下有序 –> 前面一段 后面一段 有序 前面有序 后面有序 前面最后一项 < 后面第一项先反向遍历找到right的最小值然后正向遍历找left的最大值当nums[left] > nums[right]时 right class Solution {public:int findLen…

java线程变量共享

在Java中&#xff0c;线程变量共享可以通过几种方式实现&#xff1a; 1.实例变量&#xff1a;如果一个实例变量被多个线程共享&#xff0c;你需要确保适当的同步&#xff0c;以避免竞态条件。你可以使用synchronized关键字或者Lock接口来保护共享变量。 2.静态变量&#xff1a;…

openh264 降噪功能源码分析

文件位置 ● openh264/codec/processing/denoise/denoise.cpp ● openh264/codec/processing/denoise/denoise_filter.cpp 代码流程 说明&#xff1a;从代码流程可以看到&#xff0c;实现降噪的核心功能主要就是BilateralDenoiseLuma、WaverageDenoiseChroma两个函数。 原理…

SOA主要协议和规范

Web服务作为实现SOA中服务的最主要手段。首先来了解Web Service相关的标准。它们大多以“WS-”作为名字的前缀&#xff0c;所以统称“WS-*”。Web服务最基本的协议包括UDDI、WSDL和SOAP&#xff0c;通过它们&#xff0c;可以提供直接而又简单的Web Service支持&#xff0c;如图…

代码随想录算法训练营第十五天| 110.平衡二叉树、 257. 二叉树的所有路径、404.左叶子之和

110.平衡二叉树 题目链接&#xff1a;110.平衡二叉树 文档讲讲&#xff1a;代码随想录 状态&#xff1a;还可以 思路&#xff1a;计算左右子树的深度差&#xff0c;递归判断左右子树是否符合平衡条件 题解&#xff1a; public boolean isBalanced(TreeNode root) {if (root n…

覆盖路径规划经典算法 The Boustrophedon Cellular Decomposition 详解

2000年一篇论文 Coverage of Known Spaces: The Boustrophedon Cellular Decomposition 横空出世&#xff0c;解决了很多计算机和机器人领域的覆盖路径问题&#xff0c;今天我来详细解读这个算法。 The Boustrophedon Cellular Decomposition 算法详解 这篇论文标题为"C…

nginx配置正向代理忽略证书!!!!!

要绕过证书验证并忽略SSL证书检查&#xff0c;可以使用curl的-k或--insecure选项。这允许curl在连接到HTTPS站点时忽略证书错误。你可以这样做&#xff1a; curl -k https://220.181.49.193:10010/sms/11011200002020000001/flv/hls/11010000021321001788_1101000002132100178…

数字模拟EDA研发环境搭建

中小企业数字模拟EDA研发环境部署、集群搭建、网络配置、硬件咨询、数据备份、技术指导、环境生命周期维护等&#xff0c;Cadence、Synopsys、Mentor、Keysight、ANSYS&#xff0c;MATLAB、Xilinx等厂商软件工具安装调试。 EDA研发环境搭建经验交流&#xff0c;请加V

【Neo4j】Windows11使用Neo4j导入CSV数据可视化知识图谱

Windows11使用Neo4j导入CSV数据可视化知识图谱 序1. 安装JDK21&#xff08;1&#xff09;下载&#xff08;2&#xff09;安装&#xff08;3&#xff09;环境配置 2. 安装Neo4j&#xff08;1&#xff09;下载&#xff08;2&#xff09;解压安装&#xff08;3&#xff09;环境配置…

初识C++ · 模板进阶

目录 前言&#xff1a; 1 非类型模板参数 2 按需实例化 3 模板特化 4 模板的分离编译 前言&#xff1a; 前面模板我们会了简单的使用&#xff0c;这里带来模板的进阶&#xff0c;当然&#xff0c;也就那么几个知识点&#xff0c;并不太难。 1 非类型模板参数 先来看这样…

嵌入式移植jpeglib--Linux交叉编译ARM平台

一 、交叉编译jpeg库 1.下载源码tar.gz 2. 源码目录下执行 jpeglib配置文件 ./configure CCarm-none-linux-gnueabihf-gcc LDarm-none-linux-gnueabihf-ld --prefix/work/jpeg_arm_lib --exec-prefix/work/jpeg_arm_lib --enable-shared --enable-static --hostarm-none-linu…

经典文献阅读之--MGS-SLAM(单目稀疏跟踪和高斯映射与深度平滑正则化)

Tip: 如果你在进行深度学习、自动驾驶、模型推理、微调或AI绘画出图等任务&#xff0c;并且需要GPU资源&#xff0c;可以考虑使用UCloud云计算旗下的Compshare的GPU算力云平台。他们提供高性价比的4090 GPU&#xff0c;按时收费每卡2.6元&#xff0c;月卡只需要1.7元每小时&…

CiteScore 2023发布,AI Open斩获45分,位列全球计算机领域前1%

与影响因子&#xff08;IF&#xff09;一样&#xff0c;引用分数&#xff08;CiteScore&#xff09;同样是衡量学术期刊影响力的重要指标之一&#xff0c;且大有赶超前者的势头。 6 月 6 日&#xff0c;CiteScore 2023 正式发布&#xff0c;人工智能领域可自由访问的期刊平台 …

Java 8 中的 Stream API,用于处理集合数据

Java 8 引入了 Stream API&#xff0c;使得处理集合数据变得更加简洁和高效。Stream API 允许开发者以声明式编程风格操作数据集合&#xff0c;而不是使用传统的迭代和条件语句。 一、基本概念 1.1 什么是 Stream Stream 是 Java 8 中的一个新抽象&#xff0c;它允许对集合数…

CSRF 令牌的生成过程和检查过程

在 Django 中,CSRF 令牌的生成和检查过程是通过 Django 的 CSRF 中间件 (CsrfViewMiddleware) 和模板标签 ({% csrf_token %}) 自动处理的。以下是详细的生成和检查过程: CSRF 令牌的生成过程 用户访问页面: 当用户第一次访问页面时,Django 会为用户创建一个会话。如果用户…