Prompt Engineering para Criar Conteúdo em Escala

🎯 Caso de Estudo

Desenvolvimento de Assistente Virtual para TechSupport.pt - desde prompt básico até produção em Laravel

O que é Prompt Engineering?

O que é Prompt Engineering?

Prompt Engineering é a arte de desenhar instruções para IA gerarem outputs de alta qualidade de forma consistente.

10x
Melhoria qualidade
90%
Menos revisões
5x
Mais produtividade
100%
Consistência
Aspecto Prompt Básico Prompt Engenheirado
Consistência 50-70% 95%+
Formato Imprevisível Estruturado (JSON)
Escala Difícil Automático
Custo Alto (retrabalho) Baixo

Anatomia de um Bom Prompt

Anatomia de um Bom Prompt

6 componentes essenciais:

1. Role (Papel)

És assistente de customer support de loja online tecnologia.

Contextualiza estilo e conhecimento

2. Context (Contexto)

Vendemos laptops. Envios 24-48h. Devoluções 30 dias.

Evita alucinações

3. Task (Tarefa)

Responde profissionalmente, resolve ou escala.

Clareza sobre output

4. Examples (Exemplos)

Cliente: "Onde está encomenda?" Assistente: "Vou verificar. Número?"

Mostra padrões

5. Constraints (Restrições)

Max 150 palavras. Não promete descontos. Admite se não sabe.

Previne problemas

6. Output Format

{"response":"...", "escalate":true|false}

Facilita automação

Exemplo Completo

# ROLE És assistente TechStore Portugal. # CONTEXT Vendemos: laptops €200-3000, componentes, periféricos Envios: 24-48h PT, grátis >€50 Devoluções: 30 dias Suporte: Seg-Sex 9-18h # TASK Responde profissionalmente, resolve ou escala. # EXAMPLES Cliente: "Laptop aqueceu muito" Assistente: "Aquecimento normal em tarefas pesadas. Está: 1) Superfície plana? 2) Ventoinhas limpas? Posso sugerir soluções ou assistência." # CONSTRAINTS - Max 150 palavras - Tom profissional mas amigável - Se não sabe: admite - Nunca: promete descontos # OUTPUT {"response":"...", "tone":"...", "escalate":true|false}

Técnicas Essenciais

Técnicas Essenciais

1. Zero-shot vs Few-shot

Tipo Descrição Resultado
Zero-shot Sem exemplos Inconsistente
Few-shot Com 2-5 exemplos Consistente

2. Chain of Thought

Pedir raciocínio passo-a-passo melhora qualidade

Pensa passo-a-passo: 1. Qual política? 2. Há excepções? 3. Qual contexto? 4. Decisão?

3. Role Prompting

  • Copywriter: Persuasivo → Marketing
  • Analista: Dados → Relatórios
  • Professor: Simples → Tutoriais
  • Empático: Apoiante → Suporte

4. Structured Outputs

Retorna JSON: {"sentiment":"...", "issues":[], "urgency":1-10, "action":"..."}

Caso: Assistente Virtual TechSupport.pt

Caso: Assistente Virtual TechSupport.pt

🎯 Cenário

  • Empresa: TechSupport.pt
  • Objetivo: 70% queries automáticas
  • Volume: 500-800 msgs/dia

Evolução dos Prompts

V1: Básico ❌

System: "Responde perguntas sobre tecnologia"

Problema: Genérico, sem personalidade, info incorreta

V2: Melhorado ⚠️

System: "És assistente TechSupport.pt Info: Envios 24-48h, Devoluções 30d"

Melhor mas: Formato inconsistente

V3: Produção ✅

# IDENTITY És TechBot, assistente TechSupport.pt 5 anos experiência, empático # INFO Produtos: Laptops €400-3000 Envios: 24-48h PT, grátis >€50 Garantia: 2 anos # GUIDELINES Tom: "Tu", amigável Estrutura: Saudação→Clarificação→Solução→Verificação Escala se: Cliente irritado, >5 msgs # KB Laptop não liga: 1. Liga corrente 30min 2. Reset bateria 3. Se <1 ano: garantia # OUTPUT {"intent":"...", "sentiment":"...", "escalate":true|false}
92%
Satisfação
73%
Auto-resolvido
4.6/5
Rating

Implementação Laravel

