O contexto está completo, aprenda a cortar
“O agente pode esquecer estrategicamente e continuar trabalhando para sempre.” Esquecimento estratégico = capacidades de engenharia.
Por que compacto?
Se o agente for executado por um longo período, messages[] se expandirá: cada read_file retornará milhares de tokens, cada bash retornará centenas e cada rodada de diálogo também retornará o texto de pensamento do modelo. Após 50 rodadas, o contexto pode ser preenchido com mais de 100K. Duas consequências:
- Encontrando o limite superior do modelo: ele entra em colapso quando o tamanho da janela é atingido ou o preço aumenta linearmente a cada chamada de API.
- Diluição de atenção: agora que a tarefa em questão está afogada em tool_results irrelevantes de 30 rodadas atrás, o modelo começa a perder o foco.
A ideia de s06: deixar o agente esquecer ativamente o conteúdo sem importância, mas reter os estados-chave. Mecanismo de três camadas, do leve ao pesado.
Camada 1 · micro_compact (funciona silenciosamente a cada rodada)
O nível mais barato. Execute-o antes de cada chamada do LLM e substitua mais de três tool_results antigos por espaços reservados:
# Avançando a partir da 10ª rodada, a maioria dos tool_results se tornam: { "tipo": "tool_result", "tool_use_id": "tolu_01A", "content": "[Anterior: bash usado]" # Reduzido de milhares de caracteres para dezenas }Há um caso especial: o resultado de
read_filenão está compactado. Por que? Como a saída de read é um material de referência, se você pressionar o modelo terá que lê-lo novamente, o que é mais caro.PRESERVE_RESULT_TOOLS = {"read_file"} # Nunca compactarOlhe para micro_compact e pressione turn para ver os resultados antigos
As etapas a seguir simulam 10 rodadas de interação e permitem que o micro_compact seja executado uma vez antes de cada rodada. Veja que o antigo tool_result em messages[] se torna
[Anterior: ...], mas os 3 últimos permanecem os mesmos.Camada 2 · auto_compact (acionado quando o limite é excedido)
Mesmo que o micro continue funcionando, ele ainda explodirá quando ficar cansado até um certo tamanho. s06 define um limite (padrão 50000 token):
- Estime o número de tokens
len(str(messages)) // 4(aproximado, mas útil).- Excede o limite → Escreva a transcrição completa em
.transcripts/transcript_TIMESTAMP.jsonl(deixe o final).- Peça ao LLM para escrever um resumo de toda a conversa.
- Substitua todas as
mensagenspor um"[compactado] RESUMO...".O custo é óbvio: o resultado específico da ferramenta e o tom de conversação são perdidos, restando apenas o contorno. Mas o agente pode continuar fazendo, que é o principal benefício.
Camada 3 · Ajuste o modelo você mesmo, ferramenta compacta
auto_compact é acionado automaticamente pelo chicote e não é conhecido pelo modelo. A camada 3 faz o oposto: forneça ao modelo uma ferramenta
compactare deixe-o solicitar compactação ativamente - por exemplo, se achar que a exploração anterior é inútil e um novo estágio precisa ser iniciado.Chamada de modelo:
tool_use("compact", focus="manter as decisões de design da API")O acionamento é igual ao automático, mas pode usar um parâmetro
focuspara informar no que focar ao resumir. É muito prático em combate real - o modelo sabe quais são as “pequenas tarefas concluídas”, o que é mais preciso do que a heurística do arnês.Qual camada é apropriada? pergunta verdadeira ou falsa
Os cenários a seguir determinam qual acionamento de micro / automático / manual é mais razoável.