O que assistant-lab faz?
Bancada de autoaperfeiçoamento para /assistant. Este é o laboratório onde
/assistant diagnostica problemas, treina novos modelos, os avalia e
promove modelos aprovados para o registro ativo.
Não deve ser confundido com /monitor-skills, que é o daemon de observabilidade
que monitora TODAS as habilidades quanto a saúde, desvio e problemas de sincronia.
/assistant-lab é especificamente a caixa de ferramentas de autoaperfeiçoamento.
O Ciclo de Autoaperfeiçoamento
/monitor-skills detecta problema ← observabilidade
↓
/assistant-lab diagnostica causa raiz ← esta habilidade
↓
Modo sombra: professor (scillm) rotula fluxo em shadow.jsonl
↓
ModelFactory.auto_improve(tarefa)
├─ lê taxa de concordância sombra
├─ >= 90%: promover → atualizar model_registry.json
├─ 80-90%: platô → /prompt-lab redesenhar
├─ 70-80%: retreinar → /create-gpt ou /create-classifier
└─ < 70%: retreinamento agressivo + mudança de arquitetura
↓
/gpt-lab benchmark ou /classifier-lab avalia
↓ aprovou? → promover para registro ativo
↓
/assistant usa o modelo melhorado em tempo de inferência
Ferramentas Disponíveis
| Ferramenta | Propósito | Quando Usar |
|---|---|---|
/create-gpt | Treinar GPT com QLoRA/SFT/GRPO (Nível 1.5) | Concordância < 80% ou nenhum modelo existe |
/create-classifier | Treinar classificador DistilBERT/sklearn (Nível 0.5) | Tarefas de classificação de texto |
/create-regressor | Treinar regressor sklearn/XGB (Nível 0.75) | Tarefas de predição contínua |
| RunPod Flash | Treinamento GPU serverless via Python SDK (7B–70B) | Modelo muito grande para A5000 local — substitui /ops-runpod para treinamento |
/gpt-lab | Avaliar GPT contra baseline do professor | Após treinamento, antes da promoção |
/classifier-lab | Avaliar acurácia/F1 do classificador | Após treinamento do classificador |
/prompt-lab | Redesenhar prompts quando platô é detectado | Concordância travada em 80-90% |
/scillm | Professor Nível 2 — cria rótulos | Sempre (professor é a verdade absoluta) |
Uso
CLI
# Diagnosticar o que uma tarefa precisa
./run.sh diagnose --tarefa stress-test-grader
# Ciclo completo de autoaperfeiçoamento autônomo
./run.sh auto-improve --tarefa stress-test-grader
# Treinar tipo específico de modelo
./run.sh train --tarefa stress-test-grader --tipo gpt
./run.sh train --tarefa sparta-ambiguity --tipo classifier
# Avaliar um modelo
./run.sh evaluate --tarefa stress-test-grader --tipo gpt
# Promover um modelo aprovado (desativa modo sombra)
./run.sh promote --tarefa stress-test-grader --tipo gpt
# Coletar rótulos do professor de shadow.jsonl
./run.sh harvest --tarefa stress-test-grader --desde 24h
# Mostrar estatísticas de concordância sombra para todas as tarefas
./run.sh status
# Executar autoteste completo (ciclo treinar → avaliar → promover em dados de teste)
./run.sh self-test
API Python
from assistant_lab import AssistantLab
lab = AssistantLab()
# Diagnosticar: o que esta tarefa precisa?
diagnostico = lab.diagnose("stress-test-grader")
# → {"has_gpt": False, "has_classifier": False, "shadow_agreement": 0.0, ...}
# Autoaperfeiçoar: decidir + treinar + avaliar + promover
resultado = lab.auto_improve("stress-test-grader")
# → {"actions": ["trained gpt", "evaluated (passing=True)", "promoted"]}
# Etapas manuais
lab.train("stress-test-grader", model_type="gpt")
lab.evaluate("stress-test-grader", model_type="gpt")
lab.promote("stress-test-grader", model_type="gpt")
Fábrica de Modelos
O núcleo do motor é ModelFactory (de /common/model_factory.py).
/assistant-lab o envolve com CLI + diagnósticos + relatórios.
Limiares de Concordância Sombra
| Taxa de Concordância | Ação | Justificativa |
|---|---|---|
| >= 90% | Promover | Aluno corresponde confiavelmente ao professor |
| 80-90% | Redesenho /prompt-lab | Platô — prompts podem ser o teto |
| 70-80% | Retreinar com mais rótulos | Mais dados provavelmente ajudam |
| < 70% | Retreinamento agressivo | Mudar arquitetura ou modelo base |
| < 50 amostras | Aguardar | Dados insuficientes para decidir |
Dados Mínimos de Treinamento (NÃO NEGOCIÁVEIS)
NÃO chame /create-gpt train ou /create-classifier train com dados insuficientes.
| Tipo de Modelo | Amostras Mínimas | Regra |
|---|---|---|
| GPT (QLoRA SFT) | 1.000+ total | < 1.000 → permanece no Professor Nível 2 |
| Classificador (sklearn/SetFit) | 200 por classe | n_amostras / n_classes >= 200 |
| Regressor | 100+ total | Orientação padrão sklearn |
Evidência: sparta_stress_grading foi treinado com 246 amostras → 33,7% de concordância.
Isso são 4 meses de rótulos sombra desperdiçados porque o modelo foi treinado cedo demais.
Colete primeiro, treine quando estiver pronto.
Fluxo de Dados de Treinamento
Professor Nível 2 (scillm via persona)
↓ rótulos salvos em shadow.jsonl
↓
/assistant-lab harvest --tarefa X
↓ extrai pares entrada+saída
↓
/create-gpt train --tarefa X --dados labels.jsonl
↓ QLoRA em Qwen2.5-1.5B (padrão)
↓
/gpt-lab benchmark --tarefa X
↓ compara aluno vs professor
↓
/assistant-lab promote --tarefa X --tipo gpt
↓ atualiza model_registry.json, shadow_mode=false
Treinamento Remoto (RunPod Flash)
Para modelos grandes demais para a RTX A5000 local (24GB VRAM, máximo ~1.7B com LoRA),
assistant-lab usa RunPod Flash — o SDK Python serverless sem Docker,
sem SSH e sem sobrecarga de rsync. Flash substitui /ops-runpod para todos os
caminhos de treinamento. /ops-runpod é mantido apenas para servidores de inferência persistentes.
Quando Usar Flash
| Tamanho do Modelo | A5000 Local | Flash Necessário? | GPU |
|---|---|---|---|
| 0.5–1.7B | LoRA cabe | Não | ./run.sh train (local) |
| 3–7B | Não cabe | Sim | B200 (preferido) ou H200 |
| 8–13B | Impossível | Sim | B200 (preferido) ou H200 |
Tipos de GPU Flash
| GPU | VRAM | Notas |
|---|---|---|
B200 | 192 GB HBM3e | Mais rápida; 3–5× H200 em MoE / contexto longo |
H200 | 192 GB HBM3 | Boa disponibilidade; baseline sólido |
Cobrança: pagamento por segundo, execução máxima de 7 dias por job.
Estimativas de Custo Flash (aproximadas)
| Tamanho do Modelo | GPU | Tempo de Treinamento Est. | Custo Est. |
|---|---|---|---|
| 7B QLoRA SFT | B200 | ~1–2 hrs | ~$5–15 |
| 7B QLoRA SFT | H200 | ~2–3 hrs | ~$8–20 |
| 13B QLoRA SFT | B200 | ~2–4 hrs | ~$10–25 |
| 13B QLoRA SFT | H200 | ~3–5 hrs | ~$12–30 |
Comandos
# Passo 1: Sempre estime o custo primeiro
./run.sh estimate --tarefa taxonomy-assessor --alvo flash --gpu B200 --tamanho 7B
# Passo 2: Treinar no Flash B200 (requer --confirm por segurança)
./run.sh train --tarefa taxonomy-assessor --alvo flash --gpu B200 --tamanho 7B --confirm
# Treinar no Flash H200
./run.sh train --tarefa taxonomy-assessor --alvo flash --gpu H200 --tamanho 13B --confirm
# Com modelo base personalizado
./run.sh train --tarefa taxonomy-assessor --alvo flash --gpu B200 --tamanho 8B \
--base-model meta-llama/Llama-3.1-8B-Instruct --confirm
# Com quantização diferente
./run.sh train --tarefa qra-validator --alvo flash --gpu B200 --tamanho 7B \
--quantize Q5_K_M --confirm
Pipeline de Treinamento Flash
estimate --alvo flash --gpu B200 --tamanho 7B
↓
train --alvo flash --gpu B200 --confirm
├─ 1. Estimativa de custo + portão de orçamento
├─ 2. Job Flash serverless submetido (Python SDK — sem Docker/SSH)
├─ 3. Dataset transmitido para o worker Flash
├─ 4. Treinamento QLoRA / SFT executado em B200/H200 (192GB VRAM)
├─ 5. Pesos do modelo baixados para /mnt/storage12tb/models/
├─ 6. create-gpt export --quantize Q4_K_M (GGUF)
└─ 7. Avaliar + promover automaticamente se aprovado
Portões de Segurança
- Limite de orçamento:
--max-cost(padrão $15.00) bloqueia treinamento se a estimativa exceder o limite - Confirmação: Deve passar
--confirm— sem ele, mostra o custo e sai - Desligamento automático: O job Flash é cancelado na saída (mesmo em erro, via trap)
- Registro de métricas: Cada treinamento Flash é registrado em
lab_metrics.jsonl
Integração com o Ciclo de Autoaperfeiçoamento
Modelos treinados remotamente integram-se à mesma cascata que modelos locais:
Nível 0: Heurística (grátis, instantâneo)
Nível 0.5: Classificador (local, grátis)
Nível 1.5: GPT Local ≤1.7B (create-gpt, grátis após treinamento)
Nível 1.5: GPT Remoto 3-13B (train-remote, grátis após treinamento) ← NOVO
Nível 2: scillm/DeepSeek V3 (Chutes, $0.12/1K chamadas)
Um modelo de 7-13B no Nível 1.5 pode reduzir significativamente as escalações para o Nível 2 (Chutes), potencialmente pagando seu custo de treinamento com a redução de excedentes.
Relacionamento com Outras Habilidades
/monitor-skills ──→ "habilidade X não está saudável"
↓
/assistant-lab ──→ diagnosticar → treinar → avaliar → promover
↓
/assistant ──────→ usa modelo promovido em tempo de inferência
/monitor-skills: Observa TODAS as habilidades. Detecta problemas. Relata saúde./assistant-lab: Corrige modelos do /assistant. Treina, avalia, promove./assistant: Executa inferência. Usa quaisquer modelos que o laboratório produziu.
Contrato
- Entrada: Nome da tarefa + tipo opcional de modelo
- Saída: Diagnóstico, resultados de treinamento, resultados de avaliação, status de promoção
- Dependências: model_factory.py (de /common), habilidades create-* e *-lab
- Métricas: Anexa a
~/.pi/assistant/lab_metrics.jsonl