综合介绍
OmniSQL 是一个开源项目,由 RUCKBReasoning 团队开发,托管在 GitHub 上。它的核心功能是将用户输入的自然语言问题转化为高质量的 SQL 查询语句,帮助用户轻松与数据库交互。项目基于一个自动化的文本转 SQL 数据生成框架,推出了包含 250 万条样本的 SynSQL-2.5M 数据集,这是目前最大的跨领域合成文本转 SQL 数据集。OmniSQL 提供 7B、14B、32B 三种模型规模,适合不同需求的用户。无论是数据分析、数据库管理,还是模型研究,它都能提供强大支持。项目使用 Apache 2.0 协议,用户可以免费下载并参与改进。
功能列表
- 将自然语言转为 SQL:用户输入问题,模型生成准确的 SQL 查询。
- 支持复杂查询:生成从简单单表查询到多表连接的高级 SQL。
- 数据集生成:提供 SynSQL-2.5M,包含 250 万条高质量样本。
- 多规模模型:提供 7B、14B、32B 三种参数规模的模型。
- 开源免费:代码和数据集可在 GitHub 上免费获取。
使用帮助
OmniSQL 是一个基于代码的工具,适合有一定编程基础的用户。以下是详细的安装和使用指南,帮助你快速上手。
安装流程
- 准备环境
确保电脑已安装 Python 3.8 或更高版本。打开命令行,输入python --version
检查。如果没有安装,可从 Python 官网下载。 - 下载项目
访问https://github.com/RUCKBReasoning/OmniSQL
,点击 "Code" 按钮,选择 "Download ZIP" 下载项目压缩包。解压后得到项目文件夹。或者用 Git 命令克隆:
git clone https://github.com/RUCKBReasoning/OmniSQL.git
- 安装依赖
进入项目目录,在命令行运行:
pip install -r requirements.txt
这会安装运行所需的 Python 库。如果需要模型推理,还要安装 vLLM 或 Transformers,命令如下:
pip install vllm
或
pip install transformers torch
- 下载模型和数据集
OmniSQL 提供三种模型和 SynSQL-2.5M 数据集,可从以下链接下载:
- SynSQL-2.5M: HuggingFace
- OmniSQL-7B: HuggingFace
- OmniSQL-14B: HuggingFace
- OmniSQL-32B: HuggingFace
下载后,将文件放入项目目录。
- 运行项目
进入项目目录,运行python omnisql.py
检查环境是否正常。实际使用时需加载模型,具体见下文。
主要功能操作
1. 将自然语言转为 SQL
OmniSQL 的核心功能是将问题转化为 SQL 查询。以 vLLM 为例,运行以下代码:
from vllm import LLM, SamplingParams
from transformers import AutoTokenizer
# 定义提示模板
prompt = '''Task Overview:
You are a data science expert. Below, you are provided with a database schema and a natural language question. Your task is to generate a valid SQL query.
Database Engine: SQLite
Database Schema:
CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER);
Question:
查找 users 表中年龄大于 30 的人的名字
Instructions:
- 只输出问题要求的信息。
- 逐步思考后生成 SQL。
Output Format:
-- Your SQL query
'''
# 加载模型
model_path = "seeklhy/OmniSQL-7B" # 替换为你的模型路径
tokenizer = AutoTokenizer.from_pretrained(model_path)
llm = LLM(model=model_path, dtype="float16")
# 生成 SQL
sampling_params = SamplingParams(temperature=0, max_tokens=2048)
chat_prompt = tokenizer.apply_chat_template([{"role": "user", "content": prompt}], add_generation_prompt=True, tokenize=False)
outputs = llm.generate([chat_prompt], sampling_params)
print(outputs[0].outputs[0].text)
输出可能是:
SELECT name FROM users WHERE age > 30;
2. 使用 SynSQL-2.5M 数据集
数据集包含 250 万条样本,每条包括数据库结构、问题、SQL 查询和思考过程。下载后,可直接用于训练或研究。查看样本:
- 解压数据集文件。
- 打开任意 JSON 文件,格式如
{"db": ..., "question": ..., "sql": ..., "cot": ...}
。
3. 训练和评估
项目提供训练脚本,位于 train_and_evaluate
文件夹。运行示例:
python train.py --model OmniSQL-7B --data SynSQL-2.5M
评估脚本也在同一文件夹,可复现官方结果。
使用技巧
- 数据库支持:目前仅支持 SQLite。若需其他数据库,可用数据生成框架合成新数据。
- 硬件要求:7B 模型需约 14GB 显存,32B 需更高配置。
- 查看示例:项目
examples
文件夹提供提示模板示例。
通过这些步骤,你可以用 OmniSQL 快速生成 SQL 或研究文本转 SQL 技术。
应用场景
- 数据分析
数据分析师输入问题,如“查找销售额前十的商品”,OmniSQL 生成对应 SQL,节省时间。 - 模型研究
研究者用 SynSQL-2.5M 训练新模型,提升文本转 SQL 能力。 - 教育学习
学生通过输入问题观察生成的 SQL,学习数据库操作。
QA
- OmniSQL 支持哪些数据库?
当前仅支持 SQLite,未来可通过合成数据扩展。 - 数据集有多大?
SynSQL-2.5M 包含 250 万条样本,覆盖 1.6 万个数据库。 - 模型有多强?
在 Spider、BIRD 等基准测试中,OmniSQL 超越了 GPT-4o 等模型。