O que é cache de prompt?
Cache de prompt é uma técnica em que o prefixo idêntico de uma sequência de tokens é armazenado temporariamente pelo servidor de inferência. Quando você envia uma nova requisição com o mesmo início (por exemplo, o mesmo system prompt longo ou o mesmo bloco de contexto), o modelo não precisa reprocessar esses tokens do zero. Isso pode reduzir a latência e, em alguns modelos, o custo associado ao processamento da entrada.
Na prática, o cache funciona assim:
- Primeira chamada: o modelo processa todos os tokens de entrada, incluindo o prefixo.
- O prefixo é salvo em cache por um período limitado (TTL).
- Chamadas seguintes com o mesmo prefixo: apenas os tokens novos (sufixo) são processados integralmente; o prefixo em cache é reutilizado.
Nem todos os modelos ou provedores implementam cache automático de prompt. Portanto, antes de desenhar sua aplicação contando com esse recurso, verifique a documentação do modelo que você utiliza.
Quando o cache de prompt reduz custo de verdade
O cache de prompt não é uma bala de prata. Ele traz benefício real quando a mesma entrada longa é enviada repetidamente. Os cenários mais comuns:
- System prompts longos: instruções detalhadas, regras de negócio, exemplos de formato de saída, glossários. Se o system prompt tem centenas ou milhares de tokens e é idêntico em todas as chamadas, ele é um forte candidato a cache.
- RAG com contexto repetido: se você usa a mesma base de documentos (ou um subconjunto fixo) em várias perguntas, o bloco de contexto pode ser reaproveitado. Por exemplo, um chatbot de suporte que anexa sempre o manual do produto no prompt.
- Few-shot examples fixos: se você inclui exemplos de entrada/saída para guiar o modelo, esses exemplos costumam ser estáticos. Colocá-los no início do prompt permite que sejam cacheados.
Já em cenários onde cada requisição tem um prompt totalmente diferente (por exemplo, geração de texto livre sem contexto compartilhado), o cache dificilmente será aproveitado.
Como estruturar prompts para aproveitar o cache
A regra de ouro é: coloque tudo que é estático no início, e o que muda no final. O cache geralmente considera o prefixo contínuo a partir do primeiro token. Se você alterar qualquer token no meio do prefixo, todo o cache após aquele ponto é invalidado.
1. Separe instruções fixas de dados dinâmicos
Em vez de intercalar conteúdo dinâmico com instruções, monte o prompt em camadas:
[System prompt estático: regras, personalidade, formato de saída]
[Contexto fixo: documentos ou exemplos]
[Pergunta ou entrada do usuário - dinâmico]
Exemplo em Python com uma API compatível com OpenAI (endereço e chave em variáveis de ambiente):
import os
import openai
client = openai.OpenAI(
base_url=os.environ["BASE_URL"],
api_key=os.environ["API_KEY"]
)
system_prompt = """Você é um assistente de suporte técnico para desenvolvedores...
[regras longas e estáveis aqui]
"""
contexto_fixo = """Manual do produto:
[texto do manual, vários parágrafos]
"""
def perguntar(pergunta):
response = client.chat.completions.create(
model="gpt-4o-mini", # exemplo
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": contexto_fixo + "\n\n" + pergunta}
]
)
return response.choices[0].message.content
Nesse exemplo, system_prompt e contexto_fixo são idênticos em todas as chamadas. Apenas pergunta varia. Se o provedor aplicar cache de prompt, o prefixo formado por system_prompt + contexto_fixo será reutilizado, processando apenas a pergunta nova.
2. Evite concatenar dados dinâmicos no início
Um erro comum é montar o prompt assim:
prompt = f"Usuário: {nome}\nData: {data}\n\n{system_prompt}\n\n{pergunta}"
Aqui, nome e data mudam a cada chamada, invalidando o cache de todo o restante, inclusive do system prompt que vem depois. Coloque esses campos dinâmicos no final, após o bloco estático.
3. Use placeholders no system prompt
Se precisar inserir informações variáveis dentro do system prompt (ex: nome do usuário), prefira incluir um placeholder e substituir após o bloco fixo, ou envie essas informações como uma mensagem user separada no final. Assim, o system prompt permanece idêntico.
4. Versionamento de system prompts
Quando você altera o system prompt, o cache é invalidado e a primeira chamada após a mudança será processada integralmente. Isso é esperado. Para minimizar o impacto, evite alterações frequentes. Se precisar testar variações, faça isso em ambiente de desenvolvimento.
5. RAG: separe o contexto fixo da pergunta
Se você monta um prompt de RAG com documentos recuperados, tente separar o que é fixo (base de conhecimento comum) do que é recuperado dinamicamente. Por exemplo:
[System: instruções]
[Contexto base: manual geral, FAQ, políticas - sempre o mesmo]
[Contexto recuperado: trechos específicos para esta pergunta]
[Pergunta do usuário]
O contexto base pode ser cacheado; o contexto recuperado e a pergunta são dinâmicos. Se o contexto recuperado for pequeno, a economia do cache no contexto base ainda pode ser relevante.
Exemplo com curl
Para testar a estrutura, você pode usar curl diretamente:
curl "$BASE_URL/chat/completions" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $API_KEY" \
-d '{
"model": "gpt-4o-mini",
"messages": [
{"role": "system", "content": "System prompt longo e estável..."},
{"role": "user", "content": "Contexto fixo...\n\nPergunta dinâmica"}
]
}'
Observe a ordem: sistema primeiro, contexto fixo depois, conteúdo dinâmico por último.
Cuidados e limitações
- TTL (time-to-live): o cache expira após alguns minutos ou horas, dependendo do provedor. Se você fizer chamadas esporádicas, o cache pode não estar disponível.
- Cache é automático e opaco: você não controla diretamente quando o cache é usado. A decisão é do servidor. Por isso, trate a economia como um bônus, não como um pilar do seu orçamento.
- Não otimize prematuramente: se seus prompts são curtos (menos de algumas centenas de tokens), o ganho com cache é mínimo. Concentre-se primeiro em melhorar a qualidade das respostas.
- Monitore o uso: acompanhe o consumo de tokens de entrada nas suas chamadas. Se notar que o número de tokens processados por chamada caiu após a primeira, é sinal de que o cache está sendo aplicado.
Conclusão
O cache de prompt é uma ferramenta poderosa para reduzir custos em aplicações com prompts longos e repetitivos, como chatbots com system prompts extensos e sistemas RAG com contexto fixo. A chave é estruturar o prompt de forma que o prefixo estático permaneça idêntico entre chamadas, deixando apenas o conteúdo verdadeiramente dinâmico no final.
Essas práticas valem para qualquer modelo compatível com a API OpenAI. Lembre-se de testar suas estruturas de prompt e medir o impacto real no seu caso de uso.
Quer entender como a sua empresa pode usar modelos de IA com atendimento e faturamento no Brasil? Fale com a gente — a equipe da TokenRecarga responde em português.