【论文】Agentic NL2SQL to Reduce Computational Costs

Agentic NL2SQL to Reduce Computational Costs arxiv

一. 翻译摘要原文

将自然语言查询转换为SQL查询(NL2SQL 或 Text-to-SQL)最近得益于大型语言模型(LLMs)的发展而取得进展。 在大量SQL数据库上使用LLMs执行NL2SQL方法时,需要处理海量关于数据库的元信息,这会导致提示变得很长、令牌数量很多以及较高的计算成本。 为解决这一挑战,我们提出 Datalake Agent,这是一个代理系统,旨在让LLM更高效地解决NL2SQL任务。 与一次性在提示中加入所有元信息并调用LLM的直接求解器不同,Datalake Agent 采用交互循环来减少使用的元信息。 在这个循环中,LLM被置于一个推理框架中,只有选择性地请求解决表格问答任务所必需的信息。 我们在包含23个数据库、100个表格问答任务的集合上评估了 Datalake Agent。 Datalake Agent 将LLM使用的令牌数量最多减少了87%,从而在保持有竞争力性能的同时,实现了显著的成本降低。 arxiv


二. 方法动机

  1. 作者为什么提出这个方法?
  • 企业级环境中往往存在大量SQL数据库和表,若使用LLM做NL2SQL,必须把大量schema元信息送入模型,导致提示极长、调用成本高,这严重限制了实际落地。 arxiv
  • 作者希望在不显著牺牲准确率的前提下,大幅削减LLM调用时的令牌数,以降低在企业场景中运行NL2SQL系统的总体成本。 arxiv
  1. 现有方法的痛点/不足是什么?
  • 直接求解(Direct Solver):将"当前可见的所有数据库元信息"一次性塞进prompt,让LLM直接输出SQL。缺点:
    • 随可见表的数量增加,提示长度近似线性增长,导致成本和延迟急剧上升。 arxiv
    • 大schema下模型准确率下降,尤其在多表和复杂查询结构时性能劣化明显。 arxiv
  • Text2API 类方法:通过固定API端点请求数据,存在
    • 只能访问有限API暴露的信息,不能像SQL那样灵活检索所有数据。 arxiv
    • 对表规模大、结构复杂的数据湖适应性差。
  • 现有NL2SQL基准(如 Spider、Bird)通常只提供和当前问题相关的schema子集,无法模拟企业真实情况:模型名义上可以访问"整个数据库湖",但事先不知道哪些表和列真正相关。 arxiv
  1. 论文的研究假设或直觉是什么?
  • 大多数具体NL2SQL任务只需要数据库元信息的一个很小子集 ,如果让LLM在一个代理框架中分步思考、按需拉取信息,就能在几乎不损失准确率的前提下,显著减少令牌和成本。 arxiv
  • 通过"信息获取→迭代精炼→查询生成"的层级推理循环,比一次性把所有东西都给LLM更接近人类分析数据库的过程,也更有助于处理复杂查询。 arxiv

三. 方法设计

  1. 方法流程总结(pipeline)

输入

  • 自然语言问题 (q)(Table Question Answering)。
  • 一组可用的SQL数据库及其schema(表名、列名、类型等元信息),规模可达数百张表。 arxiv

核心思想 :不直接把所有schema送入LLM,而是通过一系列"命令式交互"让LLM逐步探索:先选数据库,再看相关表,再看必要列,最后在掌握的子schema上生成SQL。 arxiv

具体步骤:

(1)信息获取(Information Acquisition)

  • 系统为LLM暴露一组"工具式命令",典型包括:
    • GetDBDescription:返回各个数据库的高层描述(比如业务域、数据大致内容),用于帮助LLM先选择最可能相关的数据库。 arxiv
    • GetTables:给定一个具体数据库名,返回此数据库中所有表的名称和简短说明。 arxiv
    • GetColumns:给定一个表名,返回该表所有列名、数据类型及简要描述。 arxiv
  • 初始时,LLM只看到自然语言问题和可用命令的说明,而看不到任何具体schema细节arxiv
  • LLM基于问题内容,首先调用 GetDBDescription,选择1个或少数几个最相关的数据库,然后对这些库调用 GetTables,进一步筛选候选表。 arxiv
  • 对于候选表,再调用 GetColumns 获取更细粒度的schema信息,如主键、日期列、数值列等,为后续构造SQL做准备。 arxiv

