assistant-lab 是做什麼的?
/assistant 的自我改善工作檯。這是 實驗室,
/assistant 在此診斷問題、訓練新模型、評估它們,並
將通過的模型推廣到正式登錄檔。
請勿與 /monitor-skills 混淆,後者是監控所有技能
健康狀況、漂移和同步問題的可觀測性守護程序。
/assistant-lab 是專門的自我改善工具箱。
自我改善循環
/monitor-skills 偵測到問題 ← 可觀測性
↓
/assistant-lab 診斷根本原因 ← 此技能
↓
影子模式:教師 (scillm) 將標籤存入 shadow.jsonl
↓
ModelFactory.auto_improve(task)
├─ 讀取影子一致率
├─ >= 90%: 推廣 → 更新 model_registry.json
├─ 80-90%: 高原期 → /prompt-lab 重新設計
├─ 70-80%: 重新訓練 → /create-gpt 或 /create-classifier
└─ < 70%: 積極重新訓練 + 架構變更
↓
/gpt-lab 基準測試 或 /classifier-lab 評估
↓ 通過?→ 推廣至正式登錄檔
↓
/assistant 在推論時使用改進後的模型
可用工具
| 工具 | 用途 | 使用時機 |
|---|---|---|
/create-gpt | 訓練 QLoRA/SFT/GRPO GPT (Tier 1.5) | 一致率 < 80% 或無現有模型 |
/create-classifier | 訓練 DistilBERT/sklearn 分類器 (Tier 0.5) | 文字分類任務 |
/create-regressor | 訓練 sklearn/XGB 回歸器 (Tier 0.75) | 連續預測任務 |
| RunPod Flash | 透過 Python SDK 進行無伺服器 GPU 訓練 (7B–70B) | 模型過大,本地 A5000 無法負載 — 取代 /ops-runpod 進行訓練 |
/gpt-lab | 對 GPT 進行基準測試,與教師基準比較 | 訓練後,推廣前 |
/classifier-lab | 評估分類器準確率/F1 | 分類器訓練後 |
/prompt-lab | 偵測到高原期時重新設計提示 | 一致率卡在 80-90% |
/scillm | Tier 2 教師 — 建立標籤 | 始終使用(教師為真實答案) |
使用方法
CLI
# 診斷任務需要什麼
./run.sh diagnose --task stress-test-grader
# 完整的自主改善循環
./run.sh auto-improve --task stress-test-grader
# 訓練特定模型類型
./run.sh train --task stress-test-grader --type gpt
./run.sh train --task sparta-ambiguity --type classifier
# 評估模型
./run.sh evaluate --task stress-test-grader --type gpt
# 推廣通過的模型(停用影子模式)
./run.sh promote --task stress-test-grader --type gpt
# 從 shadow.jsonl 收集教師標籤
./run.sh harvest --task stress-test-grader --since 24h
# 顯示所有任務的影子一致率統計
./run.sh status
# 執行完整自我測試(在測試資料上執行訓練 → 評估 → 推廣循環)
./run.sh self-test
Python API
from assistant_lab import AssistantLab
lab = AssistantLab()
# 診斷:此任務需要什麼?
diagnosis = lab.diagnose("stress-test-grader")
# → {"has_gpt": False, "has_classifier": False, "shadow_agreement": 0.0, ...}
# 自動改善:決策 + 訓練 + 評估 + 推廣
result = lab.auto_improve("stress-test-grader")
# → {"actions": ["trained gpt", "evaluated (passing=True)", "promoted"]}
# 手動步驟
lab.train("stress-test-grader", model_type="gpt")
lab.evaluate("stress-test-grader", model_type="gpt")
lab.promote("stress-test-grader", model_type="gpt")
模型工廠
核心引擎是 ModelFactory(來自 /common/model_factory.py)。
/assistant-lab 為其包裝了 CLI、診斷和報告功能。
影子一致率門檻
| 一致率 | 動作 | 理由 |
|---|---|---|
| >= 90% | 推廣 | 學生模型可靠地匹配教師 |
| 80-90% | /prompt-lab 重新設計 | 高原期 — 提示可能是瓶頸 |
| 70-80% | 重新訓練(使用更多標籤) | 更多資料可能有所幫助 |
| < 70% | 積極重新訓練 | 變更架構或基礎模型 |
| < 50 個樣本 | 等待 | 資料不足以做出決定 |
最低訓練資料量(不可協商)
請勿在資料不足時呼叫 /create-gpt train 或 /create-classifier train。
| 模型類型 | 最低樣本數 | 規則 |
|---|---|---|
| GPT (QLoRA SFT) | 1,000+ 總計 | < 1,000 → 停留在 Tier 2 教師 |
| 分類器 (sklearn/SetFit) | 每個類別 200 個 | n_samples / n_classes >= 200 |
| 回歸器 | 100+ 總計 | 標準 sklearn 建議 |
證據:sparta_stress_grading 僅以 246 個樣本訓練 → 33.7% 一致率。
這浪費了 4 個月收集的影子標籤,因為模型訓練得太早了。
先收集,準備好再訓練。
訓練資料流程
Tier 2 教師 (透過 persona 的 scillm)
↓ 標籤儲存至 shadow.jsonl
↓
/assistant-lab harvest --task X
↓ 提取 input+output 對
↓
/create-gpt train --task X --data labels.jsonl
↓ 在 Qwen2.5-1.5B 上進行 QLoRA(預設)
↓
/gpt-lab benchmark --task X
↓ 比較學生模型 vs 教師
↓
/assistant-lab promote --task X --type gpt
↓ 更新 model_registry.json,shadow_mode=false
遠端訓練 (RunPod Flash)
對於本地 RTX A5000(24GB VRAM,搭配 LoRA 最大約 1.7B)無法負載的模型,
assistant-lab 使用 RunPod Flash — 無伺服器 Python SDK,無需 Docker、
無需 SSH,也無需 rsync 開銷。Flash 取代了 /ops-runpod 用於所有訓練
路徑。/ops-runpod 僅保留給持久性推論伺服器使用。
何時使用 Flash
| 模型大小 | 本地 A5000 | 需要 Flash | GPU |
|---|---|---|---|
| 0.5–1.7B | LoRA 可容納 | 否 | ./run.sh train (本地) |
| 3–7B | 無法容納 | 是 | B200(首選)或 H200 |
| 8–13B | 不可能 | 是 | B200(首選)或 H200 |
Flash GPU 類型
| GPU | VRAM | 備註 |
|---|---|---|
B200 | 192 GB HBM3e | 最快;在 MoE / 長上下文上比 H200 快 3–5 倍 |
H200 | 192 GB HBM3 | 可用性佳;穩定的基準 |
計費方式:按秒付費,每個工作最多執行 7 天。
Flash 成本估算(約略值)
| 模型大小 | GPU | 預計訓練時間 | 預計成本 |
|---|---|---|---|
| 7B QLoRA SFT | B200 | ~1–2 小時 | ~$5–15 |
| 7B QLoRA SFT | H200 | ~2–3 小時 | ~$8–20 |
| 13B QLoRA SFT | B200 | ~2–4 小時 | ~$10–25 |
| 13B QLoRA SFT | H200 | ~3–5 小時 | ~$12–30 |
指令
# 步驟 1:務必先估算成本
./run.sh estimate --task taxonomy-assessor --target flash --gpu B200 --size 7B
# 步驟 2:在 Flash B200 上訓練(需要 --confirm 以策安全)
./run.sh train --task taxonomy-assessor --target flash --gpu B200 --size 7B --confirm
# 在 Flash H200 上訓練
./run.sh train --task taxonomy-assessor --target flash --gpu H200 --size 13B --confirm
# 使用自訂基礎模型
./run.sh train --task taxonomy-assessor --target flash --gpu B200 --size 8B \
--base-model meta-llama/Llama-3.1-8B-Instruct --confirm
# 使用不同的量化方式
./run.sh train --task qra-validator --target flash --gpu B200 --size 7B \
--quantize Q5_K_M --confirm
Flash 訓練流程
estimate --target flash --gpu B200 --size 7B
↓
train --target flash --gpu B200 --confirm
├─ 1. 成本估算 + 預算檢查
├─ 2. Flash 無伺服器工作已提交(Python SDK — 無 Docker/SSH)
├─ 3. 資料集串流至 Flash 工作節點
├─ 4. 在 B200/H200 (192GB VRAM) 上執行 QLoRA / SFT 訓練
├─ 5. 將模型權重拉取至 /mnt/storage12tb/models/
├─ 6. create-gpt export --quantize Q4_K_M (GGUF)
└─ 7. 評估 + 若通過則自動推廣
安全閘道
- 預算上限:
--max-cost(預設 $15.00)若估算超出限制則阻止訓練 - 確認:必須傳入
--confirm— 否則僅顯示成本並退出 - 自動清理:Flash 工作會在退出時取消(即使發生錯誤,透過 trap 機制)
- 指標記錄:每次 Flash 訓練執行都會記錄到
lab_metrics.jsonl
與自我改善循環的整合
遠端訓練的模型與本地模型使用相同的級聯機制整合:
Tier 0: 啟發式 (免費,即時)
Tier 0.5: 分類器 (本地,免費)
Tier 1.5: 本地 GPT ≤1.7B (create-gpt,訓練後免費)
Tier 1.5: 遠端 GPT 3-13B (train-remote,訓練後免費) ← 新增
Tier 2: scillm/DeepSeek V3 (Chutes,$0.12/千次呼叫)
一個 7-13B 的 Tier 1.5 模型可以顯著減少 Tier 2 (Chutes) 的升級請求, 有可能藉由減少超額費用來抵消其訓練成本。
與其他技能的關係
/monitor-skills ──→ "技能 X 不健康"
↓
/assistant-lab ──→ 診斷 → 訓練 → 評估 → 推廣
↓
/assistant ──────→ 在推論時使用被推廣的模型
/monitor-skills:觀察所有技能。偵測問題。報告健康狀況。/assistant-lab:修復 /assistant 的模型。訓練、評估、推廣。/assistant:執行推論。使用實驗室產出的任何模型。
合約
- 輸入:任務名稱 + 可選的模型類型
- 輸出:診斷結果、訓練結果、評估結果、推廣狀態
- 依賴:model_factory.py (來自 /common),create-* 以及 *-lab 技能
- 指標:附加至
~/.pi/assistant/lab_metrics.jsonl