Todos os artigos
cache de promptotimização de custosRAGsystem prompt

Cache de prompt: quando ele realmente reduz custo

Entenda como o cache automático de prompt funciona, em quais cenários ele reduz custo e como estruturar system prompts e RAG para aproveitá-lo.

5 min de leitura

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:

  1. Primeira chamada: o modelo processa todos os tokens de entrada, incluindo o prefixo.
  2. O prefixo é salvo em cache por um período limitado (TTL).
  3. 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):

python
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:

python
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:

bash
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.

Quer usar isso na sua empresa?

Conte o que sua equipe precisa e preparamos uma proposta.