(2)迭代精炼(Iterative Refinement)

  • LLM以"层级方式"推进:
    • 先在数据库层面决定用哪个DB或哪些DB;
    • 再在表层面缩小到几张候选表;
    • 最后在列层面 获取必要字段信息。 arxiv
  • 在这个过程中,LLM始终运行在一个"推理框架"里:
    • 每次调用工具后,模型会得到结构化返回结果(如表/列列表);
    • 模型基于当前已知信息更新自己的"内部计划"和"中间推理",决定下一步是:
      • 深入某个表查看更多列;
      • 回退到数据库层重新选择库;
      • 直接进入SQL生成阶段。 arxiv
  • 这一循环可以多次往复,直到模型认为已获取足够schema来写出正确SQL。论文中提到,为避免LLM陷入无限请求同类信息的循环,系统在同一任务最多允许10次请求,超过后强制要求LLM给出SQL结果。 arxiv

(3)查询生成(Query Formulation)

  • 当LLM判断信息已足够时,会调用最后一个专用命令:DBQueryFinalSQL,其角色是"请你现在根据已知schema和问题,生成最终SQL"。 arxiv
  • LLM输出的SQL会被 Datalake Agent 通过一个"访问层(access layer)"发送到真实数据库执行,并获取执行结果。访问层负责:
    • 面向多种数据库后端提供统一接口;
    • 保障系统模块化,未来新增数据库只需在访问层做最小改动。 arxiv
  • 最终系统返回给用户:
    • 生成的SQL语句;
    • SQL执行得到的表格答案。

输出

  • 正确的SQL查询(如果模型足够准确);
  • 对应的查询结果,用于Table-QA任务评估。 arxiv
  1. 模型结构与模块协作

论文不是新的神经网络结构,而是一个"基于LLM的代理系统框架",主要模块包括:

  • LLM 推理核心

    • 论文以 GPT-4-mini 作为主要模型,温度设为0.1,强调可替换为任何强NL2SQL能力的LLM。 arxiv
    • LLM负责任务理解、工具选择和SQL生成等所有"智能决策"。
  • 工具/命令接口模块

    • 对LLM暴露统一的"工具规范",包括 GetDBDescriptionGetTablesGetColumnsDBQueryFinalSQL 等;
    • 返回值格式严格结构化(如JSON),便于LLM解析和后续推理。
  • 迭代控制与状态管理模块

    • 负责记录当前任务中的所有工具调用历史和返回结果,即"已发现的schema子图";
    • 控制循环次数(例如最多10次信息请求),防止无限循环;
    • 将历史上下文(已经获取的DB、表、列信息)与用户问题一起打包进下一轮LLM调用。
  • 数据库访问层(Access Layer)

    • 接收 DBQueryFinalSQL 生成的SQL,负责在真实数据库执行;
    • 对不同DB系统做统一封装,保证扩展性和可维护性。 arxiv

模块协同方式:

  • LLM 通过工具接口向数据库访问层"间接"提问;
  • 迭代控制模块串联每一步LLM调用和工具返回,形成一个完整的推理-查询循环;
  • 访问层对外暴露统一执行界面,使系统可以无缝接入更多数据库。
  1. 公式/算法的通俗解释

论文没有严格的数学公式,而是描述了一个通用的层级搜索算法

  • 把"所有可见schema"看成一个巨大的搜索空间:
    • 第一层是数据库列表;
    • 第二层是每个数据库的表列表;
    • 第三层是各表内部的列列表。
  • 传统直接提示等价于"把整个搜索空间一次性铺开给模型",而 Datalake Agent 相当于:
    • 在树结构上进行有引导的深度/广度混合搜索
    • 每一步只展开最有用的节点(相关DB/表/列),并允许回退到上一层重选。
  • 这一策略在算法上实现了两点:
    • 避免全空间穷举,只访问必要节点;
    • 利用LLM推理能力控制搜索方向 ,而不是预先写死规则。 arxiv

