Todo grande prompt compartilha elementos estruturais comuns. Entender esses componentes permite que você construa prompts sistematicamente em vez de por tentativa e erro.

<Callout type="tip" title="Os Blocos de Construção">
Pense nesses componentes como peças de LEGO. Você não precisa de todos eles para cada prompt, mas saber o que está disponível ajuda você a construir exatamente o que precisa.
</Callout>

## Os Componentes Principais

Um prompt eficaz tipicamente inclui alguns ou todos esses elementos:

<PromptBreakdown parts={[
  { label: "Papel", text: "Você é um engenheiro de software sênior" },
  { label: "Contexto", text: "trabalhando em uma aplicação React." },
  { label: "Tarefa", text: "Revise este código para bugs" },
  { label: "Restrições", text: "e foque apenas em problemas de segurança." },
  { label: "Formato", text: "Retorne descobertas como lista numerada." },
  { label: "Exemplo", text: "Tipo: 1. Risco de SQL injection na linha 42" }
]} />

Vamos examinar cada componente em detalhe.

## 1. Papel / Persona

Definir um papel foca as respostas do modelo através da lente de uma expertise ou perspectiva específica.

<Compare 
  before={{ label: "Sem Papel", content: "Explique computação quântica." }}
  after={{ label: "Com Papel", content: "Você é um professor de física especializado em tornar tópicos complexos acessíveis para iniciantes. Explique computação quântica." }}
/>

O papel prepara o modelo para:
- Usar vocabulário apropriado
- Aplicar expertise relevante
- Manter uma perspectiva consistente
- Considerar o público apropriadamente

### Padrões de Papel Eficazes

```
"Você é um [profissão] com [X anos] de experiência em [especialidade]"
"Atue como um [papel] que é [característica]"
"Você é um especialista em [área] ajudando um [tipo de público]"
```

## 2. Contexto / Background

Contexto fornece a informação que o modelo precisa para entender sua situação. Lembre-se: o modelo não sabe nada sobre você, seu projeto ou seus objetivos a menos que você conte.

<Compare 
  before={{ label: "Contexto Fraco", content: "Corrija esse bug no meu código." }}
  after={{ label: "Contexto Forte", content: "Estou construindo uma API REST em Node.js usando Express.js. A API lida com autenticação de usuário com tokens JWT. Quando um usuário tenta acessar uma rota protegida, recebe erro 403 mesmo com um token válido. Aqui está o código relevante: [código]" }}
/>

### O Que Incluir no Contexto

- **Detalhes do projeto** — Stack tecnológico, arquitetura, restrições
- **Estado atual** — O que você tentou, o que está funcionando, o que não está
- **Objetivos** — O que você está tentando alcançar no final
- **Restrições** — Limites de tempo, requisitos técnicos, guias de estilo

## 3. Tarefa / Instrução

A tarefa é o coração do seu prompt—o que você quer que o modelo faça. Seja específico e não ambíguo.

### O Espectro de Especificidade

<SpecificitySpectrum levels={[
  { level: "Vago", text: "Me ajude com essa redação" },
  { level: "Melhor", text: "Edite essa redação" },
  { level: "Bom", text: "Edite essa redação para gramática e clareza" },
  { level: "Melhor", text: "Edite essa redação para gramática e clareza, mantendo o tom original mas reduzindo palavras desnecessárias em 20%" }
]} />

### Verbos de Ação Que Funcionam Bem

<div className="my-4 grid gap-2">
  <div className="flex gap-2 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-32">Criação</span>
    <span className="text-muted-foreground">Escreva, Crie, Gere, Componha, Projete</span>
  </div>
  <div className="flex gap-2 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-32">Análise</span>
    <span className="text-muted-foreground">Analise, Avalie, Compare, Examine, Revise</span>
  </div>
  <div className="flex gap-2 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-32">Transformação</span>
    <span className="text-muted-foreground">Converta, Traduza, Reformate, Resuma, Expanda</span>
  </div>
  <div className="flex gap-2 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-32">Explicação</span>
    <span className="text-muted-foreground">Explique, Descreva, Esclareça, Defina, Ilustre</span>
  </div>
  <div className="flex gap-2 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-32">Resolução de problemas</span>
    <span className="text-muted-foreground">Resolva, Debug, Corrija, Otimize, Melhore</span>
  </div>
