Padrões de Engenharia de Prompt para Desenvolvimento de Software
Nem todos os prompts produzem bom código. Estes padrões testados em batalha ajudarão você a obter melhores resultados de assistentes de IA toda vez que abrir um chat.
A engenharia de prompt se tornou uma das habilidades mais valiosas no desenvolvimento de software moderno. A diferença entre um prompt que produz código funcional e sustentável e um que gera uma bagunça quebrada é frequentemente sutil — algumas palavras de contexto, uma restrição declarada cedo ou um exemplo que enquadra o problema corretamente. Este artigo reúne os padrões que consistentemente produzem bons resultados, organizados pelo tipo de tarefa que você está resolvendo.
Estes padrões não são teóricos. Eles são destilados de milhares de interações reais com assistentes de codificação de IA em bases de código de produção. Cada padrão inclui um exemplo concreto e uma explicação de por que funciona, para que você possa adaptá-lo às suas próprias ferramentas e fluxos de trabalho.
Padrão 1: O Sanduíche de Contexto
O erro mais comum que desenvolvedores cometem ao usar prompts de IA é fornecer contexto insuficiente. Eles pedem uma função sem descrever o sistema ao redor, as restrições ou as convenções que esperam. A IA então faz suposições razoáveis que estão erradas para a base de código específica deles, e o resultado precisa de muitas edições.
O Sanduíche de Contexto resolve isso estruturando cada prompt em três camadas: o que você está construindo, quais restrições se aplicam e como é o sucesso.
- Camada superior — O objetivo: Descreva o que você quer em uma frase clara. Esta é a única parte que a maioria dos desenvolvedores inclui.
- Camada do meio — As restrições: Liste os itens inegociáveis. Versões de bibliotecas, convenções de estilo, requisitos de desempenho, casos de borda que devem ser tratados.
- Camada inferior — A verificação: Descreva como você saberá se o resultado está correto. Um caso de teste, um formato de saída esperado ou um comportamento específico a confirmar.
// Prompt fraco
const result = await ai.generate("Write a function that sorts an array of users by name");
// Prompt Sanduíche de Contexto
const result = await ai.generate([
"Create a compare function for sorting an array of user objects by lastName, then firstName.",
"Constraints: case-insensitive, handles missing names, TypeScript, no external libraries.",
"Verify: users.sort(compare).map(u => u.lastName) should return ['Adams', 'adams', 'Brown'].",
].join("\n\n"));O Sanduíche de Contexto funciona porque reduz a ambiguidade em todos os níveis. A IA sabe o que você quer, o que não aceitará e como você avaliará o resultado. Este único padrão elimina a maior parte da ida e volta que desperdiça tempo no desenvolvimento assistido por IA.
Padrão 2: A Restrição Negativa
Modelos de IA são geralmente bons em entender o que você quer. Eles têm mais dificuldade em entender o que você não quer. Um prompt como escreva um formulário de login produzirá algo razoável, mas pode incluir regras de complexidade de senha que seu design não usa, ou uma caixa de lembrar-me que seu gerente de produto removeu no sprint passado.
O padrão de Restrição Negativa declara explicitamente o que a IA deve evitar. É mais eficaz do que esperar que o modelo adivinhe suas exclusões corretamente.
// Sem restrições negativas
"Build a user settings page with tabs for profile, security, and notifications."
// Com restrições negativas
"Build a user settings page with tabs for profile, security, and notifications.
DO NOT include: email verification flows, password strength meters, or social login buttons."Restrições negativas funcionam melhor quando colocadas no final do prompt, após a descrição positiva. Isso espelha como humanos processam instruções — precisamos entender o que é pedido antes de entender o que é excluído. A IA segue o mesmo padrão: constrói o modelo mental a partir da descrição positiva e depois aplica as exclusões como filtros sobre ela.
Padrão 3: O Modelo de Exemplo
Quando você precisa de saída consistente em múltiplas interações com IA — gerando documentação, escrevendo casos de teste ou formatando respostas de API — dizer à IA o que fazer é menos eficaz do que mostrar. O padrão de Modelo de Exemplo fornece um ou dois exemplos completos da saída desejada e então pede mais no mesmo formato.
Esta é a coisa mais próxima do aprendizado few-shot disponível através de interfaces de chat. Um exemplo bem escolhido comunica formato, tom, nível de detalhe e convenções implícitas que levariam parágrafos para descrever explicitamente.
// Modelo de Exemplo para gerar mensagens de erro
const example = {
code: "ERR_AUTH_TOKEN_EXPIRED",
message: "Your session has expired. Please log in again.",
severity: "warning",
action: "redirect:/login",
};
const result = await ai.generate([
"Generate 5 more error objects in the same format as this example:",
JSON.stringify(example, null, 2),
"Cover: rate limiting, permission denied, not found, validation error, server error.",
].join("\n\n"));A chave para este padrão é escolher o exemplo certo. Ele deve ser representativo mas não pesado em casos de borda — você quer que a IA generalize a partir do seu exemplo, não que replique suas peculiaridades. Dois exemplos são melhores que um quando o formato de saída tem múltiplas variações, mas mais de três exemplos raramente agregam valor e começam a consumir sua janela de contexto.
Padrão 4: O Ciclo de Refinamento Iterativo
Pedir a uma IA um resultado final e perfeito em um único prompt é como pedir a um desenvolvedor júnior que envie código de produção sem qualquer iteração. Às vezes funciona, mas geralmente produz algo que precisa de retrabalho substancial. O Ciclo de Refinamento Iterativo trata a interação com a IA como uma conversa, começando amplo e estreitando o foco.
- Rodada 1 — Gere uma solução ampla ou esqueleto. Não peça detalhes ainda.
- Rodada 2 — Revise a saída e dê direcionamento específico. Esta parte está boa, mude aquela parte, adicione este caso.
- Rodada 3 — Polimento dos detalhes. Tratamento de erros, casos de borda, nomenclatura, documentação.
Cada rodada dá à IA mais contexto sobre o que você realmente quer, porque seu feedback é específico para o código que ela acabou de produzir. Isso é muito mais eficiente do que tentar antecipar cada detalhe no primeiro prompt. A IA também se beneficia porque pode focar em um nível do problema de cada vez — primeiro a estrutura, depois os específicos, depois o polimento.
Padrão 5: O Prefixo de Papel
Modelos de IA são treinados em texto de muitos domínios e podem adotar diferentes personas quando solicitados. O padrão de Prefixo de Papel atribui explicitamente um papel e perspectiva à IA antes de pedir código, o que a prepara para produzir saída apropriada para aquele contexto.
// Genérico
"Review this function for security issues."
// Com prefixo de papel
"You are a security engineer reviewing a pull request. Focus on:
- Injection vulnerabilities in the SQL query construction
- Missing input validation on the user ID parameter
- Hardcoded credentials or secrets
Review this function:"O padrão de Prefixo de Papel é especialmente poderoso para tarefas de revisão, refatoração e geração de documentação. Quando você precisa de código que siga padrões de acessibilidade, prefixe com Você é um especialista em acessibilidade. Quando está otimizando para desempenho, prefixe com Você é um engenheiro de performance. A IA ajusta seu raciocínio e saída para corresponder à perspectiva solicitada.
Padrão 6: O Contrato de Saída
Uma das experiências mais frustrantes com codificação com IA é obter uma resposta que parece correta mas muda sutilmente o formato de saída, adiciona texto explicativo que você não pediu ou omite partes críticas. O padrão de Contrato de Saída previne isso especificando exatamente o que a resposta deve conter e, igualmente importante, o que não deve conter.
"Generate a React component for a file upload button.
Output contract:
- Return ONLY the component code in a single code block
- No explanation text before or after
- Include TypeScript props interface
- Include CSS module import
- Do NOT include usage examples or test files
- File name: FileUpload.tsx"O Contrato de Saída é particularmente valioso quando você está canalizando a saída da IA para outra ferramenta ou fluxo de trabalho. Se a resposta sempre segue a mesma estrutura, você pode analisá-la confiavelmente. Este padrão é a base para construir pipelines automatizados assistidos por IA que exigem formatação consistente.
Padrão 7: O Orçamento da Janela de Contexto
Todo modelo de IA tem uma janela de contexto limitada. Quando você cola código, documentação ou histórico de conversa em excesso, o modelo começa a esquecer ou alucinar. O padrão de Orçamento da Janela de Contexto trata a janela de contexto como um recurso escasso e a aloca deliberadamente.
- Aloque 60% do seu orçamento para o código e descrição da tarefa mais relevantes.
- Aloque 20% para exemplos e restrições que esclarecem a tarefa.
- Reserve 20% para o espaço de resposta da IA — se a janela estiver cheia, a saída será truncada.
Quando você tem mais contexto do que cabe na janela, priorize as partes mais específicas e relevantes. Um prompt focado com um arquivo cuidadosamente escolhido é mais eficaz do que um prompt amplo com cinco arquivos vagamente relacionados. A IA sempre pode pedir mais contexto se precisar — dê permissão para isso no início da conversa.
Um prompt focado com um arquivo cuidadosamente escolhido consistentemente supera um prompt disperso com cinco arquivos que a IA mal consegue enxergar.
Padrão 8: A Sequência de Esqueleto-Depois-Detalhe
Funcionalidades complexas têm muitas partes móveis. Pedir a uma IA para gerar tudo de uma vez produz um resultado emaranhado onde o gerenciamento de estado, chamadas de API e renderização de UI são difíceis de separar. A sequência de Esqueleto-Depois-Detalhe divide o problema em duas fases.
Primeiro, peça à IA para gerar um esqueleto: as definições de tipos, interfaces e estrutura de alto nível da funcionalidade sem detalhes de implementação. Revise este esqueleto e confirme se corresponde ao seu modelo mental. Só então peça à IA para preencher os detalhes — implementação, tratamento de erros, casos de borda — uma camada de cada vez.
// Fase 1 — Esqueleto
"Design the type structure for a multi-step checkout flow. List the interfaces, enums, and state machine transitions. Do not write implementation yet."
// Fase 2 — Detalhe (após revisar o esqueleto)
"Implement the checkout state machine from the types we agreed on. Include transition validation and error states."Este padrão previne o tipo mais caro de retrabalho: mudar a estrutura depois que a implementação está pronta. Ao concordar com o esqueleto primeiro, você garante que a IA construa sobre uma fundação que corresponde à sua arquitetura, não a uma imaginada.
Unindo os padrões
Estes oito padrões funcionam melhor quando combinados. Uma sessão típica pode começar com o Sanduíche de Contexto para enquadrar a solicitação, usar Restrições Negativas para excluir abordagens indesejadas, seguir o Ciclo de Refinamento Iterativo para convergir na solução certa e fechar com um Contrato de Saída para obter um resultado limpo e analisável.
Quanto mais você pratica estes padrões, mais naturais eles se tornam. Em poucos dias, você se verá instintivamente estruturando prompts como Sanduíches de Contexto e adicionando Restrições Negativas sem pensar. É quando o desenvolvimento assistido por IA passa de uma ferramenta às vezes útil para uma parte consistentemente confiável do seu fluxo de trabalho.
Cada interação com um assistente de IA é um investimento. Um prompt bem estruturado leva trinta segundos extras para escrever, mas economiza horas de ida e volta. Ao longo de centenas de interações, esses trinta segundos se acumulam em dias de tempo economizado — e a diferença entre frustração e fluidez.
