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(层级 1.5) | 一致性 < 80% 或尚无模型 |
/create-classifier | 训练 DistilBERT/sklearn 分类器(层级 0.5) | 文本分类任务 |
/create-regressor | 训练 sklearn/XGB 回归器(层级 0.75) | 连续值预测任务 |
| RunPod Flash | 通过 Python SDK 进行无服务器 GPU 训练(7B–70B) | 模型太大,本地 A5000 无法承载 — 取代了用于训练的 /ops-runpod |
/gpt-lab | 将 GPT 与教师基线进行基准测试 | 训练之后、提升之前 |
/classifier-lab | 评估分类器的准确率/F1 值 | 分类器训练之后 |
/prompt-lab | 检测到平台期时重新设计提示词 | 一致性卡在 80-90% |
/scillm | 层级 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 → 停留在层级 2 教师 |
| 分类器 (sklearn/SetFit) | 每类 200 | n_samples / n_classes >= 200 |
| 回归器 | 总计 100+ | 标准 sklearn 指导原则 |
实例:sparta_stress_grading 基于 246 个样本训练,一致性仅 33.7%。
这是因为模型训练过早,浪费了 4 个月的影子标签。
先收集,准备充分后再训练。
训练数据流程
层级 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
↓ 比较学生模型与教师模型
↓
/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 | 显存 | 备注 |
|---|---|---|
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 显存) 上运行 QLoRA / SFT 训练
├─ 5. 将模型权重拉取到 /mnt/storage12tb/models/
├─ 6. create-gpt export --quantize Q4_K_M (GGUF)
└─ 7. 评估 + 如果通过则自动提升
安全门控
- 预算上限:
--max-cost(默认 $15.00)如果估算超过限制则阻止训练 - 确认:必须传递
--confirm— 否则仅显示成本并退出 - 自动销毁:退出时(即使出错,通过 trap 机制)会自动取消 Flash 作业
- 指标记录:每次 Flash 训练运行都会记录到
lab_metrics.jsonl
与自我提升循环的集成
远程训练的模型与本地模型遵循相同的级联规则:
层级 0: 启发式(免费,即时)
层级 0.5: 分类器(本地,免费)
层级 1.5: 本地 GPT ≤1.7B(create-gpt,训练后免费使用)
层级 1.5: 远程 GPT 3-13B(train-remote,训练后免费使用) ← 新增
层级 2: scillm/DeepSeek V3(Chutes,$0.12/1K 次调用)
一个 7-13B 的层级 1.5 模型可以显著减少层级 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