Sumarização Antes da Chamada: Condensando Documentos Longos para Claude
Quando um documento é muito longo, muito desfocado ou reutilizado em vários prompts, a solução não é enviá-lo inteiro para o seu modelo mais forte a cada vez.
É condensá-lo uma vez com um modelo barato e, em seguida, enviar a versão condensada para o modelo que faz o trabalho real.
Isso adiciona uma chamada de API extra, mas essa chamada é barata, então o custo líquido é menor sempre que o documento é longo ou reutilizado em vários prompts.
A técnica é mais valiosa para material de referência lido muitas vezes: um arquivo de log grande, um longo tópico de suporte, um contrato extenso ou um changelog grande.
Esta página mostra como construir uma etapa de sumarização com o SDK Python anthropic, quando vale a pena e onde pode dar errado.
Receita
Cartão de receita de referência rápida - pronto para copiar e colar.
import anthropic
client = anthropic.Anthropic()
def summarize(document: str, focus: str = "") -> str:
instruction = f"Resuma este documento em menos de 200 palavras."
if focus:
instruction += f" Concentre-se especialmente em: {focus}."
response = client.messages.create(
model="claude-haiku-4-5",
max_tokens=300,
messages=[{"role": "user", "content": f"{instruction}\n\n{document}"}],
)
return response.content[0].textQuando usar isso:
- O documento de origem é longo o suficiente para que enviá-lo na íntegra para um modelo forte seja caro em cada chamada.
- O mesmo documento será referenciado em vários prompts, portanto, o custo da sumarização é pago uma vez.
- Você precisa da essência de um documento, não de todos os detalhes exatos (contratos e textos legais são uma exceção, veja Armadilhas).
- Um modelo barato e rápido está disponível em sua linha para fazer a etapa de condensação.
Exemplo de Trabalho
import anthropic
client = anthropic.Anthropic()
def summarize(document: str, focus: str = "", max_words: int = 200) -> str:
"""Condense um documento longo com um modelo barato."""
instruction = f"Resuma este documento em menos de {max_words} palavras."
if focus:
instruction += f" Concentre-se especialmente em: {focus}."
response = client.messages.create(
model="claude-haiku-4-5",
max_tokens=400,
messages=[{"role": "user", "content": f"{instruction}\n\n{document}"}],
)
return response.content[0].text
def answer_with_summary(summary: str, question: str) -> str:
"""Envie o resumo condensado, não o documento original, para o modelo mais forte."""
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=500,
messages=[{
"role": "user",
"content": f"Com base neste resumo de um tópico de suporte, responda à pergunta.\n\n"
f"Resumo:\n{summary}\n\nPergunta: {question}",
}],
)
return response.content[0].text
with open("support_thread.txt") as f:
long_thread = f.read() # 8.000 palavras de mensagens de ida e volta
condensed = summarize(long_thread, focus="qual é o problema não resolvido do cliente")
answer = answer_with_summary(condensed, "O que ainda não foi resolvido para este cliente?")
print(answer)O que isso demonstra:
summarizeé executado no Haiku 4.5, o nível mais barato, já que condensar texto não requer raciocínio profundo.answer_with_summaryé executado no Sonnet 5, o modelo que realmente faz o raciocínio em que o usuário se importa, mas ele só vê o texto condensado.- O parâmetro
focusdireciona o resumo para o que a pergunta downstream precisa, em vez de produzir um resumo genérico que pode omitir o detalhe relevante. - Separar as duas funções facilita o cache ou a reutilização de
condensedem várias perguntas downstream sobre o mesmo tópico.
Mergulho Profundo
Como Funciona
- O trabalho do modelo barato é estreito: comprimir texto preservando as informações que uma tarefa downstream precisa, não responder à pergunta real.
- Como a sumarização é uma tarefa mais simples do que o raciocínio aberto, um nível de modelo rápido e barato geralmente é suficiente para isso.
- O resumo, uma vez produzido, pode ser armazenado em cache ou guardado para que seja reutilizado em todas as perguntas futuras sobre esse documento, amortizando ainda mais o custo da sumarização.
- O custo de ponta a ponta é: uma chamada de sumarização barata, paga uma vez por documento, mais muitas chamadas baratas para o modelo forte usando o resumo curto em vez do original longo.
Quando a Sumarização Vale a Pena
| Situação | Vale a Pena? | Por quê |
|---|---|---|
| Documento usado uma vez, em um prompt | Raramente | A chamada de sumarização adiciona custo sem reutilização para compensá-lo |
| Documento referenciado em vários prompts | Geralmente | O custo da sumarização é pago uma vez; as economias se acumulam a cada reutilização |
| Documento já é curto (menos de algumas centenas de palavras) | Não | A sobrecarga de uma chamada extra não vale a pena |
| Documento é longo e apenas a essência importa | Sim | Este é o caso de uso principal: comprimir volume, manter o significado |
Notas Python
# Armazene o resumo em cache para que perguntas repetidas sobre o mesmo documento não
# re-executem a chamada de sumarização.
_summary_cache: dict[str, str] = {}
def cached_summarize(doc_id: str, document: str, focus: str = "") -> str:
key = f"{doc_id}:{focus}"
if key not in _summary_cache:
_summary_cache[key] = summarize(document, focus=focus)
return _summary_cache[key]Um simples dicionário em memória é suficiente para um único processo; um sistema de produção apoiaria isso com um cache persistente indexado pelo hash do documento e foco.
Armadilhas
- Sumarizar o detalhe que a tarefa downstream realmente precisava. Um resumo genérico pode omitir o único número ou cláusula que importava. Correção: passe um parâmetro
focusque diga ao sumarizador o que preservar e considere um comprimento de resumo maior para documentos de alto risco. - Sumarizar texto legal, médico ou numérico preciso. A compressão é inerentemente com perdas, e a redação exata ou figuras exatas podem importar nesses domínios. Correção: para documentos onde a precisão é inegociável, pule a sumarização e use o prompt de contexto mínimo para extrair a seção relevante exata em vez disso.
- Re-sumarizar o mesmo documento em cada chamada. Isso descarta todo o benefício de custo da técnica. Correção: armazene o resumo em cache por identidade do documento, como mostrado no exemplo de Notas Python acima.
- Usar um modelo muito fraco para produzir um resumo coerente. Um modelo extremamente barato ou pequeno pode produzir um resumo confuso ou que perde o ponto completamente. Correção: valide a qualidade do resumo com alguns documentos conhecidos antes de confiar em um determinado nível de modelo para esta etapa; suba um nível se a qualidade não estiver lá.
- Encadear resumos de resumos sem verificar o desvio. Resumir repetidamente um documento já resumido agrava a perda de informação. Correção: sempre resuma da fonte original, não de um resumo anterior, quando a fonte ainda estiver disponível.
Alternativas
| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| Prompt de contexto mínimo (extrair, não resumir) | Você sabe exatamente qual seção do documento é relevante | A seção relevante não é conhecida com antecedência, ou a relevância abrange todo o documento |
| Enviar o documento completo a cada vez | O documento é curto, ou usado apenas uma vez | O documento é longo e reutilizado em vários prompts |
| Fragmentação com recuperação (embeddings) | O documento é muito grande e as perguntas visam seções específicas imprevisíveis | Um único resumo curto já captura o que a maioria das perguntas precisa |
| Extração estruturada (puxar campos para JSON, pular prosa) | O documento tem uma estrutura previsível (faturas, formulários) | O documento é prosa não estruturada onde um resumo narrativo é mais útil |
FAQs
Como a sumarização é diferente de apenas cortar para um trecho relevante?
Cortar seleciona um subconjunto existente do texto; sumarizar gera um texto novo e mais curto que representa o documento inteiro.
Use cortar quando você sabe qual parte é relevante, e sumarizar quando a informação relevante está espalhada por todo o documento.
Qual modelo deve fazer a sumarização?
O modelo mais barato em sua linha que produz resumos precisos o suficiente para sua tarefa downstream, muitas vezes Haiku 4.5 na linha atual do Claude.
Valide essa escolha com alguns documentos reais em vez de assumir que o nível mais barato é sempre suficiente.
A sumarização alguma vez custa mais do que enviar o documento completo?
Sim, se o documento for usado apenas uma vez.
- Um documento de uso único paga o custo da sumarização sem reutilização para compensá-lo.
- A técnica vale a pena especificamente quando um documento é referenciado em vários prompts.
Posso resumir um documento que já é um resumo?
Você pode, mas cada passagem de sumarização perde alguma informação, então resumir um resumo agrava essa perda.
Prefira resumir da fonte original sempre que ela ainda estiver disponível.
Como sei se meu resumo é bom o suficiente?
- Teste-o com alguns documentos reais onde você conhece a resposta "certa" para perguntas downstream comuns.
- Verifique se o resumo ainda permite que o modelo downstream responda a essas perguntas corretamente.
- Se não puder, aumente o comprimento do resumo, adicione uma instrução
focusou suba um nível de modelo para a etapa de sumarização.
Devo sempre passar um parâmetro `focus`?
Ajuda sempre que você sabe o que a tarefa downstream se importa, pois um resumo focado tem menos probabilidade de omitir o detalhe que importa.
Para um resumo de propósito geral que responderá a várias perguntas futuras, um resumo mais amplo e não focado pode ser mais apropriado.
É seguro resumir documentos sensíveis ou precisos como contratos?
Tenha cuidado.
- A sumarização tem perdas, e textos legais ou médicos muitas vezes dependem da redação exata.
- Para esses tipos de documentos, prefira extrair a cláusula ou seção relevante exata em vez de resumi-la.
Qual deve ser o comprimento do resumo?
Tempo suficiente para preservar o que as perguntas downstream precisam, curto o suficiente para ser significativamente mais barato que o original.
Não há um número universal; um limite de 200 palavras funciona para muitos tópicos de suporte e artigos, mas um documento técnico pode precisar de mais.
Isso pode ser combinado com a segmentação de modelos?
Sim, esta técnica é em si uma aplicação de segmentação de modelos: o modelo barato lida com a tarefa mais simples (compressão), e o modelo mais caro lida com a tarefa mais difícil (raciocínio sobre o resultado).
E se o documento mudar depois de ter sido resumido e armazenado em cache?
Um resumo em cache se torna obsoleto assim que o documento de origem muda.
Use um hash ou identificador de versão do documento de origem como chave do cache, não apenas seu nome, para que uma alteração invalide automaticamente o resumo em cache.
A sumarização ajuda com a deterioração do contexto, não apenas com o custo?
Sim.
Um resumo focado remove o ruído que o documento original pode ter carregado, o que pode reduzir o risco de material irrelevante diluir a atenção do modelo no que importa.
Relacionados
- Como a Engenharia de Contexto Reduz o Gasto de Tokens - onde a sumarização se encaixa entre as outras técnicas de redução de contexto.
- Noções Básicas de Engenharia de Prompt e Contexto - exemplos práticos de medição de economia de tokens.
- Cortando Contexto: Grafos de Dependência em Vez de Repositórios Completos - a alternativa baseada em extração para sumarização de código.
- Lista de Verificação de Segmentação de Modelos - critérios para escolher qual modelo lida com a etapa de sumarização.
- Deterioração do Contexto: Por Que Mais Tokens Não Significam Melhores Respostas - por que um resumo focado também pode melhorar a qualidade da resposta.
Versões da Pilha: Escrito contra a linha de modelos Claude atual a partir de ~junho de 2026 - Claude Fable 5, Claude Opus 4.8, Claude Sonnet 5 (o padrão), e Claude Haiku 4.5 - e o SDK oficial
anthropicpara Python (última versão 0.x). Nomes de modelos, preços e versões de SDK mudam rapidamente - verifique os detalhes atuais em platform.claude.com/docs antes de confiar neles.