使用 dbgpt_hub Python 包进行 Text2SQL 微调实战指南 📅 发布时间:2026/9/14 19:27:52 👁 浏览次数: 使用 dbgpt_hub Python 包进行 Text2SQL 微调实战指南【免费下载链接】DB-GPTopen-source agentic AI data assistant for the next generation of AI Data products.项目地址: https://gitcode.com/GitHub_Trending/db/DB-GPTDB-GPT 的 Text2SQL 能力依赖高质量的微调模型。为了降低训练门槛DB-GPT-Hub 项目将完整的 Text2SQL 训练流水线封装成了dbgpt_hubpip 包开发者无需克隆完整仓库、无需手写训练脚本只需在 Python 中调用四个 API即可完成从数据处理、模型微调、推理预测到结果评估的完整闭环。本文将带你掌握这套基于 Python 包的端到端微调流程并给出可直接复制运行的参数配置。输出文章使用 dbgpt_hub Python 包进行 Text2SQL 模型微调实战指南DB-GPT 的 Text2SQL 能力依赖高质量微调模型而 DB-GPT-Hub 项目DB-GPT 微调代码所在子项目已将整套 Text2SQL 训练流水线封装为dbgpt_hubpip 包以降低训练门槛。除通过仓库脚本微调外你还可以直接使用该 Python 包在 Python 环境中以四个 API 完成数据预处理、模型训练、推理预测与结果评估的完整闭环。本文将围绕关联文档 dbgpt_hub.md 的核心内容结合仓库中 text_to_sql.md 与 fine_tuning.md 等文档讲解如何用 pip 包完成一次基于 Spider 数据集、CodeLlama-13B-Instruct-hf 基座的 LoRA 微调实战。背景为什么用 pip 包微调 Text2SQLDB-GPT-Hub 是 DB-GPT 中专门承载 Text2SQL 微调代码的子项目。原始的微调方式需要克隆 DB-GPT-Hub 仓库用 conda 创建 Python 3.10 虚拟环境并安装 poetry 依赖运行仓库内dbgpt_hub/scripts/下的一系列 shell 脚本数据生成、训练、预测、评估并手动对齐dataset_info.json等配置。这种方式步骤多、对新手不友好。dbgpt_hubpip 包将同一套流水线封装成可导入的 Python API让训练门槛显著降低。从关联文档及仓库中 text_to_sql.md 描述看Text2SQL 微调流水线主要包括六大环节环境搭建Build environment数据处理Data processing模型训练Model train模型合并Model merge模型预测Model predict模型评估Model evaluationdbgpt_hub包将其中数据、训练、预测、评估四个核心环节分别封装为函数开发者只需在 Python 脚本中依次调用。安装 dbgpt_hub在 Python 3.10 及以上环境中直接通过 pip 安装pip install dbgpt_hub安装完成后即可在 Python 中导入包内四个核心模块from dbgpt_hub.data_process import preprocess_sft_data from dbgpt_hub.train import train_sft from dbgpt_hub.predict import start_predict from dbgpt_hub.eval import start_evaluate注意pip 包的 API 名称与仓库脚本中的入口略有差异仓库脚本为dbgpt_hub/train/sft_train.py等以包的导出函数为准。查看基线成绩show_scores在开始训练前可以先查看已发布权重在公开数据集上的基线执行准确率execution accuracy用于后续对比训练效果from dbgpt_hub.baseline import show_scores show_scores()执行后会打印类似上图所示的基线分数表。需要说明的是文档中引用的基线数值如 CodeLlama-13b-sql-lora 在 Spider 评估集上执行准确率约 0.789来自 DB-GPT-Hub 项目自身实验记录训练环境为 A10040G单卡、总训练时长约 12 小时由于大模型推理存在随机性与temperature等生成参数相关多次评估结果会略有浮动该数值仅作参考不应视为本仓库当前版本的承诺指标。第一步数据预处理 preprocess_sft_data微调的第一步是将原始数据集转换为模型 SFT 所需的训练/验证数据格式。preprocess_sft_data接收两个参数data_folder数据所在根目录通常为dbgpt_hub/dataSpider 数据库文件位于其下的dbgpt_hub/data/spiderdata_info一个描述数据源与输出文件的列表每个元素为一个 dict。以 Spider 数据集为例data_folder dbgpt_hub/data data_info [ { data_source: spider, # 数据源名称包内置了对应解析逻辑 train_file: [train_spider.json, train_others.json], # 训练集文件列表 dev_file: [dev.json], # 验证集文件 tables_file: tables.json, # 表结构信息文件 db_id_name: db_id, # 数据库标识字段名 is_multiple_turn: False, # 是否多轮对话数据 train_output: spider_train.json, # 处理后训练集输出文件名 dev_output: spider_dev.json, # 处理后验证集输出文件名 } ] preprocess_sft_data( data_folderdata_folder, data_infodata_info, )Spider 是业界公认较难的跨领域 Text2SQL 评测数据集包含 10181 条自然语言问题与 5693 条 SQL 语句覆盖 138 个领域的 200 多个数据库。处理完成后dbgpt_hub/data/目录下会生成spider_train.json与spider_dev.json。数据格式与处理原理处理后的训练样本格式如下对应 text_to_sql.md 中的示例{ db_id: department_management, instruction: I want you to act as a SQL terminal ... ##Instruction:\ndepartment_management contains tables such as department, head, management. ..., input: ###Input:\nHow many heads of the departments are older than 56 ?\n\n###Response:, output: SELECT count(*) FROM head WHERE age 56, history: [] }其核心思路是SQL 库表信息Repository的信息匹配生成法把每个库的 table/column/主外键关系拼装成字典key 为db_idvalue 为格式化后的表结构描述再填充到固定的指令模板INSTRUCTION_PROMPT中形成 instruction。关于处理代码的内部细节dbgpt_hub/data_process/sql_data_process.py中的ProcessSqlData类与decode_json_file()函数可以参考 text_to_sql.md 的Code interpretation一节。数据处理好之后还需要在dbgpt_hub/data/dataset_info.json中配置数据集名称与文件名的映射关系——训练时dataset参数传入的即是该 JSON 中配置的外层 key。第二步模型训练 train_sft数据处理完成后通过train_sft传入训练参数 dict 即可启动 LoRA 微调注意关联文档代码中调用了start_sft(train_args)其即对应from dbgpt_hub.train import train_sft导出的训练函数。以下参数为文档给出的完整配置可直接复制运行train_args { model_name_or_path: codellama/CodeLlama-13b-Instruct-hf, # 基座模型路径或模型名 do_train: True, # 执行训练 dataset: example_text2sql_train, # 数据集配置名对应 dataset_info.json 中的 key max_source_length: 2048, # 输入文本最大长度 max_target_length: 512, # 输出 SQL 最大长度 finetuning_type: lora, # 微调方式 lora_target: q_proj,v_proj, # LoRA 作用的网络模块 template: llama2, # 对话模板类型 lora_rank: 64, # LoRA 秩 lora_alpha: 32, # LoRA 缩放系数 output_dir: dbgpt_hub/output/adapter/CodeLlama-13b-sql-lora, # PEFT 适配器输出目录 overwrite_cache: True, # 覆盖缓存 overwrite_output_dir: True, # 覆盖输出目录 per_device_train_batch_size: 1, # 每 GPU 训练 batch gradient_accumulation_steps: 16, # 梯度累积步数 lr_scheduler_type: cosine_with_restarts, # 学习率调度器 logging_steps: 50, # 日志打印间隔 save_steps: 2000, # checkpoint 保存间隔 learning_rate: 2e-4, # 学习率 num_train_epochs: 8, # 训练轮数 plot_loss: True, # 绘制 loss 曲线 bf16: True, # 使用 BF16 混合精度 } start_sft(train_args)关键参数详解下表汇总文档中明确解释的参数语义便于按需调整参数含义文档给出的参考值model_name_or_path使用的 LLM 路径CodeLlama-13b-Instruct-hfdataset训练数据集配置名example_text2sql_trainmax_source_length模型输入文本长度2048文档说明为多轮实验分析后的较优长度max_target_length模型输出 SQL 长度512template不同模型微调的对话模板Llama2 系列用llama2lora_targetLoRA 微调时作用的网络参数q_proj,v_projfinetuning_type微调类型可选ptuning / lora / freeze / full等lora_rankLoRA 秩64lora_alphaLoRA 缩放系数32output_dirSFT 时 PEFT 模块输出路径默认在dbgpt_hub/output/adapter/下per_device_train_batch_size每 GPU 训练样本数1资源充足可调大gradient_accumulation_steps梯度更新累积步数16lr_scheduler_type学习率调度类型cosine_with_restartslogging_steps日志保存步长间隔50save_steps模型 ckpt 保存步长2000num_train_epochs训练数据轮数8learning_rate学习率2e-4文档推荐值进阶微调方式QLoRA 量化微调如果显存资源有限可改用 QLoRA只需在训练参数中加入quantization_bit值为 4 或 8以启用量化。其他 LLM更换不同基座模型时需要参照 DB-GPT-Hub 项目 README 调整lora_target与template两个关键参数。DeepSpeed 加速除 LoRA/QLoRA 外项目还支持 DeepSpeed 加速训练。第三步模型预测 start_predict训练完成后输出目录下会生成 PEFT checkpoint使用start_predict加载 LoRA 适配器并基于基座模型进行推理预测。文档给出的完整参数如下predict_args { model_name_or_path: codellama/CodeLlama-13b-Instruct-hf, # 基座模型路径 template: llama2, # 对话模板 finetuning_type: lora, # 微调方式 checkpoint_dir: dbgpt_hub/output/adapter/CodeLlama-13b-sql-lora, # 训练产出的 PEFT checkpoint 目录 predict_file_path: dbgpt_hub/data/eval_data/dev_sql.json, # 预测输入文件 predict_out_dir: dbgpt_hub/output/, # 预测结果输出目录 predicted_out_filename: pred_sql.sql, # 预测结果文件名 } start_predict(predict_args)预测结果默认输出到dbgpt_hub/output/pred/目录对应predicted_out_filename指定的文件名。与仓库脚本predict_sft.sh的用法一致其将基座模型与 LoRA checkpoint 组合后进行生成。第四步结果评估 start_evaluate最后在测试数据集上评估模型输出结果的准确率。文档给出的评估参数如下evaluate_args { input: ./dbgpt_hub/output/pred/pred_sql_dev_skeleton.sql, # 模型预测结果文件 gold: ./dbgpt_hub/data/eval_data/gold.txt, # 标准答案 SQL gold_natsql: ./dbgpt_hub/data/eval_data/gold_natsql2sql.txt, # 标准答案 NatSQL 版 db: ./dbgpt_hub/data/spider/database, # 数据库文件目录 table: ./dbgpt_hub/data/eval_data/tables.json, # 表结构信息 table_natsql: ./dbgpt_hub/data/eval_data/tables_for_natsql2sql.json, # NatSQL 表信息 etype: exec, # 评估类型exec 表示执行匹配 plug_value: True, # 是否代入具体值 keep_distict: False, progress_bar_for_each_datapoint: False, natsql: False, # 是否为 NatSQL 格式 } start_evaluate(evaluate_args)评估以执行匹配etypeexec为默认方式即把预测 SQL 与金标 SQL 在对应数据库上真实执行并比对结果相比纯文本匹配更能反映 SQL 的语义正确性。与仓库脚本方式的对应关系如果你更习惯命令行方式也可以回到 DB-GPT-Hub 仓库使用脚本完成同等流程与 text_to_sql.md 中的 pipeline 对应# 1. 生成训练与验证数据 sh dbgpt_hub/scripts/gen_train_eval_data.sh # 2. 训练与上文 train_args 参数一一对应 CUDA_VISIBLE_DEVICES0 python dbgpt_hub/train/sft_train.py \ --model_name_or_path Your_download_CodeLlama-13b-Instruct-hf_path \ --do_train \ --dataset example_text2sql_train \ --max_source_length 2048 \ --max_target_length 512 \ --finetuning_type lora \ --lora_target q_proj,v_proj \ --template llama2 \ --lora_rank 64 \ --lora_alpha 32 \ --output_dir dbgpt_hub/output/adapter/code_llama-13b-2048_epoch8_lora \ --overwrite_cache \ --overwrite_output_dir \ --per_device_train_batch_size 1 \ --gradient_accumulation_steps 16 \ --lr_scheduler_type cosine_with_restarts \ --logging_steps 50 \ --save_steps 2000 \ --learning_rate 2e-4 \ --num_train_epochs 8 \ --plot_loss \ --bf16 # 3. 预测 sh ./dbgpt_hub/scripts/predict_sft.sh # 4. 评估默认在 Spider 数据集上 python dbgpt_hub/eval/evaluation.py --plug_value --input Your_model_pred.sqlpip 包方式与脚本方式底层共享同一套数据处理与训练逻辑二者参数语义完全对齐。资源消耗与调优建议文档记录的实验环境为 A10040G显卡服务器LoRA 训练总时长约 12 小时若机器资源不足可优先减小gradient_accumulation_steps也可改用 QLoRA训练脚本中加--quantization_bit 4。据 DB-GPT-Hub 项目经验QLoRA 在 8 个 epoch 下与 LoRA 的微调结果差距不大训练数据量参考Spider 处理后的训练集约 8659 条、验证集约 1034 条对应脚本生成example_text2sql_train.json/example_text2sql_dev.json。在 DB-GPT 中使用微调后的模型微调完成后得到的 LoRA 适配器需要与基座模型合并对应 pipeline 中的 Model merge 环节或在推理时叠加 LoRA 权重。在 DB-GPT 项目中Text2SQL 与 Text2API(DSL) 微调的目的是增强模型性能参见 fine_tuning.md。更细粒度的部署与模型服务接入方式可参考 model_service 相关文档与 llms.md 了解 LLM 模型如何配置到 DB-GPT 运行时中。小结通过dbgpt_hubpip 包开发者可以用四个 Python 函数完成一条完整的 Text2SQL 微调流水线preprocess_sft_data负责将原始数据集格式化为 SFT 数据train_sft完成 LoRA/QLoRA 微调并产出 PEFT 权重start_predict加载 checkpoint 进行 SQL 生成start_evaluate在 Spider 等数据集上以执行匹配方式评估准确率。相比仓库脚本方式该方案安装简单、参数集中、可直接嵌入自定义训练脚本是快速开展 Text2SQL 微调实验的高效入口。【免费下载链接】DB-GPTopen-source agentic AI data assistant for the next generation of AI Data products.项目地址: https://gitcode.com/GitHub_Trending/db/DB-GPT创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考