Engenharia de prompt raramente é um processo de uma tentativa só. Os melhores prompts emergem através de iteração—testar, observar e refinar até alcançar os resultados desejados.

<Callout type="info" title="Primeiro Rascunho, Não Final">
Pense no seu primeiro prompt como um rascunho. Mesmo engenheiros de prompt experientes raramente acertam na primeira tentativa.
</Callout>

## O Ciclo de Iteração

Refinamento eficaz de prompt segue um ciclo previsível: escrever, testar, analisar e melhorar. Cada iteração te aproxima de um prompt que produz confiavelmente os resultados que você precisa.

<IterativeRefinementDemo />

## Padrões Comuns de Refinamento

A maioria das falhas de prompt cai em um punhado de categorias. Aprender a reconhecer esses padrões permite diagnosticar e corrigir problemas rapidamente sem começar do zero.

### Problema: Saída Muito Longa

Um dos problemas mais comuns. Sem restrições explícitas, modelos tendem a ser minuciosos em vez de concisos.

<DiffView 
  before="Explique como funciona a fotossíntese."
  after={`Explique como funciona a fotossíntese em 3-4 frases adequadas para uma criança de 10 anos.`}
  beforeLabel="Original"
  afterLabel="Refinado"
/>

### Problema: Saída Muito Vaga

Prompts vagos produzem saídas vagas. O modelo não consegue ler sua mente sobre o que "melhor" significa ou quais aspectos mais importam para você.

<DiffView 
  before="Me dê dicas para apresentações melhores."
  after={`Me dê 5 dicas específicas e acionáveis para melhorar apresentações técnicas para stakeholders não-técnicos. Para cada dica, inclua um exemplo concreto.`}
  beforeLabel="Original"
  afterLabel="Refinado"
/>

### Problema: Tom Errado

Tom é subjetivo e varia por contexto. O que soa "profissional" para o modelo pode não corresponder à voz da sua organização ou ao relacionamento com seu destinatário.

<DiffView 
  before="Escreva um email de desculpas por perder um prazo."
  after={`Escreva um email de desculpas profissional mas caloroso por perder um prazo de projeto. O tom deve ser responsável sem ser excessivamente apologético. Inclua um plano concreto para prevenir atrasos futuros.`}
  beforeLabel="Original"
  afterLabel="Refinado"
/>

### Problema: Faltando Informação Chave

Requisições abertas obtêm respostas abertas. Se você precisa de tipos específicos de feedback, deve pedir explicitamente.

<DiffView 
  before="Revise este código."
  after={`Revise este código Python para:
1. Bugs e erros lógicos
2. Problemas de performance
3. Vulnerabilidades de segurança
4. Estilo de código (PEP 8)

Para cada problema encontrado, explique o problema e sugira uma correção.

[código]`}
  beforeLabel="Original"
  afterLabel="Refinado"
/>

### Problema: Formato Inconsistente

Sem um template, o modelo vai estruturar cada resposta diferentemente, tornando comparação difícil e automação impossível.

<DiffView 
  before="Analise estes três produtos."
  after={`Analise estes três produtos usando este formato exato para cada:

## [Nome do Produto]
**Preço:** R$X
**Prós:** [lista com marcadores]
**Contras:** [lista com marcadores]
**Melhor Para:** [uma frase]
**Nota:** X/10

[produtos]`}
  beforeLabel="Original"
  afterLabel="Refinado"
/>

## Abordagem Sistemática de Refinamento

Mudanças aleatórias desperdiçam tempo. Uma abordagem sistemática ajuda a identificar problemas rapidamente e corrigi-los eficientemente.

### Passo 1: Diagnostique o Problema

Antes de mudar qualquer coisa, identifique o que está realmente errado. Use esta tabela diagnóstica para mapear sintomas a soluções:

