run_training说明.md 4.9 KB

文件扩展名与处理函数对应关系

文件处理优先级和判断逻辑

代码中的文件类型判断按以下顺序进行:

  1. .ddl → DDL文件
  2. .md.markdown → 文档文件
  3. _pair.json_pairs.json → JSON问答对文件
  4. _pair.sql_pairs.sql → 格式化问答对文件
  5. .sql (但不以 _pair.sql_pairs.sql 结尾) → SQL示例文件
  6. 其他 → 跳过处理

1. DDL文件 (.ddl)

  • 处理函数: train_ddl_statements()
  • 调用的训练函数: train_ddl()
  • 文件格式:

    • 使用分号 (;) 作为分隔符
    • 每个DDL语句之间用分号分隔
    • 示例格式:

      CREATE TABLE users (
      id INT PRIMARY KEY,
      name VARCHAR(100)
      );
      CREATE TABLE orders (
      id INT PRIMARY KEY,
      user_id INT REFERENCES users(id)
      );
      

      2. 文档文件 (.md, .markdown)

      • 处理函数: train_documentation_blocks()
      • 调用的训练函数: train_documentation()
      • 文件格式:
      • Markdown文件: 按标题级别自动分割 (#, ##, ###)
      • 非Markdown文件: 使用 --- 作为分隔符
      • 示例格式: ```markdown

        用户表说明

        用户表存储系统中所有用户的基本信息...

      字段说明

      • id: 用户唯一标识符
      • name: 用户姓名

      注意事项

      用户名不能重复... ```

3. SQL示例文件 (.sql, 但排除 _pair.sql_pairs.sql)

  • 处理函数: train_sql_examples()
  • 调用的训练函数: train_sql_example()
  • 文件格式:

    • 使用分号 (;) 作为分隔符
    • 每个SQL示例之间用分号分隔
    • 示例格式:

      SELECT * FROM users WHERE age > 18;
      SELECT COUNT(*) FROM orders WHERE status = 'completed';
      SELECT u.name, COUNT(o.id) FROM users u LEFT JOIN orders o ON u.id = o.user_id GROUP BY u.id;
      

      4. 格式化问答对文件 (_pair.sql, _pairs.sql)

      • 处理函数: train_formatted_question_sql_pairs()
      • 调用的训练函数: train_question_sql_pair()
      • 文件格式:
      • 使用 Question:SQL: 标记
      • 问答对之间用双空行分隔
      • 支持单行和多行SQL
      • 示例格式: ```

    Question: 查询所有成年用户 SQL: SELECT * FROM users WHERE age >= 18;

    Question: 统计每个用户的订单数量 SQL: SELECT u.name, COUNT(o.id) as order_count FROM users u LEFT JOIN orders o ON u.id = o.user_id GROUP BY u.id, u.name;

    
    ### 5. **JSON格式问答对文件** (`_pair.json`, `_pairs.json`)
    - **处理函数**: `train_json_question_sql_pairs()`
    - **调用的训练函数**: `train_question_sql_pair()`
    - **文件格式**:
    - 标准JSON数组格式
    - 每个对象包含 `question` 和 `sql` 字段
    - 示例格式:
    ```json
    [
        {
            "question": "查询所有成年用户",
            "sql": "SELECT * FROM users WHERE age >= 18"
        },
        {
            "question": "统计每个用户的订单数量",
            "sql": "SELECT u.name, COUNT(o.id) as order_count FROM users u LEFT JOIN orders o ON u.id = o.user_id GROUP BY u.id, u.name"
        }
    ]
    

6. 传统问答对文件 (其他格式,通过 train_question_sql_pairs() 处理)

  • 处理函数: train_question_sql_pairs()
  • 调用的训练函数: train_question_sql_pair()
  • 文件格式:

    • 每行一个问答对
    • 使用 :: 分隔问题和SQL
    • 示例格式:

      查询所有成年用户::SELECT * FROM users WHERE age >= 18
      统计订单总数::SELECT COUNT(*) FROM orders
      

统计信息

训练完成后会显示以下统计:

  • DDL文件数量
  • 文档文件数量
  • SQL示例文件数量
  • 格式化问答对文件数量
  • JSON问答对文件数量

这个设计使得训练系统能够灵活处理多种不同格式的训练数据,满足不同场景下的数据准备需求。

训练脚本批处理配置

这些配置仅用于 training/run_training.py 训练脚本的批处理优化

批处理可以提高训练效率,但会增加内存使用和复杂度

TRAINING_BATCH_PROCESSING_ENABLED:

- True: 启用批处理,将多个训练项目打包一起处理

- False: 逐项处理,每个训练项目单独处理(更稳定但较慢)

TRAINING_BATCH_SIZE: 每批处理的训练项目数量

- 较大值: 处理更快但占用更多内存

- 较小值: 内存占用少但处理较慢

- 建议范围: 5-20

TRAINING_MAX_WORKERS: 训练批处理的最大工作线程数

- 建议设置为CPU核心数的1-2倍

- 过多线程可能导致资源竞争

TRAINING_BATCH_PROCESSING_ENABLED = True # 是否启用训练数据批处理 TRAINING_BATCH_SIZE = 10 # 每批处理的训练项目数量 TRAINING_MAX_WORKERS = 4 # 训练批处理的最大工作线程数