00-02-02 — Fine-tuning vs RAG vs Prompt Engineering — Quando Usar Cada Um

⏱ 10 min Fontes validadas em: 2026-04-29

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.

💡
Regra de ouro: Antes de qualquer outra estratégia, gaste pelo menos uma semana iterando prompts. A maioria dos problemas que parecem exigir fine-tuning são resolvidos com system prompts mais claros, few-shot examples, e chain-of-thought. O custo é zero a mais.

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.

🏢
Na Stack Microsoft: Azure AI Search tem suporte nativo para RAG híbrido (keyword + vector). O Semantic Kernel tem abstrações de Memory e Plugins que facilitam implementar RAG em C#. Azure AI Foundry permite criar pipelines de RAG com indexação automática de documentos.

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
⚠️
Armadilha de fine-tuning: Fine-tuning pode degradar capacidades gerais do modelo (catastrophic forgetting). Um modelo fine-tuned para responder sobre seguros pode ficar pior em matemática geral. Sempre avalie o modelo fine-tuned em benchmarks amplos, não só na sua tarefa específica.

Árore de Decisão: por Onde Começar

flowchart TD A["Qual é o problema?"] --> B{"O modelo já tem\no conhecimento?"} B -->|"Sim"| C{"Está se comportando\ncomo você quer?"} B -->|"Não"| D["RAG\ninjete contexto externo"] C -->|"Com o prompt certo,\nsim"| E["Prompt Engineering\nmais rápido e barato"] C -->|"Não importa o\nprompt, não"| F["Fine-tuning\npara comportamento"] D --> G{"O conhecimento\nmuda com frequência?"} G -->|"Sim"| D G -->|"Não e é muito\ngrande para prompt"| F style E fill:#1a4a3c,stroke:#4aff9e style D fill:#1a3a5c,stroke:#4a9eff style F fill:#5c3a1a,stroke:#ff9e4a

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.