<div className="my-4 grid gap-2">
  <div className="grid grid-cols-3 gap-2 p-3 bg-muted/50 rounded-lg text-sm">
    <span className="font-semibold">Sintoma</span>
    <span className="font-semibold">Causa Provável</span>
    <span className="font-semibold">Solução</span>
  </div>
  <div className="grid grid-cols-3 gap-2 p-3 bg-red-50 dark:bg-red-950/20 rounded-lg text-sm">
    <span>Muito longo</span>
    <span className="text-muted-foreground">Sem restrição de tamanho</span>
    <span className="text-green-600 dark:text-green-400">Adicionar limites de palavras/frases</span>
  </div>
  <div className="grid grid-cols-3 gap-2 p-3 bg-red-50 dark:bg-red-950/20 rounded-lg text-sm">
    <span>Muito curto</span>
    <span className="text-muted-foreground">Falta pedido de detalhe</span>
    <span className="text-green-600 dark:text-green-400">Pedir elaboração</span>
  </div>
  <div className="grid grid-cols-3 gap-2 p-3 bg-red-50 dark:bg-red-950/20 rounded-lg text-sm">
    <span>Fora do tópico</span>
    <span className="text-muted-foreground">Instruções vagas</span>
    <span className="text-green-600 dark:text-green-400">Ser mais específico</span>
  </div>
  <div className="grid grid-cols-3 gap-2 p-3 bg-red-50 dark:bg-red-950/20 rounded-lg text-sm">
    <span>Formato errado</span>
    <span className="text-muted-foreground">Formato não especificado</span>
    <span className="text-green-600 dark:text-green-400">Definir estrutura exata</span>
  </div>
  <div className="grid grid-cols-3 gap-2 p-3 bg-red-50 dark:bg-red-950/20 rounded-lg text-sm">
    <span>Tom errado</span>
    <span className="text-muted-foreground">Público não claro</span>
    <span className="text-green-600 dark:text-green-400">Especificar público/estilo</span>
  </div>
  <div className="grid grid-cols-3 gap-2 p-3 bg-red-50 dark:bg-red-950/20 rounded-lg text-sm">
    <span>Inconsistente</span>
    <span className="text-muted-foreground">Sem exemplos fornecidos</span>
    <span className="text-green-600 dark:text-green-400">Adicionar exemplos few-shot</span>
  </div>
</div>

### Passo 2: Faça Mudanças Direcionadas

Resista à vontade de reescrever tudo. Mudar múltiplas variáveis de uma vez torna impossível saber o que ajudou e o que prejudicou. Faça uma mudança, teste, depois prossiga:

```
Iteração 1: Adicionar restrição de tamanho
Iteração 2: Especificar formato
Iteração 3: Adicionar exemplo
Iteração 4: Refinar instruções de tom
```

### Passo 3: Documente O Que Funciona

Conhecimento de engenharia de prompt é facilmente perdido. Mantenha um log do que você tentou e por quê. Isso economiza tempo quando você revisitar o prompt depois ou enfrentar desafios similares:

```markdown
## Prompt: Resposta de Email ao Cliente

### Versão 1 (muito formal)
"Escreva uma resposta a esta reclamação de cliente."

### Versão 2 (melhor tom, ainda falta estrutura)
"Escreva uma resposta amigável mas profissional a esta reclamação. 
Mostre empatia primeiro."

### Versão 3 (final - bons resultados)
"Escreva uma resposta a esta reclamação de cliente. Estrutura:
1. Reconheça a frustração deles (1 frase)
2. Peça desculpas especificamente (1 frase)  
3. Explique a solução (2-3 frases)
4. Ofereça ajuda adicional (1 frase)

Tom: Amigável, profissional, empático mas não servil."
```

## Exemplo Real de Iteração

Vamos percorrer um ciclo completo de iteração para ver como cada refinamento constrói sobre o anterior. Note como cada versão aborda deficiências específicas da anterior.

### Tarefa: Gerar Nomes de Produto

