MÓDULO 2.2

🗜️ RAG preguiçoso: PDF gigante → cheat sheet

Os playbooks da McKinsey, BCG e KPMG têm 28 a 46 páginas — estouram qualquer contexto e vêm cheios de buzzword. A solução é simples e preguiçosa: cortar em blocos, sintetizar cada um e montar um cheat sheet de uma página.

6
Tópicos
~40
Minutos
Interm.
Nível
Técnico
Tipo
1

📚 O problema do contexto

Você quer o conhecimento de elite que está nesses PDFs. Mas jogar um documento de 46 páginas inteiro no Claude Code estoura o limite de contexto — e o pior: enche a janela de sumário, agradecimentos e buzzword. Você precisa do valioso, não do volume.

✗ Jogar o PDF inteiro

  • Estoura o limite de tokens
  • Gasta contexto caro com lixo
  • Dilui o sinal no meio do ruído
  • Resposta genérica e superficial

✓ Destilar antes de usar

  • Cabe folgado no contexto
  • Só frameworks, números e insights
  • Sinal puro, alta densidade
  • Reutilizável em qualquer projeto
28-46 pág.

PDFs enormes

Limite

de contexto

Sinal vs ruído

valor vs volume

Densidade

o que importa

2

✂️ Chunking em blocos de ~10k tokens

A ideia central do RAG preguiçoso: em vez de processar tudo de uma vez, você fatia. Extrai o texto do PDF, conta os tokens e corta em blocos de ~10.000 tokens. Cada bloco cabe folgado numa chamada de API.

PDF extrair texto bruto conta tokens corta bloco 1 · ~10k tk bloco 2 · ~10k tk bloco 3 · resto cada bloco vira 1 chamada de API processado em paralelo →

// o conceito do chunking — fatiar por tokens

CHUNK_SIZE = 10_000   # tokens por bloco

texto  = extrair_texto_do_pdf("bcg-guide.pdf")   # via PyMuPDF
tokens = tokenizer.encode(texto)                 # cl100k_base

blocos = []
for i in range(0, len(tokens), CHUNK_SIZE):
    pedaco = tokens[i : i + CHUNK_SIZE]
    blocos.append(tokenizer.decode(pedaco))

# 1 PDF de 46 págs ≈ 3-4 blocos → cabem na API um a um
10k tokens

por bloco

PyMuPDF

extrai texto

Tokenizer

cl100k_base

Em partes

não de uma vez

3

🧪 O prompt de síntese

É aqui que mora a qualidade do cheat sheet. O prompt instrui o modelo a extrair só o que vale — frameworks, estatísticas, insights, citações, termos — preservando números e cortando buzzword. Bloco sem valor recebe a marca [MINIMAL_CONTENT] e é descartado depois.

// estrutura real do prompt de síntese (pdf_to_cheatsheet.py)

Você é um consultor criando um cheat sheet a partir
deste documento. Extraia o conhecimento mais valioso:

## Conceitos & Frameworks   → liste cada um em 1-2 frases
## Estatísticas críticas     → preserve números e fontes
## Insights acionáveis       → o que dá para implementar
## Citações notáveis         → 2-3 frases de impacto
## Terminologia              → defina termos e siglas

Regras: seja conciso, NÃO generalize números, use bullets,
negrito no termo na 1ª vez. Se o bloco for só sumário/
referências, responda: [MINIMAL_CONTENT: ...]

💡 O detalhe que faz diferença

A regra "NÃO generalize números" é o que separa um cheat sheet útil de um resumo vazio. "A IA aumenta produtividade" não vale nada; "40% de ganho de produtividade (Google Cloud, 2025)" é munição para o seu entregável.

5 seções

extração fixa

Preserva nº

não generaliza

Corta buzz

só o valioso

[MINIMAL]

marca o vazio

4

✨ Gemini 2.5 Flash: barato e contexto gigante

O modelo que faz a síntese. Escolha deliberada: contexto enorme, preço baixíssimo. É o que viabiliza destilar uma biblioteca inteira de PDFs por centavos — com retry exponencial e delay entre chamadas para respeitar o rate limit.

1

Contexto gigante

Aguenta os blocos de 10k tokens com folga — e responde sem cortar no meio.