四. 与其他方法对比

  1. 本方法和现有主流方法相比的本质不同
  • 主流 Direct Solver:
    • 一次性给全量schema + 问题 → 单轮推断出SQL;
    • 核心特征是"静态提示+单步决策"。 arxiv
  • Datalake Agent:
    • 起点是只给问题和"工具接口描述",不直接给schema;
    • 通过多轮交互,动态选择性地拉取小块schema,然后再生成SQL;
    • 核心特征是"动态信息获取 + 多步推理"。 arxiv
  1. 创新点
  • 提出一个通用的 agentic NL2SQL 框架 ,而不是简单的prompt工程,即让LLM在结构化工具环境中自主探索schema。 arxiv
  • 设计"信息获取--迭代精炼--查询生成"的三级推理流程,有效避免大schema下的令牌爆炸问题。 arxiv
  • 构建新的评测基准:23个数据库、319张表、100个手工设计的Table-QA任务,其中同时包含简单单表和复杂多表任务,更接近企业数据湖场景。 arxiv
  • 在数据库规模增长时,展示出较传统方法更平缓的性能下降曲线,同时令牌数和API成本显著降低。
  1. 适用场景
  • 企业级数据湖:多业务线、多数据库、多表的大型环境,如金融、电商、SaaS平台等。 arxiv
  • 需要长期运行的NL2SQL系统:对成本和延迟敏感,需要平衡效果与预算。
  • 查询复杂度高的BI分析、内部报表生成和交互式数据分析。
  1. 方法对比表
维度 直接提示(Direct Solver) Text2API 类方法 Datalake Agent
信息获取方式 一次性全schema输入 通过固定API获取少量数据 按需、多轮、分层获取schema
令牌/成本 随表数近线性增长,高 依赖API设计,中等 在大规模DB显著降低(最多减87%) arxiv
对复杂查询的表现 schema大时性能严重下降 受API限制,复杂性受限 在复杂多表任务上表现更稳、更优 arxiv
工程复杂度 实现简单 需要API设计和维护 需要实现代理框架与工具接口
适用数据库规模 小到中等 取决于API覆盖 中到超大规模数据库湖
主要缺点 成本高、不扩展 能力受限 可能出现重复请求和循环,需要上限控制 arxiv

五. 实验表现与优势

  1. 有效性验证方式
  • 数据与场景:
    • 使用 RelBench 中5个真实数据库,并扩展出18个模拟数据库,总计23个数据库、319张表。 arxiv
    • 设计100个Table-QA任务,覆盖简单单表和复杂多表查询,每个数据库约20个任务。 arxiv
  • 对比设置:
    • 三种数据库规模:42表、159表、319表(逐步增加可见表数量) arxiv
    • 两种方法:Direct Solver(基线) vs Datalake Agent(本文方法)。
  • 模型与参数:
    • 使用 GPT-4-mini,温度0.1;
    • 评估指标包括:SQL正确率、平均输入令牌数、折算成API成本。
  1. 关键结果与超越点
  • 令牌使用:
    • 在42张表时,Direct Solver 平均需要约7407个输入token,而 Datalake Agent 约3670个。 arxiv
    • 在319张表时,Direct Solver 上升到34602个token,而 Datalake Agent 约4264个,削减约87%。 arxiv
  • 成本:
    • 将平均token折算为1000个任务的API成本,42表时Direct约为Datalake的2倍,319表时高达约8倍,对o1模型来说差额超过450美元/1000任务。 arxiv
  • 性能(准确率):
    • 在小规模数据(42表)下,Direct Solver略优于Datalake Agent。 arxiv
    • 随着表数增加和任务复杂度上升,Direct Solver准确率下降更快,而Datalake Agent下降较慢,在大规模与复杂任务上整体表现更好。 arxiv
  1. 优势最明显的场景/数据集
  • 当表数从42增长到159、319时,特别是包含多表联结、复杂过滤和聚合的任务中,Datalake Agent在保持较低令牌的同时,准确率相对Direct Solver有更明显优势。 arxiv
  • 对企业真实类似的"全库可访问但不知哪些相关"的场景,Datalake Agent缩小搜索空间效果尤其显著。
  1. 局限性
  • 在部分任务中,LLM可能多次重复请求同一类信息,形成"自旋",需要通过"最多10次请求后强制输出SQL"的策略防止无限循环。 arxiv
  • 论文只在GPT-4-mini上评估,对其他模型(尤其更强或更弱的模型)泛化效果目前未知。 arxiv
  • 模拟数据库的部分是"只有schema、没有真实数据"的环境,可能与真实生产数据库存在差异。 arxiv