<VersionDiff versions={[
  {
    label: "Versão 1",
    content: "Gere nomes para um novo app de produtividade.",
    note: "Muito genérico, sem contexto"
  },
  {
    label: "Versão 2",
    content: `Gere nomes para um novo app de produtividade. O app usa IA para agendar automaticamente suas tarefas baseado em níveis de energia e disponibilidade no calendário.`,
    note: "Contexto adicionado, ainda genérico"
  },
  {
    label: "Versão 3",
    content: `Gere 10 nomes únicos e memoráveis para um app de produtividade com estas características:
- Usa IA para agendar tarefas baseado em níveis de energia
- Público-alvo: profissionais ocupados de 25-40 anos
- Tom da marca: moderno, inteligente, levemente divertido
- Evitar: palavras genéricas como "pro", "smart", "AI", "task"

Para cada nome, explique por que funciona.`,
    note: "Restrições e raciocínio adicionados"
  },
  {
    label: "Versão 4 (final)",
    content: `Gere 10 nomes únicos e memoráveis para um app de produtividade.

Contexto:
- Usa IA para agendar tarefas baseado em níveis de energia
- Alvo: profissionais ocupados, 25-40
- Tom: moderno, inteligente, levemente divertido

Requisitos:
- 2-3 sílabas no máximo
- Fácil de soletrar e pronunciar
- Disponível como domínio .com (verifique se plausível)
- Evitar: palavras genéricas (pro, smart, AI, task, flow)

Formato:
Nome | Pronúncia | Por Que Funciona | Disponibilidade de Domínio`,
    note: "Formato estruturado, requisitos específicos"
  }
]} />

## Estratégias de Refinamento por Tipo de Tarefa

Diferentes tarefas falham de formas previsíveis. Conhecer os modos de falha comuns ajuda a diagnosticar e corrigir problemas mais rápido.

### Para Geração de Conteúdo

Geração de conteúdo frequentemente produz saída genérica, fora do alvo ou mal formatada. A correção geralmente envolve ser mais específico sobre restrições, fornecer exemplos concretos ou definir sua voz de marca explicitamente.

<InfoGrid items={[
  { icon: "target", title: "Muito Genérico", description: "Adicionar restrições e contexto específicos", example: "\"Escreva sobre cães\" → \"Escreva sobre golden retrievers para donos de primeira viagem, focando em treinamento e necessidades de exercício\"" },
  { icon: "scissors", title: "Muito Longo", description: "Definir limites de palavras/parágrafos", example: "Adicionar: \"Mantenha resposta abaixo de 150 palavras\" ou \"Máximo 3 parágrafos\"" },
  { icon: "palette", title: "Estilo Errado", description: "Fornecer exemplos de estilo", example: "\"Escreva no estilo deste exemplo: [cole texto de amostra]\"" },
  { icon: "megaphone", title: "Fora da Marca", description: "Incluir diretrizes de voz da marca", example: "\"Use tom amigável e casual. Evite jargão. Dirija-se ao leitor como 'você'.\"" }
]} />

### Para Geração de Código

Saída de código pode falhar tecnicamente (erros de sintaxe, recursos de linguagem errados) ou arquiteturalmente (padrões ruins, casos faltando). Problemas técnicos precisam de especificidades de versão/ambiente; problemas arquiteturais precisam de orientação de design.

<InfoGrid items={[
  { icon: "code", title: "Erros de Sintaxe", description: "Especificar versão da linguagem", example: "\"Use sintaxe Python 3.11+ com type hints\" ou \"JavaScript ES2022\"" },
  { icon: "git-branch", title: "Abordagem Errada", description: "Descrever padrões preferidos", example: "\"Use abordagem funcional, evite classes\" ou \"Siga padrão repository\"" },
  { icon: "shield", title: "Casos Limite Faltando", description: "Listar cenários para tratar", example: "\"Trate: entrada vazia, valores null, timeouts de rede, formatos inválidos\"" },
  { icon: "tag", title: "Nomenclatura Ruim", description: "Incluir convenções de nomenclatura", example: "\"Use camelCase para variáveis, PascalCase para classes, UPPER_SNAKE para constantes\"" }
]} />

