name: data-synthesis description: >- 從 CSV 語料切塊後,用同一套 LLM 介面依次生成問題與答案,輸出 JSONL 訓練資料。 適用於文件/表格語料合成 QA、微調資料準備;支援 OpenAI 相容閘道器與內網 Qwen 等服務。
小蔥技能7w4.net有完整的技能分類。
CSV 語料 → 按字元切塊 → 每塊生成問題列表 → 對每個問題基於該塊生成答案 → 寫出 JSONL。
不包含單獨的小模型質量過濾環節。
| 階段 | 說明 |
|---|---|
| 輸入 | 帶表頭的 CSV,需有一列長文本可供切塊 |
| 切塊與遍歷 | scripts/synthesize_qa.py |
| 問題生成 | 每個文本塊呼叫一次 LLM |
| 答案生成 | 每個「塊 + 問題」呼叫一次 LLM |
| 輸出 | 每行一條 JSON(JSONL) |
scripts/parse_file.py,確認列名、行數、文本列與內容預覽。scripts/synthesize_qa.py,得到 JSONL。DATA_SYNTHESIS_USE_API=1 後走真實推理。若閘道器需要鑑權,再配置 OPENAI_API_KEY。| 指令碼 | 作用 |
|---|---|
scripts/parse_file.py |
校驗 CSV,輸出列名、行數、detected_text_column、文本預覽 |
scripts/synthesize_qa.py |
完整 QA 流水線;預設輸出 <輸入檔名_stem>_qa.jsonl,可用 -o 指定路徑 |
僅依賴 Python 標準庫。API 模式通過 urllib 呼叫 OpenAI 相容的 POST .../v1/chat/completions(OPENAI_BASE_URL 可寫成根路徑 .../v1,也可寫成完整 URL 直至 .../chat/completions)。
# 1. 檢查語料
python scripts/parse_file.py path/to/corpus.csv
# 2. 本地 dry-run(不寫金鑰、不調外網)
python scripts/synthesize_qa.py path/to/corpus.csv -o path/to/out.jsonl
內網 Qwen 示例(與環境變數一致,推薦):
export DATA_SYNTHESIS_USE_API=1
export OPENAI_BASE_URL='http://xxx'
export DATA_SYNTHESIS_MODEL='xxx'
export DATA_SYNTHESIS_MAX_TOKENS=2000
export DATA_SYNTHESIS_TEMPERATURE=0.7
python scripts/synthesize_qa.py path/to/corpus.csv \
--text-column text \
--chunk-size 6000 \
--chunk-overlap 200 \
--sleep 0.3 \
-o path/to/out.jsonl
僅用命令列指定模型(與上面環境變數二選一即可):
python scripts/synthesize_qa.py path/to/corpus.csv \
--text-column text \
--model xxx \
-o path/to/out.jsonl
常用引數:--max-rows 試跑前幾行;--sleep 控制請求間隔。勿在已設定 DATA_SYNTHESIS_MODEL 時再傳衝突的 --model。
text、content、body、正文、文本;否則使用第一列。--text-column 列名。chunk_id、row_index、chunk、question、answer,以及 source_fields(除主文本列外、值非空的其它列)。rows、chunks、questions_generated、qa_pairs_written、errors。能力: 適合從表格語料批次得到結構化 QA,便於後續清洗與訓練;出題與作答共用同一模型與閘道器配置。
侷限: 切塊為字元滑動視窗,不是按段落語義切分;問題列表依賴模型返回可解析的 JSON,失敗會記入 errors。
這個工具質量不錯,文件寫得很清楚,配置和使用都比較簡單。它能把 CSV 裡的文本自動切成小塊,然後用大模型生成問答對,輸出可以直接用來訓練的資料。沒有聯網也能先測試,這點很實用。主要問題是切塊方式比較簡單,沒有智慧分段;另外生成的問題質量完全取決於模型,沒有額外的質量把關環節,大批次生成時可能需要自己再篩選一遍。總體來說能滿足基本需求,但還有提升空間。