Pular para o conteúdo
TRILHA 2 · TÉCNICO

🔧 Técnico — o cache em ação

Agora que os termos estão claros, vamos ver o cache funcionando de verdade: como ele se comporta numa conversa que cresce, o que anexa sem quebrar e o que reseta a posição 0, e a invalidação a fundo — com exemplos copy-run pra rodar no seu Claude Code.

% do prompt que veio do cache (lido barato ≈ 0,1×) — sobe a cada turno 40% turno 1 85% turno 2 96% turno 3 99% turno N fatia escura = novo resto = lido do cache

O cache não é bateria que descarrega: a fatia lida do cache cresce a cada turno. Um turno com algo novo (ex.: uma skill grande) marca menos; o resto vira leitura barata no próximo.

3
Módulos
18
Tópicos
~1h40
Duração
Técnico
Nível
0%
0 de 0

Tudo nesta trilha sai de um único invariante: prompt caching é um casamento de prefixo. A chave do cache são os bytes exatos do prompt até o ponto de corte, e a ordem de montagem é sempre tools → system → messages. Guarde essa frase — ela explica por que anexar no fim é seguro e por que mexer na lista de ferramentas quebra tudo.

Os três campos que você vai auditar o tempo todo: cache_read_input_tokens (lido do cache, ~0,1×), cache_creation_input_tokens (gravado, ~1,25×) e input_tokens (só o resto não-cacheado, preço cheio). A soma dos três é o tamanho do prompt. Se o campo de leitura fica zero repetindo o mesmo prefixo, tem um silent invalidator.

Mapa da trilha

Conteúdo detalhado

2.1 ~30 min · 6 tópicos

💬 O cache numa conversa

O prefixo estável cresce, cada turno relê barato, e a % de cache SOBE — não descarrega. Onde entra o write frio e por que a pausa longa custa.

0%
O que é:

system + tools + todo o histórico (inclusive a última resposta) formam o prefixo estável, que cresce a cada turno.

Por que aprender:

É o que torna a conversa barata: quanto maior o prefixo estável, mais tokens saem a ~0,1×.

Conceitos-chave:

Prefixo = começo idêntico que se repete; só o final novo escapa do cache.

O que é:

A cada mensagem nova, só o final muda; a API relê todo o prefixo do cache (~0,1×) e grava só o bloco novo.

Por que aprender:

Explica por que o segundo turno em diante é muito mais barato que o primeiro.

Conceitos-chave:

Hit = leitura do cache; write = gravação do bloco novo daquele turno.

O que é:

Enquanto você responde dentro de ~5 min, a janela renova e o cache fica quente.

Por que aprender:

Trabalhar em ritmo contínuo mantém tudo barato sem esforço.

Conceitos-chave:

TTL = tempo de vida da entrada; cada uso reinicia o relógio dos 5 min.

O que é:

Um turno pode marcar 40% (teve coisa nova, ex.: uma skill grande). Esse bloco vira read barato no próximo turno, e a % sobe.

Por que aprender:

Desfaz a intuição errada de que o cache "acaba"; ele só melhora com a conversa.

Conceitos-chave:

Turno agora: 40k lido / 60k novo = 40%; próximo turno: ~100k lido / ~1k novo ≈ 99%.

O que é:

A 1ª mensagem grava o cache (paga um pouco mais); não há prefixo anterior para ler.

Por que aprender:

Evita o susto de ver o 1º turno "caro" — é o único que grava tudo.

Conceitos-chave:

Write ~1,25× (TTL 5 min); a partir do 2º turno predomina read ~0,1×.

O que é:

Passou dos ~5 min parado, o TTL expira e a próxima mensagem paga a gravação de novo.

Por que aprender:

Explica por que retomar depois do almoço "custa": foi um write frio, não um bug.

Conceitos-chave:

Para tráfego com gaps > 5 min existe o TTL de 1 h (write ~2×).

2.2 ~35 min · 6 tópicos

🧩 Skills e ferramentas: anexar vs quebrar

Conteúdo novo no FIM é seguro; mexer na lista de tools reseta a posição 0. Por que Tool Search anexa de propósito.

0%
O que é:

(a) A DESCRIÇÃO da skill (linha curta na lista) fica sempre no prefixo estável. (b) O CONTEÚDO completo só entra quando a skill é invocada.

Por que aprender:

Sem separar os dois, você acha que "toda skill é cara" — só o conteúdo pesa, e uma vez.

Conceitos-chave:

Descrição = sempre presente e barata; conteúdo = sob demanda.

O que é:

O conteúdo da skill entra ANEXADO no FIM do histórico (não na posição 0). Tudo antes continua válido e é lido barato; só o bloco novo é gravado.

Por que aprender:

Tira o medo de invocar skills no meio da conversa: é um write único, não um reset.

Conceitos-chave:

Anexar no fim = seguro; nos turnos seguintes a skill já é read barato.

O que é:

As ferramentas são renderizadas na posição 0 (antes de system e histórico). Mudar a lista tools invalida tudo dali pra frente.

Por que aprender:

É o silent invalidator mais caro: um byte na posição 0 derruba o prefixo inteiro.

Conceitos-chave:

Ordem de montagem: tools → system → messages.

O que é:

(1) Conectar/desconectar MCP no meio; (2) mudar description/input_schema de uma tool; (3) montar tools de um set/dict sem ordenar; (4) ligar/desligar tools por modo/permissão.

Por que aprender:

São as 4 causas mais comuns de cache que "some" sem motivo aparente.

Conceitos-chave:

Basta uma palavra numa description mudar para invalidar a posição 0.

O que é:

O Tool Search carrega o schema de uma ferramenta ANEXANDO (não trocando a lista) — feito justamente pra NÃO quebrar o cache.

Por que aprender:

Distingue "descobrir tool via Tool Search" (seguro) de "conectar MCP que reescreve a lista" (quebra).

Conceitos-chave:

Anexar schema no fim = write único; reescrever tools = reset.

O que é:

Conteúdo novo no FIM = seguro. Mexer na lista de tools ou no system prompt = reset da posição 0.

Por que aprender:

Uma frase que resolve 90% das decisões do dia a dia sobre o cache.

Conceitos-chave:

Pergunte sempre: "isso muda o começo ou só acrescenta no fim?"

2.3 ~35 min · 6 tópicos

🔎 Invalidação a fundo

Hierarquia de 3 tiers, o 20-block lookback, os silent invalidators e o timing concorrente no fan-out. Como auditar com usage.

0%
O que é:

Mudança só invalida o tier dela e os de baixo: mudar tools OU trocar modelo = reset total; mudar system = invalida system+messages; mudar mensagem = só messages.

Por que aprender:

Você calcula o "raio de dano" de qualquer mudança antes de fazê-la.

Conceitos-chave:

Tiers na ordem tools → system → messages; o modelo é raiz de tudo.

O que é:

Trocar tool_choice por request ou ligar/desligar thinking mantém o cache de tools+system.

Por que aprender:

Evita paranoia: nem todo parâmetro que muda por request quebra o cache.

Conceitos-chave:

Esses dois não entram no prefixo cacheável — não precisa se preocupar.

O que é:

Cada breakpoint procura entrada anterior olhando no máx. 20 blocos pra trás. Turno que adiciona >20 blocos (loops com muitos tool_use/tool_result) pode fazer o próximo turno errar o cache silenciosamente.

Por que aprender:

É a causa "invisível" de miss em agentes que fazem muitas chamadas de ferramenta por turno.

Conceitos-chave:

Fix: breakpoint intermediário a cada ~15 blocos.

O que é:

datetime.now()/Date.now()/uuid no system; json.dumps sem sort_keys=True; iterar set; tools montadas por usuário; seção condicional no system.

Por que aprender:

São mudanças que você não "vê" mas alteram os bytes do prefixo a cada request.

Conceitos-chave:

Sintoma comum: cache_read_input_tokens sempre 0.

O que é:

A entrada só fica legível DEPOIS que a 1ª resposta começa a streamar. N requests paralelos com o mesmo prefixo pagam todos preço cheio.

Por que aprender:

Disparar tudo de uma vez parece rápido, mas joga fora o cache compartilhado.

Conceitos-chave:

Fix: mandar 1, esperar o 1º token, disparar os N-1.

O que é:

cache_read_input_tokens / cache_creation_input_tokens na resposta. Zero em requests repetidos = tem invalidator.

Por que aprender:

É o instrumento de medição — sem ele você chuta; com ele você prova.

Conceitos-chave:

Faça diff dos bytes do prompt entre dois requests iguais para achar o byte que muda.