### Para Análise

Tarefas de análise frequentemente produzem resultados superficiais ou não estruturados. Guie o modelo com frameworks específicos (SWOT, Cinco Forças de Porter), solicite múltiplos pontos de vista ou forneça um template para estrutura da saída.

<InfoGrid items={[
  { icon: "layers", title: "Muito Superficial", description: "Pedir frameworks específicos", example: "\"Analise usando framework SWOT\" ou \"Aplique Cinco Forças de Porter\"" },
  { icon: "scale", title: "Tendencioso", description: "Solicitar múltiplas perspectivas", example: "\"Apresente argumentos a favor e contra\" ou \"Inclua ponto de vista cético\"" },
  { icon: "database", title: "Dados Faltando", description: "Especificar o que analisar", example: "\"Foque em: tamanho do mercado, taxa de crescimento, players principais, barreiras de entrada\"" },
  { icon: "layout", title: "Não Estruturado", description: "Fornecer template de análise", example: "\"Formate como: Resumo → Descobertas Principais → Implicações → Recomendações\"" }
]} />

### Para Perguntas e Respostas

Perguntas e respostas podem ser muito breves ou muito prolixas, e podem carecer de indicadores de confiança ou fontes. Especifique o nível de detalhe que você precisa e se quer citações ou incerteza expressada.

<InfoGrid items={[
  { icon: "plus", title: "Muito Curto", description: "Pedir elaboração", example: "\"Explique em detalhe com exemplos\" ou \"Elabore cada ponto\"" },
  { icon: "minus", title: "Muito Longo", description: "Solicitar resposta concisa", example: "\"Responda em 2-3 frases\" ou \"Me dê o resumo\"" },
  { icon: "help-circle", title: "Incerto", description: "Pedir nível de confiança", example: "\"Avalie sua confiança de 1-10\" ou \"Note quaisquer suposições feitas\"" },
  { icon: "link", title: "Sem Fontes", description: "Solicitar citações", example: "\"Cite fontes para afirmações\" ou \"Inclua referências quando possível\"" }
]} />

## A Técnica do Loop de Feedback

Aqui está uma meta-técnica: use o próprio modelo para ajudar a melhorar seus prompts. Compartilhe o que você tentou, o que obteve e o que queria. O modelo frequentemente pode sugerir melhorias que você não tinha considerado.

```
Eu usei este prompt:
"[seu prompt]"

E obtive esta saída:
"[saída do modelo]"

Eu queria algo mais [descreva a lacuna]. Como devo modificar 
meu prompt para obter melhores resultados?
```

## Teste A/B de Prompts

Para prompts que serão usados repetidamente ou em escala, não escolha apenas o primeiro que funciona. Teste variações para encontrar a abordagem mais confiável e de maior qualidade.

```
Prompt A: "Resuma este artigo em 3 pontos."
Prompt B: "Extraia os 3 insights mais importantes deste artigo."
Prompt C: "Quais são as principais conclusões deste artigo? Liste 3."
```

Execute cada um múltiplas vezes, compare:
- Consistência da saída
- Qualidade da informação
- Relevância para suas necessidades

## Quando Parar de Iterar

Perfeição é inimiga do bom o suficiente. Saiba quando seu prompt está pronto para uso e quando você está apenas polindo para retornos decrescentes.

