A Dieta de Contexto do Hermes: Corte o Gasto de Tokens por Turno do Jeito Oficial

Você está há três horas numa tarefa longa — uma migração, um bug que atravessa vinte arquivos, uma limpeza de dados que não para de crescer. Então você percebe: cada mensagem nova demora mais para responder, e o painel do provedor mostra que essa sessão consumiu mais tokens do que todo o resto do mês somado. Não é coincidência. A cada turno, o modelo precisa reler a conversa inteira — incluindo as saídas de ferramentas e as etapas intermediárias que deixaram de importar há duas horas. Quanto maior essa pilha, mais caro sai cada frase. O Hermes chama a solução disso de “redução de contexto”, e desde que a v0.20 chegou no início de agosto, as ferramentas oficiais para isso ficaram, discretamente, muito boas. Este guia percorre cada camada verificável: o que você ganha de graça ao atualizar, quais botões de configuração realmente importam e os comandos de barra que mantêm uma sessão longa em forma.
Por que cada turno reenvia tudo
Um modelo mental rápido: um LLM não tem memória própria. Cada vez que você envia uma mensagem, ele recebe o contexto completo — prompt do sistema, skills carregadas, definições de ferramentas, seus arquivos de memória, o histórico da conversa e cada resultado de ferramenta — e lê tudo de novo. “Tokens” são apenas a medida desse texto, e você paga por cada token enviado, a cada turno.
O custo total de uma sessão é, aproximadamente, tamanho do contexto × número de turnos. Reduza qualquer um dos dois e a conta cai na hora. É esse o jogo da redução de contexto: manter a informação que melhora a resposta, descartar o que é duplicado, obsoleto ou irrelevante — sem deixar o agente mais burro.
Camada 1: Compressão automática — já trabalhando por você
O Hermes traz um sistema duplo de compressão que roda sozinho, sem configuração:
- ContextCompressor do agente — o sistema principal, dentro do loop de ferramentas do agente, com contagens reais de tokens reportadas pela API. Ele dispara quando a sessão cruza 50% da janela de contexto do modelo (configurável).
- Higiene de sessão do gateway — uma rede de segurança a 85% do contexto, que roda antes de cada turno. Ela pega sessões que cresceram demais entre turnos (por exemplo, um acúmulo noturno no Telegram ou Discord) para a API nunca falhar numa requisição gigante.
Quando a compressão dispara, ela trabalha em quatro fases:
- Podar resultados antigos de ferramentas — as saídas mais velhas são descartadas primeiro. Esse passo não custa nada: nenhuma chamada de LLM.
- Alinhar limites — o compressor anda para trás para nunca dividir um par “chamada de ferramenta → resultado”.
- Gerar um resumo estruturado — o meio da conversa vai para um modelo auxiliar, que escreve um resumo estruturado cobrindo objetivos, decisões, progresso e próximos passos. O orçamento do resumo escala com o conteúdo (cerca de 20%), com piso de 2.000 tokens e teto de 5% da janela de contexto.
- Montar — a sessão comprimida vira: cabeçalho (prompt do sistema + contexto inicial) + resumo + cauda verbatim recente.
A documentação oficial mostra um exemplo real: uma sessão de 45 mensagens (~95K tokens) comprime para 25 mensagens (~45K tokens) — uma redução de cerca de 53%, com resumo e cauda recente mantendo a continuidade.
Camada 2: Atualize e a reforma da v0.20 entra em ação
A v0.20.0 (3 de agosto) reformou a compressão profundamente — “Compression that respects your conversation”. As mudanças de destaque, todas mescladas no upstream e verificáveis nas notas de versão:
- Micro-compactação por turno — em vez de uma pausa gigante ao atingir o limite, o custo é amortizado entre turnos em pequenos incrementos.
- Garantia de cauda de N mensagens do usuário —
compression.min_tail_user_messages(padrão 1) garante que mensagens reais recentes sempre sobrevivam à compactação. Você nunca perde o fio do que perguntou. - Podagem proativa de resultados de ferramentas — modelos de janela grande podam resultados obsoletos antes mesmo do limite.
- Defesa ghost-skill — uma skill removida no meio da sessão não pode mais assombrar o contexto em silêncio (os marcadores
[SKILL_PRUNED]tornam a podagem determinística). - Limites por modelo e limites absolutos de tokens — dispare a compressão em porcentagens diferentes por modelo, ou num número fixo de tokens (
compression.threshold_tokens) — importante quando seus modelos têm janelas bem diferentes.
A peça mais nova chegou em 26 de agosto: o modo lean tail (PR #87326). A fórmula antiga mantinha uma cauda verbatim proporcional ao tamanho da janela — num modelo de 1M de contexto, isso significava acumular 170K tokens de histórico bruto após cada compressão, tornando o /compress quase inútil e reenviando esses tokens a cada turno. O modo lean limita a cauda a 2,5% da janela (10K–25K tokens) e move a continuidade para um resumo melhorado com ponteiros de recuperação. Uma mudança de configuração, dezenas de milhares de tokens economizados por turno. Se o hermes config get compression.tail_mode ainda diz legacy, rode hermes update — o novo padrão é lean.
Camada 3: Botões que você pode girar
Os padrões de compressão são sensatos, mas um pouco de ajuste rende rápido. Primeiro, veja o que você tem:
hermes config get compression.enabled # true
hermes config get compression.threshold # 0.50 (dispara a 50% do contexto)
hermes config get compression.target_ratio # 0.20
hermes config get compression.tail_mode # lean nas versões mais recentes
hermes config get compression.protect_last_n # 20 (mensagens mínimas protegidas na cauda)
hermes config get compression.min_tail_user_messages # 1
Três ajustes que realmente importam:
1. Dispare antes em modelos de janela grande. Com um modelo de 200K+, esperar 50% significa que cada turno já envia ~100K tokens. Coloque compression.threshold em 0.4, ou melhor, use um limite absoluto fixo:
compression:
enabled: true
threshold_tokens: 80000 # comprimir assim que a sessão passar de 80K tokens
2. Limites por modelo. Janelas diferentes, preços diferentes:
compression:
model_thresholds:
"claude-sonnet": 0.35
"glm-5.2": 0.40
3. Deixe o resumo mais barato. O resumidor também é uma chamada de LLM — por padrão usa um modelo auto-detectado sensato, mas você pode apontá-lo para um modelo barato e rápido:
auxiliary:
compression:
model: <um modelo barato e rápido>
Resumos de compressão não são o lugar para o seu modelo mais caro.
Camada 4: Higiene diária
Os quatro comandos de barra que mostram o que está acontecendo e deixam você agir:
| Comando | O que faz |
|---|---|
/context |
Decompõe exatamente o que preenche sua janela de contexto — skills, ferramentas, memória, histórico, arquivos |
/usage |
Mostra uso e custo de tokens da sessão (hermes insights cobre os últimos 30 dias) |
/compress |
Dispara a compressão manualmente no meio da sessão |
/focus |
Visão de saída reduzida que oculta linhas ruidosas de ferramentas mantendo-as recuperáveis |
Além dos comandos, alguns hábitos cortam o custo fixo que viaja em todo turno:
- Desative skills que você não usa. Cada skill ativada injeta seu cabeçalho no contexto de cada turno.
hermes skills liste depoishermes skills disable <nome>para as que você nunca toca. - Coloque
tool_searchemauto. As ferramentas carregam só quando necessário, em vez de enviar todos os esquemas a cada turno. - Mantenha memória e AGENTS.md enxutos. Cada caractere de memória injetada e de instruções do projeto é reenviado a cada mensagem. Guarde fatos duráveis, não progresso de tarefas.
- Não troque de modelo no meio da sessão. A maioria dos provedores armazena em cache o prefixo do prompt — com um prompt de sistema estável, os turnos seguintes acertam o cache e custam uma fração. Trocar de modelo invalida isso.
- Delegue ou agrupe. Pesquisas longas via
delegate_taskou operações de arquivo em um único scriptexecute_codemantêm saídas volumosas fora da conversa principal.
Juntando tudo
Nada disso sacrifica capacidade. O exemplo oficial já mostra ~95K → ~45K numa sessão longa típica, e em modelos de janela grande a mudança lean tail remove bem mais de cem mil tokens por turno que eram puro desperdício. A compressão automática cuida do histórico; a reforma da v0.20 a torna mais suave e barata; algumas linhas de configuração a adaptam aos seus modelos; a higiene diária impede que a pilha cresça.
Dois avisos. Primeiro, não deixe o limite tão agressivo que o agente comprima o tempo todo — cada resumo é uma pequena chamada de LLM, e comprimir repetidamente uma sessão curta gasta dinheiro com resumos em vez de respostas. Segundo, a redução de contexto é sobre conteúdo duplicado, obsoleto ou irrelevante — se a sessão é realmente enorme e precisa de tudo, prefira max_turns ilimitados com exportação de sessão a espremer a compressão.
Para a história por trás do novo padrão lean tail e números reais em modelos de janela grande, veja Hermes Compaction Gets a Lean Default. Se sua conta disparou porque uma janela de contexto foi definida maior do que o provedor anuncia, leia Why Your Subscription Drained in Hours. E para o detalhamento campo a campo do orçamento de contexto, o guia de configuração de tarefas longas é a leitura aprofundada para salvar nos favoritos.