KV cache, atenção e o problema de engenharia de contexto longo
A engenharia de contexto longo começa com uma realidade matemática que os profissionais da área frequentemente subestimam. A atenção padrão é quadrática: para uma janela de N tokens, o custo computacional cresce como O(N²). Um modelo com janela de 1 milhão de tokens executando atenção densa teria necessidades de memória proibitivas sem otimizações fundamentais. Entender essas otimizações não é trivia de implementação. É o que permite raciocinar sobre quando e por que sistemas de contexto longo falham, custam demais ou apresentam degradação de qualidade em determinadas regiões da janela.
A operação central do transformer é a self-attention. Dado um input X com n tokens, geramos três matrizes via projeções aprendidas: Q = XW_Q, K = XW_K, V = XW_V. A atenção é então Attention(Q, K, V) = softmax(QK^T / √d_k) V. O produto QK^T produz uma matriz n×n de scores de atenção. Cada linha representa a distribuição de atenção de um token sobre todos os outros. Essa matriz ocupa O(N²) em memória, o que para N=1M tokens seria 4TB apenas para os attention scores em float32 antes de qualquer operação.
FlashAttention resolve o problema de memória através de tiling consciente da hierarquia de memória. Em vez de materializar a matriz completa de atenção em HBM (High Bandwidth Memory), o algoritmo divide Q, K, V em blocos que cabem em SRAM on-chip, computa a atenção em blocos e acumula o resultado sem nunca escrever a matriz N×N completa em HBM. FlashAttention 2 melhora o paralelismo de sequência. FlashAttention 3 unifica operações para Tensor Cores H100. O resultado prático: 2-4x de speedup e redução de 5-20x no consumo de memória para sequências longas.
O KV cache é o mecanismo que torna inferência autoregressiva eficiente. Em geração token-a-token, cada novo token precisa computar atenção com todos os tokens anteriores. Sem cache, cada passo recomputaria K e V para toda a sequência. Com KV cache, os vetores K e V de tokens já processados são armazenados em memória e reutilizados. O custo marginal de cada novo token é O(N) em vez de O(N²). Para uma janela de 100K tokens gerando 1K tokens novos, isso representa 100x de redução no trabalho de attention.
Mas o KV cache cria seu próprio problema de engenharia: gerenciamento de memória. Cada token ocupa 2 × n_heads × d_head × dtype bytes de cache (um tensor K e um tensor V). Para GPT-3 com 96 heads de tamanho 128 em FP16, cada token ocupa 96 × 128 × 2 × 2 = 48KB. Uma janela de 128K tokens ocupa 6GB. Uma janela de 1M tokens ocupa 48GB — a memória inteira de uma A100 80GB sem espaço para os pesos do modelo. Isso explica por que context length de 1M tokens requer técnicas como GQA (Grouped-Query Attention) e MQA (Multi-Query Attention), que reduzem o espaço de KV cache compartilhando heads entre grupos ou completamente.
O fenômeno "Lost in the Middle" (Liu et al., 2023) revela que modelos de linguagem modernos têm viés sistemático de primacy e recency: informação no início e no fim da janela é processada de forma mais confiável. Informação no meio da janela de 1M tokens sofre degradação de recall. Isso tem implicações diretas para design de sistemas de context engineering. Um pipeline RAG bem projetado não coloca apenas os N documentos mais relevantes na janela. Ele pondera a posição de cada fragmento. Informação crítica para o raciocínio deve estar próxima do início ou próxima da instrução final. Documentos de background podem ser inseridos no meio sem impacto severo.
A extensão de contexto além do treinamento requer modificações nos encodings posicionais. Modelos com RoPE (Rotary Position Embedding) podem ser estendidos via YaRN (Yet another RoPE extensioN), que escala dinamicamente a frequência de rotação para acomodar sequências mais longas. ALiBi (Attention with Linear Biases) não encode posição diretamente — em vez disso, adiciona um bias linear negativo crescente com a distância entre tokens, permitindo extrapolação mais limpa. A escolha de encoding posicional é uma decisão de arquitetura com consequências de longa cauda: modelos com RoPE bem calibrado generalizam bem para sequências 4-8x maiores que o treinamento com fine-tuning mínimo; modelos com positional encoding absoluto degradam rapidamente além do contexto de treinamento.
Prefix caching é a técnica que reduz custo de inferência para workloads com prefixo reutilizável. Quando o system prompt, instruções, ou documentos de contexto são idênticos entre requests, o KV cache para esses tokens pode ser computado uma vez e reutilizado. Anthropic implementa isso como Prompt Caching: blocos de contexto marcados com cache_control são armazenados por 5 minutos (padrão) ou 1 hora (TTL estendido), reduzindo custo em até 90% para segmentos cached. A implicação arquitetural é clara: contexto reutilizável (system prompts, ontologias, documentos de referência) deve ser colocado no início da mensagem e marcado explicitamente para caching. Contexto variável (queries, dados de runtime) deve seguir o prefixo fixo.
Compressão de contexto aloca menos tokens para representar a mesma semântica. RAPTOR (Recursive Abstractive Processing for Tree-Organized Retrieval) constrói uma árvore de sumários hierárquicos: fragmentos de texto são clusterizados semanticamente, cada cluster é sumarizado, os sumários são clusterizados novamente, e assim por diante até um sumário raiz. O sistema pode responder queries navegando pelo nível correto da hierarquia — usando o nível granular para queries específicas e o nível abstrato para queries sobre tendências gerais. Isso reduz custo e melhora relevância simultaneamente.
A engenharia de contexto longo, portanto, não é uma questão de simplesmente aumentar o tamanho da janela. É uma disciplina de orçamento que considera: custo computacional quadrático vs linear, posicionamento estratégico de informação crítica, aproveitamento de prefix caching para amortizar custo de contexto fixo, compressão hierárquica para contexto variável, e monitoramento de degradação de qualidade em diferentes regiões da janela. Sistemas que tratam a janela de contexto como um buffer de memória simples eventualmente pagam em custo, latência ou qualidade de resposta.