六. 学习与应用

  1. 是否开源及复现关键步骤
  • 论文正文未明确给出GitHub链接,推测暂不保证有官方开源实现。 arxiv
  • 自己复现时的关键步骤:
    1. 搭建数据库访问层:
      • 将企业内的多个SQL数据库统一抽象为"DB列表 + 表列表 + 列列表 + SQL执行接口";
      • 实现 GetDBDescriptionGetTablesGetColumnsDBQueryFinalSQL 四类接口逻辑。
    2. 设计LLM提示规范:
      • 明确告诉模型有哪些命令、每个命令输入输出格式;
      • 要求模型始终以结构化JSON形式回复(如 { "action": "...", "arguments": {...} })。
    3. 搭建代理循环:
      • 主循环接收模型输出,判断是工具调用还是最终SQL;
      • 执行工具,获取结果并追加到上下文,再调用LLM下一轮;
      • 限制最大循环次数(如10),防止死循环。
    4. 评估:
      • 构造代表性Table-QA任务集,检查SQL正确性与成本(令牌)。
  1. 实现时需注意的超参数、预处理、训练细节
  • 无需额外训练,属于"纯推理+提示工程"范式。 arxiv
  • 关键超参数:
    • LLM温度建议较低(论文用0.1),以减少不稳定行为; arxiv
    • 最大工具调用次数(如10),在复杂查询中可适当增大,但要防止成本反弹。
  • 数据预处理:
    • 对所有数据库统一提取schema元信息,并加上简短自然语言描述,帮助LLM理解每个表/列的大致语义;
    • 尽量避免过长、冗余的列名说明,控制每次工具返回内容长度。
  • 提示设计:
    • 清晰区分"思考部分"和"工具调用部分",要求模型在调用前先给出简要的自然语言计划(便于调试);
    • 强调"避免重复请求相同信息",可在系统提示中加入相关约束。
  1. 迁移到其他任务的可行性
  • 对任意"信息空间巨大、但每次任务只需要局部信息"的场景,都可以迁移这一框架:
    • 知识图谱问答:
      • GetTables / GetColumns 替换为 GetEntities / GetRelations,按需探索图结构再生成查询(如SPARQL)。
    • 文档检索+问答(RAG):
      • GetDBDescription 对应"文档库/主题概览",GetTables 对应"文档列表",GetColumns 对应"段落/章节摘要",最终生成检索+回答策略;
      • 让LLM先确定相关文档集,再按需拉取内容,避免一次性索引所有长文。
    • 多模态数据库(图像+表格等):
      • 通过工具接口暴露"图像集合""特征索引"等元信息,LLM按需选择查询对象。
  • 迁移时的关键是:
    • 用"工具+访问层"的方式,把底层复杂系统抽象为若干可调用接口;
    • 保留"信息获取--迭代精炼--结果生成"的三段式循环结构。

七. 总结

  1. 一句话概括核心思想

按需分步查询数据库元信息,用代理式LLM生成高效SQL。

  1. 速记版 pipeline(避免论文原词汇)
  1. 先粗略看各个数据库的简介,挑出最相关的库;
  2. 在选中的库里列出表,再挑出可能有关的几张表;
  3. 查看这些表里的具体字段,只取问题需要的那些;
  4. 用已经选出的库、表和字段,写出SQL并执行拿结果。
相关推荐
你的论文学长15 天前
从 Base Code 生成到 AST 语义重构:详解学术长文本的自动化质控方案
运维·人工智能·重构·自动化·论文
逐梦苍穹15 天前
谷歌新研究:训练大模型时“偷懒跳过“50%更新,性能反而提升20%?
人工智能·google·论文·梯度更新
biyezuopinvip16 天前
基于POI数据的巴中市生活服务业空间分布分析(毕业设计论文)
毕业设计·论文·毕业论文·基于poi数据的·巴中市·生活服务业·空间分布分析
biyezuopinvip16 天前
基于Spring Boot的投资理财系统设计与实现(毕业论文)
java·spring boot·vue·毕业设计·论文·毕业论文·投资理财系统设计与实现
biyezuopinvip16 天前
基于Spring Boot的投资理财系统设计与实现(任务书)
java·spring boot·vue·毕业设计·论文·任务书·投资理财系统设计与实现
你的论文学长17 天前
文本处理的 CI/CD:用 NLP 静态分析解决查重飘红与 Format Error
人工智能·ci/cd·自然语言处理·重构·论文·学习方法
一 乐18 天前
英语学习平台系统|基于springboot + vue英语学习平台系统(源码+数据库+文档)
java·vue.js·spring boot·学习·论文·毕设·英语学习平台系统
一 乐24 天前
林业资源管理|基于java + vue林业资源管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·林业资源管理系统
一 乐25 天前
健身房预约|基于java+ vue健身房预约小程序系统(源码+数据库+文档)
java·vue.js·spring boot·小程序·论文·毕设·健身房预约小程序