训练数据管理系统位于 data_pipeline/trainer/ 目录下,负责将生成的训练数据文件加载到向量数据库中。该系统支持多种文件格式的自动识别和处理。
run_training.py - 主训练脚本,支持命令行调用vanna_trainer.py - 训练器核心模块,封装训练逻辑训练数据路径配置现已统一到 data_pipeline/config.py:
SCHEMA_TOOLS_CONFIG = {
"output_directory": "./data_pipeline/training_data/",
# 其他配置...
}
代码按以下顺序判断文件类型:
.ddl → DDL文件.md 或 .markdown → 文档文件_pair.json 或 _pairs.json → JSON问答对文件_pair.sql 或 _pairs.sql → 格式化问答对文件.sql (但不以 _pair.sql 或 _pairs.sql 结尾) → SQL示例文件.ddl)train_ddl_statements()train_ddl()文件格式:
;) 作为分隔符示例格式:
create table public.bss_company (
id varchar(32) not null -- 主键ID,主键,
version integer not null -- 版本号,
company_name varchar(255) -- 公司名称,
primary key (id)
);
.md, .markdown)train_documentation_blocks()train_documentation()#, ##, ###)--- 作为分隔符示例格式: ```markdown
bss_company 表存储高速公路管理公司信息,用于服务区运营管理
字段列表:
.sql, 但排除 _pair.sql 和 _pairs.sql)train_sql_examples()train_sql_example()文件格式:
;) 作为分隔符示例格式:
SELECT * FROM bss_company WHERE delete_ts IS NULL;
SELECT company_name, company_no FROM bss_company ORDER BY company_name;
_pair.sql, _pairs.sql)train_formatted_question_sql_pairs()train_question_sql_pair()Question: 和 SQL: 标记Question: 查询所有公司信息 SQL: SELECT * FROM bss_company WHERE delete_ts IS NULL;
Question: 统计每个公司的服务区数量 SQL: SELECT c.company_name, COUNT(sa.id) as area_count FROM bss_company c LEFT JOIN bss_service_area sa ON c.id = sa.company_id WHERE c.delete_ts IS NULL GROUP BY c.company_name;
### 5. JSON格式问答对文件 (`_pair.json`, `_pairs.json`)
- **处理函数**: `train_json_question_sql_pairs()`
- **调用的训练函数**: `train_question_sql_pair()`
- **文件格式**:
- 标准JSON数组格式
- 每个对象包含 `question` 和 `sql` 字段
- 示例格式:
```json
[
{
"question": "查询所有公司信息",
"sql": "SELECT * FROM bss_company WHERE delete_ts IS NULL"
},
{
"question": "按公司统计服务区数量",
"sql": "SELECT company_name, COUNT(*) FROM bss_service_area GROUP BY company_name"
}
]
# 使用默认配置路径
python -m data_pipeline.trainer.run_training
# 指定训练数据目录
python -m data_pipeline.trainer.run_training --data_path ./data_pipeline/training_data/
训练数据加载已集成到工作流编排器中,作为第4步自动执行:
python -m data_pipeline.schema_workflow \
--db-connection "postgresql://user:pass@localhost:5432/database" \
--table-list tables.txt \
--business-context "业务描述"
from data_pipeline.trainer.run_training import process_training_files
# 处理训练文件
success = process_training_files("./data_pipeline/training_data/")
if success:
print("训练数据加载成功")
.txt 文件 - 不被处理命令行参数 > data_pipeline/config.py > 默认值
所有数据管道相关配置现统一在 data_pipeline/config.py:
SCHEMA_TOOLS_CONFIG = {
"output_directory": "./data_pipeline/training_data/",
# 训练相关配置...
}
训练完成后显示统计:
训练数据加载时会自动标记数据类型:
ddl - DDL语句documentation - 文档内容sql - SQL示例和问答对训练完成后自动验证:
data_pipeline/training_data/
├── *.ddl # DDL文件
├── *_detail.md # MD文档文件
├── qs_*_pair.json # 问答对文件
├── filename_mapping.txt # 文件映射
└── logs/ # 日志目录(如果需要)
table_name.ddl 或 schema__table_name.ddltable_name_detail.md 或 schema__table_name_detail.mdqs_dbname_timestamp_pair.jsonapp_config.py 中的训练配置区域这个训练数据管理系统为完整的数据管道提供了最后一环,确保生成的训练数据能够有效地加载到向量数据库中供AI模型使用。