{"id":1178,"date":"2026-09-01T04:02:12","date_gmt":"2026-09-01T07:02:12","guid":{"rendered":"https:\/\/adrianosantostreina.com.br\/blog\/engenharia-de-prompt-para-codigo-divida-tecnica\/"},"modified":"2026-09-01T04:02:20","modified_gmt":"2026-09-01T07:02:20","slug":"engenharia-de-prompt-para-codigo-divida-tecnica","status":"publish","type":"post","link":"https:\/\/adrianosantostreina.com.br\/blog\/engenharia-de-prompt-para-codigo-divida-tecnica\/","title":{"rendered":"Engenharia de Prompt para C\u00f3digo: Por Que Sua Instru\u00e7\u00e3o Est\u00e1 Gerando D\u00edvida T\u00e9cnica Silenciosa"},"content":{"rendered":"<p>Voc\u00ea pede para o modelo &#8220;criar uma fun\u00e7\u00e3o que processa pagamentos com retry&#8221;, recebe um c\u00f3digo que compila, passa no teste feliz que voc\u00ea rodou manualmente e vai para o pull request. Tr\u00eas semanas depois, em produ\u00e7\u00e3o, um timeout no gateway de pagamento gera cobran\u00e7a duplicada porque o retry n\u00e3o era idempotente. Ningu\u00e9m pediu idempot\u00eancia no prompt \u2014 e o modelo, sem essa restri\u00e7\u00e3o expl\u00edcita, escolheu a implementa\u00e7\u00e3o estatisticamente mais comum nos dados de treino, que raramente \u00e9 a mais correta para o seu dom\u00ednio espec\u00edfico. O c\u00f3digo estava sintaticamente impec\u00e1vel e semanticamente incompleto. Esse \u00e9 o tipo de bug que n\u00e3o aparece em nenhum linter, porque n\u00e3o \u00e9 um erro de sintaxe: \u00e9 um erro de especifica\u00e7\u00e3o que o desenvolvedor terceirizou para um modelo sem perceber que estava fazendo isso.<\/p>\n<p>Esse cen\u00e1rio se repete todos os dias em equipes que j\u00e1 dominam a mec\u00e2nica de &#8220;conversar com a IA&#8221; mas nunca formalizaram como isso deveria funcionar em c\u00f3digo de produ\u00e7\u00e3o. A discuss\u00e3o p\u00fablica sobre o tema, como aponta este texto sobre <a href=\"https:\/\/medium.com\/@flpchapola\/quando-programar-vira-prompt-o-fim-da-era-do-c%C3%B3digo-864c24791074\" target=\"_blank\" rel=\"noopener\">o deslocamento do trabalho do desenvolvedor para a escrita de prompts<\/a>, tende a tratar o prompt como um substituto direto do c\u00f3digo. N\u00e3o \u00e9. Prompt \u00e9 especifica\u00e7\u00e3o informal, e especifica\u00e7\u00e3o informal sempre teve um custo \u2014 s\u00f3 que agora esse custo aparece como bug em produ\u00e7\u00e3o em vez de aparecer como retrabalho na fase de design. Este artigo trata prompt engineering para c\u00f3digo como o que ele realmente \u00e9: uma disciplina de especifica\u00e7\u00e3o com suas pr\u00f3prias falhas de modo, seus pr\u00f3prios trade-offs de verbosidade versus liberdade do modelo, e seus pr\u00f3prios limites estruturais que nenhuma t\u00e9cnica de prompt resolve sozinha.<\/p>\n<h2>O prompt n\u00e3o \u00e9 uma pergunta, \u00e9 um contrato incompleto por padr\u00e3o<\/h2>\n<p>A maioria dos desenvolvedores trata o prompt como uma pergunta em linguagem natural. Isso funciona para tarefas explorat\u00f3rias \u2014 &#8220;como funciona o algoritmo de Dijkstra&#8221; \u2014 mas falha sistematicamente para gera\u00e7\u00e3o de c\u00f3digo de produ\u00e7\u00e3o, porque c\u00f3digo de produ\u00e7\u00e3o n\u00e3o \u00e9 definido pelo que ele faz no caso feliz, e sim pelo que ele faz nos casos de borda, nas condi\u00e7\u00f5es de falha e nas restri\u00e7\u00f5es n\u00e3o funcionais que nunca aparecem no enunciado do problema.<\/p>\n<p>Um LLM, na aus\u00eancia de restri\u00e7\u00f5es expl\u00edcitas, preenche essas lacunas com o padr\u00e3o estatisticamente mais frequente no seu corpus de treino. Isso significa que ele vai gerar tratamento de erro gen\u00e9rico, vai assumir que strings s\u00e3o UTF-8 bem formado, vai assumir que listas cabem em mem\u00f3ria, e vai assumir que a opera\u00e7\u00e3o pode ser refeita sem efeito colateral \u2014 porque essas s\u00e3o as suposi\u00e7\u00f5es mais comuns em c\u00f3digo de exemplo dispon\u00edvel publicamente. Nenhuma dessas suposi\u00e7\u00f5es \u00e9 necessariamente errada. O problema \u00e9 que elas s\u00e3o impl\u00edcitas, e decis\u00f5es impl\u00edcitas em c\u00f3digo de produ\u00e7\u00e3o s\u00e3o decis\u00f5es que ningu\u00e9m revisou.<\/p>\n<blockquote><p><strong>\ud83d\udca1 Dica do Mestre:<\/strong> pense no prompt como a especifica\u00e7\u00e3o que voc\u00ea daria a um desenvolvedor j\u00fanior extremamente r\u00e1pido e sem contexto de neg\u00f3cio. Ele vai produzir exatamente o que voc\u00ea pediu, na leitura mais literal poss\u00edvel, e vai preencher qualquer ambiguidade com a interpreta\u00e7\u00e3o mais gen\u00e9rica. Se voc\u00ea n\u00e3o especifica idempot\u00eancia, ele n\u00e3o vai adivinhar que sua opera\u00e7\u00e3o de pagamento precisa dela.<\/p><\/blockquote>\n<h3>O framework Fun\u00e7\u00e3o \u2192 Tarefa \u2192 Detalhes \u2192 Contexto \u2192 Exemplos<\/h3>\n<p>Uma estrutura discutida em <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\">uma thread de desenvolvedores sobre prompts para gera\u00e7\u00e3o de c\u00f3digo<\/a> prop\u00f5e uma sequ\u00eancia que vale a pena formalizar como checklist de revis\u00e3o, n\u00e3o como f\u00f3rmula r\u00edgida: definir a fun\u00e7\u00e3o que o modelo deve assumir (revisor s\u00eanior, arquiteto, implementador), a tarefa espec\u00edfica, os detalhes t\u00e9cnicos n\u00e3o negoci\u00e1veis, o contexto do sistema existente e exemplos de c\u00f3digo que j\u00e1 seguem o padr\u00e3o esperado.<\/p>\n<p>Na pr\u00e1tica, isso significa que um prompt de produ\u00e7\u00e3o raramente cabe em uma linha. Compare:<\/p>\n<pre><code>\/\/ Prompt fraco\n\"Crie uma fun\u00e7\u00e3o de retry para chamadas HTTP\"\n\n\/\/ Prompt com especifica\u00e7\u00e3o de contrato\n\"Implemente uma fun\u00e7\u00e3o de retry para chamadas HTTP em TypeScript com estas restri\u00e7\u00f5es:\n- M\u00e1ximo de 3 tentativas, backoff exponencial com jitter\n- Retry apenas para status 429, 502, 503, 504 e erros de timeout de rede\n- N\u00c3O fazer retry em erros 4xx exceto 429 (evitar reenviar requisi\u00e7\u00f5es inv\u00e1lidas)\n- A fun\u00e7\u00e3o deve receber um AbortSignal externo e respeit\u00e1-lo\n- Deve ser idempotente: assuma que o chamador garante idempot\u00eancia da opera\u00e7\u00e3o,\n  mas documente essa premissa explicitamente no JSDoc\n- Retornar um Result em vez de lan\u00e7ar exce\u00e7\u00e3o gen\u00e9rica\n- Exemplo de assinatura esperada: retryFetch(url, options, retryConfig): Promise&lt;Result&gt;\"\n<\/code><\/pre>\n<p>A diferen\u00e7a de tamanho entre os dois prompts \u00e9 proposital. O segundo n\u00e3o \u00e9 &#8220;mais educado&#8221; \u2014 ele elimina graus de liberdade que, se deixados abertos, o modelo vai preencher com a op\u00e7\u00e3o mais gen\u00e9rica, n\u00e3o com a op\u00e7\u00e3o correta para o seu sistema.<\/p>\n<h2>Restri\u00e7\u00f5es negativas valem mais que instru\u00e7\u00f5es positivas<\/h2>\n<p>Um padr\u00e3o que raramente aparece em tutoriais introdut\u00f3rios, mas que faz diferen\u00e7a mensur\u00e1vel em c\u00f3digo gerado para produ\u00e7\u00e3o, \u00e9 a restri\u00e7\u00e3o negativa \u2014 dizer explicitamente o que o modelo <strong>n\u00e3o<\/strong> deve fazer. Isso \u00e9 contraintuitivo porque a maioria dos guias de prompt foca em descrever o resultado desejado, mas um LLM treinado em bilh\u00f5es de exemplos de c\u00f3digo carrega vieses fortes para padr\u00f5es espec\u00edficos que muitas vezes s\u00e3o exatamente o que voc\u00ea quer evitar: uso de bibliotecas desatualizadas, padr\u00f5es de acesso a dados que n\u00e3o escalam, tratamento de exce\u00e7\u00e3o que engole o erro original.<\/p>\n<p>Considere este exemplo em Python:<\/p>\n<pre><code># Prompt sem restri\u00e7\u00e3o negativa tende a gerar isto:\ndef process_batch(items):\n    try:\n        results = []\n        for item in items:\n            results.append(transform(item))\n        return results\n    except Exception as e:\n        print(f\"Erro: {e}\")\n        return []\n\n# Prompt com restri\u00e7\u00e3o negativa expl\u00edcita:\n# \"N\u00e3o capture exce\u00e7\u00f5es gen\u00e9ricas. N\u00e3o use print para logging.\n#  Se um item falhar, ele deve ser reportado individualmente,\n#  e o processamento dos demais itens deve continuar.\"\ndef process_batch(items: list[Item]) -&gt; BatchResult:\n    successes: list[TransformedItem] = []\n    failures: list[ItemError] = []\n    for item in items:\n        try:\n            successes.append(transform(item))\n        except TransformationError as e:\n            logger.warning(\"Falha ao transformar item %s: %s\", item.id, e)\n            failures.append(ItemError(item_id=item.id, reason=str(e)))\n    return BatchResult(successes=successes, failures=failures)\n<\/code><\/pre>\n<p>A primeira vers\u00e3o n\u00e3o est\u00e1 &#8220;errada&#8221; no sentido sint\u00e1tico \u2014 ela compila, roda, e em uma demonstra\u00e7\u00e3o ao vivo parece funcionar. Mas ela mascara falhas, perde a exce\u00e7\u00e3o original e n\u00e3o distingue item que falhou de item que nunca foi processado. Nenhuma dessas falhas aparece em um teste superficial. Elas aparecem em produ\u00e7\u00e3o, tr\u00eas meses depois, quando algu\u00e9m precisa descobrir por que 12% dos registros de um lote sumiram silenciosamente.<\/p>\n<h3>Contexto de arquitetura como parte obrigat\u00f3ria do prompt, n\u00e3o como extra<\/h3>\n<p>Outro erro recorrente em times que adotaram ferramentas como <a href=\"https:\/\/www.cursor.com\" target=\"_blank\" rel=\"noopener\">Cursor<\/a> ou <a href=\"https:\/\/www.anthropic.com\/claude-code\" target=\"_blank\" rel=\"noopener\">Claude Code<\/a> \u00e9 tratar cada prompt como isolado, sem ancor\u00e1-lo nas conven\u00e7\u00f5es arquiteturais do projeto. Um modelo sem esse ancoramento vai gerar c\u00f3digo estilisticamente correto, mas arquiteturalmente inconsistente \u2014 uma camada de reposit\u00f3rio que acessa o banco diretamente em um projeto que segue rigorosamente Clean Architecture, por exemplo, ou um servi\u00e7o que lan\u00e7a exce\u00e7\u00f5es em um codebase que padronizou Result types.<\/p>\n<p>Isso n\u00e3o \u00e9 resolvido pedindo &#8220;siga os padr\u00f5es do projeto&#8221; de forma gen\u00e9rica \u2014 essa instru\u00e7\u00e3o \u00e9 vaga o suficiente para n\u00e3o restringir nada. O que funciona \u00e9 apontar exemplos concretos do pr\u00f3prio c\u00f3digo como refer\u00eancia de padr\u00e3o:<\/p>\n<pre><code>\/\/ Prompt ancorado em exemplo real do projeto\n\"Implemente o UserRepository seguindo exatamente o mesmo padr\u00e3o\nusado em OrderRepository (arquivo src\/repositories\/order-repository.ts):\n- Inje\u00e7\u00e3o de depend\u00eancia do Pool via construtor\n- M\u00e9todos retornam Either usando fp-ts\n- Erros de constraint violation do Postgres s\u00e3o mapeados para\n  DuplicateEntityError, n\u00e3o propagados como PostgresError bruto\n- Toda query usa prepared statement, nunca template string\"\n<\/code><\/pre>\n<p>Ferramentas com contexto persistente de projeto \u2014 arquivos de regras, mem\u00f3ria de sess\u00e3o, indexa\u00e7\u00e3o de codebase \u2014 reduzem parcialmente essa necessidade de repetir contexto a cada prompt, mas n\u00e3o eliminam a necessidade de voc\u00ea, desenvolvedor, decidir explicitamente qual arquivo \u00e9 a refer\u00eancia can\u00f4nica de padr\u00e3o. O modelo n\u00e3o sabe, por conta pr\u00f3pria, que <code>order-repository.ts<\/code> \u00e9 o exemplo &#8220;certo&#8221; e n\u00e3o um c\u00f3digo legado que est\u00e1 sendo descontinuado.<\/p>\n<h2>O prompt como artefato versionado, n\u00e3o como conversa descart\u00e1vel<\/h2>\n<p>Uma mudan\u00e7a de mentalidade que separa uso amador de uso profissional de IA generativa \u00e9 tratar prompts recorrentes como c\u00f3digo: versionados, revisados e reutilizados, em vez de reescritos do zero a cada sess\u00e3o. Isso \u00e9 especialmente relevante para tarefas repetitivas de gera\u00e7\u00e3o \u2014 cria\u00e7\u00e3o de endpoints CRUD, migrations, testes de unidade seguindo um padr\u00e3o espec\u00edfico.<\/p>\n<pre><code>## prompts\/gerar-endpoint-crud.md\n\nVoc\u00ea \u00e9 um engenheiro backend s\u00eanior trabalhando neste projeto FastAPI.\n\nAo gerar um endpoint CRUD, siga SEMPRE:\n1. Schema Pydantic de entrada separado do schema de sa\u00edda (nunca reutilize o mesmo model)\n2. Valida\u00e7\u00e3o de autoriza\u00e7\u00e3o via dependency `require_permission(...)`,\n   nunca inline no corpo da fun\u00e7\u00e3o\n3. Toda exce\u00e7\u00e3o de dom\u00ednio deve herdar de `DomainError` (ver `core\/errors.py`)\n   e ser capturada pelo exception handler global \u2014 n\u00e3o trate erro dentro do endpoint\n4. Pagina\u00e7\u00e3o obrigat\u00f3ria em endpoints de listagem, usando `PageParams`\n   j\u00e1 definido em `core\/pagination.py`\n5. NUNCA exponha o model do SQLAlchemy diretamente na resposta\n\nExemplo de refer\u00eancia completo: `api\/routes\/products.py`\n\nContexto adicional desta tarefa:\n{{contexto_especifico}}\n<\/code><\/pre>\n<p>Esse arquivo de prompt, mantido no reposit\u00f3rio e referenciado por conven\u00e7\u00e3o \u2014 seja via arquivo de instru\u00e7\u00f5es do Cursor, seja via <code>CLAUDE.md<\/code> no caso do Claude Code \u2014 funciona como um contrato reutiliz\u00e1vel. Ele elimina a vari\u00e2ncia entre sess\u00f5es diferentes, entre desenvolvedores diferentes e entre dias diferentes do mesmo desenvolvedor. Sem esse artefato, cada pessoa do time reinventa a especifica\u00e7\u00e3o a cada prompt, e a consist\u00eancia do c\u00f3digo gerado vira fun\u00e7\u00e3o de quem lembrou de mencionar o qu\u00ea naquele dia.<\/p>\n<blockquote><p><strong>\ud83d\udca1 Dica do Mestre:<\/strong> um material introdut\u00f3rio sobre boas pr\u00e1ticas de prompt, dispon\u00edvel em <a href=\"https:\/\/www.youtube.com\/watch?v=yk4QpYFm8KA\" target=\"_blank\" rel=\"noopener\">esta mentoria pr\u00e1tica sobre prompts claros e seguros<\/a>, refor\u00e7a um ponto que vale para times avan\u00e7ados tamb\u00e9m: comandos claros reduzem retrabalho, mas comandos claros e n\u00e3o versionados reduzem retrabalho apenas uma vez. A economia recorrente s\u00f3 existe quando o prompt vira artefato reutiliz\u00e1vel.<\/p><\/blockquote>\n<h3>Prompt encadeado versus prompt monol\u00edtico: quando dividir a tarefa<\/h3>\n<p>Um erro de escala \u00e9 tentar resolver problemas complexos com um \u00fanico prompt gigante, esperando que o modelo produza, de uma vez, uma solu\u00e7\u00e3o completa e correta em todas as camadas \u2014 arquitetura, implementa\u00e7\u00e3o, testes e tratamento de erro. Isso funciona para tarefas pequenas e falha de forma proporcional \u00e0 complexidade da tarefa, porque a probabilidade de erro composto cresce a cada decis\u00e3o impl\u00edcita que o modelo precisa tomar sem checkpoint intermedi\u00e1rio.<\/p>\n<p>A alternativa \u00e9 decompor a tarefa em uma cadeia de prompts com verifica\u00e7\u00e3o humana entre etapas \u2014 o que, em ferramentas de agente, se aproxima do que j\u00e1 foi discutido no contexto de <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 a intera\u00e7\u00e3o com IA na programa\u00e7\u00e3o est\u00e1 evoluindo de comandos isolados para fluxos estruturados<\/a>. Na pr\u00e1tica:<\/p>\n<pre><code>Etapa 1 \u2014 Especifica\u00e7\u00e3o:\n\"Antes de gerar c\u00f3digo, liste as decis\u00f5es de design que precisam ser\ntomadas para implementar um sistema de filas com reprocessamento de\nmensagens mortas (DLQ). N\u00e3o escreva c\u00f3digo ainda.\"\n\nEtapa 2 \u2014 Revis\u00e3o humana das decis\u00f5es listadas (aqui voc\u00ea interv\u00e9m)\n\nEtapa 3 \u2014 Implementa\u00e7\u00e3o:\n\"Com base nas decis\u00f5es que confirmamos [lista revisada], implemente\no consumidor da fila em Go seguindo essas decis\u00f5es exatamente.\"\n\nEtapa 4 \u2014 Testes:\n\"Gere os testes de unidade para este consumidor, cobrindo especificamente\nos cen\u00e1rios de falha que definimos na etapa 1: mensagem malformada,\ntimeout do processamento, falha ao mover para DLQ.\"\n<\/code><\/pre>\n<p>Essa decomposi\u00e7\u00e3o custa mais tempo por intera\u00e7\u00e3o, mas reduz drasticamente o volume de suposi\u00e7\u00f5es impl\u00edcitas empilhadas em uma \u00fanica resposta. \u00c9 o mesmo princ\u00edpio de engenharia de software que j\u00e1 conhecemos de outros contextos: dividir um problema grande em unidades menores e verific\u00e1veis reduz a superf\u00edcie de erro n\u00e3o detectado \u2014 s\u00f3 que aqui a unidade de trabalho \u00e9 uma etapa de prompt em vez de uma fun\u00e7\u00e3o.<\/p>\n<h2>Onde a engenharia de prompt encontra seu limite estrutural<\/h2>\n<p>\u00c9 importante ser honesto sobre o que prompt engineering n\u00e3o resolve, porque parte do discurso ao redor do tema \u2014 inclusive em materiais introdut\u00f3rios como os apontados em <a href=\"https:\/\/www.instagram.com\/p\/DbgxsS6ChIY\/\" target=\"_blank\" rel=\"noopener\">conte\u00fados sobre como escrever prompts melhores para programa\u00e7\u00e3o<\/a> \u2014 foca na t\u00e9cnica de escrita da instru\u00e7\u00e3o, mas subestima os limites do pr\u00f3prio modelo diante de contexto real de sistema.<\/p>\n<ul>\n<li><strong>Conhecimento t\u00e1cito de neg\u00f3cio n\u00e3o cabe em prompt.<\/strong> Regras de neg\u00f3cio que existem apenas na cabe\u00e7a de um analista s\u00eanior, ou em uma reuni\u00e3o que ningu\u00e9m documentou, n\u00e3o podem ser especificadas em um prompt porque voc\u00ea mesmo n\u00e3o as tem por escrito. Nesse caso, o gargalo n\u00e3o \u00e9 a t\u00e9cnica de prompting \u2014 \u00e9 a aus\u00eancia de especifica\u00e7\u00e3o, que precede qualquer ferramenta de IA.<\/li>\n<li><strong>Estado distribu\u00eddo e efeitos colaterais em sistemas complexos s\u00e3o dif\u00edceis de descrever textualmente.<\/strong> Um prompt consegue descrever bem uma fun\u00e7\u00e3o pura. Descrever com precis\u00e3o as intera\u00e7\u00f5es entre cinco microsservi\u00e7os, cache distribu\u00eddo e um circuit breaker em texto corrido \u00e9 propenso a omiss\u00f5es, porque a pr\u00f3pria linguagem natural \u00e9 um formato ruim para representar grafos de depend\u00eancia.<\/li>\n<li><strong>Prompt n\u00e3o substitui teste, ele apenas move o ponto de falha.<\/strong> Um prompt bem escrito reduz a chance de erro, mas nunca elimina a necessidade de um harness de testes que valide o comportamento gerado contra casos reais \u2014 inclusive casos que voc\u00ea n\u00e3o pensou em mencionar no prompt.<\/li>\n<li><strong>Verbosidade excessiva tem custo de aten\u00e7\u00e3o do pr\u00f3prio modelo.<\/strong> Prompts longos demais, com regras gen\u00e9ricas empilhadas sem hierarquia de prioridade, competem entre si por relev\u00e2ncia dentro da janela de contexto. Um prompt com 40 regras onde todas t\u00eam o mesmo peso textual tende a produzir ader\u00eancia inconsistente, porque o modelo n\u00e3o tem sinal claro de qual restri\u00e7\u00e3o \u00e9 inegoci\u00e1vel e qual \u00e9 prefer\u00eancia est\u00e9tica.<\/li>\n<\/ul>\n<h3>Prioriza\u00e7\u00e3o expl\u00edcita de restri\u00e7\u00f5es dentro do prompt<\/h3>\n<p>Uma t\u00e9cnica pouco discutida, mas eficaz para prompts longos, \u00e9 hierarquizar explicitamente as restri\u00e7\u00f5es por criticidade, em vez de list\u00e1-las como uma sequ\u00eancia plana:<\/p>\n<pre><code>## Restri\u00e7\u00f5es CR\u00cdTICAS (viola\u00e7\u00e3o = c\u00f3digo rejeitado)\n- Nunca fazer commit de credenciais ou secrets hardcoded\n- Toda query SQL deve usar par\u00e2metros bindados, sem exce\u00e7\u00e3o\n- Opera\u00e7\u00f5es financeiras devem ser transacionais (BEGIN\/COMMIT expl\u00edcito)\n\n## Restri\u00e7\u00f5es IMPORTANTES (desvio precisa de justificativa no coment\u00e1rio)\n- Preferir composi\u00e7\u00e3o a heran\u00e7a\n- Fun\u00e7\u00f5es com mais de 40 linhas devem ser justificadas ou quebradas\n\n## Prefer\u00eancias (aplicar quando n\u00e3o conflitar com o acima)\n- Nomes de vari\u00e1veis em ingl\u00eas\n- Preferir arrow functions em TypeScript\n<\/code><\/pre>\n<p>Essa estrutura em camadas d\u00e1 ao modelo um crit\u00e9rio de desempate quando restri\u00e7\u00f5es entram em conflito \u2014 cen\u00e1rio mais comum do que parece, especialmente em bases de c\u00f3digo legadas com conven\u00e7\u00f5es inconsistentes entre m\u00f3dulos.<\/p>\n<h2>Comunidade Dev&#8217;s AI: pr\u00e1tica deliberada em vez de tentativa isolada<\/h2>\n<p>Tudo o que foi discutido aqui \u2014 restri\u00e7\u00f5es negativas, prompts versionados, decomposi\u00e7\u00e3o em cadeia, prioriza\u00e7\u00e3o de regras \u2014 \u00e9 uma disciplina que se desenvolve por repeti\u00e7\u00e3o e feedback, n\u00e3o por leitura isolada de um artigo. Testar essas t\u00e9cnicas contra c\u00f3digo real, discutir com outros desenvolvedores s\u00eanior o que funcionou e o que gerou d\u00edvida t\u00e9cnica silenciosa, e ajustar seus templates de prompt com base em casos concretos de falha \u00e9 o tipo de pr\u00e1tica que acelera exponencialmente quando feita em grupo.<\/p>\n<p>Se voc\u00ea quer trocar experi\u00eancias reais sobre engenharia de prompt aplicada a produ\u00e7\u00e3o \u2014 n\u00e3o teoria gen\u00e9rica, mas casos de bugs gerados por prompts mal especificados e como cada um resolveu \u2014 participe da <a href=\"https:\/\/adrianosantos.link\/ComunidadeDevAI\" target=\"_blank\" rel=\"noopener\">Comunidade Dev&#8217;s AI<\/a>. \u00c9 onde essas t\u00e9cnicas s\u00e3o testadas, quebradas e refinadas coletivamente, com desenvolvedores que j\u00e1 passaram pelos mesmos problemas de especifica\u00e7\u00e3o impl\u00edcita que este artigo descreveu.<\/p>\n<h2>Conclus\u00e3o<\/h2>\n<p>Escrever prompts que geram c\u00f3digo melhor n\u00e3o \u00e9 uma t\u00e9cnica de ret\u00f3rica aplicada a chatbots \u2014 \u00e9 engenharia de especifica\u00e7\u00e3o, com as mesmas armadilhas que sempre existiram em requisitos mal escritos, s\u00f3 que agora com um novo executor que preenche ambiguidade com a m\u00e9dia estat\u00edstica do que j\u00e1 viu, em vez de perguntar. A diferen\u00e7a entre um prompt de amador e um prompt de profissional n\u00e3o est\u00e1 na educa\u00e7\u00e3o da linguagem ou na quantidade de emojis usados para &#8220;engajar&#8221; o modelo \u2014 est\u00e1 na precis\u00e3o das restri\u00e7\u00f5es, na explicita\u00e7\u00e3o do que n\u00e3o deve acontecer, no ancoramento em exemplos reais do seu pr\u00f3prio c\u00f3digo e na disciplina de tratar esse artefato como parte do processo de engenharia, versionado e revisado como qualquer outro componente cr\u00edtico do sistema. O c\u00f3digo gerado por IA s\u00f3 \u00e9 t\u00e3o bom quanto a especifica\u00e7\u00e3o que voc\u00ea conseguiu tornar expl\u00edcita \u2014 e essa \u00e9, no fim, a mesma regra que sempre valeu para qualquer desenvolvedor j\u00fanior que voc\u00ea j\u00e1 treinou.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Voc\u00ea pede para o modelo &#8220;criar uma fun\u00e7\u00e3o que processa pagamentos com retry&#8221;, recebe um c\u00f3digo que compila, passa no teste feliz que voc\u00ea rodou manualmente e vai para o pull request. Tr\u00eas semanas depois, em produ\u00e7\u00e3o, um timeout no gateway de pagamento gera cobran\u00e7a duplicada porque o retry n\u00e3o era idempotente. Ningu\u00e9m pediu idempot\u00eancia [&hellip;]<\/p>\n","protected":false},"author":127,"featured_media":1179,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1178","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\/1178","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=1178"}],"version-history":[{"count":1,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts\/1178\/revisions"}],"predecessor-version":[{"id":1180,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts\/1178\/revisions\/1180"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/media\/1179"}],"wp:attachment":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/media?parent=1178"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/categories?post=1178"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/tags?post=1178"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}