Context Engineering: prompt caching, subagents e skills
- ⬜🕸️ Multi-Agent Systems: orchestrator-worker, swarms e handoffs(Engenharia AI-Native)
Recomendamos completar os pré-requisitos antes de seguir, mas nada te impede de continuar.
Em 2026, janelas de 1M tokens são commodity — mas "enfiar tudo" continua sendo a forma mais cara e lenta de usar um LLM. Context engineering é a disciplina de gerenciar o que entra na janela: o que cachear, o que resumir, o que delegar, em que ordem posicionar, quando truncar. É onde um agent de US$5/query vira US$0.30/query sem perder qualidade.
A janela não é grátis
Preço típico (abril 2026): input em torno de US$3/1M tokens (Sonnet), US$0.25/1M (Haiku). Contextos de 100k tokens a cada chamada, em agent com loop de 10 passos, custam US$3 por execução. Em produto com 10k usuários/mês → US$30k/mês só de input. Cortar 50% do contexto = US$15k economizados. Context engineering paga salário.
Ordem importa: coloque o estável primeiro. Prompt caching só funciona em prefixos idênticos — qualquer mudança invalida o cache dali pra frente.
Prompt caching: o ganho de 90% que poucos usam
Anthropic, OpenAI e Google oferecem caching de prefixo. A mecânica: você marca blocos "cacheáveis" no início; o provider armazena o KV cache por ~5 min; chamadas dentro dessa janela pagam muito menos pelo prefixo.
| Provider | Como ativar | Preço cacheado vs normal |
|---|---|---|
| Anthropic | cache_control: { type: "ephemeral" } nos blocos | Write 125% / read 10% |
| OpenAI | Automático para prefixos repetidos (>1024 tok) | Read ~50% do preço normal |
| Google Gemini | cachedContent API — criar cache explícito | Read ~25% do preço + taxa de storage |
# Anthropic: marcar blocos cacheáveis
from anthropic import Anthropic
client = Anthropic()
r = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
system=[
{
"type": "text",
"text": LONG_SYSTEM_PROMPT, # 5k tokens
"cache_control": {"type": "ephemeral"},
},
],
tools=[
# tools também podem entrar no cache
*TOOL_DEFS,
],
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": LARGE_DOC, # 50k tokens, revisitado em várias queries
"cache_control": {"type": "ephemeral"},
},
{
"type": "text",
"text": user_query, # volátil, NÃO cacheado
},
],
},
],
)
# r.usage.cache_creation_input_tokens: primeira chamada, escreve o cache
# r.usage.cache_read_input_tokens: chamadas seguintes, leem o cache📋 Agent que faz 20 chamadas por sessão repetindo system prompt de 8k tokens
Sem cache: 20 × 8k = 160k tokens de input repetido. Com cache: 1 write + 19 reads ≈ 10% do custo. Economia ~90% em um item só.
Alt: Reduzir system prompt — útil, mas tem limite de quanto dá pra cortar
Alt: Mudar para Haiku — ganha preço mas perde qualidade em tarefas complexas
Compaction: resumo de conversa para janela cresce sem estourar
Conversas longas estouram janela rapidamente. A estratégia padrão é compaction: quando a janela atinge X% do limite, um LLM barato resume a conversa mais antiga em uma mensagem "system summary", e apaga as originais. O agent continua como se nada tivesse acontecido.
# Compaction simples — mantém últimas N mensagens + summary do resto
def compact_if_needed(messages: list[dict], max_tokens: int = 100_000) -> list[dict]:
total = sum(estimate_tokens(m) for m in messages)
if total < max_tokens * 0.7:
return messages # ainda cabe folgado
keep_tail = 8 # mantém últimas 8 em original
to_summarize = messages[:-keep_tail]
tail = messages[-keep_tail:]
summary_text = llm_call(
model="claude-haiku-4-5-20251001",
system="Resuma a conversa em 300 palavras, mantendo fatos, decisões e tool results relevantes para continuar.",
messages=to_summarize,
)
summary_msg = {
"role": "user",
"content": f"<conversation_summary>\n{summary_text}\n</conversation_summary>",
}
return [summary_msg] + tailCompaction é lossy. Tudo que foi resumido perde fidelidade. Para ações críticas (auditoria, decisão financeira), persista o trace original fora da janela e use summary apenas como contexto de continuação, não como verdade.
Subagent delegation: manter o principal limpo
Subagents rodam em janela isolada. O principal os invoca via Task tool (Claude Code) ou sub-agent (OpenAI Agents SDK), recebe apenas o output estruturado e continua. Isso mantém a janela principal enxuta e permite paralelismo.
| Incluir no contexto principal | Delegar a subagent |
|---|---|
| Fato curto e relevante sempre | Pesquisa que exige ler 10+ arquivos |
| Instrução global do sistema | Geração de sub-relatório com contexto próprio |
| Resultado já sintetizado | Exploração cujo output é um resumo |
| Tool pequena e frequente | Tool que gera outputs grandes (grep em monorepo) |
Padrão Anthropic: dar ao subagent uma task clara, contexto necessário (não o histórico), e o formato esperado de retorno. O principal deve conseguir "entender o output sem ler como o subagent chegou lá".
Agent Skills: instruções carregadas sob demanda
Skills (Anthropic, 2024+) são módulos de instruções + scripts que o agent carrega quando a situação o exige. Cada skill tem uma description curta no índice; o agent decide invocar a skill completa apenas quando a task corresponder. Alternativa a enfiar todas as políticas no system prompt.
---
name: pdf-extraction
description: Extrai texto e tabelas de PDFs complexos usando pdfplumber + VLM para imagens.
allowed-tools: Read, Bash, Write
---
# PDF Extraction
Quando o usuário pedir para extrair dados de PDF:
1. Use `pdfplumber` para texto e tabelas limpas.
2. Para PDFs escaneados, rode OCR (`tesseract`) ou envie a página como imagem para Claude Vision.
3. Sempre valide que a extração preservou estrutura (tabelas não podem virar texto corrido).
4. Salve output em `extracted/` com mesmo nome do PDF + `.md`.
Exemplo de script:
```bash
pdfplumber dump tables input.pdf > tables.json
```Skills viram o anti-padrão "system prompt gigante". Em vez de 20 políticas para 20 tipos de task, você tem 20 skills curtas com descriptions, carregadas on-demand. Contexto médio cai drasticamente.
Por que "a janela não é grátis" mesmo quando o conteúdo cabe?
CLAUDE.md / AGENTS.md: instruções do projeto
Instruções persistentes por repo/projeto vivem em arquivos-guia: CLAUDE.md (Claude Code), AGENTS.md (Codex/OpenAI), .cursor/rules/ (Cursor). Esses arquivos entram automaticamente no contexto quando o agent abre o projeto.
| Deve entrar | Não deve entrar |
|---|---|
| Comandos de build/test/lint específicos | Documentação que o agent consegue derivar lendo código |
| Padrões de commit/PR | Histórico de decisões (vai pra ADR, não aqui) |
| Gotchas conhecidos (bugs, conflitos) | Todo o manual do projeto |
| Estrutura de pastas não-óbvia | README completo duplicado |
| Scripts de deploy, env vars importantes | Segredos, tokens |
CLAUDE.md "gigante" (>300 linhas) começa a competir por atenção com o próprio código. Mantenha enxuto (≤ 200 linhas em 90% dos casos). Se não couber, divida em skills carregadas sob demanda.
Ordem, posição e formato
| Princípio | Por que | Consequência prática |
|---|---|---|
| Estável antes do volátil | Prompt caching exige prefixo idêntico | System → tools → few-shots → dados fixos → query |
| Crítico no início ou fim | Lost in the middle | Resposta direta no topo; confirmação no fim |
| Tags estruturadas (XML) | Claude/GPT-4+ respeitam delimitadores | <contexto>...</contexto>, <pergunta>...</pergunta> |
| Evite repetição | Cada token pago, cada token atenção | Se já está em system, não repita em user |
| Tool result compacto | Tool que retorna 50k tokens destrói contexto | Truncar, agregar ou delegar para subagent |
Perguntas típicas
❓ Contexto de 1M tokens não elimina tudo isso?
❓ Prompt caching funciona entre usuários diferentes?
❓ Como meço o impacto de context engineering?
❓ Skills vs tools — qual a diferença?
Take-aways. Context engineering = gerenciar janela como recurso. Prompt caching corta 50-90% do custo em agents repetitivos — ordene estável antes do volátil. Compaction mantém conversas longas viáveis. Subagents isolam contexto pesado. Skills e CLAUDE.md/AGENTS.md carregam instruções sob demanda. Lost-in-the-middle ainda existe; posicione o crítico no início ou fim. Próximo: MCP deep dive — o protocolo que padronizou como agents acessam ferramentas e dados externos.
Perguntas frequentes
❓ Como o cache de prompt muda a arquitetura do prompt?
❓ Quanto de contexto é demais?
❓ Compactação de contexto perde informação?
Fixando
A compactação de conversa — resumir turnos antigos e substituí-los — tem qual risco a ser gerenciado?
Qual estratégia mantém o contexto principal limpo sem perder a informação necessária?
Terminou de ler?
Marcar como concluído registra o XP, mantém sua sequência e coloca 3 cartas deste módulo na fila de revisão espaçada.
Próximos passos sugeridos
Temas deste módulo
Discussão
Carregando comentários…