text2sql
yashbonde/text2sql加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。

用自然语言"说人话"直接生成 SQL 查询语句——你描述数据需求,AI 自动翻译成精准的数据库语言,让不懂 SQL 的业务人员也能玩转数据。
做数据分析,最痛苦的是什么?不是清洗数据,是写 SQL。
一个典型的业务场景是:产品经理想查"上个月华北地区付费用户的留存率",他得找到数据工程师帮忙,把需求翻译成 SELECT ... FROM ... JOIN ... WHERE ... GROUP BY ...,来回沟通好几次,效率极低。
Text2SQL 就是来解决这个问题的:让 AI 把自然语言直接变成 SQL,你描述需求,AI 替你写代码。
这个项目由独立开发者 Yash Bonde 创建(GitHub: @yashbonde),核心动机是作者本人"每次写 SQL 都薅头发"——他在 README 里直言不讳:"How many times have you pulled your hair apart writing a SQL query"。
这个领域有几个公认的标杆数据集:
text2sql 训练在这三个数据集上,覆盖了从简单单表查询到复杂多表关联的全面场景。
传统 Text2SQL 的一个难点是:数据库结构本身也是一种信息——表之间有外键关联,列有数据类型约束。直接忽略它,就像不看地图去问路。
text2sql 的做法很聪明:用 NetworkX 把数据库 schema 转成图网络:
这样,模型在生成 SQL 时,不仅"看"到用户的自然语言问题,还能"看"到数据库的拓扑结构。

图:数据库转图网络的可视化,红边表示外键关系,帮助模型理解表之间的关联
模型架构是一个双编码器 + 解码器的序列到序列结构:
关键 trick:固定序列长度到 400,解决了 DB schema 注意力矩阵(可达 500×500)和问题序列(通常 50 token)之间的长度不匹配问题。
训练时,不是简单让模型直接生成完整 SQL——那样太难了。text2sql 采用了类似完形填空的训练策略:
pf(默认 0.6)把 SQL 中的列名/表名替换成 [MASK] 占位符方式一:pip 安装(推荐)
pip install text2sql
方式二:Streamlit Web UI(交互式体验)
pip install streamlit
streamlit run t2s.py
然后在浏览器打开 http://localhost:8501,直接输入自然语言问题,实时查看生成的 SQL。
自定义训练
# 数据预处理:将 Spider/SParC/CoSQL 数据集解析为模型可读格式
python parse_to_lm.py
# 启动训练
python train.py --name my_model --n_epochs 5 --batch_size 32
| 文件 | 作用 |
|---|---|
train.py | 训练入口,命令行参数配置 |
parse_to_lm.py | 将原始数据集转换为模型格式 |
t2s.py | Streamlit Web UI 入口 |
src/text2sql/data.py | 数据处理:Schema → NetworkX 图 |
src/text2sql/model.py | Transformer 模型定义(双编码器 + 解码器) |
src/text2sql/trainer.py | 训练循环,基于 minGPT 风格封装 |
src/text2sql/graph_network.py | 图网络构建工具 |
| 维度 | 评分 | 说明 |
|---|---|---|
| 编程基础要求 | 中等 | 需要懂 Python、了解 PyTorch 基本概念 |
| SQL 基础要求 | 低 | 核心价值就是让你不写 SQL |
| 硬件要求 | GPU 优先 | 训练需要 CUDA GPU;纯推理可用 CPU |
| 数据准备 | 较高 | 需手动下载 Spider 等数据集并运行 parse 脚本 |
| 依赖复杂度 | 中等 | PyTorch + Transformers + NetworkX,pip 可解决 |
适合人群:有 Python 基础、对 AI 感兴趣、偶尔需要查数据库但不想学 SQL 的业务人员;或想快速搭建内部 Text2SQL 能力的开发者。
坦诚地说,这个项目有几个明显的局限:
生成质量有限:从 README 中的示例输出可以看到,早期 epoch 的生成结果还很"天马行空"——输出的 token 序列有时是乱码般的英文拼凑,离实用还有距离。需要更多调参和更大模型才能达到生产级水准。
缺乏生产级优化:没有 Docker 容器化,没有预训练模型权重发布(需要自己训练),推理速度没有特殊优化。
Streamlit UI 未维护:README 明确标注 streamlit run t2s.py (not updated currently),Web UI 可能存在 bug。
不支持中文:所有数据集、模型训练、示例均为英文,中文场景直接使用效果会大打折扣。
学术向而非工程向:代码质量尚可,但缺少测试用例、CI/CD、文档网站等工程基础设施。
Text2SQL 是 NLP × 数据库领域的一个经典任务,在 GPT-4 时代之前就已有大量研究。这个项目虽然没有达到 SOTA 水准,但它的价值在于:
随着大语言模型(LLM)能力的提升,Text2SQL 任务已大幅进步(如 GPT-4 + SQL 插件),但这类轻量级方案在特定垂直场景(如内网隔离环境、无 API 依赖的离线部署)仍有独特价值。
技术栈:Python · PyTorch · Hugging Face Transformers · NetworkX · SentencePiece · Streamlit
许可证:MIT