Um template de prompt bem projetado tem: uma seção de system prompt (constante — define comportamento, regras e formato de saída), uma seção de contexto (variável — preenchida com documentos recuperados, histórico do usuário ou outros dados) e uma seção de input do usuário (variável — a requisição real do usuário). O system prompt permanece o mesmo em todas as requisições. O contexto muda baseado no que é relevante. O input do usuário muda a cada vez.
Em produção, templates de prompt precisam de: controle de versão (rastrear mudanças, rollback se qualidade cair), testes A/B (comparar variações de template), validação de variáveis (garantir que campos obrigatórios estão preenchidos, inputs estão dentro dos limites) e parsing de saída (extrair dados estruturados das respostas do modelo). Frameworks como LangChain, Promptfoo e Braintrust fornecem ferramentas para gerenciamento de templates, mas mesmo um sistema simples de arquivos de template + controle de versão já ajuda muito.
Erros comuns: templates excessivamente complexos que tentam lidar com todos os casos (melhor ter múltiplos templates focados), templates que incluem contexto desnecessário (desperdiçando tokens e confundindo o modelo), codificar informação que muda diretamente no código (use variáveis) e não testar templates contra casos extremos (inputs incomuns, inputs adversariais, campos vazios). Os melhores templates são tão simples quanto possível enquanto produzem confiavelmente a saída que você precisa.