一步一步示範 Self-Instruct(自動生成訓練資料)的方法。
這是很多模型(如 OpenAI、Stanford University 研究團隊)提出並實際使用的技巧,可以用一個強模型自動生成大量資料,然後用來微調另一個模型。
一、Self-Instruct 的核心概念
流程其實很簡單:大模型 (Teacher)
│
│ 生成 instruction + answer
▼
訓練資料 dataset
│
│ 微調
▼
小模型 (Student)
例如:
GPT-4 / Claude / DeepSeek
↓
生成 10萬筆資料
↓
微調 Qwen / Llama
二、生成資料的 Prompt
先設計一個 資料生成 prompt。
例如:
</>Plain text
請生成一筆訓練資料,格式為 JSON:
{
"instruction": "...",
"output": "..."
}
instruction 必須是使用者問題,
output 必須是高品質回答。
主題:中國歷史人物
模型就會生成:
</>JSON
{
"instruction":"安祿山是誰?",
"output":"安祿山是唐朝節度使,後來發動安史之亂。"
}
三、Python 自動生成 Dataset
簡單程式如下:
</>Python
import json
from openai import OpenAI
client = OpenAI()
dataset = []
for i in range(10000):
response = client.responses.create(
model="gpt-4.1",
input="""
生成一筆 JSON 訓練資料:
{
"instruction": "...",
"output": "..."
}
主題:武俠小說
"""
)
text = response.output[0].content[0].text
data = json.loads(text)
dataset.append(data)
with open("dataset.jsonl","w") as f:
for d in dataset:
f.write(json.dumps(d,ensure_ascii=False)+"\n")
結果:
dataset.jsonl
裡面可能有:
10000 行資料
四、生成的資料例子
{"instruction":"介紹華山派","output":"華山派是中國武俠小說中的名門正派之一,以劍法聞名。"}
{"instruction":"寒元真訣是什麼","output":"寒元真訣是一種以寒氣運行經脈的內功心法。"}
{"instruction":"安祿山是誰","output":"安祿山是唐朝胡人將領,後發動安史之亂。"}
五、進階版本(多樣化生成)
為了避免資料太單調,可以隨機主題:
</>Python
topics = [
"武俠人物",
"歷史人物",
"武功招式",
"門派介紹",
"兵器介紹"
]
Prompt:
生成一筆武俠小說訓練資料
主題:{topic}
模型會產生更多樣資料。
六、過濾 Dataset(很重要)
Self-Instruct 會產生很多垃圾資料。
必須過濾:
例如:
</>Python
if len(output) < 10:
skip
if "不知道" in output:
skip
或讓 AI 自己評分:
請給這筆回答品質評分 1-10
只保留 8分以上。
七、Self-Instruct Dataset 規模
常見數量:

很多開源模型:
50k – 200k八、Self-Instruct 的真正威力
例如:
原始模型:
Qwen2 7B微調後:
武俠小說專家 AI
模型會變成:
- 懂人物
- 懂門派
- 懂武功
這叫 Domain Specialization。
九、很多人不知道的進階技巧
真正高級的方法是:
讓 AI 自己生成三個欄位
instruction
reasoning
answer
例如:
問題:安祿山為何造反?
reasoning:
安祿山掌握三鎮兵權,與楊國忠衝突……
answer:
因此在755年發動安史之亂。
這樣模型推理能力會更好。
十、完整 Self-Instruct Pipeline
完整流程:
1 設計 prompt
2 AI 生成 100k dataset
3 自動過濾
4 微調 LLM
5 測試
6 再生成資料
7 再微調
這就是 LLM bootstrapping。
✅ 總結
Self-Instruct 的核心就是:
強模型 → 生成資料 → 訓練弱模型4090 完全可以做到:
- 生成 10萬資料
- 微調 7B 模型
- 做出自己的 AI