2

Custo baixíssimo

A biblioteca inteira de guias sai por centavos. É o mesmo modelo que escreve os entregáveis na Fábrica.

3

Resiliente

Retry exponencial (3 tentativas) e delay de ~5s entre chamadas. Um erro de rede não derruba o processo.

💡 Dica prática

Esse foi um ponto de erro real na construção (no vídeo, o chunking do Gemini falhou num arquivo). Construir em público é mostrar a bagunça: quando der erro de API, é só pedir ao Claude Code para rodar de novo — a retomada continua de onde parou.

2.5 Flash

o modelo

Contexto

gigante

Centavos

custo baixo

Retry

exponencial

5

🧩 Montar o cheat sheet

Com os blocos sintetizados, você remonta: junta na ordem certa, descarta os marcados como vazios e gera um Markdown único — com cabeçalho (fonte, data), seções numeradas e um rodapé de "verifique no original".

// remontagem dos blocos num cheat sheet final

cheat = cabecalho(fonte="bcg-guide.pdf", data=hoje)

for i, bloco in ordenar_por_indice(blocos_sintetizados):
    if "[MINIMAL_CONTENT" in bloco and tamanho_util(bloco) < 500:
        continue                      # descarta o vazio
    cheat += f"## Seção {i+1}\n\n{bloco}\n"

cheat += rodape("verifique no documento original")
salvar("bcg-guide_TLDR.md", cheat)    # 1 página, pronto

✓ Cheat sheet bem montado

  • Blocos na ordem original
  • Vazios descartados
  • Cabeçalho com fonte e data
  • Rodapé pedindo verificação

✗ Cheat sheet mal montado

  • Blocos fora de ordem
  • Sumário e agradecimentos no meio
  • Sem rastro da fonte
  • Tratado como verdade absoluta
Ordenar

por índice

Descartar

os vazios

Cabeçalho

fonte + data

1 página

Markdown final

6

🐍 pdf_to_cheatsheet.py na prática

Você não escreve nada disso na unha — o script já existe. Ele lê uma pasta de PDFs, salva progresso em progress.json, pula blocos já feitos e aceita flags úteis. É só pedir ao Claude Code para rodar.

// o que você digita ao Claude Code

# dá uma olhada sem gastar API (só conta os blocos)
python pdf_to_cheatsheet.py --dry-run

# processa só um arquivo
python pdf_to_cheatsheet.py --single-pdf "bcg-guide.pdf"

# se o contexto encher ou a API falhar, rode de novo:
# ele retoma pelos blocos que faltam (progress.json)

💡 Por que a retomada importa

O ProgressTracker grava cada bloco concluído. Se o processo cai no bloco 7 de 10, ao rodar de novo ele pula os 6 primeiros e continua. Você não paga duas vezes pelo mesmo bloco — economia que se acumula numa biblioteca grande.

--dry-run

sem gastar API

--single-pdf

um arquivo só

Resumível

retoma do ponto

progress.json

grava o feito

Resumo do módulo

PDF inteiro estoura o contexto — você quer o valioso, não o volume.
Chunking + síntese é o RAG preguiçoso — blocos de ~10k tokens, um prompt que extrai só o ouro.
Gemini 2.5 Flash faz por centavos — contexto gigante, retry, retomada.
O resultado é 1 página reutilizável — pronta para alimentar o Claude Code.

🎯 Missão 2.2 — Seu primeiro cheat sheet

Pegue 1 PDF de consultoria (um guia gratuito de McKinsey, BCG, KPMG, Google Cloud…) e transforme num cheat sheet de 1 página:

  1. Peça ao Claude Code para rodar o pdf_to_cheatsheet.py nele (ou aplicar o prompt de síntese por blocos).
  2. Confira: sobraram frameworks, números e insights — sem buzzword?
  3. Salve como fonte_TLDR.md com cabeçalho (fonte + data).

Sucesso: 1 cheat sheet de 1 página gerado. O que você ganhou: a primeira peça da sua base de conhecimento — e a técnica para destilar qualquer PDF daqui pra frente.

Próximo módulo:

2.3 — Seu cérebro de consultor (organizar vários cheat sheets numa base curada e injetável)