AI & ML
RAG ou MCP? A pergunta errada. Cole o prompt e monte os dois
Tiago Vilas Boas (Montanha) Dev.to (EN Zone)
3 views
Pessoal, a gente não está deixando o harness nem o LLM mais inteligente. Nem com RAG, nem com MCP, nem com fine-tuning.
É disciplina: contexto direcionado na hora certa. Aí a predição acerta mais. RAG, fine-tuning ou MCP? A pergunta já nasce torta. Não compete. Cada um mora numa camada.
RAG é a knowledge base. Logseq, Notion, Confluence, o doc do time. Política, contrato, runbook. Na hora da pergunta, a busca devolve o trecho. Com fonte. Precisa apontar o arquivo? Isso já é RAG. Quando a página muda, você atualiza a base. Não retreina o modelo.
Essa base não entra sozinha no IDE. MCP é o conector: o harness pede um trecho à busca. Sem o conector, a gente cola a nota no chat. Sem a base, o conector não tem o que buscar. O MCP não é o Logseq. É como o IDE chega nela.
Fine-tuning não é gravar a base nos pesos. É o jeito de escrever (tom, formato), se prompt e schema já não derem conta.
Camada
Papel
Encaixa na base assim
RAG
A knowledge base + a busca
Logseq, Notion, Confluence. Devolve o trecho certo.
MCP
O conector
O harness pede esse trecho. Pode expor outras tools no mesmo conector.
Fine-tuning
O jeito
Não guarda a base. Só o padrão da resposta.
Ordem: base (Logseq e os outros) → busca (RAG) → o IDE chama a busca (MCP) → se o formato ainda vazar, aí sim fine-tuning.
O erro é pular etapa. Página velha no índice não se resolve treinando. Colar a nota no chat não é MCP. Um conector que além de buscar também grava, sem gente no meio, vira incidente.
Quatro perguntas abaixo. Negócio para aí. Quem constrói segue no código. A conta é a mesma.
Tabela de Conteúdo
1. Nomeia o problema antes da ferramenta
2. RAG: a knowledge base, não o peso
3. MCP: o conector até essa base
4. Fine-tuning: forma, não catálogo
5. Cole isto no seu agente
6. Context window grande não é desculpa pra jogar o repositório inteiro
7. Não use o mesmo modelo (LLM) para tudo
8. O que ganhamos com isso
9. Se for ligar no harness, lê isto depois
1. Nomeia o problema antes da ferramenta
Antes de ligar mais uma ferramenta, pergunta:
Você precisa de um texto que já existe (política no Notion, ADR, README, o contrato do webhook) e só quer o trecho certo? Isso muda em dias. É RAG, e o IDE pede pelo MCP. Ou você precisa do agora: o pipeline passou, o PR está aberto, o teste quebrou, o banco tem o registro? Isso não está na wiki. Está no CI, no git, no banco.
Se o agente errar, o pior é uma frase ruim no chat, ou ele pode gravar de verdade: merge, apagar arquivo, disparar pagamento, fazer deploy? Consultar e gravar podem ir no mesmo conector. Gravar precisa de gente no meio.
O trecho certo já está na conversa (você vê o arquivo, a regra, o JSON) e o que sai torto é só o formato: mistura finding com palpite, tom errado, label errada? Aí não falta fato. Falta jeito. Fine-tuning, depois de prompt e schema.
Vocês estão colando o repositório inteiro no chat para achar dois arquivos? Isso não é busca. É dump. Janela grande não acha o handler. Acha o meio.
Se o time grita fine-tuning e o fato nem entrou na conversa, vocês estão no item 1 fingindo que é o 4.
Quem constrói confere no histórico da conversa. Qual foi a primeira ferramenta que o agente usou nesta rodada? A tabela abaixo é o mesmo diagnóstico, em código.
O que você perguntou
Primeiro tool caro
Primeiro tool barato
Timeout, retry, contrato deste serviço
Busca no README de janeiro
Read do código agora. Reindex se o doc mentir.
O pipeline da main passou?
XML / JUnit no vetor
gh run agora
Quem chama este handler?
Dez Read “só pra garantir”
Mapa (grafo / LSP), depois 1–2 arquivos
JSON do review mistura finding e palpite
LoRA no OpenAPI
Schema no prompt. Finding ≠ hipótese.
No seu último chat de código, agora: qual foi a primeira ferramenta que o agente usou? Busca na knowledge base, Read/gh, algo que grava, ou “vamos treinar”? Se não foi o barato da tabela, a camada estava errada. As cenas mais abaixo são pedagógicas. A prova é esse histórico teu. O caso real de dez Read vs mapa está neste post.
Cartão + prompt: Antes de ligar RAG, MCP ou LoRA: vê a primeira ferramenta que o agente usou.
2. RAG: a knowledge base, não o peso
Logseq, Notion, Confluence, o README do retry. Mesma conta: o fato está na base. RAG recupera o trecho. Não treina o doc de novo.
Você pergunta: quantas tentativas no webhook?
Isso mora no ADR, no runbook, no comentário do handler. Não mora no gh pr view de agora. Busca a regra no doc. Consulta o PR aberto na ferramenta. Inverter é inventar política ou procurar ADR na API do GitHub.
Na prática (cena pedagógica: o padrão, não um PR teu):
você: quantas tentativas no webhook?
agente: 3, linear (citou README.md, seção Retry)
você: abre o controller
código: backoff exponencial, 5 tentativas, PR da sprint passada
O modelo não é burro. Ele leu o trecho que a busca entregou. A busca que foi no arquivo morto.
O mesmo vale pro timeout do client HTTP. README diz 30 segundos. Você abre o código: 5. Citação bonita. Doc morto. Fine-tuning não atualiza README. Tool de GitHub também não, se ninguém reindexou.
Modelo sabe muito de HTTP. Não sabe o contrato deste serviço, a não ser que esteja na base. RAG é isso: knowledge base + busca na pergunta. Logseq, Notion, Confluence, o README. Não é treinar de novo cada vez que o time muda o retry.
O que RAG não é: o status do Actions agora. Se muda a cada push, o índice mente educado.
O que você ganha: fato que atualiza sem treinar de novo, e dá pra apontar o arquivo. No trabalho: o modelo busca menos pra fora. Decide no contexto do time.
O que você paga: alguém tem que cuidar da base. Nota de janeiro no índice, política de março no jurídico: citação bonita, regra morta.
A base ainda não chegou no IDE. Isso é o próximo passo.
3. MCP: o conector até essa base
O Logseq não anda sozinho até o chat. O MCP é o conector: o harness chama o servidor de busca e pede o trecho. O RAG continua sendo a base. O conector leva até a busca. Outra tool no mesmo conector pode gravar. Não mistura as duas contas.
Sem esse conector, você cola a nota no chat. Com o conector, a tool de retrieve entra no turno. Se o servidor está verde e o transcript ainda começa em dez Read, você não ligou o RAG. Só instalou o conector.
Um host, duas tools? Function calling nativo resolve. MCP começa a valer quando o mesmo RAG precisa aparecer em mais de um IDE, ou quando o time não quer reinventar o conector a cada harness.
O mesmo conector pode expor outra coisa: git, CI, banco. Aí sim existe ação. Leitura da busca ≠ push. HITL no que grava. Sem isso, o servidor “só de RAG” vira force push. A sessão que consulta o manual não é a sessão que dispara o pagamento.
O que você ganha: o IDE chega na base (Logseq, Notion, Confluence) sem colar a nota no chat.
O que você paga: superfície. Cada tool a mais no mesmo conector é um jeito de errar no mundo real.
4. Fine-tuning: forma, não catálogo
Aqui é o jeito. Não é a base. Se a busca já devolve o trecho certo (RAG) e o IDE já pede esse trecho (MCP), e mesmo assim o formato vaza, aí conversa treino.
Fine-tuning não é o próximo passo porque o hype pediu. Prompt e schema são o degrau do meio. Treino é o último. Ele muda como o modelo responde: estilo, formato, padrão que se repete. Não é o jeito de ensinar as 400 rotas da API.
Na dúvida, começa com busca. Contrato muda toda semana? RAG. Precisa apontar arquivo:linha? RAG. Precisa de um formato muito específico e você já tem um monte de exemplo bom do jeito certo? Aí conversa treino.
Um limite só: eu não treinei um modelo grande neste laboratório. O passo barato que eu uso é schema no prompt. Finding, observação e hipótese em campos separados. Sem arquivo:linha não é finding. Fine-tuning seria treinar esse jeito, mil vezes, se o schema não segurasse. Não seria gravar o OpenAPI nos pesos.
“Vamos treinar com o OpenAPI inteiro”
Amanhã o endpoint muda. O modelo, não. O spec de terça ficou preso nos pesos. Cena pedagógica:
você: qual o path de cancelamento?
agente: POST /v1/subscriptions/cancel (spec de junho)
código: POST /v2/billing/cancel (desde agosto)
alguém: "alucinou"
Não alucinou. Você pediu pra ele lembrar rota. Rota é fato. Fato vai pra busca no spec, ou pra tool que lê o OpenAPI no repo. Nunca pro peso, se muda.
Indexar o código-fonte no dataset de treino é o mesmo erro. O time muda o handler. Você ficou com um Readme.bak caro, que não dá grep.
O JSON do review sai torto
O arquivo certo já está no contexto. O modelo mistura “acho que é CSRF” com finding, quebra o JSON, escreve como blog.
Aí pode ser comportamento. Ainda não é abrir o painel de treino.
Ordem: prompt claro, dois exemplos bons, schema. Finding só com arquivo:linha. Hipótese em outro campo.
Se depois disso o formato ainda vaza em mil reviews por dia, aí sim: exemplos do jeito certo de reportar. Não o repositório no JSONL.
Quando fine-tuning vale
Classificar issue o dia inteiro: bug, dívida, feature. O rótulo quase não muda. Um modelo menor sai mais barato que o modelo caro lendo prosa.
Tom do time no review em escala, sem system prompt de oito mil tokens. O conteúdo (qual handler, qual timeout) continua de fora: busca ou tool.
“Não gera PoC, não abre PR nesta sessão” automático, quando o prompt já não segura.
Regra: se a correção é “atualiza o README”, não é fine-tuning. Se ele viu o código e mesmo assim escreve o review errado do mesmo jeito, mil vezes, aí conversa.
5. Cole isto no seu agente
Isto não é receita de instalar RAG, MCP e LoRA neste sábado. É o prompt pra o agente desenhar as camadas do seu repo: o que é knowledge base, o que é conector, o que é jeito, o que é dump, qual modelo em cada skill. Arquiteto, não gerador de código.
Conversa nova. Cinco linhas do seu repo. Deixa ele perguntar. Não manda já commitar.
Se devolver “vamos treinar o OpenAPI” ou “um MCP com as 40 APIs”, você pulou as perguntas. Manda o trecho no comentário.
Antes de ligar RAG, MCP ou LoRA: vê a primeira ferramenta que o agente usou (prompt + cartão):
You are an architect, not a code generator.
I am designing an agentic setup for a software team. I may paste repo context, a stack description, or a messy Slack thread. Do not assume Cursor, Claude, Copilot, or any other host. Talk in terms of layers.
Do not write application code in the first reply. Do not invent tools, datasets, or vendors I did not mention. If something is missing, ask up to 8 short questions, then stop and wait.
Mental model (non-negotiable):
- This stack does not make the model smarter. It is harness discipline: directed context at query time, so next-token prediction is better grounded. At work, retrieve in-corpus first: less fishing on the public web, fewer exploratory Reads. Tokens drop vs dump or ten Reads, not vs an empty chat.
- RAG / retrieval = the knowledge base (Logseq, Notion, Confluence, ADRs, READMEs) plus search at query time. Cite sources. Not a substitute for live CI, git, or DB.
- MCP = the CONNECTOR from the harness/IDE to that retrieval (and, optionally, to other servers). MCP is not the corpus. Native function calling is enough if I have one host and two tools.
- Tools that mutate (push, pay, email) may ride the same connector. They are not RAG. Read ≠ write. HITL on writes.
- Fine-tuning = behavior (format, tone, labels) AFTER retrieval is reachable and facts are right. Try system prompt, few-shot, and strict JSON schema first. Never fine-tune to inject an OpenAPI spec, a codebase, or API paths that change.
- Context budget = do not dump the monorepo. Prefer a code map / graph / LSP query, then 1–2 files. A large context window still loses the middle.
- Model role = pick by trained skill and claimed capability, not the IDE logo. The turn only tells you which of those skills you need now: daily craft, hard architecture, code review, security review.
Also respect:
- Least privilege: read tools ≠ write tools. git push, merge, migrate, deploy need a human in the loop. No unbounded shell “to make the demo work”.
- Exposing remember()/recall() as a tool does not make a memory policy.
- Exposing RAG as one MCP tool is allowed, but the agent must still know WHEN to search docs vs WHEN to call git/CI.
After you have enough answers, output exactly these sections in my language (pt-BR unless I write in English):
1. Diagnosis — for MY repo/workflow, what is knowledge vs action vs behavior vs budget vs model role. One paragraph.
2. RAG — what corpus (docs vs code), what must NEVER go in the index, how we know a hit is stale vs the tree.
3. MCP / connector — how the harness reaches RAG. Table: server, what it exposes (retrieve vs mutate), blast radius, HITL, MCP vs native function calling and why. If I treated MCP as an alternative to RAG, correct me.
4. Fine-tune — “not now” or a precise behavior to learn, with the prompt/schema alternative we will try first. If I proposed fine-tuning OpenAPI or the repo, refuse and reroute to RAG or a tool that reads the spec from git.
5. Context budget — dump vs map. One indexer max.
6. Model posts — map daily craft / hard architecture / code review / security review onto models by trained skill and claimed capability, using whatever I already pay for. If I named none, propose the jobs without vendor lock-in.
7. Week-1 plan — 5 bullets I can do in the repo without buying a new course. No new logo unless I already have it.
End with 3 risks if I ignore the diagnosis.
6. Context window grande não é desculpa pra jogar o repositório inteiro
“O context window é enorme, manda o monorepo.”
Você não economizou. Enterrou o handler certo no meio.
Na prática (cena pedagógica):
você: quem chama applyTimeout neste serviço?
dump: monorepo no context window
agente: cita vendor/retry/README.md
"30s, 3 tentativas" (achou o que parecia)
mapa: applyTimeout ← PaymentHttpClient ← WebhookController
código: src/http/client.ts, 5s, um caller
O modelo citou. Citou o arquivo errado. Context window grande entrega o meio. Não o handler.
Indexar o repo no vetor e chamar de RAG também não resolve. Mapa responde quem chama. Vetor de 40 mil chunks responde parece com. Se o histórico começa em dez Read, não tem mágica. Tem pasta no disco.
7. Não use o mesmo modelo (LLM) para tudo
“Arruma o auth.”
Pode ser typo no middleware. Um if, um import, o token caiu no header errado. Um arquivo. Coding no fluxo. O modelo que se propõe a isso resolve e segue.
Pode ser recorte de seis módulos. Gateway, sessão, cookie, refresh, o middleware que ainda deixa passar o path antigo. Vira desenho. ADR. Troca de contrato. Vários arquivos, horizonte longo. O pedido é o mesmo. O skill não é.
Pode ser code review. O patch passou. Quem implementou quer terminar. Quem revisa quer discordar. Isso pede o teto, não o modelo que acabou de escrever o diff.
Pode ser security review no source. O furo de autorização ficou no PR. Não é pentest. É ler o diff contra o contrato de auth.
O texto do pedido sozinho não separa. “Arruma o auth” não diz se você precisa de um patch, de um recorte ou de um review. Quem escolhe modelo sem isso cola o skill errado no seletor.
Não escolhe pela IDE. Escolhe pelo skill / capability que o modelo declara. Sem ranking. Não rodei o leaderboard deles.
Skill / capability
Vendor
Coding in the loop, ship
Grok 4.6 High: coding, agentic, knowledge work
Multi-file recorte, ADR
Claude Opus 5: complex agentic coding, long refactor
Code review
Claude Fable 5: highest capability, long SWE
Security review (source)
Claude Fable 5: Mythos-class. Cyber no GA, com safeguard
O modelo do dia a dia revisando o webhook de auth é viés do próprio diff. Quem escreveu o patch não é quem caça o furo. Fable no seletor é o teto GA: Mythos-class com safeguard. Mythos 5 é o mesmo peso, acesso restrito. Code review e security review de source no PR. Não é pentest.
Trocar de modelo não substitui RAG, MCP ou fine-tuning. Fine-tuning não substitui o README que faltava.
8. O que ganhamos com isso
Não ganhamos um modelo mais inteligente. Ganhamos um harness que para de chute: a knowledge base entra no turno, o conector busca o trecho, o context window não vira dump. Contexto direcionado. Predição mais acertada. O cérebro é o mesmo.
No trabalho isso pesa mais. A política já está na base. O modelo para de completar com o treino público, para de abrir dez arquivos “só pra garantir”. Decide no trecho que entrou. Token cai quando a alternativa era dump ou dez Read. Retrieve ainda gasta contexto. Gasta o certo.
A knowledge base atualiza sem retreinar, e a resposta aponta o arquivo. O MCP é o conector até essa busca: o chat para de ser a pasta do time. Fine-tuning entra só no jeito, depois de prompt e schema. Nem isso muda inteligência. Muda o formato da resposta. Context window grande não substitui mapa. E o modelo do turno não cobre o buraco de nenhuma dessas camadas.
O que ganhamos não é “ter RAG, MCP e LoRA”. É parar de pular etapa. Página velha não se resolve treinando. Colar no chat não é conector. Trocar o logo no seletor não atualiza o README.
Dá pra usar no Kiro, no Cursor, no Claude Code, no Codex. A conta não é do logo. Knowledge base, conector, jeito, context window: isso mora no harness que você estiver. Um host, duas tools: function calling nativo resolve. Vários hosts, a mesma base: aí o MCP vale, pra não reinventar o conector em cada um. O histórico da primeira ferramenta funciona em todos. Se o primeiro movimento muda quando você troca de IDE, você não montou camada. Montou atalho daquele app.
9. Se for ligar no harness, lê isto depois
Até aqui a gente só fechou a conta: o que é cada camada, o que não é, o que olhar no transcript. Chunk, servidor MCP, memória entre sessões, mapa do repo: isso não cabia neste texto. Se você for ligar de verdade, esses cinco links são o próximo passo. Na ordem. Cada um cobre uma coisa que eu deixei de fora de propósito.
Mesmo com GraphRAG, o agent se perde sem contrato de memória. Retrieve não é memória. Hub, o que gravar, o que não.
Indexar o código fora do repo. Mapa vs dump. Context window grande não acha o handler. O histórico da primeira ferramenta mora lá, não aqui.
MCP: intro oficial. Host, client, server. Tools e resources. Como o conector existe de fato.
Contextual retrieval (Anthropic). Chunk, embedding, o que a busca devolve quando o índice é mais do que “joga no vetor”.
Fine-tuning (OpenAI). Quando é comportamento. Quando não é fato. Dataset, não OpenAPI nos pesos.
Não precisa engolir tudo num sábado. Precisa não pular a camada. O prompt + cartão não monta a stack. Diagnostica a sua. Cola no Kiro, no Cursor, no Claude Code, no Codex.
No seu último chat: a primeira ferramenta foi a busca do RAG (pelo MCP), outra no mesmo conector, ou ele tentou treinar o OpenAPI?
Read original: https://dev.to/tiagovilasboas/rag-ou-mcp-a-pergunta-errada-cole-o-prompt-e-monte-os-dois-57kj
← Previous
Chrome again exempts Google from user site data settings
Next →
I built a QA agent that audits itself nightly. It has filed 79 findings against its own releases.
Related
How to Run an AI Model on Almost Any Hardware: A Practical Guide to Tiny Local LLMs
AI & ML
0
DEV Community
Declare `tools` Only When Narrowing an APX Agent
AI & ML
0
DEV Community
How to Turn Any Photo Into a Cross Stitch Pattern
AI & ML
2
Dev.to (EN Zone)
I built an AI website builder for Webround. Then I killed it.
AI & ML
2
Dev.to (EN Zone)
Comments0
No comments yet — be the first