Blog

CAG x RAG: quando cache de contexto vence retrieval

Quase todo mundo que precisa de um assistente sobre uma base própria assume que a resposta é RAG. Mas RAG carrega um custo escondido: a cada pergunta você embeda, busca, reordena e injeta chunks, e qualquer erro nessa cadeia vira resposta errada com confiança. CAG (Cache Augmented Generation) propõe outro caminho: se a sua base inteira cabe na janela de contexto do modelo, carregue tudo de uma vez, marque como cacheada e reutilize esse cache em cada pergunta, sem retrieval nenhum. Este artigo compara os dois de frente, mostra os fluxos lado a lado, quando cada um vence, um exemplo real de prompt caching e como combinar os dois numa arquitetura híbrida.

2026-06-16 / IA Aplicada / 11 min

01

O que é RAG e o que é CAG

RAG (Retrieval Augmented Generation) recupera, a cada query, os trechos mais relevantes de um vector store e os injeta no prompt antes de gerar a resposta. A base nunca entra inteira no contexto: você indexa documentos em chunks com embeddings e, na hora da pergunta, traz apenas o top-k mais parecido. É a abordagem padrão quando a base é grande demais para caber no contexto.

CAG (Cache Augmented Generation) inverte a lógica: carrega TODA a base de conhecimento dentro do contexto do modelo uma única vez, deixa o modelo processar esse bloco e reaproveita o estado interno (o KV cache, exposto pelos provedores como prompt cache) nas perguntas seguintes. Não há embedding por query, não há vector store, não há reranking. A pergunta do usuário é anexada ao contexto já cacheado e a geração acontece direto. O preço a pagar é que a base toda precisa caber na janela de contexto.

02

Comparação direta

A escolha entre RAG e CAG não é ideológica: cada dimensão puxa para um lado. A tabela abaixo coloca as seis dimensões que mais pesam na decisão real de engenharia.

DimensãoRAGCAG
Latência por queryMaior: embed da pergunta, busca, reranking e só depois geraçãoMenor: sem retrieval, a base já cacheada vai direto para a geração
CustoPaga embeddings e infra de busca, mas processa poucos tokens por queryProcessa a base inteira na primeira vez; com prompt cache, as próximas saem baratas
Frescor do dadoAlto: reindexa um documento e a mudança vale na próxima queryMenor: ao mudar a base, o cache precisa ser refeito
Tamanho máximo da basePraticamente ilimitado (milhões de chunks no vector store)Limitado pela janela de contexto do modelo
Complexidade de infraAlta: pipeline de ingestão, vector store, embeddings, rerankingBaixa: sem vector store, apenas montar o contexto e cachear
Risco de recuperar chunk erradoExiste: retrieval pode trazer o trecho errado e o modelo responde em cima deleInexistente: o modelo vê a base inteira, não depende de buscar o trecho certo

03

Os dois fluxos lado a lado

Visualizar os dois caminhos deixa clara a diferença de superfície: RAG tem uma cadeia de etapas por query, cada uma com seu ponto de falha; CAG concentra o trabalho pesado uma única vez e depois só anexa a pergunta.

RAG (por query)
  Query  ->  Embed  ->  Retrieve (top-k)  ->  Rerank  ->  Gerar  ->  Resposta
                          (vector store)     (cross-encoder)

CAG (uma vez + por query)
  Base inteira  ->  Contexto / KV cache (prompt cache)
                          |
                          v
  Query  ----------->  Gerar  ->  Resposta
  (anexada ao contexto ja cacheado, sem retrieval)

Em RAG, cada seta antes de "Gerar" é uma chance de errar: a pergunta pode embedar mal, o top-k pode não trazer o trecho certo, o reranking pode reordenar errado. Em CAG, o caminho entre a pergunta e a resposta é curto porque o conhecimento já está presente e processado.

04

Quando CAG vence

CAG é a escolha certa quando a base é contida e estável, e quando latência ou correção do retrieval importam mais do que escalar para milhões de documentos.

  • Base pequena ou média que cabe inteira na janela de contexto: FAQ, manual de produto, políticas de troca e entrega, base de regras de um nicho.
  • Dado relativamente estável: muda em semanas ou meses, não a cada minuto, então refazer o cache de vez em quando é barato.
  • Latência crítica: ao eliminar embed, busca e reranking, a primeira resposta após o cache quente sai bem mais rápido.
  • Evitar erro de retrieval: como o modelo vê a base inteira, some a classe de falha em que o chunk certo simplesmente não foi recuperado.
  • Infra enxuta: sem vector store nem pipeline de embeddings para manter, o sistema tem menos partes móveis e menos custo operacional.

05

Quando RAG vence

RAG continua imbatível quando a base não cabe no contexto, muda o tempo todo, precisa de rastreabilidade fina por fonte ou serve muitos clientes com bases isoladas.

  • Base grande que não cabe no contexto: dezenas de milhares de documentos, anos de tickets, catálogos extensos. Aqui CAG simplesmente não entra.
  • Dado que muda muito: estoque, preços, conteúdo atualizado todo dia. Reindexar um documento é barato; refazer o cache da base inteira a cada mudança não.
  • Necessidade de citar fonte específica: quando cada afirmação precisa apontar exatamente para o documento e a seção de origem, o retrieval entrega esse rastro naturalmente.
  • Multi-tenant com bases isoladas: muitos clientes, cada um com sua base privada. O vector store filtra por tenant; manter um cache gigante por cliente seria caro e arriscado.

