Aula 05 · Planejamento

Conhecimento de domínio carregado sob demanda

"Don't put everything in the system prompt. Load on demand."

⏱ ~10 min · 📝 3 componentes interativos · 🧑‍💻 Baseado em shareAI-lab · s05_skill_loading.py

A armadilha de "jogar tudo no system prompt"

Você tem 20 skills, cada uma bem detalhada: pdf-processing (como ler PDFs), code-review (checklist de review), git-workflow (padrões de git comuns)... A abordagem intuitiva: colocar tudo no system prompt para o modelo consultar a qualquer hora.

O resultado:

  • Cada chamada queima 15-30K tokens de entrada (mesmo que a pergunta não use nenhuma skill).
  • A atenção do modelo se dilui — regras mencionadas em system prompts longos têm menos obediência.
  • Alterar uma skill invalida o cache de todas as conversas históricas.

A abordagem do s05 é dividir em duas camadas.

Arquitetura em duas camadas

Layer 1 · barata: o system prompt contém apenas nome e uma descrição de uma linha de cada skill (cerca de 100 tokens por skill). 20 skills = 2K tokens, aceitável.

# lista de skills no system prompt
Skills available:
  - pdf: Process PDF files. Extract text, tables, metadata.
  - code-review: Systematic code review checklist.
  - git-workflow: Common git branching and rebase patterns.

Layer 2 · sob demanda: quando o modelo precisa de uma skill, chama load_skill(name="pdf"), e o corpo completo (pode ter 5-10K tokens) é inserido no contexto via tool_result. Skills não utilizadas nunca carregam nenhum token.

# tool_result retorna o skill completo
<skill name="pdf">
  Step 1: Use pdfplumber for extraction...
  Step 2: Handle OCR fallback when needed...
  Step 3: Structure output as Markdown table...
</skill>

Comparando o custo em tokens

Teste com um cenário real. Suponha 20 skills, cada corpo com média de 3.000 tokens. O usuário faz uma pergunta (por exemplo, "corrija um bug na API de login") — provavelmente sem usar nenhuma skill.

Formato do SKILL.md

Arquivos de skill usam YAML frontmatter + corpo:

---
name: pdf
description: Process PDF files. Extract text, tables, metadata.
tags: document,parsing
---

Step 1: Use pdfplumber for extraction. Handle multi-column layouts...
Step 2: For scanned PDFs, fall back to OCR via tesseract...

O frontmatter é para a Layer 1 (name/description/tags), o corpo é para a Layer 2. O formato é inspirado em geradores de sites estáticos (Jekyll, Hugo) — quem já usou reconhece na hora.

Interativo

Widget 1 · Token Economy · comparação das duas arquiteturas

Esquerda: tudo no system prompt. Direita: arquitetura em duas camadas. Veja o acúmulo de tokens ao longo de 20 conversas.

Tudo no system prompt
System prompt: 60000 tokens
(20 × 3000 tokens de skill inseridos integralmente)
× número de conversas: 1

Total: 60000 tokens
Arquitetura em duas camadas
System prompt: 2000 tokens
(20 descrições × ~100 tokens cada)
+ corpo de skill carregado sob demanda: 0 tokens
(carregado a cada 5 conversas)

Total: 2000 tokens
1
Economia de 0%
Interativo

Widget 2 · Frontmatter Parser · o que a Layer 1 e a Layer 2 extraem

Insira um SKILL.md e veja, usando a lógica de parsing de frontmatter YAML do s05, o que cada camada recebe.

SKILL.md (editável)
Layer 1 · inserido no system prompt

          
Layer 2 · tool_result retornado pelo load_skill

          
Interativo

Widget 3 · Discoverability · uma boa descrição de skill faz o modelo encontrar ela

A descrição da Layer 1 é o critério que o modelo usa para escolher uma skill. Três comparações — selecione qual descrição é melhor. Algumas escolhas fazem o modelo nunca encontrar a skill.

Acertos: 0 / 3