DBCopilot
首创 Schema 路由机制,在海量数据库中精准导航目标表,再由 LLM 生成 SQL,解决 Tex
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
首创 Schema 路由机制,在海量数据库中精准导航目标表,再由 LLM 生成 SQL,解决 Tex
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
试想一个数据分析师坐在工位上,面对一个包含数百个数据库、数千张数据表的企业数据湖。他想问:「去年第四季度华南区销售额超过100万的客户有哪些?」——这句话人类能理解,但直接丢给一个通用 LLM,它很可能答非所问:它根本不知道哪个数据库、哪张表存的是销售数据,也不知道表与表之间怎么关联。
传统的 Text2SQL 方案通常假设:预先知道目标数据库的 Schema,并且这个库规模有限。 但在真实企业场景里,数据库往往是海量的、多团队的、动态变化的。你不可能每次提问前都把所有表结构塞给 LLM——Token 不够,推理成本也吃不消。
DBCᴏᴘɪʟᴏᴛ 就是来解决这个问题的:它提出了 Schema Routing(Schema 路由) 机制,在用户提问时,先通过一个轻量级的「导航模型」把自然语言问题路由到正确的数据库和表,然后再把目标 Schema 加上原问题一起交给 LLM 生成 SQL。整个过程对用户透明,但底层是一个完整的两阶段 NL2SQL 架构。

图1:DBCᴏᴘɪʟᴏᴛ 项目首页截图
DBCᴏᴘɪʟᴏᴛ 的核心技术思路可以总结为一个公式:
NL2SQL = Schema Routing + SQL Generation
这是 DBCᴏᴘɪʟᴏᴛ 最核心的创新。当用户提出自然语言问题后,系统先通过一个可微分的轻量索引(Differentiable Search Index),在毫秒级时间内从海量数据库中找到最相关的数据库和表集合。
具体实现依赖三个子模块的协同工作:
T5/FLAN-T5 等预训练模型微调。一个形象的比喻:Schema Routing 就像是给数据库装了一个智能导航系统——你说「我想查销售」,它先帮你定位到 sales 数据库的 orders 表,而不需要你记住数据库里有几百张表。
DBCᴏᴘɪʟᴏᴛ 还提出了一个独特的自监督训练范式:逆向 Schema-to-Question 生成。
流程是:给定一个 Schema(表结构),用 SchemaQuestioning 模型生成一批「能反映这个 Schema 特点的问题」,然后用这些问题反过来训练 SchemaRouting 模型。这相当于让模型从数据本身出发理解 Schema,而不是依赖人工标注的问答对。
这种「逆向生成 + 正向路由」的循环训练,使得路由模型在面对全新数据库时也能保持较好泛化能力,真正实现 zero-shot schema routing。
路由完成后,目标 Schema 和用户问题一起被送入 LLM(如 GPT-4、Claude 等)生成 SQL。代码中使用 sqlglot 和 sqlparse 做 SQL 解析和校验,用 openai SDK 调用 GPT 系列模型,同时也支持 transformers 本地推理。
从代码结构来看,DBCᴏᴘɪʟᴏᴛ 的工程实现非常扎实:
src/
├── models/
│ ├── schema_routing.py # 核心路由模型 (Seq2Seq T5/FLAN-T5)
│ ├── schema_questioning.py # 逆向生成模型 (支持 PEFT/LoRA)
│ └── schema_encoder.py # Schema 向量化编码
├── datamodules/
│ ├── text2schema.py # Text→Schema 数据处理
│ └── schema2text.py # Schema→Text 逆向生成
└── utils/
├── text2sql.py # SQL 生成工具 (OpenAI API)
├── text2sql_v1.py # SQL 生成 v1 实现
├── retrival.py # 向量检索封装 (retriv)
├── collators.py # PyTorch DataLoader Collator
└── openai_with_usage.py # OpenAI 调用 + 用量追踪
训练框架选用了 PyTorch Lightning,这是目前学术研究中最主流的深度学习训练框架,相比纯 PyTorch,Lightning 提供了更好的实验管理、日志记录和分布式训练支持。配合 lightning.pytorch.callbacks 实现自定义评估指标。
微调技术方面,SchemaQuestioning 模型支持 PEFT(Parameter-Efficient Fine-Tuning),代码中使用了 peft 库提供的 LoRA 等轻量微调方法,显著降低了训练显存需求。
数据管理采用了 datasets 库(来自 HuggingFace),支持大规模训练数据的流式加载和预处理。
DBCᴏᴘɪʟᴏᴛ 已被国际数据库顶级会议 EDBT 2025 接收,并荣获 Best Research Paper Runner-Up(最佳论文第二名)。EDBT(International Conference on Extending Database Technology)是数据库领域历史悠久的学术会议,与 SIGMOD、VLDB 并列为数据库三大顶会。能在此类会议上获奖,说明 DBCᴏᴘɪʟᴏᴛ 的技术方案经过了严格的同行评审验证。
目前开源社区的 Text2SQL 项目(如 Vanna、SQLCoder、DB-GPT)大多聚焦于 SQL 生成质量本身,而 Schema 路由这个问题被严重低估。DBCᴏᴘɪʟᴏᴛ 填补了这个空白,它的技术思路——「先导航再生成」——也为未来 NLIDB(自然语言数据库接口)的研究提供了一个可参考的范式。
作者不仅开源了完整的训练和推理代码,还提供了预训练好的路由模型权重(在 README 中通过 OneDrive 链接分享),研究者和工程师可以直接下载使用,降低了复现门槛。
坦白说,DBCᴏᴘɪʟᴏᴛ 不是开箱即用的工具,更适合作为研究基础或企业内网定制方案:
| 维度 | 评估 |
|---|---|
| 快速部署 | ❌ 不支持。项目未提供 Dockerfile 或 docker-compose,无法一键启动 |
| GPU 依赖 | ✅ 必须。训练和推理均需 NVIDIA GPU,建议显存 ≥16GB |
| 数据准备 | ⚠️ 复杂。需手动从 OneDrive 下载数据集(非标准开源协议),涉及 Git LFS |
| 代码质量 | ✅ 极高。使用 PyTorch Lightning + Ruff + pre-commit 规范开发,有完整类型检查 |
| 可扩展性 | ✅ 好。支持 PEFT 微调、支持多种 LLM 后端(OpenAI GPT / Transformers 本地模型) |
如果你是在企业内部部署,建议:先通过 environment.yaml 用 conda 创建环境,然后参考 scripts/ 下的实验脚本按需修改配置。路由模型和数据集的下载是部署中最大的坑——OneDrive 链接在国内访问可能不稳定。
DBCᴏᴘɪʟᴏᴛ 是一个学术导向的高质量 NL2SQL 研究项目,其 Schema Routing 思路是近年来 Text2SQL 领域少有的原创性贡献。它不是给你拿来直接用的商用产品,而是一个值得深入研究和借鉴的技术框架——无论你是做数据库研究、NLP 应用,还是在企业内搭建智能数据分析平台,DBCᴏᴘɪʟᴏᴛ 的两阶段路由架构都值得一看。