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

news2024/11/17 7:44:05

论文: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.coloradmin.cn/o/1800004.html

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

相关文章

企业费用标准如何制定?

在当前宏观经济环境和市场竞争日益激烈的背景下,国内很多企业的费用管理流程依旧面临诸多挑战。特别是制造业、零售业等人员众多的企业,如何通过制定精细化、自动化的企业费用标准来实现降本增效,已经成为企业财务流程优化的首要目标。 企业…

【Microelectronic Systems】期末速通

PART1 嵌入式系统概述与玩转mbed 1 嵌入式系统,微控制器,与ARM 1.1什么是嵌入式系统? 微处理器不仅仅存在于通用计算机中,也可以安置在一些不需要计算的设备内部,比如洗衣机,摄像机。微处理器常常可以控制…

k8s小型实验模拟

(1)Kubernetes 区域可采用 Kubeadm 方式进行安装。(5分) (2)要求在 Kubernetes 环境中,通过yaml文件的方式,创建2个Nginx Pod分别放置在两个不同的节点上,Pod使用hostPat…

Ubuntu 20.04安装CMake 3.22.6版本

Ubuntu 20.04通过apt安装的cmake版本是3.16.3,默认安装到/usr/bin/cmake路径。 $ cmake Command cmake not found, but can be installed with:sudo snap install cmake # version 3.29.3, or sudo apt install cmake # version 3.16.3-1ubuntu1.20.04.1See sna…

AI做的2024年高考数学试卷,答案对吗?

2024年高考数学考试已经结束,现在呈上数学真题及AI给出的解答。供各位看官欣赏。 总的来说,人工做题两小时,AI解答两分钟。 但是,AI做的答案是否正确,那就要各位看官来评判了! 注:试卷来源于…

MTK联发科MT6897(天玑8300)5G智能移动处理器规格参数

天玑 8300 采用台积电第二代 4nm 制程,基于 Armv9 CPU 架构,八核 CPU 包含 4 个 Cortex-A715 性能核心和 4 个 Cortex-A510 能效核心,CPU 峰值性能较上一代提升 20%,功耗节省 30%。 此外,天玑 8300 搭载 6 核 GPU Mal…

【Linux】Centos7升级内核的方法:yum更新(ELRepo)

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 🤓 同时欢迎大家关注其他专栏,我将分享Web前后端开发、人工智能、机器学习、深…

【面试八股总结】内存页面置换算法

参考资料:小林coding、阿秀 缺页中断 在 CPU 里访问一条 Load M 指令,然后 CPU 会去找 M 所对应的页表项。如果该页表项的状态位是「有效的」,那 CPU 就可以直接去访问物理内存了,如果状态位是「无效的」,则 CPU 则会…

OceanBase 4.3 特性解析:列存技术

在涉及大规模数据的复杂分析或即时查询时,列式存储是支撑业务负载的关键技术之一。相较于传统的行式存储,列式存储采用了不同的数据文件组织方式,它将表中的数据以列为单位进行物理排列。这种存储模式允许在分析过程中,查询计算仅…

Qt之QGraphicsView —— 笔记3:矩形图元连接(附完整源码)

效果 完整源码 注意:在ui文件中拖入一个QGraphicsView类窗口控件,然后用MyGraphicsView提升该类。 main.cpp #include "widget.h" #include <QApplication>int main(

SpringCloud Consul基础入门与使用实践总结

【1】Consul简介 官网地址&#xff1a;https://www.consul.io/intro/index.html 下载地址&#xff1a;https://www.consul.io/downloads.html 中文文档&#xff1a;https://www.springcloud.cc/spring-cloud-consul.html ① 基础概念 Consul 是一套开源的分布式服务发现和…

Apache安装教程

目录 一、Apache知识点 Apache服务简介 Apache下载网址 Apache的主要特点 二、Apache服务的搭建 1. 关闭防火墙 2. 安装依赖环境以及编译工具 3. 将apache安装包拖入xshell内 4. 解压压缩包 5. 进入httpd主包 6. 指定安装路径&#xff0c;启用字符集支持等 7. 优化执…

工厂模式——工厂方法模式+注册表

工厂方法模式的瑕疵 在前一篇笔记中我们介绍了工厂方法模式&#xff0c;示例的类图如下&#xff1a; 考虑一种情况&#xff1a;现在要在程序运行时&#xff0c;根据外部资源&#xff0c;动态的实例化对象。也就是说在编译期我们无法知道要实例化的对象的类型。因此在实例化的过…

TP8 定时任务yzh52521/http-crontab 教程

官方文档&#xff1a; https://www.thinkphp.cn/ext/36 源码仓&#xff1a; http-crontab: 接口化秒级定时任务管理 GitHub - yuanzhihai/http-crontab: 接口化秒级定时任务管理 一、composer 安装 composer require yzh52521/http-crontab 二、启动yzh52521/http-cronta…

树的遍历详解

目录 树的静态写法 树的先根遍历 树的层次遍历 从树的遍历看DFS和BFS DFS与先根遍历 BFS与层次遍历 树的静态写法 这里讨论的树是一般意义上的树&#xff0c;即子结点个数不限且子节点没有先后次序的树。 建议使用静态写法进行结点的定义 struct node{typename data;i…

UI框架与MVC模式详解(1)——逻辑与数据分离

【效率最高的耦合方式】 以实际的例子来说明&#xff0c;更容易理解些。 这里从上到下&#xff0c;从左到右共有8个显示项&#xff0c;如果只需要显示这8个&#xff0c;不会做任何改变&#xff0c;数据固定&#xff0c;那么我们只需要最常规的思路去写就好&#xff0c;这是最…

antdv 穿梭框

antd的穿梭框的数据貌似只接收key和title&#xff0c;而且必须是字符串&#xff08;我测试不是字符串的不行&#xff09;&#xff0c; 所以要把后端返回的数据再处理一下得到我们想要的数据 除了实现简单的穿梭框功能&#xff0c;还想要重写搜索事件&#xff0c;想达到的效果是…

时间序列新范式!多尺度+时间序列,刷爆多项SOTA

当我们面对复杂模式和多变周期的应用场景&#xff08;比如金融市场分析&#xff09;时&#xff0c;采用多尺度时间序列来做分析和预测是个更好的选择。 这是因为&#xff1a;传统时序方法通常只用固定时间窗口来提取信息&#xff0c;难以适应不同时间尺度上的模式变化。但多尺…

opencv实战小结-银行卡号识别

实战1-银行卡号识别 项目来源&#xff1a;opencv入门 项目目的&#xff1a;识别传入的银行卡照片中的卡号 难点&#xff1a;银行卡上会有一些干扰项&#xff0c;如何排除这些干扰项&#xff0c;并且打印正确的号码是一个问题 最终效果如上图 实现这样的功能需要以下几个步骤…

蓝桥云课第12届强者挑战赛

第一题&#xff1a;字符串加法 其实本质上就是一个高精度问题&#xff0c;可以使用同余定理的推论 &#xff08;ab&#xff09;%n((a%n)(b%n))%n; #include <iostream> using namespace std; const int mod1e97; int main() {string a,b;cin>>a>>b;ab;int …