Memória e Contexto

Janela de Contexto

Resumo automático, compressão de histórico e limpeza para reduzir tokens sem perder intenção.

Intermediário 20 min 25 pontos Leitura 0%

Nesta aula você vai

  • Detectar quando histórico aproxima limite de tokens
  • Resumir conversa antiga com segunda chamada LLM
  • Aplicar estratégia sliding window + summary

Janela de Contexto

Objetivos

  • Reduzir custos quando conversa cresce
  • Manter coerência sem enviar 200 mensagens brutas

Estratégia 1: Sliding window

Mantenha só últimas K mensagens (ex: 10 turnos = 20 entries).

Prós: simples, previsível. Contras: esquece início da conversa.

Estratégia 2: Resumo periódico

Quando histórico > 15 mensagens, comprima:

async function summarizeHistory(oldMessages) {
  const transcript = oldMessages.map((m) => `${m.role}: ${m.content}`).join('\n');
  return chat(
    [
      { role: 'system', content: 'Resuma a conversa em 5 bullet points objetivos. Português.' },
      { role: 'user', content: transcript },
    ],
    { temperature: 0, max_tokens: 300 },
  );
}

Nova estrutura enviada ao modelo:

system: {SYSTEM_PROMPT}
system: Resumo da conversa anterior: {summary}
user/assistant: {últimas 6 mensagens brutas}

Custo: 1 chamada extra ocasional — ainda cheaper que 100 mensagens completas.

Estratégia 3: Limpeza por tópico

Detecte mudança de assunto (classificador simples ou palavras-chave) → reset histórico, mantenha só summary:

Usuário mudou de "pedido" para "vaga de emprego" → descarte histórico de pedidos

Estimar tokens antes de enviar

function estimateTokens(text) {
  return Math.ceil(text.length / 4); // aproximação
}

const total = messages.reduce((s, m) => s + estimateTokens(m.content), 0);
if (total > 6000) await compress(sessionId);

O que NUNCA resumir sem cuidado

  • Números de pedido confirmados
  • Dados que o usuário corrigiu ("não, o pedido é 5521")
  • Instruções de formato acordadas

Inclua no prompt de resumo: "Preserve IDs, valores e correções do usuário."

Comparação de custo

Abordagem Tokens/turno (conv. longa)
Histórico completo (50 msgs) ~8.000+
Window 10 msgs ~1.500
Summary + window 6 ~1.800 (+ amortizado)

Resumo

  • Conversa longa estoura contexto e orçamento
  • Sliding window = MVP; summary = produção madura
  • Resumo é chamada LLM — trate como pipeline, não hack
  • Preserve fatos críticos no prompt de compressão