{"id":1282,"date":"2026-09-29T04:01:31","date_gmt":"2026-09-29T07:01:31","guid":{"rendered":"https:\/\/adrianosantostreina.com.br\/blog\/prompt-que-gera-codigo-melhor-engenharia-de-instrucao\/"},"modified":"2026-09-29T04:01:38","modified_gmt":"2026-09-29T07:01:38","slug":"prompt-que-gera-codigo-melhor-engenharia-de-instrucao","status":"publish","type":"post","link":"https:\/\/adrianosantostreina.com.br\/blog\/prompt-que-gera-codigo-melhor-engenharia-de-instrucao\/","title":{"rendered":"O Prompt que Compila na Cabe\u00e7a: Como Escrever Instru\u00e7\u00f5es que Geram C\u00f3digo Pronto para Revis\u00e3o, N\u00e3o para Descarte"},"content":{"rendered":"<p>Voc\u00ea pede para a IA implementar um endpoint de pagina\u00e7\u00e3o. Ela devolve um c\u00f3digo que compila, passa nos testes que voc\u00ea tinha (poucos), mas ignora o padr\u00e3o de cursor que o resto da API j\u00e1 usa, reimplementa uma fun\u00e7\u00e3o de sanitiza\u00e7\u00e3o que j\u00e1 existe em <code>utils\/<\/code> e assume que o banco \u00e9 PostgreSQL quando na verdade \u00e9 MySQL. Voc\u00ea gasta vinte minutos revisando, mais quinze reescrevendo o prompt, mais dez explicando o que j\u00e1 devia estar \u00f3bvio. No fim, seria mais r\u00e1pido ter escrito o c\u00f3digo voc\u00ea mesmo.<\/p>\n<p>Esse cen\u00e1rio n\u00e3o \u00e9 falha do modelo. \u00c9 falha de especifica\u00e7\u00e3o. A maioria dos desenvolvedores trata o prompt como uma pergunta r\u00e1pida \u2014 &#8220;implementa isso a\u00ed&#8221; \u2014 quando na pr\u00e1tica ele funciona como uma interface de contrato entre a sua inten\u00e7\u00e3o e o c\u00f3digo que sai do outro lado. Quanto mais impl\u00edcito o contrato, mais espa\u00e7o a IA tem para preencher lacunas com suposi\u00e7\u00f5es gen\u00e9ricas, que raramente coincidem com as conven\u00e7\u00f5es do seu projeto. Neste artigo, vamos tratar o prompt de c\u00f3digo como o que ele realmente \u00e9: uma pe\u00e7a de engenharia que precisa de estrutura, contexto e crit\u00e9rio de aceite \u2014 n\u00e3o um pedido de gar\u00e7om.<\/p>\n<h2>O prompt n\u00e3o \u00e9 uma pergunta, \u00e9 uma especifica\u00e7\u00e3o incompleta por padr\u00e3o<\/h2>\n<p>Todo modelo de linguagem preenche lacunas com o padr\u00e3o estat\u00edstico mais prov\u00e1vel do seu treinamento. Se voc\u00ea n\u00e3o diz qual biblioteca de HTTP usar, ele escolhe a mais comum globalmente \u2014 n\u00e3o a que est\u00e1 no seu <code>package.json<\/code>. Se voc\u00ea n\u00e3o diz o padr\u00e3o de tratamento de erro, ele improvisa um <code>try\/catch<\/code> gen\u00e9rico, mesmo que seu projeto use um padr\u00e3o de <code>Result<\/code> tipado. O erro mais comum entre desenvolvedores intermedi\u00e1rios \u00e9 achar que a IA &#8220;vai perceber&#8221; o contexto do projeto sozinha, sem que ele seja fornecido explicitamente na conversa.<\/p>\n<p><a href=\"https:\/\/coddy.tech\/blog\/pt\/desenvolvimento-de-software\/ia-na-programa%C3%A7%C3%A3o-programar-vai-virar-escrever-prompts-at%C3%A9-2030\" target=\"_blank\" rel=\"noopener\">Como observa a Coddy em uma an\u00e1lise sobre o futuro da programa\u00e7\u00e3o assistida por IA<\/a>, a habilidade que est\u00e1 se tornando central n\u00e3o \u00e9 mais s\u00f3 escrever c\u00f3digo, mas comunicar inten\u00e7\u00e3o com precis\u00e3o suficiente para que a m\u00e1quina produza exatamente o que se espera. Isso desloca o esfor\u00e7o: menos tempo digitando sintaxe, mais tempo pensando em requisitos, restri\u00e7\u00f5es e casos de borda antes de apertar enter.<\/p>\n<h3>Os quatro blocos que faltam na maioria dos prompts<\/h3>\n<p>Prompts que geram c\u00f3digo ruim costumam ter s\u00f3 uma frase de inten\u00e7\u00e3o. Prompts que geram c\u00f3digo revis\u00e1vel t\u00eam quatro blocos, ainda que curtos:<\/p>\n<ul>\n<li><strong>Contexto do sistema<\/strong> \u2014 stack, vers\u00e3o da linguagem, framework, conven\u00e7\u00e3o de nomes, estrutura de pastas relevante.<\/li>\n<li><strong>Restri\u00e7\u00e3o expl\u00edcita<\/strong> \u2014 o que n\u00e3o pode ser feito (n\u00e3o adicionar depend\u00eancia nova, n\u00e3o alterar assinatura p\u00fablica, n\u00e3o criar nova camada).<\/li>\n<li><strong>Crit\u00e9rio de aceite<\/strong> \u2014 como voc\u00ea vai saber que o resultado est\u00e1 correto (testes que precisam passar, comportamento esperado em casos de borda).<\/li>\n<li><strong>Formato de sa\u00edda<\/strong> \u2014 c\u00f3digo completo? diff? s\u00f3 a fun\u00e7\u00e3o? com ou sem coment\u00e1rios?<\/li>\n<\/ul>\n<p>Vamos comparar dois prompts para a mesma tarefa e observar a diferen\u00e7a no resultado esperado.<\/p>\n<h3>Exemplo pr\u00e1tico: prompt fraco versus prompt estruturado<\/h3>\n<p>Prompt fraco, t\u00edpico de quem est\u00e1 come\u00e7ando a usar IA no fluxo de trabalho:<\/p>\n<pre><code>Cria uma fun\u00e7\u00e3o para validar CPF em TypeScript.<\/code><\/pre>\n<p>Esse prompt provavelmente vai gerar uma fun\u00e7\u00e3o de valida\u00e7\u00e3o de CPF correta matematicamente, mas sem saber se voc\u00ea j\u00e1 tem uma classe <code>ValidationError<\/code> customizada, se o projeto usa <code>zod<\/code> para esse tipo de coisa, ou se a fun\u00e7\u00e3o precisa lan\u00e7ar exce\u00e7\u00e3o ou retornar um booleano. Agora compare com uma vers\u00e3o estruturada:<\/p>\n<pre><code>Contexto: projeto Node.js + TypeScript, usamos zod para\nvalida\u00e7\u00f5es de entrada e lan\u00e7amos AppError (classe em\nsrc\/errors\/AppError.ts) para erros de dom\u00ednio.\n\nTarefa: crie uma fun\u00e7\u00e3o isValidCPF(cpf: string): boolean\nque valide o CPF pelo algoritmo padr\u00e3o dos d\u00edgitos\nverificadores (n\u00e3o use regex apenas para formato).\n\nRestri\u00e7\u00f5es:\n- N\u00e3o instale nenhuma biblioteca nova.\n- A fun\u00e7\u00e3o deve remover pontua\u00e7\u00e3o antes de validar.\n- CPFs com todos os d\u00edgitos iguais (ex: 111.111.111-11)\n  devem retornar false.\n\nCrit\u00e9rio de aceite: escreva tamb\u00e9m 6 casos de teste com\nvitest cobrindo: CPF v\u00e1lido, CPF com pontua\u00e7\u00e3o, CPF com\nd\u00edgitos repetidos, CPF com tamanho errado, string vazia\ne CPF com letras.\n\nFormato: s\u00f3 o c\u00f3digo da fun\u00e7\u00e3o e dos testes, sem explica\u00e7\u00e3o\nem prosa antes ou depois.<\/code><\/pre>\n<p>A diferen\u00e7a de resultado entre os dois prompts n\u00e3o \u00e9 sutil \u2014 \u00e9 a diferen\u00e7a entre c\u00f3digo que voc\u00ea aceita direto e c\u00f3digo que voc\u00ea teria que reescrever. O segundo prompt elimina ambiguidade em pontos que normalmente geram retrabalho: biblioteca, formato de retorno, casos de borda e formato de entrega.<\/p>\n<blockquote><p><strong>\ud83d\udca1 Dica do Mestre:<\/strong> segundo uma discuss\u00e3o na comunidade sobre prompts para desenvolvedores no <a href=\"https:\/\/www.reddit.com\/r\/ChatGPTPro\/comments\/1br34ir\/what_are_the_best_prompts_as_developer_for\/?tl=pt-br\" target=\"_blank\" rel=\"noopener\">subreddit r\/ChatGPTPro<\/a>, desenvolvedores mais experientes tendem a manter uma biblioteca pessoal de &#8220;prompts-base&#8221; reutiliz\u00e1veis por tipo de tarefa \u2014 refatora\u00e7\u00e3o, revis\u00e3o de seguran\u00e7a, gera\u00e7\u00e3o de testes \u2014 em vez de reescrever a instru\u00e7\u00e3o do zero a cada vez. Vale criar a sua e versionar junto do reposit\u00f3rio.<\/p><\/blockquote>\n<h2>Contexto de projeto: o que realmente precisa entrar no prompt<\/h2>\n<p>Um erro comum \u00e9 achar que &#8220;mais contexto \u00e9 sempre melhor&#8221;. N\u00e3o \u00e9. Contexto em excesso dilui o que importa e aumenta a chance do modelo ignorar a instru\u00e7\u00e3o principal em favor de detalhes irrelevantes. O objetivo \u00e9 contexto <em>relevante<\/em>, n\u00e3o contexto <em>completo<\/em>.<\/p>\n<h3>Priorize conven\u00e7\u00f5es que a IA n\u00e3o pode inferir<\/h3>\n<p>Existem dois tipos de informa\u00e7\u00e3o de projeto: a que a IA consegue inferir olhando o c\u00f3digo (nomes de vari\u00e1veis, estilo de indenta\u00e7\u00e3o) e a que ela s\u00f3 sabe se voc\u00ea disser (decis\u00f5es arquiteturais, trade-offs j\u00e1 discutidos, motivos hist\u00f3ricos de uma escolha estranha). Foque energia no segundo tipo.<\/p>\n<pre><code>-- Exemplo em Delphi, contexto de um sistema legado\n-- que precisa manter compatibilidade\n\nContexto: unit legada em Delphi (Object Pascal), FireDAC\npara acesso a dados, mantemos compatibilidade com Delphi\nXE7 (n\u00e3o pode usar recursos de sintaxe mais recentes que\nessa vers\u00e3o, como inline var em qualquer escopo).\n\nTarefa: crie uma fun\u00e7\u00e3o TStringHelper.ToSlug(const AInput:\nstring): string que converta um t\u00edtulo em slug de URL\n(min\u00fasculas, espa\u00e7os por h\u00edfen, remo\u00e7\u00e3o de acentos).\n\nRestri\u00e7\u00f5es:\n- Sem depend\u00eancias externas, s\u00f3 RTL padr\u00e3o.\n- Deve funcionar com strings vazias (retornar '').\n- Compat\u00edvel com sintaxe do Delphi XE7.\n\nFormato: c\u00f3digo da function e um bloco de coment\u00e1rio\nexplicando o motivo da n\u00e3o-utiliza\u00e7\u00e3o de regex (se voc\u00ea\noptar por n\u00e3o usar).<\/code><\/pre>\n<p>Esse exemplo mostra algo importante: em stacks menos populares nos dados de treinamento \u2014 como vers\u00f5es espec\u00edficas de Delphi, frameworks internos ou linguagens de nicho \u2014 a restri\u00e7\u00e3o de vers\u00e3o e ambiente \u00e9 ainda mais cr\u00edtica, porque o modelo tem menos exemplos &#8220;modernos&#8221; para confundir com o que voc\u00ea realmente precisa.<\/p>\n<h3>Pe\u00e7a o racioc\u00ednio antes do c\u00f3digo quando a tarefa for amb\u00edgua<\/h3>\n<p>Para tarefas de arquitetura, refatora\u00e7\u00e3o grande ou qualquer coisa com mais de uma abordagem razo\u00e1vel, pedir o c\u00f3digo direto \u00e9 prematuro. Pe\u00e7a primeiro um plano, revise o plano, depois autorize a implementa\u00e7\u00e3o.<\/p>\n<pre><code>Antes de escrever c\u00f3digo, me diga em at\u00e9 5 bullets:\n1. Qual abordagem voc\u00ea usaria para migrar esse servi\u00e7o\n   de callbacks para async\/await sem quebrar os\n   consumidores externos da API p\u00fablica?\n2. Quais fun\u00e7\u00f5es t\u00eam maior risco de regress\u00e3o?\n3. Que testes eu deveria rodar antes e depois da mudan\u00e7a?\n\nN\u00e3o escreva c\u00f3digo ainda. Aguarde minha confirma\u00e7\u00e3o\ndo plano.<\/code><\/pre>\n<p>Esse padr\u00e3o de duas etapas \u2014 plano, depois execu\u00e7\u00e3o \u2014 evita o cen\u00e1rio em que a IA j\u00e1 entregou quinhentas linhas de refatora\u00e7\u00e3o antes de voc\u00ea perceber que a abordagem escolhida ignora um detalhe cr\u00edtico do dom\u00ednio. Corrigir um plano de cinco linhas \u00e9 r\u00e1pido; corrigir quinhentas linhas de c\u00f3digo j\u00e1 escrito, n\u00e3o.<\/p>\n<blockquote><p><strong>\ud83d\udca1 Dica do Mestre:<\/strong> como resume um v\u00eddeo sobre <a href=\"https:\/\/www.youtube.com\/watch?v=4IRKGuKiPAg\" target=\"_blank\" rel=\"noopener\">engenharia de prompt no canal do YouTube dedicado ao tema<\/a>, prompts &#8220;melhores&#8221; s\u00f3 parecem melhores quando comunicam melhor \u2014 a m\u00e9trica de qualidade de um prompt n\u00e3o \u00e9 o qu\u00e3o elaborado ele parece, mas o quanto ele reduz a ambiguidade que o modelo precisaria resolver por conta pr\u00f3pria.<\/p><\/blockquote>\n<h2>Armadilhas comuns e como depur\u00e1-las<\/h2>\n<h3>A alucina\u00e7\u00e3o de API: quando o c\u00f3digo &#8220;parece&#8221; certo mas n\u00e3o existe<\/h3>\n<p>Um dos problemas mais frequentes em c\u00f3digo gerado \u00e9 a IA inventar m\u00e9todos que n\u00e3o existem em uma biblioteca \u2014 um <code>.paginate()<\/code> que o ORM n\u00e3o tem, um par\u00e2metro que a fun\u00e7\u00e3o nunca aceitou. Isso acontece porque o modelo generaliza padr\u00f5es comuns entre bibliotecas parecidas. A defesa pr\u00e1tica \u00e9 sempre colar a assinatura real da fun\u00e7\u00e3o ou trecho da documenta\u00e7\u00e3o da vers\u00e3o exata que voc\u00ea usa, em vez de confiar que o modelo &#8220;sabe&#8221; a API de cor.<\/p>\n<pre><code>Aqui est\u00e1 a assinatura exata do m\u00e9todo que preciso usar\n(copiada da documenta\u00e7\u00e3o da vers\u00e3o 5.2 da lib):\n\nasync findMany(options: {\n  where?: WhereClause;\n  cursor?: { id: string };\n  take?: number;\n}): Promise&lt;Record[]&gt;\n\nUse exatamente essa assinatura para implementar a pagina\u00e7\u00e3o\npor cursor no endpoint GET \/orders. N\u00e3o invente par\u00e2metros\nque n\u00e3o est\u00e3o listados acima.<\/code><\/pre>\n<p>Esse tipo de ancoragem elimina boa parte da alucina\u00e7\u00e3o porque tira do modelo a tarefa de &#8220;lembrar&#8221; a API e transforma em uma tarefa de &#8220;aplicar&#8221; uma especifica\u00e7\u00e3o que voc\u00ea forneceu.<\/p>\n<h3>Diagnosticando por que um prompt est\u00e1 gerando c\u00f3digo ruim<\/h3>\n<p>Quando o resultado sai errado, resista ao impulso de simplesmente reescrever o prompt do zero. Primeiro, diagnostique a causa, que geralmente cai em uma destas categorias:<\/p>\n<ul>\n<li><strong>Ambiguidade de escopo<\/strong> \u2014 o modelo n\u00e3o sabia se devia alterar um arquivo ou o sistema inteiro. Solu\u00e7\u00e3o: delimite explicitamente os arquivos envolvidos.<\/li>\n<li><strong>Falta de exemplo de padr\u00e3o<\/strong> \u2014 o modelo n\u00e3o conhece a conven\u00e7\u00e3o do seu time. Solu\u00e7\u00e3o: cole um trecho de c\u00f3digo existente como refer\u00eancia de estilo.<\/li>\n<li><strong>Crit\u00e9rio de aceite ausente<\/strong> \u2014 o modelo n\u00e3o sabe quando parar de &#8220;melhorar&#8221; o c\u00f3digo. Solu\u00e7\u00e3o: defina exatamente o que constitui sucesso.<\/li>\n<li><strong>Contexto contradit\u00f3rio<\/strong> \u2014 voc\u00ea deu instru\u00e7\u00f5es que se conflitam ao longo da conversa. Solu\u00e7\u00e3o: resuma o estado atual antes de pedir a pr\u00f3xima mudan\u00e7a.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/medium.com\/@flpchapola\/quando-programar-vira-prompt-o-fim-da-era-do-c%C3%B3digo-864c24791074\" target=\"_blank\" rel=\"noopener\">Um artigo no Medium sobre a mudan\u00e7a do foco de &#8220;escrever c\u00f3digo&#8221; para &#8220;dirigir a sa\u00edda&#8221;<\/a> descreve bem essa transi\u00e7\u00e3o: o papel do desenvolvedor passa a ser menos digitar sintaxe e mais funcionar como um revisor t\u00e9cnico que valida, corrige o rumo e refina a instru\u00e7\u00e3o \u2014 uma posi\u00e7\u00e3o de dire\u00e7\u00e3o, n\u00e3o de execu\u00e7\u00e3o manual.<\/p>\n<h3>Usando exemplos de c\u00f3digo real como \u00e2ncora de estilo<\/h3>\n<p>Uma t\u00e9cnica subutilizada \u00e9 colar um trecho de c\u00f3digo j\u00e1 existente no seu projeto como refer\u00eancia de padr\u00e3o, antes de pedir algo novo similar.<\/p>\n<pre><code>Aqui est\u00e1 um controller existente no nosso padr\u00e3o:\n\nclass UserController {\n  async create(req: Request, res: Response) {\n    const dto = CreateUserDTO.parse(req.body);\n    const user = await this.userService.create(dto);\n    return res.status(201).json(toUserResponse(user));\n  }\n}\n\nSiga exatamente esse padr\u00e3o (DTO com zod, service\nseparado, fun\u00e7\u00e3o toXResponse para serializa\u00e7\u00e3o) para\ncriar um ProductController com os m\u00e9todos create e\nupdate.<\/code><\/pre>\n<p>Esse tipo de instru\u00e7\u00e3o por exemplo reduz drasticamente a vari\u00e2ncia de estilo entre o que a IA gera e o que j\u00e1 existe no reposit\u00f3rio \u2014 e \u00e9 praticamente \u00e0 prova de descri\u00e7\u00e3o verbal malfeita, porque o padr\u00e3o est\u00e1 expl\u00edcito no pr\u00f3prio c\u00f3digo, n\u00e3o em uma tentativa de descrev\u00ea-lo em prosa.<\/p>\n<h2>Prompts iterativos: refinando em vez de recome\u00e7ar<\/h2>\n<p>Em conversas longas com ferramentas como <a href=\"https:\/\/claude.com\/product\/claude-code\" target=\"_blank\" rel=\"noopener\">Claude Code<\/a> ou <a href=\"https:\/\/cursor.com\" target=\"_blank\" rel=\"noopener\">Cursor<\/a>, o erro comum \u00e9 tratar cada corre\u00e7\u00e3o como um novo pedido isolado, sem reconectar com o que j\u00e1 foi decidido. Isso faz o modelo perder o fio da l\u00f3gica anterior. O padr\u00e3o mais eficiente \u00e9 referenciar explicitamente o que j\u00e1 existe e pedir uma modifica\u00e7\u00e3o incremental, n\u00e3o uma reescrita.<\/p>\n<pre><code>A fun\u00e7\u00e3o que voc\u00ea gerou est\u00e1 correta, mas o tratamento\nde erro n\u00e3o segue nosso padr\u00e3o. Mantenha a l\u00f3gica de\nvalida\u00e7\u00e3o exatamente como est\u00e1, s\u00f3 troque o throw new\nError() por throw new AppError('INVALID_CPF', 400).<\/code><\/pre>\n<p>Pedidos incrementais como esse preservam o trabalho j\u00e1 validado e reduzem o risco de a IA &#8220;corrigir&#8221; algo que j\u00e1 estava certo enquanto tenta atender ao novo pedido \u2014 um efeito colateral comum quando se pede uma reescrita completa em vez de um ajuste pontual.<\/p>\n<blockquote><p><strong>\ud83d\udca1 Dica do Mestre:<\/strong> conforme mostra <a href=\"https:\/\/www.instagram.com\/p\/DbgxsS6ChIY\/\" target=\"_blank\" rel=\"noopener\">uma publica\u00e7\u00e3o sobre como criar prompts melhores para programa\u00e7\u00e3o<\/a>, a IA pode acelerar bastante o aprendizado e o desenvolvimento, mas o ganho real depende de tratar cada intera\u00e7\u00e3o como uma itera\u00e7\u00e3o sobre um contrato j\u00e1 estabelecido, n\u00e3o como uma pergunta nova e desconectada da anterior.<\/p><\/blockquote>\n<h2>Um checklist r\u00e1pido antes de enviar o prompt<\/h2>\n<p>Para consolidar o que vimos, um checklist mental de cinco perguntas antes de apertar enter tende a evitar a maior parte dos retrabalhos:<\/p>\n<ul>\n<li>Eu disse qual stack, vers\u00e3o e conven\u00e7\u00e3o de projeto se aplicam aqui?<\/li>\n<li>Eu disse o que N\u00c3O pode ser feito (depend\u00eancia nova, mudan\u00e7a de assinatura p\u00fablica)?<\/li>\n<li>Eu defini como vou saber se o resultado est\u00e1 correto?<\/li>\n<li>Para tarefas amb\u00edguas, eu pedi um plano antes do c\u00f3digo?<\/li>\n<li>Eu ancorei a API real (assinatura, exemplo de c\u00f3digo) em vez de confiar na mem\u00f3ria do modelo?<\/li>\n<\/ul>\n<p>Nenhuma dessas perguntas exige mais do que uma ou duas frases extras no prompt. O custo de escrev\u00ea-las \u00e9 baixo; o custo de n\u00e3o escrev\u00ea-las \u00e9 o tempo perdido revisando e corrigindo c\u00f3digo que nunca deveria ter sa\u00eddo errado.<\/p>\n<h2>Leve essa pr\u00e1tica para dentro do seu fluxo de trabalho<\/h2>\n<p>Escrever prompts melhores n\u00e3o \u00e9 um talento raro \u2014 \u00e9 uma disciplina que se desenvolve testando estruturas, guardando o que funciona e descartando o que gera retrabalho. Se voc\u00ea quer trocar esses padr\u00f5es com outros desenvolvedores que j\u00e1 passaram pelas mesmas armadilhas, participar de um grupo dedicado ao assunto acelera muito essa curva de aprendizado.<\/p>\n<p>Convido voc\u00ea a entrar na <a href=\"https:\/\/adrianosantos.link\/ComunidadeDevAI\" target=\"_blank\" rel=\"noopener\">Comunidade Dev&#8217;s AI<\/a>, onde compartilhamos prompts testados, discutimos falhas reais de projetos e trocamos experi\u00eancias pr\u00e1ticas sobre como usar IA de forma respons\u00e1vel no desenvolvimento de software, em v\u00e1rias linguagens e contextos.<\/p>\n<h2>Conclus\u00e3o<\/h2>\n<p>A qualidade do c\u00f3digo gerado por IA \u00e9, na pr\u00e1tica, um espelho da qualidade da especifica\u00e7\u00e3o que voc\u00ea forneceu. Prompts vagos produzem c\u00f3digo gen\u00e9rico; prompts que carregam contexto de projeto, restri\u00e7\u00f5es expl\u00edcitas e crit\u00e9rio de aceite produzem c\u00f3digo que se aproxima do que um colega s\u00eanior, familiarizado com o seu sistema, teria escrito. Isso n\u00e3o elimina a necessidade de revis\u00e3o \u2014 nenhum prompt bem escrito substitui teste e leitura cr\u00edtica \u2014 mas reduz drasticamente a dist\u00e2ncia entre o que voc\u00ea pediu e o que voc\u00ea recebeu. Trate cada prompt como um contrato: quanto mais expl\u00edcitas as cl\u00e1usulas, menos surpresas na entrega.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Voc\u00ea pede para a IA implementar um endpoint de pagina\u00e7\u00e3o. Ela devolve um c\u00f3digo que compila, passa nos testes que voc\u00ea tinha (poucos), mas ignora o padr\u00e3o de cursor que o resto da API j\u00e1 usa, reimplementa uma fun\u00e7\u00e3o de sanitiza\u00e7\u00e3o que j\u00e1 existe em utils\/ e assume que o banco \u00e9 PostgreSQL quando na [&hellip;]<\/p>\n","protected":false},"author":127,"featured_media":1283,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1282","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts\/1282","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/users\/127"}],"replies":[{"embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/comments?post=1282"}],"version-history":[{"count":1,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts\/1282\/revisions"}],"predecessor-version":[{"id":1284,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts\/1282\/revisions\/1284"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/media\/1283"}],"wp:attachment":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/media?parent=1282"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/categories?post=1282"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/tags?post=1282"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}