O problema real
Você ouve: "Use RAG!", "Fine-tuning vale a pena!", "Basta um bom prompt!". Qual é certa para seu caso? Um CEO quer "treinar a IA em nossas políticas" porque ouviu isso em um podcast. Um engenheiro quer RAG porque é moda. Um PM quer tudo de uma vez.
A verdade: cada uma resolve um problema diferente, custa diferente, e tem limites diferentes. Este artigo te ajuda a tomar a decisão correta sem gambiarra no meio do caminho.
Árvore de decisão: qual técnica usar
Responda estas perguntas em ordem:
1. O conhecimento muda todos os dias?
- Sim → RAG (você reindexar é fácil; fine-tuning é difícil)
- Não → continue
2. Você quer controlar exatamente como o modelo responde (tom, formato)?
- Sim → Prompt estruturado + engenharia-de-prompt-em-producao
- Não → continue
3. O custo por requisição é crítico (> 10 mil requisições/dia)?
- Sim → Fine-tuning (reduz custo de tokens significativamente)
- Não → continue
4. Você precisa de latência < 500ms incluindo I/O?
- Sim → Prompt estruturado ou fine-tuning (RAG adiciona latência)
- Não → RAG é aceitável
5. Você tem > 10 mil exemplos de entrada-saída para treinar?
- Não → RAG ou prompt estruturado
- Sim → Fine-tuning pode valer
Comparação prática: custos reais em 2026
| Fator | Prompt estruturado | RAG | Fine-tuning |
|---|---|---|---|
| Custo inicial | USD 0 | USD 100 (embeddings + DB) | USD 500-5.000 |
| Custo por 1M requisições | USD 3-10 | USD 10-50 | USD 0,50-2,00 |
| Tempo de implementação | 1-3 dias | 3-7 dias | 2-4 semanas |
| Atualização de conhecimento | Imediata | Poucas horas | Requer retreinamento |
| Latência p99 | 400ms | 600-1.500ms | 400ms |
| Controle de formato | Alto | Médio | Alto |
| Risco de alucinação | Médio | Menor (com reranking) | Menor |
Cenário 1: Prompt estruturado
Use quando:
- Conhecimento é fixo (política de empresa que não muda)
- Você quer controlar saída exatamente
- Volume é baixo (< 100 requisições/dia)
- Prazo é curto
Custo:
- OpenAI GPT-4o-mini: USD 0,15 / 1M input tokens
- 1M requisições × 500 tokens = USD 75
Exemplo real: classificar tickets de suporte. Você escreve um bom prompt com exemplos, testa, versiona. Pronto.
Código:
from openai import OpenAI
system_prompt = """Você é especialista em política de devolução.
Resonda apenas com: APROVADA, RECUSADA, ou PRECISA_DE_CONTEXTO.
Não explique. Uma palavra só."""
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": "Cliente quer devolver produto com 45 dias de uso"}
],
temperature=0
)
print(response.choices[0].message.content)
Quando NÃO usar:
- Conhecimento muda frequentemente
- Você tem 10 GB de manuais para integrar
- Precisa de latência ultra-baixa
Cenário 2: RAG
Use quando:
- Você tem documentação grande e muda com frequência
- Precisa que o modelo cite a fonte
- Volume é médio-alto (100-10k requisições/dia)
- Latência de 600-1.500ms é aceitável
Custo (exemplo real: 50k documentos, 5M requisições/mês):
- Embeddings iniciais: USD 0,10
- Armazenamento (Pinecone): USD 100-200/mês
- Busca + LLM: USD 7-15 por 1M requisições
- Total: USD 200-300/mês
Exemplo real: FAQ que muda toda semana, manual de API com 500 páginas, base de conhecimento de suporte.
Código:
import chromadb
from openai import OpenAI
# Inicializa coleção
client = chromadb.Client()
collection = client.create_collection(name="faq")
# Indexa documentos (feito uma vez ou periodicamente)
documents = [
"Devolução é aceita até 30 dias",
"Reembolso integral se o produto está intacto",
# ... mais documentos
]
collection.add(
ids=[f"doc_{i}" for i in range(len(documents))],
documents=documents
)
# Query
query = "Até quando posso devolver?"
results = collection.query(query_texts=[query], n_results=2)
# Monta prompt com contexto
context = "\n".join(results["documents"][0])
prompt = f"""Baseado neste conhecimento:
{context}
Responda: {query}"""
# Chama LLM
response = OpenAI().chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}]
)
Quando NÃO usar:
- Conhecimento é fixo (prompt é melhor)
- Você tem < 100 documentos (custo/complexidade não se justifica)
- Precisa de latência < 500ms
Cenário 3: Fine-tuning
Use quando:
- Você tem 10k+ exemplos de entrada-saída reais
- Padrão de resposta é muito específico (estilo, formato)
- Domínio é muito especializado (linguagem muito técnica, contexto muito específico)
- Volume justifica o custo (> 1M requisições/mês)
Custo (exemplo: 10k exemplos, 5M requisições/mês):
- Treinamento inicial: USD 500-2.000 (para GPT-3.5 small)
- Por 1M requisições: USD 0,50-1,50 (reduz custo vs. GPT-4)
- Total primeiro mês: USD 3.000-5.000
- A partir do mês 2: USD 2.500-4.000/mês
Rentável se você tiver > 2M requisições/mês. Abaixo disso, prompt + RAG é mais barato.
Exemplo real (REAL mesmo): Um chatbot de e-commerce com:
- 15 mil pares (pergunta, resposta esperada)
- Respostas sempre no mesmo formato (JSON com campos específicos)
- Linguagem muito técnica de catálogo
- 2M requisições/mês
Fine-tuning economiza USD 500-1.000/mês em tokens, e melhora velocidade em 20%.
Código:
# 1. Prepara dados em JSONL
# {"messages": [{"role": "user", "content": "qual é a cor?"},
# {"role": "assistant", "content": "azul"}]}
# 2. Cria job
openai api fine_tunes.create \
-t fine_tune_data.jsonl \
-m gpt-3.5-turbo
# 3. Monitora treinamento
openai api fine_tunes.get --id <id>
# 4. Usa modelo fine-tuned
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-3.5-turbo:ft-...", # Seu modelo fine-tuned
messages=[{"role": "user", "content": "qual é a cor?"}]
)
Quando NÃO usar:
- Você tem < 10k exemplos (dados insuficientes)
- Conhecimento muda frequentemente (retreinar é caro)
- Precisa atualizar conhecimento em dias/horas (RAG é mais rápido)
- Custo não é principal (prompt + RAG é mais simples)
Combinando técnicas: o melhor dos três mundos
A verdade é que não é "um ou outro". Você pode combinar:
Padrão 1: Prompt + RAG
- Usa um prompt estruturado bem escrito (controla formato)
- Recupera documentos com RAG (conhecimento atualizado)
- Resultado: controle + flexibilidade + latência razoável
Padrão 2: Fine-tuning + RAG
- Fine-tunes para o estilo/formato específico
- Usa RAG para conhecimento dinâmico
- Resultado: qualidade máxima, custo moderado
Padrão 3: Apenas fine-tuning
- Se tem dados +10k exemplos e custo justifica
- Sem RAG (mais rápido, mais barato)
- Risco: alucinações aumentam, precisa retrair quando conhecimento muda
Armadilhas comuns
"Vou fazer fine-tuning com 500 exemplos"
Insuficiente. Precisa 10k+. Com 500, o modelo overfita e falha em produção.
"Fine-tuning resolve alucinação"
Não completamente. Fine-tuning melhora formato, não garante factualidade. Combine com RAG.
"RAG é lento, então vou fazer tudo com fine-tuning"
Fine-tuning não escala para conhecimento muito grande (> 1 GB). RAG + cache é melhor.
"Prompt é de graça"
Prompt ruim é caro: taxa de erro alta, más experiências, suporte manual. Invista em good prompts.
Guia de decisão resumido
| Cenário | Técnica | Por quê |
|---|---|---|
| FAQ estático, volume baixo | Prompt | Rápido, barato, nenhuma config |
| Base de conhecimento dinâmica | RAG | Atualização fácil, escalável |
| Muitos exemplos, padrão específico | Fine-tuning | Custo reduzido, qualidade alta |
| Combinação de acima | Prompt + RAG | Melhor relação custo/benefício |
Próximos passos
- Estruture seu prompt com Engenharia de prompt em produção.
- Implemente um retriever com RAG na prática.
- Monitore custo com FinOps para IA.
- Avalie qualidade com Observabilidade em aplicações com LLM.
A escolha certa economiza meses e milhares de dólares. Escolha bem.