00-02-02 — Fine-tuning vs RAG vs Prompt Engineering — Quando Usar Cada Um
TL;DR
Prompt Engineering: instrua o modelo com texto — mais rápido, mais barato, comece aqui sempre. RAG: injete contexto de documentos externos em cada chamada — quando o problema é "o modelo não sabe sobre X". Fine-tuning: ajuste os pesos do modelo com seus dados — quando o problema é comportamento, estilo, ou formato, não falta de conhecimento. Em 80% dos casos, Prompt Engineering resolve. Em 15%, RAG resolve. Fine-tuning é para os 5% restantes.
O Equívoco de Começar pelo Fim
Um erro muito comum ao chegar na IA é pular direto para fine-tuning porque parece o mais "técnico" e o mais parecido com desenvolvimento tradicional — você está treinando um modelo com seus dados, parece que está "programando" o modelo. Mas fine-tuning é frequentemente a abordagem errada para o problema certo.
Sabendo que um modelo é basicamente uma função com pesos congelados durante inferência, o que se quer na maioria dos casos não é mudar os pesos — é dar ao modelo a informação ou instrução certa no momento certo. As três estratégias a seguir atacam problemas distintos, e entender qual problema você tem é o ponto de partida.
Prompt Engineering: o Ponto de Partida Obrigatório
Prompt Engineering é o ato de estruturar o input que você dá ao modelo para obter o output desejado. Não há mudança no modelo — você instrui, exemplifica, e contextualiza dentro do próprio texto da chamada.
É mais poderoso do que parece. Um modelo como GPT-4o segue instruções sofisticadas, aprende com exemplos dados no prompt (few-shot), raciocina passo a passo quando instruído (chain-of-thought), e produz outputs em formatos específicos (JSON, markdown, tabelas). Tudo sem tocar nos pesos.
Quando usar: sempre que o modelo de base já tem o conhecimento e a capacidade, mas não está se comportando como você quer. Ajustar tom, formato, profundidade de resposta, personalidade, regras de negócio simples — tudo resolve com prompt.
RAG: Quando o Modelo Não Sabe o que Você Sabe
RAG — Retrieval Augmented Generation — resolve um problema específico: o modelo foi treinado com dados até uma certa data, e não tem acesso a documentos proprietários da sua empresa. Ele não sabe sobre seus contratos, suas políticas internas, seus dados de clientes, os acontecimentos da semana passada.
A solução é elegante: na hora de fazer uma pergunta ao modelo, você primeiro busca os documentos relevantes na sua base de conhecimento, e inclui esses documentos no prompt. O modelo responde com base nesse contexto injetado — como se tivesse "lido" seus documentos antes de responder.
Implementação simplificada: documentos → chunks → embeddings → vector store. Na query: embedding da pergunta → busca os chunks mais similares → inclui no prompt → modelo responde com base neles. Azure AI Search, Qdrant, e Pinecone são vector stores comuns no ecossistema.
Fine-tuning: Mudar o Comportamento, Não o Conhecimento
Fine-tuning é o processo de continuar o treinamento de um modelo pré-treinado com seus próprios dados — ajustando os pesos para um comportamento específico. É caro, exige dados de qualidade, e resolve um problema diferente dos outros dois.
O equívoco mais comum: usar fine-tuning para "ensinar fatos" ao modelo. RAG faz isso melhor, mais barato, e com dados que você pode atualizar a qualquer momento. Fine-tuning é para:
- Estilo e tom consistente: o modelo sempre responde no formato da empresa, com o vocabulário certo
- Comportamentos específicos: sempre produz JSON válido, sempre segue um template específico
- Eficiência: reduzir o tamanho do system prompt (o comportamento vai para os pesos, não para o prompt)
- Domínio especializado: médico, jurídico, código legado específico — onde a linguagem e padrões são muito diferentes do treinamento base
Árore de Decisão: por Onde Começar
Comparação Direta
| Critério | Prompt Eng. | RAG | Fine-tuning |
|---|---|---|---|
| Custo inicial | 🟢 Zero | 🟡 Médio | 🔴 Alto |
| Dados necessários | 🟢 Nenhum | 🟡 Documentos | 🔴 1k+ exemplos rotulados |
| Atualização | 🟢 Instantânea | 🟢 Fácil | 🔴 Novo treino |
| Resolve falta de conhecimento | 🔴 Não | 🟢 Sim | 🟡 Parcialmente |
| Resolve comportamento | 🟡 Com esforço | 🔴 Não | 🟢 Sim |
Na Prática: Combinações Comuns
As três estratégias não são mutuamente exclusivas — e projetos maduros frequentemente combinam todas. Um assistente interno pode ter: system prompt bem estruturado (Prompt Engineering) + base de conhecimento da empresa indexada (RAG) + comportamento fine-tuned para sempre responder em português formal com terminologia específica (Fine-tuning).
// Exemplo Semantic Kernel: RAG + Prompt Engineering juntos
var kernel = Kernel.CreateBuilder()
.AddAzureOpenAIChatCompletion("gpt-4o", endpoint, apiKey)
.Build();
// RAG: busca documentos relevantes
var searchResults = await vectorStore.SearchAsync(userQuery, top: 5);
var context = string.Join("\n\n", searchResults.Select(r => r.Content));
// Prompt Engineering: instrução + contexto RAG
var prompt = $"""
Você é um assistente especialista em políticas da Impar.
Responda APENAS com base nos documentos abaixo.
Se a resposta não estiver nos documentos, diga "não encontrado".
DOCUMENTOS:
{context}
PERGUNTA: {userQuery}
""";
var response = await kernel.InvokePromptAsync(prompt);
// Fine-tuning seria aplicado no próprio modelo "gpt-4o" deployado,
// não no código — transparente para o Semantic Kernel.