DAIL-SQL的Token节省之道:每问仅1600 Tokens,示例组织策略与成本优化全解析
2026/8/28 9:32:39 网站建设 项目流程

DAIL-SQL的Token节省之道:每问仅1600 Tokens,示例组织策略与成本优化全解析

【免费下载链接】DAIL-SQLA efficient and effective few-shot NL2SQL method on GPT-4.项目地址: https://gitcode.com/gh_mirrors/da/DAIL-SQL

DAIL-SQL 是运行在 GPT-4 上的高效高精度 few-shot Text-to-SQL(NL2SQL)方案:在 Spider 榜单上以 86.2% 的执行准确率登顶,而每个问题平均仅消耗约1600 Tokens。本文将拆解它的三大 Token 节省策略——示例组织、贪心预算裁剪、双相似度示例选择,并教你估算 LLM API 的真实调用成本。

先选对问题表示:代码风格 Schema 胜出

DAIL-SQL 在零样本场景下对比了 5 种问题表示方式(自然文本、代码、OpenAI 官方演示格式、指令格式、CoT),结论是:用 SQL 建表语句(Code Representation)描述 Schema,且带上外键、加一句"with no explanation",是 GPT-4 上最稳的组合。

  • CREATE TABLE语句替代"Table xxx, columns = [...]"的纯文本列表,LLM 更不容易写错表名列名;
  • 外键信息直接给出,省掉模型自行猜测表连接关系的成本;
  • "with no explanation" 规则约束输出只给 SQL,避免废话占用输出 Token。

两种关键组件(外键、无解释规则)带来的增益对比:

对应模板定义可参考 prompt/PromptReprTemplate.py。

Token预算控制实现:把 Prompt 压进 1600 怎么做的

DAIL-SQL 的 Prompt 由「Schema + 若干示例 + 目标问题」拼接而成,核心裁剪逻辑在 prompt/PromptICLTemplate.py 的format()中:

  1. 总预算max_seq_len(默认 4096)减去预留的答案空间max_ans_len(200),得到 Prompt 可用上限约 3896 Tokens;
  2. 贪心装箱:从候选池(示例数 ×scope_factor)中按相似度排序逐个尝试加入,每加一个就用真实 tokenizer 重新计数,一旦超预算立即丢弃该示例;
  3. 宁缺毋滥:凑不满 k-shot 就不硬凑——示例质量差不如示例数量少。

这套机制让 Spider-dev 上的平均 Prompt 稳定在约 1600 Tokens,只占模型上下文上限的四成左右,既留足安全边际,又直接压低 API 账单。

示例组织三策略:为什么 QA 对最适合 GPT-4 这类强 LLM

few-shot 示例的组织方式有 3 种(见 prompt/ExampleFormatTemplate.py):

策略每个示例包含Token 代价适合
Full-Information(COMPLETE)Schema + 问题 + SQL最高弱模型
SQL-Only(ONLYSQL)仅 SQL最低语义信息不足
QA 对(DAIL-SQL 采用)问题 + SQL中低强 LLM

DAIL-SQL 的关键洞察是:示例里重复的数据库 Schema 是最贵的冗余。Schema 已在 Prompt 头部给出,示例只需保留"问题 → SQL"的映射关系,即可教会模型任务模式。实验对比(GPT-4 上 QA 对全面领先):

示例选择策略:掩码问题相似度 + SQL 骨架相似度

选好组织方式后,选"哪些"示例同样重要。DAIL-SQL 采用两步走(实现见 prompt/ExampleSelectorTemplate.py):

  • 第一步(问题相似度):先用 Schema 链接把问题中的表名、列名、实体值替换为<mask>/<unk>,再编码比对句向量距离——掩码后比的是"问法结构"而非字面词汇;
  • 第二步(查询骨架相似度):先用廉价模型预生成一次 SQL,取其骨架(去掉常量值),与训练集 SQL 骨架做 Jaccard 相似度,阈值0.85,确保示例与目标问题的查询模式一致。

该策略在 9-shot 下 GPT-4 执行准确率达 82.4%(Spider train 上),显著优于随机选取。相关结果文件见 results/ 目录。

API成本估算:GPT-4 账单这样算

generate_question.py 在生成 Prompt 后会自动汇总每个 Prompt 的 Token 数,并按内置单价估算成本(单价表定义在 utils/enums.py):

模型每 1K Tokens 价格每问约 1600 Tokens 的成本
GPT-4$0.03≈ $0.05
GPT-3.5-Turbo$0.002≈ $0.003
text-davinci-003$0.02≈ $0.03

也就是说,单问成本仅 5 美分左右;若开启 self-consistency(5 次投票取多数),成本乘以 5 仍可接受,换来 0.4% 的准确率提升(86.2% → 86.6%)。

快速上手:三步跑通 DAIL-SQL 流水线

一键脚本 run_dail_sql_mini.sh 展示了完整流程,核心就三步:

python data_preprocess.py # 1. 预处理 Spider 数据集 python generate_question.py \ # 2. 掩码相似度选示例,生成 9-shot Prompt --split test --k_shot 9 --prompt_repr SQL \ --example_type QA --selector_type EUCDISQUESTIONMASK python ask_llm.py \ # 3. 调用 GPT-4 生成最终 SQL --model gpt-4 --question ./dataset/process/...

完整 DAIL 策略(含预生成 SQL 二次筛选)见 run_dail_sql.sh;BIRD 数据集(带外部知识证据)的运行方式见 run_for_bird.sh。

结果一览:精度与成本兼得

方法Dev EXTest EX
DAIL-SQL + GPT-483.1%86.2%
DAIL-SQL + GPT-4 + Self-consistency83.6%86.6%

小结

💡 DAIL-SQL 的 Token 经济学可以浓缩为三句话:

  • Schema 只写一遍——示例里删掉重复的建表语句,改用 QA 对组织(省 60% 示例 Token);
  • 预算内贪心装箱——真实 tokenizer 计数 + 超限即丢,把 Prompt 稳定压在 1600 Tokens;
  • 双相似度挑示例——掩码问题相似度选"问法像"的,SQL 骨架相似度选"查询像"的,少而精。

这套思路不局限于 Text-to-SQL:任何用 GPT-4 做 few-shot 推理的场景,都可以照搬"预算控制 + 去冗余示例 + 结构相似度选样"三板斧来压缩 API 成本。

【免费下载链接】DAIL-SQLA efficient and effective few-shot NL2SQL method on GPT-4.项目地址: https://gitcode.com/gh_mirrors/da/DAIL-SQL

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询