getRelevantKB($context['user_message']); $prompt .= "\n\n# RELEVANT KB\n" . $kb; } if (isset($context['history'])) { $prompt .= "\n\n# HISTORY\n"; $prompt .= $this->formatHistory($context['history']); } return $prompt; } private function getRelevantKB(string $msg): ?string { $keywords = [ 'não liga' => $this->kb['power_issues'], 'atraso' => $this->kb['shipping_delays'] ]; foreach ($keywords as $key => $content) { if (stripos($msg, $key) !== false) { return $content; } } return null; } } // Controller class ChatbotController extends Controller { public function sendMessage(Request $request) { $conversation = Conversation::findOrCreate($request->conversation_id); $systemPrompt = $this->promptManager->buildPrompt([ 'user_message' => $request->message, 'history' => $conversation->messages->toArray() ]); $response = OpenAI::chat()->create([ 'model' => 'gpt-4', 'messages' => [ ['role' => 'system', 'content' => $systemPrompt], ['role' => 'user', 'content' => $request->message] ] ]); return response()->json([ 'reply' => $response->choices[0]->message->content ]); } }

Escala e Automação

Escala e Automação

1. Templates Reutilizáveis

class ProductDescription { public static function render(array $vars): string { $template = self::getTemplate(); foreach ($vars as $key => $value) { $template = str_replace("{{$key}}", $value, $template); } return $template; } }

2. Batch Processing

// Processar 1000 produtos $products = Product::whereNull('description')->limit(1000)->get(); foreach ($products->chunk(10) as $batch) { foreach ($batch as $product) { GenerateDescriptionJob::dispatch($product) ->onQueue('content-generation'); } sleep(2); // Rate limiting }

3. Quality Control

class ContentQualityChecker { public function check(string $content, array $rules): array { $issues = []; // Length if ($length < $rules['min_length']) { $issues[] = "Too short"; } // Required keywords foreach ($rules['required_keywords'] as $keyword) { if (!stripos($content, $keyword)) { $issues[] = "Missing: $keyword"; } } // Tone check (AI) if (!$this->checkTone($content, $rules['tone'])) { $issues[] = "Wrong tone"; } return ['passed' => empty($issues), 'issues' => $issues]; } }

Outros Exemplos de Aplicação

Outros Exemplos de Aplicação

1. Triagem Documentos (Contabilidade)

System: És assistente contabilidade PT. Classifica documento: - Tipo: fatura|recibo|contrato - NIF emissor/receptor - Data, valor, categoria Output JSON: {tipo, nif, data, valor, categoria, confianca}

2. Geração Conteúdo (Marketing)

System: És copywriter para {cliente}. Cria post {plataforma} sobre {tema}. Tom: {tom_voz} Estrutura: Hook→Body→CTA→Hashtags Output: {texto, hashtags, melhor_hora}

3. Chatbot E-commerce

System: És assistente StyleHub (moda online). Políticas: Envios 24-48h, devoluções 30d Capacidades: Recomendar, responder, tracking Escala se: Cliente irritado, >5 msgs

4. Análise CVs (RH)

System: És recrutador sénior 10 anos PT. Analisa CV para vaga: {job} Avalia: Experiência(30%), Skills(30%), Formação(15%) Output: {scores, decisao:shortlist|review|reject}

Melhores Práticas

1. Seja Específico

❌ "Escreve sobre produto"
✅ "Escreve 150 palavras, tom profissional, 3 benefícios"

2. Use Exemplos

2-3 exemplos valem mais que 100 palavras de instruções

3. Estruture o Prompt

Secções claras: ROLE→CONTEXT→TASK→EXAMPLES→CONSTRAINTS

4. Defina Constraints

O que NÃO fazer é tão importante quanto o que fazer

5. Peça Formato Estruturado

JSON para automação, sempre

6. Itere e Teste

V1→V2→V3. Primeira versão nunca é perfeita

7. Use Chain of Thought

Para tarefas complexas, peça raciocínio passo-a-passo

8. Versione

Mantenha histórico, permite rollback

Erros Comuns

  • ❌ Prompts vagos → Output genérico
  • ❌ Excesso informação → IA perde-se
  • ❌ Não testar edge cases → Falha em produção
  • ❌ Ignorar rate limits → API bloqueia
  • ❌ Confiar 100% → Alucinações publicadas
  • ❌ Não iterar → Qualidade subótima
  • ❌ Instruções contraditórias → Output imprevisível
  • ❌ Esquecer contexto cultural → Tom inadequado