<div className="my-6 grid md:grid-cols-2 gap-4">
  <div className="border rounded-lg bg-green-50/50 dark:bg-green-950/20 border-green-200 dark:border-green-900">
    <p className="text-sm font-semibold text-green-700 dark:text-green-400 px-4 pt-3 flex items-center gap-2 m-0!"><IconCheck className="h-4 w-4" /> Pronto para Usar</p>
    <div className="text-sm p-4 pt-2 space-y-1">
      <p className="m-0!">Saída atende consistentemente os requisitos</p>
      <p className="m-0!">Casos limite são tratados apropriadamente</p>
      <p className="m-0!">Formato é confiável e parseável</p>
      <p className="m-0!">Melhorias adicionais mostram retornos decrescentes</p>
    </div>
  </div>
  <div className="border rounded-lg bg-red-50/50 dark:bg-red-950/20 border-red-200 dark:border-red-900">
    <p className="text-sm font-semibold text-red-700 dark:text-red-400 px-4 pt-3 flex items-center gap-2 m-0!"><IconX className="h-4 w-4" /> Continue Iterando</p>
    <div className="text-sm p-4 pt-2 space-y-1">
      <p className="m-0!">Saída é inconsistente entre execuções</p>
      <p className="m-0!">Casos limite causam falhas</p>
      <p className="m-0!">Requisitos críticos não são atendidos</p>
      <p className="m-0!">Você não testou variações suficientes</p>
    </div>
  </div>
</div>

## Controle de Versão para Prompts

Prompts são código. Para qualquer prompt usado em produção, trate com o mesmo rigor: controle de versão, changelogs e capacidade de reverter se algo quebrar.

<Callout type="tip" title="Versionamento Integrado">
prompts.chat inclui histórico de versão automático para seus prompts. Cada edição é salva, então você pode comparar versões e restaurar iterações anteriores com um clique.
</Callout>

Para prompts auto-gerenciados, use uma estrutura de pastas:

```
prompts/
├── resposta-cliente/
│   ├── v1.0.txt    # Versão inicial
│   ├── v1.1.txt    # Problema de tom corrigido
│   ├── v2.0.txt    # Reestruturação maior
│   └── current.txt # Symlink para versão ativa
└── changelog.md    # Documentar mudanças
```

## Resumo

<Callout type="tip" title="Principais Conclusões">
Comece simples, observe cuidadosamente, mude uma coisa por vez, documente o que funciona e saiba quando parar. Os melhores prompts não são escritos—são descobertos através de iteração sistemática.
</Callout>

<Quiz 
  question="Qual é a melhor abordagem ao refinar um prompt que está produzindo resultados errados?"
  options={[
    "Reescrever todo o prompt do zero",
    "Adicionar mais exemplos até funcionar",
    "Mudar uma coisa por vez e testar cada mudança",
    "Fazer o prompt o mais longo possível"
  ]}
  correctIndex={2}
  explanation="Mudar uma coisa por vez permite isolar o que funciona e o que não funciona. Se você muda múltiplas coisas de uma vez, não saberá qual mudança corrigiu o problema ou qual piorou."
/>

## Prática: Melhore Este Prompt

Tente melhorar este prompt fraco você mesmo. Edite-o, depois use IA para comparar sua versão com o original:

<BeforeAfterEditor
  title="Refine Este Prompt de Email"
  badPrompt="Escreva um email."
  idealPrompt={`Você é um redator de negócios profissional.

Tarefa: Escreva um email de follow-up para um cliente potencial após uma reunião de vendas.

Contexto:
- Reunião com Sarah Chen, VP de Marketing da TechCorp
- Discutimos nossa plataforma de analytics
- Ela expressou interesse nos recursos de relatórios
- Reunião foi ontem

Requisitos:
- Tom profissional mas caloroso
- Referencie pontos específicos da nossa reunião
- Inclua próximo passo claro (agendar demo)
- Mantenha abaixo de 150 palavras

Formato: Linha de assunto + corpo do email`}
  task="Transforme este prompt de email vago em algo que produzirá um resultado profissional e eficaz."
/>

No próximo capítulo, exploraremos prompting com JSON e YAML para aplicações de dados estruturados.