</div>

## 4. Restrições / Regras

Restrições delimitam a saída do modelo. Elas previnem problemas comuns e garantem relevância.

### Tipos de Restrições

**Restrições de tamanho:**
```
"Mantenha sua resposta abaixo de 200 palavras"
"Forneça exatamente 5 sugestões"
"Escreva 3-4 parágrafos"
```

**Restrições de conteúdo:**
```
"Não inclua exemplos de código"
"Foque apenas nos aspectos técnicos"
"Evite linguagem de marketing"
```

**Restrições de estilo:**
```
"Use um tom formal e acadêmico"
"Escreva como se falando com uma criança de 10 anos"
"Seja direto e evite linguagem evasiva"
```

**Restrições de escopo:**
```
"Considere apenas opções disponíveis em Python 3.10+"
"Limite sugestões a ferramentas gratuitas"
"Foque em soluções que não requerem dependências adicionais"
```

## 5. Formato de Saída

Especificar o formato de saída garante que você receba respostas em uma estrutura utilizável.

### Formatos Comuns

**Listas:**
```
"Retorne como lista com marcadores"
"Forneça uma lista numerada de passos"
```

**Dados estruturados:**
```
"Retorne como JSON com chaves: titulo, descricao, prioridade"
"Formate como tabela markdown com colunas: Recurso, Prós, Contras"
```

**Estruturas específicas:**
```
"Estruture sua resposta como:
 ## Resumo
 ## Pontos-Chave
 ## Recomendações"
```

### Exemplo de Saída JSON

```
Analise esta avaliação de cliente e retorne JSON:
{
  "sentimento": "positivo" | "negativo" | "neutro",
  "topicos": ["array de tópicos principais"],
  "previsao_nota": 1-5,
  "frases_chave": ["frases notáveis"]
}

Avaliação: "O produto chegou rápido e funciona muito bem, mas 
as instruções eram confusas."
```

## 6. Exemplos (Few-Shot Learning)

Exemplos são a forma mais poderosa de mostrar ao modelo exatamente o que você quer.

### Exemplo One-Shot

```
Converta essas frases para o passado.

Exemplo:
Entrada: "Ela caminha até a loja"
Saída: "Ela caminhou até a loja"

Agora converta:
Entrada: "Eles correm toda manhã"
```

### Exemplo Few-Shot

```
Classifique esses tickets de suporte por urgência.

Exemplos:
"Minha conta foi hackeada" → Crítico
"Como mudo minha senha?" → Baixo
"Pagamento falhou mas fui cobrado" → Alto

Classifique: "O app trava quando abro configurações"
```

## Juntando Tudo

Aqui está um prompt completo usando todos os componentes:

<TryIt 
  title="Exemplo de Prompt Completo"
  description="Este prompt demonstra todos os seis componentes trabalhando juntos. Experimente para ver como prompts estruturados produzem resultados profissionais."
  prompt={`# Papel
Você é um redator técnico sênior com 10 anos de experiência criando documentação para desenvolvedores.

# Contexto
Estou documentando uma API REST para um serviço de processamento de pagamentos. O público são desenvolvedores integrando nossa API em suas aplicações. Eles têm conhecimento intermediário de programação mas podem ser novos em conceitos de processamento de pagamentos.

# Tarefa
Escreva documentação para o seguinte endpoint de API que cria uma nova intenção de pagamento.

# Restrições
- Use linguagem clara e concisa
- Inclua cenários de erro comuns
- Não inclua detalhes de implementação do nosso backend
- Assuma que leitores entendem básico de HTTP e JSON

# Formato de Saída
Estruture a documentação como:
1. Visão Geral do Endpoint (2-3 frases)
2. Requisição (método, URL, headers, body com exemplo)
3. Resposta (exemplos de sucesso e erro)
4. Exemplo de Código (em JavaScript/Node.js)

# Detalhes do Endpoint
POST /v1/payments/intents
Body: { "amount": 1000, "currency": "brl", "description": "Pedido #1234" }`}
/>

