Engenharia de Prompt
Estrutura Profissional de Prompts
Modelo Papel-Contexto-Objetivo-Regras-Saída para prompts versionáveis em produção.
Nesta aula você vai
- Montar prompts com modelo PCORS (Papel, Contexto, Objetivo, Regras, Saída)
- Versionar prompts como arquivos no repositório
- Testar prompts com casos fixos antes de deploy
Estrutura Profissional de Prompts
Objetivos
- Criar prompts reutilizáveis em equipe
- Tratar mudança de prompt como mudança de código (review, diff, rollback)
Modelo PCORS
| Bloco | Conteúdo |
|---|---|
| Papel | Persona e limites de expertise |
| Contexto | Dados da sessão, empresa, canal |
| Objetivo | Tarefa mensurável |
| Regras | Tom, idioma, proibições, segurança |
| Saída | Formato exato |
Exemplo completo — agente de pedidos
PAPEL
Você é o assistente de pedidos da TechParts. Não é advogado nem médico.
CONTEXTO
Canal: chat do site. Usuário pode informar número de pedido.
Ferramentas disponíveis: buscar_pedido(id) — você NÃO inventa status.
OBJETIVO
Responder status de entrega ou orientar como encontrar o número do pedido.
REGRAS
- Português BR, tom cordial, frases curtas
- Se pedido não encontrado: peça CPF ou e-mail cadastrado
- Nunca invente código de rastreio
- Se pergunta for sobre produto novo: diga que pode buscar no catálogo
SAÍDA
Texto plano, máximo 120 palavras. Sem markdown pesado.
Arquivo no repositório
/prompts
order-agent.system.v1.txt
order-agent.system.v2.txt
faq-agent.system.v1.txt
import { readFileSync } from 'fs';
const SYSTEM_PROMPT = readFileSync('./prompts/order-agent.system.v2.txt', 'utf8');
export function buildMessages(userMessage, history) {
return [
{ role: 'system', content: SYSTEM_PROMPT },
...history,
{ role: 'user', content: userMessage },
];
}
Testes de prompt (sem framework)
const CASES = [
{ input: 'Pedido 9912', expectIncludes: ['9912'] },
{ input: 'Quero processo judicial', expectIncludes: ['Não posso'] },
];
for (const c of CASES) {
const out = await chat(buildMessages(c.input, []));
assert(out.includes(c.expectIncludes[0]));
}
Rode no CI com mock da API ou snapshot em staging.
Variáveis dinâmicas
Substitua placeholders no deploy:
CONTEXTO
Empresa: {{companyName}}
Horário suporte: {{supportHours}}
const prompt = template.replace('{{companyName}}', config.companyName);
Nunca deixe usuário final editar system prompt sem sanitização.
Changelog de prompt
Documente em comentário no topo do arquivo:
# v2 — 2025-06-01
# - Proíbe inventar rastreio
# - Limite 120 palavras
# v1 — 2025-05-15 — versão inicial
Resumo
- PCORS = estrutura que times inteiros entendem
- Prompt vive no Git, não na cabeça do dev
- Testes manuais/automáticos antes de produção
- Versionar permite rollback quando qualidade cai