GaussDB SQL Expert 7B
基于 Qwen2.5-Coder-7B-Instruct 微调的企业级数据库智能助手,专精 SQL 生成、调优、迁移、诊断等数据库领域任务。
模型概述
| 项目 | 详情 |
|---|---|
| 基座模型 | Qwen/Qwen2.5-Coder-7B-Instruct |
| 参数量 | 7.6B (Dense) |
| 微调方法 | LoRA (rank=64, alpha=128, target=all linear layers) |
| 可训参数 | 161M (2.08%) |
| 训练数据 | 29,863 条 ShareGPT 多轮对话 + 1,571 条验证 |
| 训练硬件 | 1x NVIDIA H100 80GB |
| 训练耗时 | 3.5 小时 |
| 训练框架 | LLaMA-Factory v0.9.4 |
| 精度 | BF16 |
核心能力
- Text2SQL: 自然语言转 SQL,支持窗口函数、递归 CTE、MERGE、子查询等复杂语法
- SQL 调优: 索引失效分析、执行计划解读、参数配置优化建议
- SQL 迁移: Oracle / MySQL / SQL Server → GaussDB 语法自动转换 (50+ 差异点)
- 错误诊断: 死锁、WAL 膨胀、连接耗尽、OOM 等 20+ 常见故障场景
- SQL 解释: 复杂查询的逻辑拆解与可读性分析
- 边界安全: 危险操作拦截、信息不足追问、超范围拒绝
支持 9 种主流数据库: GaussDB, Oracle, MySQL, PostgreSQL, SQL Server, PolarDB, 达梦(DM), 金仓(KingBase), Sybase
评测结果
使用 100 道自动化评测题(每类 20 道),关键词匹配评分:
| 维度 | 得分 | 说明 |
|---|---|---|
| Text2SQL | 20/20 (100%) | 窗口函数、CTE、MERGE、分页等全部正确 |
| SQL 调优 | 18/20 (90%) | 索引失效、隐式转换、参数调优等 |
| SQL 迁移 | 20/20 (100%) | Oracle/MySQL/SQL Server → GaussDB 转换 |
| 错误诊断 | 20/20 (100%) | 死锁、WAL、OOM、连接耗尽等 |
| 边界安全 | 16/20 (80%) | 危险操作告警、超范围拒绝 |
| 综合 | 94/100 (94%) |
快速开始
环境要求
- Python >= 3.9
- PyTorch >= 2.0
- GPU 显存 >= 16GB(推荐)或 CPU(较慢)
- 磁盘空间 ~15GB(存放模型权重)
安装依赖
# 1. 安装基础依赖
pip install torch transformers accelerate
# 2.(可选)安装 Flash Attention 2,在 NVIDIA GPU 上加速推理
pip install flash-attn --no-build-isolation
下载模型
首次使用 from_pretrained() 时会自动下载模型,也可以手动提前下载:
# 方式一:huggingface-cli(推荐)
pip install huggingface_hub
huggingface-cli download lanfers/gaussdb-sql-expert-7b --local-dir ./gaussdb-sql-expert-7b
# 方式二:git-lfs
git lfs install
git clone https://huggingface.co/lanfers/gaussdb-sql-expert-7b
# 方式三:Python 脚本
python -c "
from huggingface_hub import snapshot_download
snapshot_download('lanfers/gaussdb-sql-expert-7b', local_dir='./gaussdb-sql-expert-7b')
"
国内用户加速下载:如果 HuggingFace 下载较慢,可使用镜像站:
HF_ENDPOINT=https://hf-mirror.com huggingface-cli download lanfers/gaussdb-sql-expert-7b --local-dir ./gaussdb-sql-expert-7b
使用本地模型推理
如果已手动下载到本地,将代码中的 model_path 改为本地路径即可:
model_path = "./gaussdb-sql-expert-7b" # 本地路径
# model_path = "lanfers/gaussdb-sql-expert-7b" # 或直接从 HuggingFace 加载
Python 推理
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_path = "lanfers/gaussdb-sql-expert-7b"
device = "cuda" # 或 "mps" (Mac) / "cpu"
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_path,
torch_dtype=torch.float16,
device_map=device,
trust_remote_code=True,
)
model.eval()
messages = [
{"role": "system", "content": "你是一个专业的数据库专家助手,精通 Oracle, MySQL, PostgreSQL, GaussDB, PolarDB, 达梦(DM), 金仓(KingBase), Sybase, SQL Server。"},
{"role": "user", "content": "数据库类型: GaussDB 505 集中式\n\n查询每个部门工资最高的前3名员工,显示部门名、员工名、工资和排名。"},
]
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(text, return_tensors="pt").to(device)
with torch.no_grad():
outputs = model.generate(
**inputs,
max_new_tokens=1024,
temperature=0.7,
do_sample=True,
top_p=0.8,
repetition_penalty=1.05,
)
response = tokenizer.decode(outputs[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True)
print(response)
示例输出
输入: 查询每个部门工资最高的前3名员工
输出:
SELECT dept_name, emp_name, salary, rk
FROM (
SELECT d.dept_name, e.emp_name, e.salary,
DENSE_RANK() OVER(PARTITION BY e.dept_id ORDER BY e.salary DESC) AS rk
FROM employees e
JOIN departments d ON e.dept_id = d.dept_id
) t
WHERE rk <= 3;
输入: Oracle → GaussDB 迁移: SELECT NVL(name, '未知') FROM users WHERE ROWNUM <= 10
输出:
SELECT COALESCE(name, '未知') FROM users LIMIT 10;
-- NVL → COALESCE, ROWNUM → LIMIT
训练详情
训练超参数
# LoRA 配置
lora_rank: 64
lora_alpha: 128
lora_dropout: 0.05
lora_target: all # q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj
# 训练参数
learning_rate: 2.0e-5
lr_scheduler_type: cosine
warmup_ratio: 0.1
num_train_epochs: 3
per_device_train_batch_size: 8
gradient_accumulation_steps: 4 # 等效 batch_size = 32
cutoff_len: 2048
optim: adamw_torch
bf16: true
gradient_checkpointing: true
训练 Loss 曲线
训练过程:2,799 步,3 小时 29 分钟
Step Epoch Train Loss Eval Loss
200 0.21 1.217 1.216
600 0.64 1.038 1.104
1000 1.07 1.035 1.076
1400 1.50 1.062 1.058
1800 1.93 1.062 1.045
2200 2.36 0.966 1.044
2600 2.79 0.959 1.042 ← 最优检查点
最终 train_loss=1.039, eval_loss=1.042,两者接近,无过拟合。
训练数据分布
| 场景 | 占比 | 说明 |
|---|---|---|
| Text2SQL | ~30% | 自然语言 → SQL 生成 |
| SQL 调优 | ~20% | 慢查询分析、索引优化 |
| SQL 迁移 | ~15% | 跨数据库语法转换 |
| 错误诊断 | ~15% | 生产故障排查 |
| 运维知识 | ~10% | 参数调优、备份恢复 |
| 边界安全 | ~10% | 危险操作告警、超范围拒绝 |
局限性
- 边界安全能力还有提升空间:对 DELETE 全表、DROP DATABASE 等操作可能直接执行而不告警
- 对 GaussDB 505 特有的高级功能(如列存表、分布式特性)覆盖有限
- 仅支持文本输入,不支持图片(如执行计划截图)
- 建议在生产环境中增加推理侧安全规则兜底
引用
如果本模型对你有帮助,欢迎引用:
@misc{gaussdb-sql-expert-7b,
title={GaussDB SQL Expert 7B},
author={lanfers},
year={2026},
publisher={HuggingFace},
url={https://huggingface.co/lanfers/gaussdb-sql-expert-7b}
}
许可证
本模型基于 Qwen2.5-Coder-7B-Instruct 微调,遵循 Apache 2.0 许可证。