## O Prompt Mínimo Eficaz

Nem todo prompt precisa de todos os componentes. Para tarefas simples, uma instrução clara pode ser suficiente:

```
Traduza "Hello, how are you?" para português.
```

Use componentes adicionais quando:
- A tarefa é complexa ou ambígua
- Você precisa de formatação específica
- Resultados não estão correspondendo às expectativas
- Consistência entre múltiplas consultas importa

## Padrões Comuns de Prompt

Esses frameworks dão a você uma checklist simples para seguir ao escrever prompts. Clique em cada passo para ver um exemplo.

<CRISPEFramework />

<RTFFramework />

## Resumo

Prompts eficazes são construídos, não descobertos. Ao entender e aplicar esses componentes estruturais, você pode:

- Obter melhores resultados na primeira tentativa
- Debugar prompts que não estão funcionando
- Criar templates de prompt reutilizáveis
- Comunicar suas intenções claramente

<Quiz 
  question="Qual componente tem o maior impacto na qualidade da resposta?"
  options={[
    "Sempre o papel/persona",
    "Sempre o formato de saída",
    "Depende da tarefa",
    "O tamanho do prompt"
  ]}
  correctIndex={2}
  explanation="Diferentes tarefas se beneficiam de diferentes componentes. Uma tradução simples precisa de estrutura mínima, enquanto uma análise complexa se beneficia de especificações detalhadas de papel, contexto e formato."
/>

<TryIt 
  prompt={`Você é um gerente de produto sênior com 10 anos de experiência em produtos SaaS.

Contexto: Estou construindo um app de gerenciamento de tarefas para equipes remotas. Somos uma startup pequena com recursos de engenharia limitados.

Tarefa: Sugira 3 funcionalidades que devemos priorizar para nosso MVP.

Restrições:
- Funcionalidades devem ser implementáveis por uma equipe de 2 desenvolvedores em 4 semanas
- Foque no que nos diferencia do Trello e Asana

Formato: Para cada funcionalidade, forneça:
1. Nome da funcionalidade
2. Descrição de uma frase
3. Por que importa para equipes remotas`}
  description="Este prompt usa todos os seis componentes. Experimente e veja como a abordagem estruturada produz resultados focados e acionáveis."
/>

## Construa Seu Próprio Prompt

Agora é sua vez! Use este construtor interativo de prompts para construir seu próprio prompt usando os componentes que você aprendeu:

<PromptBuilder 
  title="Construtor Interativo de Prompts"
  description="Preencha cada seção para construir um prompt completo e bem estruturado"
/>

<PromptChallenge
  title="Desafio do Capítulo: Construa um Prompt de Code Review"
  task="Escreva um prompt que peça a uma IA para revisar código em busca de vulnerabilidades de segurança. Seu prompt deve ser específico o suficiente para obter feedback acionável."
  criteria={[
    "Inclui um papel ou nível de expertise claro",
    "Especifica que tipo de code review (foco em segurança)",
    "Define o formato de saída esperado",
    "Define restrições ou escopo apropriados"
  ]}
  hints={[
    "Pense em qual expertise um revisor de código deve ter",
    "Seja específico sobre quais problemas de segurança procurar",
    "Considere pedir um formato de resposta estruturado"
  ]}
  exampleSolution={`Você é um engenheiro de segurança sênior com expertise em segurança de aplicações web e vulnerabilidades OWASP Top 10.

Tarefa: Revise o seguinte código em busca de vulnerabilidades de segurança.

Foque em:
- Riscos de SQL injection
- Vulnerabilidades XSS
- Problemas de autenticação/autorização
- Gaps de validação de entrada

Formato de saída:
Para cada problema encontrado:
1. Número(s) da linha
2. Tipo de vulnerabilidade
3. Nível de risco (Alto/Médio/Baixo)
4. Correção recomendada

[CÓDIGO PARA REVISAR]`}
  difficulty="intermediate"
/>

No próximo capítulo, exploraremos os princípios fundamentais que guiam as decisões de construção de prompts.
