Sessões de longa duração finalmente se atualizam: a compaction agora sempre reconstrói o system prompt

Sua “sessão eterna” roda há meses: um chat persistente do Bot Mode, um canal de trabalho do gateway, cumprindo seu papel todos os dias. Mas há uma coisa que você talvez não tenha percebido — o system prompt na cabeça dela ainda é o do dia em que ela nasceu. As tools são atualizadas a partir do registro ao vivo a cada compaction, mas o system prompt era restaurado byte por byte do snapshot da sessão: as orientações enxutas que os mantenedores lançaram, novos blocos de prompt (como o relógio de duas linhas que mostra a hora atual), descrições de tools renomeadas — ela não conhece nenhuma delas. Uma mudança mesclada em 30 de agosto (PR #98426) finalmente corrige isso: o commit da compaction agora sempre reconstrói o system prompt com o builder ao vivo. A mudança está na main, ainda sem release.
Por que os prompts ficavam congelados no nascimento
O Hermes lida com contextos longos demais compactando: condensa o histórico em um resumo e libera espaço para continuar. Antes, as tools eram reconstruídas a partir do registro ao vivo, mas o system prompt era restaurado byte por byte do snapshot da sessão — dois caminhos de código diferentes. Assim, o conteúdo do prompt envelhecia: orientação de meses atrás, nenhum bloco de recurso novo, descrições de tools com nomes antigos. Nas palavras do mantenedor: “um chat eterno carregaria seu prompt de nascimento por meses enquanto sua lista de tools avançava”.
A correção: sem detector de atualização — o rebuild É o detector
Os mantenedores rejeitaram explicitamente um “detector de atualização”. A abordagem é mais completa: todo commit de compaction roda o builder ao vivo e depois compara os bytes:
- Saída byte a byte idêntica ao prompt armazenado → mantém o objeto STRING original (identidade de objeto preservada, então os caches KV/prefix baseados nele continuam válidos; o caso comum custa uma comparação de string);
- Saída divergente → o prompt reconstruído vence, e um log de drift registra a mudança (formato:
Compaction rebuilt a drifted system prompt (session=..., N -> M chars)).
O rebuild é praticamente gratuito porque o prefix cache já está morto num commit de compaction — que é exatamente a resposta do mantenedor para “por que não atualizaríamos o system prompt na compaction?”. As seções de plugins seguem o mesmo caminho: a invalidação limpa o snapshot congelado, e o rebuild re-renderiza pelo mesmo caminho do início da sessão; se a renderização de um plugin lançar erro, ele cai de volta para a última seção boa (fail-open, não um congelamento).
O que isso muda para você
- Sessões de longa duração convergem para o prompt atual na próxima compaction: a memória salva no meio da vida finalmente aparece no prompt, orientação enxuta substitui texto obsoleto, e futuros renomes param de apresentar orientação com nomes antigos ao lado de tools com nomes novos.
- O relógio de “Conversation started” ficou mais esperto: sessões compactadas/rotacionadas resolvem a hora de início pela ROOT da linhagem da sessão — um chat eterno do Bot Mode sabe quando nasceu de verdade.
- Sem quebras de cache no meio da conversa: o único ponto de rebuild é o limite de compaction já sancionado, nunca um ponto aleatório no meio de um turno.
Para saber mais sobre como a compressão funciona, veja nosso guia do padrão de compressão lean-tail e o guia de ancoragem de uso de contexto; dicas práticas para gerenciar sessões longas estão no guia de retomada de sessão.
Quando você pode usar
O PR #98426 foi mesclado em 30 de agosto e não está no v0.20.6 (tag de 27 de agosto). Para ver em ação: puxe a main mais recente, mantenha uma sessão longa aberta e rode /compress uma vez — a sessão adota o prompt mais recente em seguida. Para o panorama completo da configuração de compressão (limiares de gatilho, estratégia de cauda), veja nosso guia de otimização de tokens de contexto.
Resumindo: sessões de longa duração finalmente conseguem acompanhar o tempo. Em vez de carregar um prompt de nascimento por meses, cada compaction agora é uma auto-atualização silenciosa — a um custo de performance praticamente zero.