06

Exemplo prático com prompt caching

O coração do CAG é o prompt cache: o provedor processa o bloco grande da base de conhecimento uma vez e guarda o estado, de forma que as próximas requisições que começam com o mesmo prefixo reaproveitam esse trabalho. No exemplo abaixo, usando a Anthropic Messages API, a base de conhecimento vai como um bloco de sistema marcado com cache_control. A primeira pergunta paga o processamento da base; as seguintes leem do cache e custam uma fração.

import Anthropic from '@anthropic-ai/sdk';

const client = new Anthropic();

// A base de conhecimento inteira: FAQ + políticas + manual.
// Carregada uma vez e marcada como cacheada.
const KNOWLEDGE_BASE = loadKnowledgeBase(); // string grande, cabe no contexto

async function ask(question) {
  return client.messages.create({
    model: 'claude-sonnet-4-5',
    max_tokens: 512,
    system: [
      {
        type: 'text',
        text: 'Você responde EXCLUSIVAMENTE com base na BASE DE CONHECIMENTO abaixo. Se não houver resposta nela, diga que não sabe.',
      },
      {
        type: 'text',
        text: KNOWLEDGE_BASE,
        // Marca este bloco como cacheado: processado uma vez,
        // reaproveitado nas próximas requisições com o mesmo prefixo.
        cache_control: { type: 'ephemeral' },
      },
    ],
    messages: [{ role: 'user', content: question }],
  });
}

// 1a pergunta: cache_creation_input_tokens (paga o processamento da base).
await ask('Qual o prazo de troca de um produto com defeito?');

// 2a pergunta em diante: cache_read_input_tokens (lê do cache, custa fração).
await ask('Vocês entregam no interior?');
await ask('Como funciona a garantia estendida?');

O ganho fica explícito nos contadores de uso: a primeira chamada registra cache_creation_input_tokens (a base foi processada e cacheada) e as seguintes registram cache_read_input_tokens, cobrados por uma fração do preço normal de entrada. Ou seja, a base é processada uma vez e o mesmo cache serve todas as perguntas seguintes, enquanto o cache estiver quente. Sem retrieval, sem vector store: o conhecimento já está no contexto.

07

Abordagem híbrida: o melhor dos dois

Na prática, CAG e RAG não são rivais: a arquitetura mais robusta usa CAG para o core estável e RAG para o long tail. O núcleo de conhecimento que quase não muda e que responde a maioria das perguntas fica cacheado no contexto; o que é raro, volumoso ou volátil fica no vector store e só é recuperado quando o core não basta.

  1. Identifique o core estável: as políticas, o FAQ e o manual que respondem a maior parte das perguntas e mudam pouco. Esse bloco vira o contexto cacheado (CAG).
  2. Mantenha o long tail no vector store: documentos extensos, casos raros, conteúdo que muda com frequência. Eles ficam indexados para RAG.
  3. Responda primeiro pelo cache: a pergunta chega ao contexto já cacheado. Se o core cobre, responde direto, com baixa latência e sem risco de retrieval.
  4. Acione RAG só no long tail: quando a resposta não está no core, dispare o retrieval para buscar o trecho específico no vector store e injete-o junto.
  5. Reavalie a fronteira periodicamente: promova ao core estável o que virou pergunta frequente e refaça o cache; rebaixe ao vector store o que ficou raro.

FAQ

Perguntas frequentes

CAG substitui RAG?

Não. CAG substitui RAG apenas no recorte em que a base inteira cabe no contexto e muda pouco: ali ele vence em latência, simplicidade e ausência de erro de retrieval. Para bases grandes, muito dinâmicas ou multi-tenant com isolamento, RAG continua necessário. O cenário mais comum em produção é híbrido: CAG para o core estável e RAG para o long tail.

Qual o limite de tamanho para CAG?

O limite é a janela de contexto do modelo: a base de conhecimento, mais o prompt de sistema, mais a pergunta e a resposta precisam caber nela. Na prática, você deixa margem confortável para a conversa e não enche a janela até o teto, porque contexto muito cheio degrada qualidade e encarece. Quando a base ultrapassa esse limite, é o sinal de migrar para RAG ou para a abordagem híbrida.

Como o prompt cache reduz custo?

O bloco grande da base de conhecimento é processado uma única vez e guardado como cache. A primeira requisição paga a criação do cache (cache_creation_input_tokens); as seguintes, com o mesmo prefixo, apenas leem dele (cache_read_input_tokens), cobrados por uma fração do preço normal de entrada. Como a base se repete em toda pergunta, esse prefixo cacheado dilui o custo entre muitas requisições em vez de reprocessar a base toda vez.

Escolha pelo formato da sua base, não pela moda

RAG e CAG resolvem problemas diferentes: retrieval para bases grandes e dinâmicas, cache de contexto para bases contidas e estáveis onde latência e precisão importam. Posso avaliar a sua base e desenhar a arquitetura certa, CAG, RAG ou híbrida, com prompt caching e medição de custo e latência.