Infraestrutura de Cache de Prompts: Reduzindo Custos e Latência de LLMs
Atualizado em 11 de dezembro de 2025
Atualização de Dezembro de 2025: Cache de prefixo da Anthropic entregando 90% de redução de custos e 85% de redução de latência para prompts longos. Cache automático da OpenAI habilitado por padrão (50% de economia). 31% das consultas a LLMs exibindo similaridade semântica—ineficiência massiva sem cache. Leituras de cache a $0,30/M tokens vs $3,00/M para processamento novo (Anthropic). Arquitetura de cache multi-camadas (semântico → prefixo → inferência) maximizando economias.
O cache de prompts da Anthropic reduz custos em até 90% e latência em até 85% para prompts longos.¹ A OpenAI alcança 50% de redução de custos com cache automático habilitado por padrão. Pesquisas mostram que 31% das consultas a LLMs exibem similaridade semântica com requisições anteriores, representando ineficiência massiva em implantações sem infraestrutura de cache.² Organizações executando aplicações de IA em produção deixam dinheiro substancial na mesa sem estratégias adequadas de cache.
O cache de prompts opera em múltiplos níveis—desde cache de prefixo do lado do provedor que reutiliza computações de KV cache, até cache semântico no nível da aplicação que retorna respostas anteriores para consultas similares. Entender cada camada e quando implantá-la ajuda organizações a otimizar tanto custo quanto latência para seus padrões específicos de carga de trabalho.
Fundamentos de cache
Os custos de inferência de LLMs derivam de duas fontes: processamento de tokens de entrada e geração de tokens de saída. Estratégias de cache visam ambas:
Cache de tokens de entrada (cache de prefixo)
Cada requisição de LLM processa tokens de entrada através do mecanismo de atenção do modelo, gerando pares chave-valor armazenados no KV cache. Quando múltiplas requisições compartilham prefixos idênticos—prompts de sistema, exemplos few-shot ou contexto de documentos—a computação do KV cache se repete desnecessariamente.
Solução de cache de prefixo: Armazenar valores KV computados para prefixos comuns. Requisições subsequentes com prefixos correspondentes pulam a recomputação, iniciando do estado em cache.
Impacto no custo: - Anthropic: Leituras de cache custam $0,30/M tokens vs. $3,00/M para processamento novo (90% de economia) - OpenAI: 50% de desconto para tokens em cache - Google: Preços variáveis baseados na janela de contexto
Impacto na latência: Pular computação de prefixo reduz o tempo até o primeiro token em 50-85% dependendo do tamanho do prefixo.
Cache de saída (cache semântico)
Algumas requisições merecem respostas idênticas—perguntas repetidas, consultas determinísticas ou buscas que não requerem regeneração.
Solução de cache semântico: Armazenar respostas de saída indexadas por entradas semanticamente similares. Retornar respostas em cache sem invocação do LLM para consultas correspondentes.
Impacto no custo: Respostas em cache eliminam chamadas de API completamente—100% de economia em cache hits.
Impacto na latência: Resposta retorna em milissegundos versus segundos para inferência de LLM.
Hierarquia de cache
Sistemas em produção tipicamente implementam múltiplas camadas de cache:
Requisição → Cache Semântico (100% economia) → Cache de Prefixo (50-90% economia) → Inferência Completa
↓ ↓ ↓
Resposta em cache Estado KV em cache Computação nova
Cada camada captura diferentes oportunidades de otimização baseadas em padrões de similaridade de requisições.
Cache de prompts no nível do provedor
Anthropic Claude
A Anthropic oferece o cache de prompts mais configurável:³
Preços: - Escritas em cache: 25% de prêmio sobre o preço base de entrada - Leituras de cache: 90% de desconto (10% do preço base) - Ponto de equilíbrio: 2+ cache hits por prefixo em cache
Requisitos: - Mínimo de 1.024 tokens por checkpoint de cache - Até 4 checkpoints de cache por requisição - Tempo de vida do cache: 5 minutos desde o último acesso (estendido para 1 hora com hits regulares) - Até 5 turnos de conversa podem ser armazenados em cache
Implementação:
import anthropic
client = anthropic.Anthropic()
# Marcar conteúdo para cache com cache_control
response = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1024,
system=[
{
"type": "text",
"text": "Você é um assistente especializado para nosso software empresarial...",
"cache_control": {"type": "ephemeral"} # Marcar para cache
}
],
messages=[{"role": "user", "content": "Como configuro permissões de usuário?"}]
)
Melhores práticas: - Colocar conteúdo estático (prompts de sistema, documentação) no início do prompt - Colocar conteúdo dinâmico (entrada do usuário, conversa) no final - Usar checkpoints de cache em limites naturais - Monitorar taxas de cache hit para verificar otimização
OpenAI
A OpenAI implementa cache automático sem alterações de código:⁴
Preços: - Tokens em cache: 50% do preço base de entrada - Sem prêmio de escrita em cache
Requisitos: - Mínimo de 1.024 tokens para elegibilidade de cache - Cache hits ocorrem em incrementos de 128 tokens - Tempo de vida do cache: 5-10 minutos de inatividade
Comportamento automático: - Prompts excedendo 1.024 tokens automaticamente entram em cache - Sistema detecta prefixos correspondentes entre requisições - Nenhuma alteração de API necessária
Monitoramento:
response = client.chat.completions.create(
model="gpt-4-turbo",
messages=[...],
)
# Verificar uso para cache hits
print(f"Tokens em cache: {response.usage.prompt_tokens_details.cached_tokens}")
print(f"Total de tokens de entrada: {response.usage.prompt_tokens}")
Google Gemini
O Google fornece cache de contexto para modelos Gemini:⁵
Preços: - Variável baseado no tamanho do contexto em cache e duração - Taxas de armazenamento para conteúdo em cache
Recursos: - Criação e gerenciamento explícito de cache - Time-to-live configurável - Compartilhamento de cache entre requisições
Implementação:
from google.generativeai import caching
# Criar conteúdo em cache
cache = caching.CachedContent.create(
model='models/gemini-1.5-pro-001',
display_name='documentacao-produto',
system_instruction="Você é um especialista em produtos...",
contents=[product_docs],
ttl=datetime.timedelta(hours=1)
)
# Usar conteúdo em cache nas requisições
model = genai.GenerativeModel.from_cached_content(cached_content=cache)
response = model.generate_content("Como configuro o recurso X?")
Amazon Bedrock
A AWS oferece cache de prompts em preview para modelos suportados:⁶
Requisitos: - Claude 3.5 Sonnet requer mínimo de 1.024 tokens por checkpoint - Segundo checkpoint requer 2.048 tokens
Padrão de implementação segue a abordagem cache_control da Anthropic dentro da estrutura de API do Bedrock.
Cache de prefixo no vLLM
Inferência auto-hospedada com vLLM inclui cache de prefixo automático:⁷
Arquitetura
O Automatic Prefix Caching (APC) do vLLM armazena blocos KV em uma tabela hash, permitindo reutilização de cache sem estruturas de árvore:
Design principal: - Todos os blocos KV armazenados no pool de blocos na inicialização - Busca baseada em hash para correspondência de prefixo - Operações O(1) para gerenciamento de blocos - Eficiência de memória do PagedAttention mantida
Configuração
from vllm import LLM
llm = LLM(
model="meta-llama/Llama-3.1-8B-Instruct",
enable_prefix_caching=True, # Habilitar APC
gpu_memory_utilization=0.90,
)
Impacto no desempenho
vLLM com PagedAttention demonstra throughput 14-24x maior que implementações ingênuas.⁸ Cache de prefixo adiciona:
- Diferença de custo de 10x entre tokens em cache e não em cache
- Redução de latência de uma ordem de magnitude para prefixos correspondentes
- Eficiência de memória através de blocos KV compartilhados
Considerações de segurança
vLLM suporta isolamento de cache para ambientes compartilhados:
# Salt de cache por requisição previne acesso cross-tenant ao cache
response = llm.generate(
prompt="...",
sampling_params=SamplingParams(...),
cache_salt="tenant-123" # Isolar cache por tenant
)
Injeção de salt de cache nos hashes de bloco previne ataques de timing onde adversários inferem conteúdo em cache através da observação de latência.
Extensão LMCache
LMCache estende o vLLM com capacidades avançadas de cache:⁹
Recursos: - Reutilização de KV cache entre instâncias de engine - Armazenamento multi-camadas (GPU → CPU RAM → disco) - Cache de conteúdo não-prefixo - Redução de latência de 3-10x em benchmarks
Arquitetura:
vLLM Engine → LMCache → GPU VRAM (quente)
→ CPU RAM (morno)
→ Disco Local (frio)
Cache semântico
Cache semântico retorna respostas anteriores para consultas semanticamente similares (não apenas idênticas):
GPTCache
GPTCache fornece cache semântico open-source para aplicações LLM:¹⁰
Arquitetura:
Consulta → Embedding → Busca Vetorial → Verificação de Similaridade → Resposta/Chamada API
↓ ↓ ↓
BERT/OpenAI Milvus/FAISS Limiar (0.8)
Componentes: - LLM Adapter: Integração com vários provedores de LLM - Embedding Generator: Vetorização de consultas - Vector Store: Busca por similaridade (Milvus, FAISS, Zilliz) - Cache Manager: Armazenamento e recuperação - Similarity Evaluator: Correspondência baseada em limiar
Implementação:
from gptcache import cache
from gptcache.adapter import openai
# Inicializar cache semântico
cache.init(
pre_embedding_func=get_text_embedding,
data_manager=manager,
)
# Usar chamadas OpenAI em cache
response = openai.ChatCompletion.create(
model='gpt-4',
messages=[{"role": "user", "content": "O que é machine learning?"}]
)
# Consultas semanticamente similares ("Explique ML", "Defina aprendizado de máquina")
# retornam resposta em cache
Desempenho
GPTCache alcança ganhos significativos de eficiência:¹¹
- Redução de chamadas API: Até 68,8% entre categorias de consultas
- Taxas de cache hit: 61,6% a 68,8%
- Precisão: 97%+ taxa de hit positivo
- Redução de latência: 40-50% em cache hits, até 100x para hits completos
Técnicas avançadas
Limiares adaptativos VectorQ:¹²
Limiares de similaridade estáticos (ex.: 0,8) têm desempenho ruim em consultas diversas. VectorQ aprende regiões de limiar específicas de embedding que se adaptam à complexidade da consulta:
- Consultas factuais simples: Limiares mais altos (correspondência mais estrita)
- Consultas abertas: Limiares mais baixos (mais reutilização)
- Consultas ambíguas: Ajuste dinâmico
Detecção de padrões SCALM:
SCALM melhora o GPTCache através de detecção de padrões e análise de frequência: - 63% de melhoria na taxa de cache hit - 77% de redução no uso de tokens - Identifica padrões de entradas de cache de alta frequência
Quando usar cache semântico
Bons candidatos: - Consultas estilo FAQ com espaço de respostas limitado - Consultas de busca (informações de produtos, documentação) - Respostas determinísticas (cálculos, formatação) - Aplicações de alto tráfego com repetição de consultas
Candidatos ruins: - Geração criativa que requer unicidade - Respostas personalizadas (contexto específico do usuário) - Informações sensíveis ao tempo - Padrões de consulta com baixa repetição
Padrões de implementação
Aplicações de chat
Sistemas de chat se beneficiam tanto de cache de prefixo quanto semântico:
Cache de prompt de sistema:
# Prompt de sistema estático em cache no início da requisição
system_prompt = """
Você é um agente de suporte ao cliente da Acme Corp...
[2000+ tokens de diretrizes e conhecimento]
"""
# Conversa dinâmica anexada após prefixo em cache
messages = [
{"role": "system", "content": system_prompt, "cache_control": {...}},
{"role": "user", "content": user_message}
]
Cache de histórico de conversa: A Anthropic suporta cache de até 5 turnos de conversa, reduzindo custos para conversas multi-turno.
Aplicações RAG
Geração aumentada por recuperação armazena em cache o contexto recuperado:
# Estrutura de cache para RAG
cached_context = {
"system": system_prompt, # Sempre em cache
"documents": retrieved_chunks, # Cache por cluster de consultas
"examples": few_shot_examples # Estável entre requisições
}
# Apenas a consulta do usuário varia
dynamic_content = {
"query": user_question
}
Cache de chunks de documentos: Quando múltiplas consultas recuperam os mesmos documentos, cache de prefixo elimina processamento redundante do contexto compartilhado.
Workflows agênticos
Sistemas de agentes com chamadas de ferramentas se beneficiam de cache de prefixo:
Prompt de sistema → Definições de ferramentas → Histórico de conversa → Consulta atual
(em cache) (em cache) (parcialmente em cache)
[Conteúdo truncado para tradução]