SQLBench: A Comprehensive Evaluation for Text-to-SQL Capabilities of Large Language Models

本文针对现有 Text-to-SQL 评估中缺乏共识和细分任务分析的不足,构建了新数据集并设计了五项评估任务,以全面评估大语言模型在该任务中的认知能力并提出针对性的优化方案。

Bin Zhang, Yuxiao Ye, Guoqing Du, Xiaoru Hu, Zhishuai Li, Chi Harold Liu, Zhiwei Xu, Guoliang Fan, Rui Zhao, Ziyue Li, Hangyu Mao

发布于 2026-03-20
📖 1 分钟阅读☕ 轻松阅读

Each language version is independently generated for its own context, not a direct translation.

这篇论文就像是一份**“大语言模型(LLM)的 SQL 能力体检报告”**。

想象一下,你有一个非常聪明的**“翻译官”(大语言模型),它的工作是把人类随口问的“大白话”(比如:“帮我查一下上个月卖得最好的手机是哪款?”)翻译成数据库能听懂的“专业指令”**(即 SQL 代码,比如 SELECT ... WHERE ...)。

虽然现在的翻译官越来越聪明,但研究人员发现,大家还没搞清楚到底怎么教它们翻译得最好,也不知道它们到底哪里强、哪里弱。于是,作者们搞了一个叫 SQLBench 的“考场”,给这些 AI 模型做了一次全方位的深度体检。

以下是这篇论文的核心内容,用大白话和比喻来解释:

1. 为什么要搞这个“新考场”?(数据集 BigTable)

以前的考试(比如 Spider 和 BIRD 数据集)就像是用老题考学生。现在的 AI 太聪明了,很多是在网上刷过这些老题的“题库”,考试时直接背答案,分数很高,但换个新环境就傻了(这叫过拟合)。

  • 比喻:就像学生死记硬背了“苹果是红色的”,结果遇到“青苹果”就不知道了。
  • 做法:作者们重新设计了一套**“新题库”(BigTable)**。他们把原来的题目改头换面,换了数据库的名字、列的名字,甚至增加了更复杂的表格连接。这就好比把“苹果是红色的”改成了“在某种特定光照下,青苹果看起来像绿色的”,强迫 AI 真正理解逻辑,而不是死记硬背。

2. 考了什么?(五大任务)

作者没有只考“翻译”这一项,而是把整个翻译过程拆成了五个环节,看看 AI 在每个环节的表现:

① 翻译任务 (Text-to-SQL)

  • 考什么:给大白话,让 AI 写代码。
  • 发现:怎么“出题”(提示词 Prompt)很有讲究。
    • 比喻:就像你给厨师下订单。如果你只说“做个菜”,厨师可能乱做;如果你说“用 Markdown 格式,列出食材,只要结果不要废话”,厨师做得更准。
    • 结论:作者发现了一种**“万能菜单”(SimpleDDL-MD-Chat)**,用这种格式给 AI 下指令,翻译准确率最高。

② 纠错任务 (SQL Debugging)

  • 考什么:AI 写错了代码,能不能自己发现并改对?
  • 发现
    • 比喻:AI 写错了代码,就像学生做错题。如果你只告诉它“错了”,它可能还是改不对;但如果你告诉它“你选错了表格”或者“你漏了一个条件”,它就能立刻改对。
    • 结论“细节越丰富,改得越对”。给 AI 提供详细的错误分析(比如是表选错了,还是条件写错了),它的自我修正能力会大幅提升。而且,改 1-2 次效果最好,改多了反而没提升。

③ 优化任务 (SQL Optimization)

  • 考什么:代码写对了,能不能写得更快、更省资源?
  • 发现:AI 在这方面表现一般
    • 比喻:让 AI 把“走路”改成“跑步”,它可能为了跑得快,结果摔倒了(把对的代码改错了)。或者它虽然改得快了,但提升微乎其微。
    • 结论:目前的 AI 还不太擅长在保持正确的前提下优化代码效率,这还是个难点。

④ 反向翻译 (SQL-to-Text)

  • 考什么:给一段代码,让 AI 解释成大白话。
  • 发现通用型 AI(像 ChatGPT 这种啥都懂的)比专用型 AI(专门写代码的)解释得更好。
    • 比喻:一个精通各种学科的教授(通用模型)解释代码逻辑,比一个只会写代码的程序员(专用模型)讲得更通俗易懂。

⑤ 找钥匙任务 (Schema Linking)

  • 考什么:数据库里有成千上万个表,AI 能不能从问题里找到需要用到的那几个表?
  • 发现“外键”信息(Foreign Keys)很重要
    • 比喻:就像在迷宫里找路,如果给你一张标明了“路标连接关系”的地图(外键),你就不会迷路。加上外键信息,AI 找对表格的概率大增。
    • 结论:对于写代码的模型,用一种叫"PreSQL"的方法最好;对于通用模型,结合“少样本学习”(给几个例子)效果最好。

3. 核心结论(给开发者的建议)

  1. 提示词很重要:别乱写指令,用作者推荐的“万能菜单”格式,效果立竿见影。
  2. 不要只靠一次生成:让 AI 自己检查错误,并且把错误原因说清楚(比如“你漏了表”),它能改得更好。
  3. 模型要选对
    • 如果是写代码、查错,用专门的代码模型(如 SQLCoder)。
    • 如果是解释代码、理解语义,用通用大模型(如 ChatGPT, InternLM)。
  4. 外键是神器:在提示词里把数据库表之间的连接关系(外键)告诉 AI,它能更准确地找到需要的数据表。

总结

这篇论文就像给 AI 做了一次**“全科体检”。它告诉我们:现在的 AI 在翻译“人话”到“代码”上已经很强了,但要想让它更可靠,我们需要给更清晰的指令**、提供更详细的错误反馈,并且根据任务类型选择合适的模型。这为未来开发更聪明的数据库助手指明了方向。