Histórico de conversa
Uma conversa longa acaba batendo em um muro intransponível: a janela de contexto do modelo. Tudo nesta página existe por causa desse muro, e a parte interessante é o que é jogado fora, o que é mantido e o que pode ser recuperado.
Quatro formas de recuperar contexto
Seção intitulada “Quatro formas de recuperar contexto”Não são bem alternativas, e sim uma escada, do mais barato ao mais caro.
| Mecanismo | Custo | Mantém | Perde |
|---|---|---|---|
| Elisão | Nada | Cada palavra da narrativa | Resultados antigos de ferramentas sem incidentes |
| Descarte de imagens | Nada | O texto ao redor delas | Capturas de tela antigas |
| Instantâneos | Nada | Cada palavra, como pixels | Legibilidade para um modelo sem visão |
| Resumo | Uma chamada ao modelo | Uma narrativa | Os detalhes que ele não escolheu |
A elisão e o descarte rodam primeiro porque são gratuitos e sem perdas no que importa: eles eliminam volume que ninguém ia reler.
Por que resumir é o último recurso
Seção intitulada “Por que resumir é o último recurso”Um resumo é o único dos quatro que gasta uma chamada ao modelo e o único que decide por você o que importava. Ambos são custos reais. A chamada é o mais interessante, por causa de quando ela acontece.
A compactação geralmente roda antes do muro, com base em um limite. Mas ela também roda de forma reativa, depois que o próprio provedor rejeita uma requisição por ser grande demais — a estimativa heurística subestimou o que o provedor realmente mediu. Nessa situação, um compactador que resume precisa fazer uma requisição para encolher o contexto, e a requisição que ele faz é justamente a que acabou de estourar.
Instantâneos
Seção intitulada “Instantâneos”A compactação por instantâneos renderiza o histórico descartado em páginas densas de glifos em pixels e as devolve como imagens.
A premissa é uma peculiaridade de cobrança: um modelo de visão cobra por uma imagem uma tarifa fixa ou proporcional à área, que não tem nada a ver com quantos caracteres há nela. Doze mil caracteres de conversa descartada custam o equivalente a doze mil caracteres em tokens de texto. Os mesmos caracteres renderizados em uma única página custam uma imagem.
O que faz valer a pena tê-lo, em vez de ser apenas engenhoso, é que ele não precisa de nenhuma chamada ao modelo, nenhuma chave e nenhuma rede. É a única estratégia sempre disponível durante a recuperação após estouro.
A forma da reconstrução é: início literal, meio em imagem, fim literal. O início é a tarefa e as restrições às quais tudo o que vem depois se refere; o fim é onde o trabalho está no momento. O meio é o que menos se relê e o que mais custa.
Os instantâneos são renderizados novamente a partir do texto de origem retido a cada passagem, nunca a partir dos pixels da passagem anterior. Converter uma imagem em imagem degrada os glifos uma geração por compactação, até que ninguém mais consiga lê-los.
De onde uma execução realmente retoma
Seção intitulada “De onde uma execução realmente retoma”Historicamente, toda execução de harness começava com um histórico vazio e reconstruía a continuidade a partir de um bloco <context> no prompt — um resumo da conversa, e não a conversa em si. Três consequências vieram disso:
- Retomar era recontar. O modelo nunca via o próprio raciocínio anterior nem os bytes reais que suas ferramentas retornavam, apenas uma descrição deles.
- Rebobinar morria com o processo. Um
checkpointé um índice na lista de mensagens ativas, então um reinício perdia todas as etiquetas que o modelo havia definido. - Tentar novamente não conseguia distinguir “nada a tentar de novo” de “nada carregado”. Depois de um reinício, o turno que falhou some do estado ativo de qualquer forma.
Os três problemas são resolvidos ao persistir a transcrição. Ela é salva em cada limite de turno e nunca no meio de um turno: um histórico capturado entre uma chamada de ferramenta e seu resultado é um que nenhum provedor aceitará, então uma falha nesse instante restaura o turno anterior, e não um meio turno que não pode ser reproduzido.
Uma execução retomada é reduzida às suas mensagens mais recentes, cortando em um limite que não seja um resultado de ferramenta órfão — um resultado cuja chamada foi cortada é uma requisição que os provedores rejeitam de imediato, e uma transcrição que não pode ser enviada é pior do que uma curta.
A árvore de sessão
Seção intitulada “A árvore de sessão”Cada mensagem registra aquela de que continua, e cada conversa nomeia sua ponta do branch atual. Essa única decisão é a funcionalidade inteira.
Criar um branch não grava nada. Isso apenas move o ponteiro. O caminho que você deixou ainda está lá, então voltar é outro movimento de ponteiro, e não uma restauração — e editar um prompt para executá-lo de novo deixa de custar a resposta com a qual você estava comparando.
Sem isso, toda forma de voltar atrás precisa ocultar ou excluir mensagens, e ocultar é uma mentira que o próximo leitor não consegue enxergar.
Branch ou bifurcação
Seção intitulada “Branch ou bifurcação”| Branch | Bifurcação | |
|---|---|---|
| O que acontece | O ponteiro se move | O caminho é copiado |
| Para onde vai | A mesma conversa | Uma nova conversa |
| Custo | Nada | Uma cópia do branch |
Uma bifurcação copia com ids novos, em vez de compartilhar linhas. Duas conversas que compartilhassem linhas mostrariam uma à outra suas mensagens posteriores, que é justamente a única coisa que uma bifurcação não pode fazer.
Rebobinar usa o mesmo ponteiro
Seção intitulada “Rebobinar usa o mesmo ponteiro”O par checkpoint / rewind dentro da execução marca um limite de turno limpo e retorna a ele depois de uma exploração, guardando um digest. Como os checkpoints são persistidos junto com a transcrição, uma etiqueta definida pelo modelo antes de um reinício ainda cai onde foi definida. Um checkpoint cujo destino não sobreviveu a um corte é descartado, não ajustado — rebobinar “até a etiqueta” e cair em outro lugar é exatamente a falha que uma etiqueta existe para evitar.
Veja também
Seção intitulada “Veja também”- Criar um branch de uma conversa — o navegador da árvore, a bifurcação e a exportação
- Contexto de ferramentas e cache de prompts — a outra metade do que preenche uma janela de contexto
- Comandos slash —
/compact,/shake,/context,/tree