Engenharia de Prompt

Estrutura Profissional de Prompts

Modelo Papel-Contexto-Objetivo-Regras-Saída para prompts versionáveis em produção.

Intermediário 25 min 25 pontos Leitura 0%

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