{"id":1239,"date":"2026-09-14T04:01:37","date_gmt":"2026-09-14T07:01:37","guid":{"rendered":"https:\/\/adrianosantostreina.com.br\/blog\/gramatica-invisivel-do-prompt-estrutura-instrucao-codigo\/"},"modified":"2026-09-14T04:01:45","modified_gmt":"2026-09-14T07:01:45","slug":"gramatica-invisivel-do-prompt-estrutura-instrucao-codigo","status":"publish","type":"post","link":"https:\/\/adrianosantostreina.com.br\/blog\/gramatica-invisivel-do-prompt-estrutura-instrucao-codigo\/","title":{"rendered":"A Gram\u00e1tica Invis\u00edvel do Prompt: Por Que a Estrutura da Instru\u00e7\u00e3o Importa Mais que as Palavras"},"content":{"rendered":"<p>Voc\u00ea j\u00e1 deve ter vivido essa cena: pede para o modelo &#8220;refatorar essa fun\u00e7\u00e3o para ficar mais leg\u00edvel&#8221;, recebe um c\u00f3digo que compila, passa nos olhos rapidamente, entra no PR \u2014 e tr\u00eas sprints depois descobre que a refatora\u00e7\u00e3o mudou silenciosamente o comportamento de arredondamento num\u00e9rico numa regra de neg\u00f3cio financeira. Ningu\u00e9m pediu para mudar o comportamento. Ningu\u00e9m percebeu, porque o c\u00f3digo &#8220;parecia&#8221; mais limpo. O problema n\u00e3o foi o modelo ter &#8220;alucinado&#8221;. O problema foi o prompt ter deixado espa\u00e7o para m\u00faltiplas interpreta\u00e7\u00f5es v\u00e1lidas, e o modelo escolheu uma que fazia sentido sintaticamente, mas n\u00e3o semanticamente para o seu dom\u00ednio.<\/p>\n<p>Esse tipo de falha \u00e9 sistem\u00e1tica, n\u00e3o aleat\u00f3ria. E ela nasce quase sempre no mesmo lugar: na forma como a instru\u00e7\u00e3o foi estruturada, n\u00e3o nas palavras escolhidas. Depois de meses testando fluxos de prompt em produ\u00e7\u00e3o com <a href=\"https:\/\/claude.ai\" target=\"_blank\" rel=\"noopener\">Claude<\/a> e ferramentas como <a href=\"https:\/\/cursor.sh\" target=\"_blank\" rel=\"noopener\">Cursor<\/a>, fica claro que existe uma gram\u00e1tica subjacente que separa prompts que geram c\u00f3digo correto, test\u00e1vel e sustent\u00e1vel de prompts que geram c\u00f3digo plaus\u00edvel \u2014 que \u00e9 o tipo mais perigoso de erro, porque passa despercebido. Este artigo \u00e9 sobre essa gram\u00e1tica: os elementos estruturais que realmente movem a agulha, os limites do que prompt engineering resolve, e onde a responsabilidade volta inevitavelmente para voc\u00ea.<\/p>\n<h2>O prompt n\u00e3o \u00e9 uma pergunta, \u00e9 uma especifica\u00e7\u00e3o de contrato<\/h2>\n<p>A confus\u00e3o mais comum entre desenvolvedores seniores que est\u00e3o migrando o fluxo de trabalho para modelos de linguagem \u00e9 tratar o prompt como uma pergunta em linguagem natural, quando na pr\u00e1tica ele deveria ser tratado como uma especifica\u00e7\u00e3o de contrato incompleta que voc\u00ea est\u00e1 preenchendo em tempo real. A diferen\u00e7a \u00e9 sutil, mas muda tudo.<\/p>\n<p>Uma pergunta aceita qualquer resposta plaus\u00edvel. Um contrato define pr\u00e9-condi\u00e7\u00f5es, p\u00f3s-condi\u00e7\u00f5es, invariantes e o espa\u00e7o de comportamento aceit\u00e1vel. Quando voc\u00ea escreve &#8220;crie uma fun\u00e7\u00e3o que valida CPF&#8221;, est\u00e1 fazendo uma pergunta. Quando voc\u00ea escreve uma especifica\u00e7\u00e3o com entrada, sa\u00edda, casos de borda e comportamento em falha, est\u00e1 definindo um contrato \u2014 e \u00e9 isso que reduz drasticamente o espa\u00e7o de solu\u00e7\u00f5es que o modelo pode gerar sem violar sua inten\u00e7\u00e3o.<\/p>\n<pre><code>\/\/ Prompt fraco (pergunta)\n\"Crie uma fun\u00e7\u00e3o em TypeScript para validar CPF\"\n\n\/\/ Prompt como contrato\n\"\"\"\nImplemente validarCPF(cpf: string): Resultado\n\nPr\u00e9-condi\u00e7\u00f5es:\n- cpf pode conter m\u00e1scara (pontos e tra\u00e7o) ou n\u00e3o\n- cpf pode vir com espa\u00e7os em branco nas bordas\n\nP\u00f3s-condi\u00e7\u00f5es:\n- retorna Ok(true) apenas se os d\u00edgitos verificadores forem v\u00e1lidos\n  segundo o algoritmo oficial da Receita Federal\n- retorna Err(ErroValidacao.FormatoInvalido) se n\u00e3o houver 11 d\u00edgitos\n  num\u00e9ricos ap\u00f3s sanitiza\u00e7\u00e3o\n- retorna Err(ErroValidacao.SequenciaRepetida) para CPFs como\n  111.111.111-11 (matematicamente v\u00e1lidos, mas inv\u00e1lidos na pr\u00e1tica)\n\nRestri\u00e7\u00f5es:\n- n\u00e3o usar bibliotecas externas\n- fun\u00e7\u00e3o pura, sem I\/O\n- cobertura de testes deve incluir: CPF v\u00e1lido com m\u00e1scara,\n  CPF v\u00e1lido sem m\u00e1scara, CPF com sequ\u00eancia repetida,\n  CPF com menos de 11 d\u00edgitos, string vazia, null\n\"\"\"\n<\/code><\/pre>\n<p>Repare que o segundo prompt n\u00e3o \u00e9 &#8220;mais educado&#8221; nem &#8220;mais detalhado&#8221; no sentido gen\u00e9rico. Ele elimina graus de liberdade espec\u00edficos que historicamente geram bugs: o caso da sequ\u00eancia repetida \u00e9 justamente o tipo de regra de neg\u00f3cio que um LLM tende a esquecer porque n\u00e3o est\u00e1 no algoritmo formal, apenas na pr\u00e1tica de mercado. Se voc\u00ea n\u00e3o especifica, o modelo n\u00e3o tem como saber que isso importa para o seu contexto.<\/p>\n<blockquote><p><strong>\ud83d\udca1 Dica do Mestre:<\/strong> a discuss\u00e3o 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\">t\u00f3pico da comunidade ChatGPTPro no Reddit<\/a> converge para um ponto recorrente entre profissionais experientes: ser espec\u00edfico e fornecer exemplo de estilo de c\u00f3digo vale mais do que qualquer f\u00f3rmula m\u00e1gica de frase. Isso confirma, na pr\u00e1tica coletiva, o que a teoria de contrato sugere \u2014 a especificidade reduz o espa\u00e7o de ambiguidade, e exemplos concretos ancoram o modelo em conven\u00e7\u00f5es que ele n\u00e3o tem como inferir sozinho.<\/p>\n<\/blockquote>\n<h2>Os quatro eixos que realmente movem a qualidade do c\u00f3digo gerado<\/h2>\n<p>Depois de testar varia\u00e7\u00f5es sistem\u00e1ticas de prompt em tarefas reais \u2014 desde gera\u00e7\u00e3o de endpoints REST at\u00e9 refatora\u00e7\u00e3o de pipelines de dados \u2014, quatro eixos aparecem consistentemente como os que mais influenciam a qualidade do resultado. Nenhum deles \u00e9 sobre &#8220;escolher as palavras certas&#8221;.<\/p>\n<h3>1. Delimita\u00e7\u00e3o expl\u00edcita de escopo (o que N\u00c3O fazer)<\/h3>\n<p>Modelos de linguagem otimizam para serem \u00fateis, e &#8220;\u00fatil&#8221; frequentemente significa &#8220;fazer mais do que foi pedido&#8221;. Isso \u00e9 desej\u00e1vel em brainstorming e catastr\u00f3fico em manuten\u00e7\u00e3o de c\u00f3digo. Se voc\u00ea pede para corrigir um bug de concorr\u00eancia numa fun\u00e7\u00e3o, e n\u00e3o delimita o escopo, \u00e9 comum o modelo &#8220;aproveitar&#8221; para renomear vari\u00e1veis, reorganizar imports, ou &#8220;melhorar&#8221; a assinatura da fun\u00e7\u00e3o \u2014 mudan\u00e7as que aumentam o diff, dificultam o code review e escondem a mudan\u00e7a real dentro de ru\u00eddo cosm\u00e9tico.<\/p>\n<pre><code>Contexto: fun\u00e7\u00e3o processarFila() em Go, com race condition\nidentificada no acesso ao slice compartilhado `pendentes`.\n\nTarefa: corrija exclusivamente a race condition usando sync.Mutex\nou um canal, conforme for mais idiom\u00e1tico para este caso.\n\nRestri\u00e7\u00f5es expl\u00edcitas \u2014 N\u00c3O fa\u00e7a:\n- n\u00e3o renomeie vari\u00e1veis existentes\n- n\u00e3o altere a assinatura p\u00fablica da fun\u00e7\u00e3o\n- n\u00e3o reorganize ou remova imports n\u00e3o relacionados ao fix\n- n\u00e3o adicione logging, m\u00e9tricas ou coment\u00e1rios al\u00e9m do necess\u00e1rio\n  para explicar a mudan\u00e7a de concorr\u00eancia\n\nEntregue apenas o diff m\u00ednimo necess\u00e1rio para resolver a race\ncondition, com uma linha de coment\u00e1rio explicando a escolha entre\nmutex e canal.\n<\/code><\/pre>\n<p>Esse tipo de restri\u00e7\u00e3o negativa \u00e9 subestimado. A maioria dos guias de prompt foca em dizer o que fazer; a experi\u00eancia pr\u00e1tica mostra que dizer explicitamente o que n\u00e3o fazer \u00e9 o que reduz o &#8220;escopo criativo&#8221; descontrolado que gera PRs enormes e revis\u00f5es imposs\u00edveis.<\/p>\n<h3>2. Exemplo de estilo como \u00e2ncora, n\u00e3o como sugest\u00e3o<\/h3>\n<p>Conven\u00e7\u00f5es de c\u00f3digo \u2014 nomenclatura, tratamento de erro, padr\u00e3o de logging, estrutura de testes \u2014 n\u00e3o existem de forma universal. Existem no seu reposit\u00f3rio, na sua equipe, na sua cultura de engenharia. Um LLM treinado em bilh\u00f5es de linhas de c\u00f3digo p\u00fablico vai gravitar para o padr\u00e3o estatisticamente mais comum, que raramente \u00e9 o padr\u00e3o do seu time.<\/p>\n<p>A solu\u00e7\u00e3o \u00e9 colar um exemplo real do seu pr\u00f3prio c\u00f3digo como \u00e2ncora. Isso \u00e9 mais eficaz do que qualquer descri\u00e7\u00e3o textual de &#8220;estilo&#8221;.<\/p>\n<pre><code>Aqui est\u00e1 um exemplo de como tratamos erros neste projeto:\n\nfunc BuscarPedido(id string) (*Pedido, error) {\n    if id == \"\" {\n        return nil, fmt.Errorf(\"buscar pedido: id vazio: %w\", ErrValidacao)\n    }\n    pedido, err := s.repo.FindByID(id)\n    if err != nil {\n        return nil, fmt.Errorf(\"buscar pedido %s: %w\", id, err)\n    }\n    return pedido, nil\n}\n\nSiga exatamente este padr\u00e3o de wrapping de erro (contexto + %w)\nao implementar CancelarPedido(id string) error.\n<\/code><\/pre>\n<p>Isso resolve um problema que instru\u00e7\u00f5es textuais n\u00e3o resolvem bem: estilo \u00e9 mais f\u00e1cil de demonstrar do que de descrever. &#8220;Use error wrapping consistente&#8221; \u00e9 amb\u00edguo; um exemplo real do seu codebase n\u00e3o \u00e9.<\/p>\n<h3>3. Especifica\u00e7\u00e3o do crit\u00e9rio de aceite antes do c\u00f3digo<\/h3>\n<p>Este \u00e9 o eixo mais negligenciado e o que mais separa times maduros de times que ainda tratam IA como &#8220;gerador de sugest\u00f5es&#8221;. Pedir o teste antes \u2014 ou junto \u2014 da implementa\u00e7\u00e3o muda fundamentalmente a qualidade do c\u00f3digo gerado, porque for\u00e7a o modelo a raciocinar sobre comportamento observ\u00e1vel antes de comprometer-se com uma implementa\u00e7\u00e3o espec\u00edfica.<\/p>\n<pre><code>Antes de implementar, escreva os casos de teste (usando pytest)\nque descrevem o comportamento esperado de calcular_frete().\nN\u00e3o implemente a fun\u00e7\u00e3o ainda \u2014 apenas os testes com asserts\ne coment\u00e1rios explicando cada caso de borda considerado.\n\nDepois que eu aprovar os testes, implemente a fun\u00e7\u00e3o para\nfaz\u00ea-los passar.\n<\/code><\/pre>\n<p>Esse padr\u00e3o de duas etapas \u2014 testes primeiro, implementa\u00e7\u00e3o depois, com um ponto de aprova\u00e7\u00e3o humana no meio \u2014 \u00e9 estruturalmente parecido com TDD, e n\u00e3o por acaso funciona bem com LLMs pelo mesmo motivo que funciona com humanos: separar &#8220;o que precisa ser verdade&#8221; de &#8220;como isso ser\u00e1 implementado&#8221; evita que decis\u00f5es de implementa\u00e7\u00e3o prematuras contaminem o entendimento do problema.<\/p>\n<h3>4. Contexto de sistema versus contexto de tarefa<\/h3>\n<p>Um erro estrutural comum \u00e9 misturar, num \u00fanico prompt, informa\u00e7\u00e3o que deveria ser persistente (arquitetura do sistema, conven\u00e7\u00f5es do projeto, stack) com informa\u00e7\u00e3o que \u00e9 espec\u00edfica daquela tarefa pontual. Isso gera dois problemas: prompts gigantescos e repetitivos, e perda de contexto quando a sess\u00e3o \u00e9 encerrada.<\/p>\n<p>Ferramentas como <a href=\"https:\/\/docs.anthropic.com\/en\/docs\/claude-code\" target=\"_blank\" rel=\"noopener\">Claude Code<\/a> resolvem isso parcialmente com arquivos de contexto persistente (como o <code>CLAUDE.md<\/code>), mas o princ\u00edpio vale mesmo sem tooling dedicado: separe o que \u00e9 &#8220;verdade do sistema&#8221; do que \u00e9 &#8220;pedido da tarefa&#8221;.<\/p>\n<pre><code># CLAUDE.md (contexto persistente do projeto)\n\n## Stack\n- Backend: Go 1.22, PostgreSQL, sqlc para gera\u00e7\u00e3o de queries\n- Erros seguem padr\u00e3o de wrapping com %w e sentinelas em errors.go\n- Testes usam testify\/assert, n\u00e3o testify\/require, exceto em setup\n\n## Conven\u00e7\u00f5es n\u00e3o negoci\u00e1veis\n- Nenhuma query SQL inline fora de arquivos .sql processados por sqlc\n- Handlers HTTP n\u00e3o cont\u00eam l\u00f3gica de neg\u00f3cio, apenas orquestra\u00e7\u00e3o\n- Toda fun\u00e7\u00e3o p\u00fablica tem doc comment no formato padr\u00e3o Go\n<\/code><\/pre>\n<p>Com esse contexto j\u00e1 estabelecido, o prompt da tarefa fica enxuto e espec\u00edfico, sem precisar reexplicar o mundo a cada intera\u00e7\u00e3o:<\/p>\n<pre><code>Implemente o handler de cancelamento de assinatura seguindo as\nconven\u00e7\u00f5es do projeto. A l\u00f3gica de neg\u00f3cio j\u00e1 existe em\nservice.CancelarAssinatura(ctx, id) \u2014 o handler deve apenas\nvalidar o path param, chamar o servi\u00e7o e mapear erros para\nstatus HTTP conforme o padr\u00e3o j\u00e1 usado em handlers\/pedido.go.\n<\/code><\/pre>\n<h2>Onde a engenharia de prompt encontra seu limite<\/h2>\n<p>\u00c9 preciso ser honesto sobre o que prompt engineering n\u00e3o resolve, porque a tenta\u00e7\u00e3o de trat\u00e1-lo como bala de prata \u00e9 grande \u2014 inclusive h\u00e1 quem projete um futuro em que <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\">programar vai virar essencialmente escrever prompts at\u00e9 2030<\/a>, argumento que simplifica demais a realidade de sistemas complexos e legados.<\/p>\n<p>Prompt bem escrito reduz a vari\u00e2ncia do resultado, mas n\u00e3o elimina a necessidade de verifica\u00e7\u00e3o. Modelos de linguagem n\u00e3o t\u00eam acesso ao estado de execu\u00e7\u00e3o real do seu sistema \u2014 eles inferem comportamento a partir de padr\u00f5es textuais. Isso significa que para bugs que dependem de estado de runtime, condi\u00e7\u00f5es de corrida sutis, comportamento espec\u00edfico de infraestrutura ou intera\u00e7\u00e3o entre servi\u00e7os distribu\u00eddos, nenhuma formula\u00e7\u00e3o de prompt substitui instrumenta\u00e7\u00e3o, logs e testes de integra\u00e7\u00e3o reais.<\/p>\n<p>H\u00e1 tamb\u00e9m um limite estrutural na quantidade de contexto que cabe numa janela, por maior que seja. Sistemas legados com d\u00e9cadas de decis\u00f5es acumuladas \u2014 inclusive em linguagens como Delphi, ainda comuns em sistemas corporativos brasileiros de miss\u00e3o cr\u00edtica \u2014 carregam contexto impl\u00edcito que nenhum prompt, por mais bem escrito, consegue capturar sozinho sem que voc\u00ea primeiro fa\u00e7a o trabalho de explicitar essas regras em algum lugar persistente e consult\u00e1vel.<\/p>\n<blockquote><p><strong>\ud83d\udca1 Dica do Mestre:<\/strong> a an\u00e1lise publicada no <a href=\"https:\/\/medium.com\/@flpchapola\/quando-programar-vira-prompt-o-fim-da-era-do-c%C3%B3digo-864c24791074\" target=\"_blank\" rel=\"noopener\">artigo &#8220;Quando programar vira prompt: o fim da era do c\u00f3digo&#8221;<\/a> descreve bem essa transi\u00e7\u00e3o de &#8220;escrever c\u00f3digo&#8221; para &#8220;dirigir a sa\u00edda&#8221; \u2014 mas dirigir a sa\u00edda de um sistema complexo exige mais rigor de especifica\u00e7\u00e3o, n\u00e3o menos. A ilus\u00e3o de que prompt simplifica o trabalho de engenharia \u00e9 exatamente o que gera c\u00f3digo plaus\u00edvel e fr\u00e1gil quando o rigor de contrato \u00e9 negligenciado.<\/p>\n<\/blockquote>\n<h2>Um fluxo pr\u00e1tico: do prompt \u00e0 revis\u00e3o como parte do mesmo processo<\/h2>\n<p>Juntando os eixos anteriores, um fluxo que tem se mostrado consistente em projetos reais segue esta sequ\u00eancia, que trata o prompt n\u00e3o como um evento isolado, mas como uma etapa dentro de um processo de verifica\u00e7\u00e3o maior:<\/p>\n<pre><code>1. Contexto persistente (arquitetura, conven\u00e7\u00f5es) j\u00e1 carregado\n   via arquivo de projeto ou sess\u00e3o configurada.\n\n2. Prompt de tarefa com:\n   - objetivo espec\u00edfico e mensur\u00e1vel\n   - restri\u00e7\u00f5es expl\u00edcitas de escopo (o que n\u00e3o fazer)\n   - exemplo de estilo do pr\u00f3prio c\u00f3digo, quando aplic\u00e1vel\n   - crit\u00e9rio de aceite (testes) solicitado antes da implementa\u00e7\u00e3o\n\n3. Revis\u00e3o humana dos testes propostos ANTES da implementa\u00e7\u00e3o\n   \u2014 este \u00e9 o ponto de maior alavancagem para pegar mal-entendidos\n   de requisito antes que virem c\u00f3digo.\n\n4. Implementa\u00e7\u00e3o gerada para satisfazer os testes aprovados.\n\n5. Revis\u00e3o de diff com foco em escopo: o modelo tocou em algo\n   fora do que foi pedido? Se sim, isso \u00e9 sinal de prompt\n   insuficientemente restritivo, n\u00e3o de \"capricho\" do modelo.\n<\/code><\/pre>\n<p>Esse fluxo \u00e9 mais lento por tarefa do que simplesmente pedir &#8220;implemente X&#8221; e aceitar o resultado. Mas o custo comparativo precisa ser medido em ciclo completo, incluindo o tempo de debugar comportamento inesperado descoberto em produ\u00e7\u00e3o \u2014 que costuma ser ordens de grandeza maior do que o tempo investido em especificar melhor de in\u00edcio.<\/p>\n<h3>Quando vale a pena investir tempo na engenharia do prompt<\/h3>\n<p>Nem toda tarefa justifica esse n\u00edvel de rigor. Scripts descart\u00e1veis, prot\u00f3tipos de explora\u00e7\u00e3o, c\u00f3digo que ser\u00e1 jogado fora em horas \u2014 nesses casos, prompt de contrato completo \u00e9 over-engineering. O crit\u00e9rio pr\u00e1tico \u00e9: se o c\u00f3digo vai para produ\u00e7\u00e3o, vai ser mantido por outra pessoa, ou toca em l\u00f3gica de neg\u00f3cio sens\u00edvel, o investimento em especifica\u00e7\u00e3o se paga. Se \u00e9 explora\u00e7\u00e3o de uma hip\u00f3tese que voc\u00ea vai descartar, prompt r\u00e1pido e iterativo \u00e9 a escolha correta.<\/p>\n<p>Vale notar tamb\u00e9m que boa parte do material dispon\u00edvel sobre &#8220;melhores prompts para programar com IA&#8221; \u2014 como listagens de <a href=\"https:\/\/www.techtudo.com.br\/listas\/2026\/06\/20-melhores-prompts-para-desenvolvedores-programarem-com-ia-edsoftwares.ghtml\" target=\"_blank\" rel=\"noopener\">prompts prontos para desenvolvedores<\/a> \u2014 funciona bem como ponto de partida para tarefas gen\u00e9ricas, mas nenhuma cole\u00e7\u00e3o de templates substitui o trabalho de adaptar a estrutura de contrato ao dom\u00ednio espec\u00edfico do seu sistema. Templates resolvem o formato; o contexto do seu neg\u00f3cio \u00e9 insubstitu\u00edvel.<\/p>\n<h2>Testando a pr\u00f3pria disciplina de prompt como parte da engenharia<\/h2>\n<p>Uma pr\u00e1tica que vale adotar em times maduros \u00e9 revisar prompts como se revisa c\u00f3digo: quando um bug chega em produ\u00e7\u00e3o originado de c\u00f3digo gerado por IA, a retrospectiva deveria incluir &#8220;o prompt continha essa restri\u00e7\u00e3o?&#8221; como pergunta padr\u00e3o, no mesmo esp\u00edrito de um post-mortem t\u00e9cnico. Isso transforma prompt engineering de uma habilidade individual e t\u00e1cita em um artefato de time, version\u00e1vel e revis\u00e1vel.<\/p>\n<pre><code>## prompts\/refatoracao-pagamentos.md\n\nPrompt usado em 2024-03-15 para refatorar CalcularJuros().\n\nResultado: bug encontrado em produ\u00e7\u00e3o \u2014 arredondamento mudou\nde HALF_UP para HALF_EVEN silenciosamente.\n\nCausa raiz: prompt n\u00e3o especificou modo de arredondamento como\ninvariante a preservar.\n\nCorre\u00e7\u00e3o do prompt para pr\u00f3ximas ocorr\u00eancias:\n+ \"Preserve exatamente o modo de arredondamento atual\n   (HALF_UP) \u2014 n\u00e3o \u00e9 permitido alter\u00e1-lo mesmo que outro modo\n   pare\u00e7a mais 'correto' matematicamente.\"\n<\/code><\/pre>\n<p>Esse h\u00e1bito de versionar e documentar falhas de prompt, tratando-as como falhas de especifica\u00e7\u00e3o e n\u00e3o como &#8220;a IA errou&#8221;, \u00e9 o que transforma o uso de LLMs de uma depend\u00eancia de sorte individual em uma pr\u00e1tica de engenharia replic\u00e1vel pelo time inteiro.<\/p>\n<h2>Leve essa discuss\u00e3o para quem j\u00e1 est\u00e1 testando isso na pr\u00e1tica<\/h2>\n<p>Prompt engineering para c\u00f3digo n\u00e3o \u00e9 uma lista fixa de t\u00e9cnicas \u2014 \u00e9 uma disciplina que evolui junto com os modelos, e a melhor forma de refinar sua intui\u00e7\u00e3o sobre o que funciona \u00e9 discutir casos reais com quem tamb\u00e9m est\u00e1 lidando com essas mesmas decis\u00f5es todos os dias. Na <a href=\"https:\/\/adrianosantos.link\/ComunidadeDevAI\" target=\"_blank\" rel=\"noopener\">Comunidade Dev&#8217;s AI<\/a> trocamos exatamente esse tipo de experi\u00eancia: prompts que falharam, contratos que evitaram bugs, fluxos de revis\u00e3o que funcionam em times reais. Se voc\u00ea quer sair da tentativa isolada de &#8220;escrever o prompt perfeito&#8221; e entrar em um processo coletivo de refinamento cont\u00ednuo, essa \u00e9 a comunidade certa para participar.<\/p>\n<h2>Conclus\u00e3o<\/h2>\n<p>Escrever prompts que geram c\u00f3digo melhor n\u00e3o \u00e9 sobre encontrar a f\u00f3rmula m\u00e1gica de palavras que desbloqueia um modelo mais inteligente. \u00c9 sobre reconhecer que todo prompt \u00e9, estruturalmente, uma especifica\u00e7\u00e3o incompleta \u2014 e que a qualidade do c\u00f3digo gerado \u00e9 proporcional \u00e0 quantidade de ambiguidade que voc\u00ea elimina antes de apertar enter. Delimitar escopo, ancorar estilo em exemplos reais, exigir crit\u00e9rio de aceite antes da implementa\u00e7\u00e3o e separar contexto persistente de contexto pontual n\u00e3o s\u00e3o truques: s\u00e3o os mesmos princ\u00edpios de engenharia de requisitos que sempre existiram, agora aplicados a uma interface nova. A disciplina n\u00e3o mudou. S\u00f3 o destinat\u00e1rio da especifica\u00e7\u00e3o.<\/p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Voc\u00ea j\u00e1 deve ter vivido essa cena: pede para o modelo &#8220;refatorar essa fun\u00e7\u00e3o para ficar mais leg\u00edvel&#8221;, recebe um c\u00f3digo que compila, passa nos olhos rapidamente, entra no PR \u2014 e tr\u00eas sprints depois descobre que a refatora\u00e7\u00e3o mudou silenciosamente o comportamento de arredondamento num\u00e9rico numa regra de neg\u00f3cio financeira. Ningu\u00e9m pediu para mudar [&hellip;]<\/p>\n","protected":false},"author":127,"featured_media":1240,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1239","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\/1239","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=1239"}],"version-history":[{"count":1,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts\/1239\/revisions"}],"predecessor-version":[{"id":1241,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts\/1239\/revisions\/1241"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/media\/1240"}],"wp:attachment":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/media?parent=1239"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/categories?post=1239"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/tags?post=1239"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}