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 教師 (ペルソナ経由の scillm)
↓ ラベルを shadow.jsonl に保存
↓
/assistant-lab harvest --task X
↓ 入力+出力ペアを抽出
↓
/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 を使用します。これは、Docker、SSH、rsync の
オーバーヘッドがないサーバーレス Python SDK です。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/1K 呼び出し)
Tier 1.5 の 7-13B モデルは、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に追記