✍️
Prompt engineering para Claude: técnicas que realmente funcionam
⏱ 14 min de leitura·+70 XP
Pré-requisitos (0/1)0%
- ⬜🔗 API da Anthropic: messages, streaming, vision, batch e cache(Claude & Anthropic na Prática)
Recomendamos completar os pré-requisitos antes de seguir, mas nada te impede de continuar.
Prompt engineering não é magia — é entender como o modelo foi treinado e escrever instruções que aproveitam esse treinamento. Claude tem características específicas que o diferenciam de outros modelos: responde melhor a XML tags para estrutura, prefill para forçar formato, chain-of-thought explícito para raciocínio complexo. As técnicas aqui têm base em como Claude funciona, não em superstição.
Chain-of-thought: peça o raciocínio antes da resposta
# Para tarefas que exigem raciocínio multi-etapa, peça que Claude pense antes de responder
# ❌ Sem CoT — Claude pula para a resposta e pode errar em raciocínio complexo
prompt = "Se a empresa tem 150 funcionários e 40% trabalham remotamente, e 30% dos remotos estão no exterior, quantos funcionários estão no escritório?"
# ✅ Com CoT — Claude deve mostrar o raciocínio
prompt_cot = """
Resolva o problema passo a passo, mostrando cada cálculo antes de dar a resposta final.
Problema: Se a empresa tem 150 funcionários e 40% trabalham remotamente,
e 30% dos remotos estão no exterior, quantos funcionários estão no escritório?
Mostre o raciocínio em <pensamento> tags antes da resposta final.
"""
# Claude tipicamente responde:
# <pensamento>
# Total: 150 funcionários
# Remotos: 150 × 0.40 = 60 funcionários remotos
# Remotos no exterior: 60 × 0.30 = 18
# Remotos no país: 60 - 18 = 42
# No escritório: 150 - 60 = 90 funcionários
# </pensamento>
# Resposta: 90 funcionários estão no escritório.
# Para problemas de código:
prompt_debug = """
<codigo>
def calcular_media(numeros):
return sum(numeros) / len(numeros)
</codigo>
Antes de sugerir correção, analise em <analise>:
1. O que o código faz corretamente
2. Quais casos de borda podem falhar
3. Qual o erro mais provável que o usuário está vendo
Depois da análise, sugira a correção com explicação.
"""
# CoT é especialmente útil para:
# - Problemas matemáticos ou lógicos multi-etapa
# - Análise de código (entender antes de corrigir)
# - Decisões com múltiplos critérios (comparar opções)
# - Debugging (hipóteses antes da solução)Prefill: forçar formato de saída de forma confiável
# Prefill: iniciar a resposta do assistente para forçar um formato
import anthropic
client = anthropic.Anthropic()
# Caso 1: Forçar JSON puro sem markdown
response = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=1024,
messages=[
{
"role": "user",
"content": "Extraia nome, email e cargo do seguinte texto: 'Maria Silva, maria@empresa.com, Engenheira Sênior'"
},
{
"role": "assistant",
"content": "{" # ← prefill: Claude continua a partir daqui
}
]
)
# Resposta será o JSON completo, sem "Aqui está o JSON:" antes
import json
dados = json.loads("{" + response.content[0].text) # reconstituir o JSON
# Caso 2: Forçar bloco de código
response = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=2048,
messages=[
{"role": "user", "content": "Escreva uma função Python para calcular fibonacci"},
{"role": "assistant", "content": "```python
"} # ← prefill com abertura do bloco
]
)
# Resposta começa direto no código, sem explicação antes
# Caso 3: Forçar resposta no idioma correto
# Para sistemas multilingues onde o idioma do system prompt pode vazar:
messages=[
{"role": "user", "content": pergunta_em_portugues},
{"role": "assistant", "content": "Em resposta à sua pergunta: "}
]
# Quando NÃO usar prefill:
# - Quando você quer a explicação do Claude (prefill a remove)
# - Quando o formato pode variar legitimamente
# - Quando usa extended thinking (prefill interfere no raciocínio)Few-shot: exemplos ensinam melhor que instruções
# Few-shot: exemplos de input → output ensinam Claude o formato e comportamento esperados
# ❌ Instrução pura (ambígua para dados não-uniformes)
system = "Extraia a data de emails e retorne em formato ISO 8601"
# ✅ Few-shot com exemplos de variações reais
system = """
Extraia a data de emails e retorne SOMENTE a data em formato ISO 8601 (YYYY-MM-DD).
Se a data for ambígua ou ausente, retorne null.
Exemplos:
<exemplo>
<email>Reunião confirmada para 15/03/2026 às 14h</email>
<data>2026-03-15</data>
</exemplo>
<exemplo>
<email>Segue o relatório de ontem</email>
<data>null</data>
</exemplo>
<exemplo>
<email>Meeting scheduled for March 3rd</email>
<data>null</data>
</exemplo>
<exemplo>
<email>Prazo: segunda-feira, 6 de abril</email>
<data>2026-04-06</data>
</exemplo>
"""
# Os exemplos cobrem: formato BR (dd/mm/yyyy), data relativa ("ontem"),
# inglês (deve retornar null se não há contexto de ano), dia da semana.
# Claude generaliza a partir dos exemplos para casos não vistos.
# Regras para bons exemplos:
# 1. Use dados REAIS do seu domínio — exemplos fictícios simplificados não preparam para o real
# 2. Inclua edge cases que você sabe que existem no seus dados
# 3. 3-5 exemplos geralmente são suficientes; mais de 8 raramente ajuda
# 4. O último exemplo deve ser o mais próximo do caso mais comum
# 5. Exemplos ruins são piores que nenhum — calibre cuidadosamenteEvitar alucinações: técnicas que reduzem, não eliminam
| Técnica | O que faz | Quando usar |
|---|---|---|
| Grounding explícito | Forneça os fatos no prompt; peça para responder SÓ com base no que foi fornecido | Análise de documentos, Q&A sobre dados específicos |
| Admissão de incerteza | Instrua: "Se não souber com certeza, diga não sei" | Perguntas factuais, datas, números específicos |
| Chain-of-thought | Raciocínio explícito reduz "salto" para resposta incorreta | Problemas multi-etapa, análise complexa |
| Verificação cruzada | Peça que Claude verifique a própria resposta contra o documento fornecido | Extração de dados críticos, análise jurídica/médica |
| Temperatura baixa | temperature=0 para máxima consistência (API) | Tarefas de extração onde variação é ruim |
# Grounding: peça Claude para responder SOMENTE com base no contexto fornecido
system = """
Você responde perguntas sobre documentos fornecidos pelo usuário.
REGRAS ESTRITAS:
- Responda SOMENTE com informações presentes no documento fornecido
- Se a resposta não estiver no documento, diga: "Esta informação não está no documento fornecido"
- Não use conhecimento geral que não esteja no documento
- Cite a seção/parágrafo de onde veio a informação
"""
# Para perguntas factuais onde Claude pode alucinar detalhes:
prompt = """
<documento>
[conteúdo do documento]
</documento>
Pergunta: Qual foi o faturamento da empresa no Q3 2025?
Baseie sua resposta APENAS no documento acima. Se o número não estiver
explicitamente mencionado, responda: "O faturamento do Q3 2025 não é mencionado no documento."
"""
# Temperatura baixa para extração consistente:
response = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=512,
temperature=0, # 0 = mais determinístico, menos variação
messages=[...]
)
# Use temperature=0 para extração de dados, classificação, código
# Use temperature=0.5-1.0 para escrita criativa, brainstorming✅
Hierarquia de técnicas por impacto: (1) grounding com contexto explícito — maior impacto na precisão; (2) XML tags para estrutura — reduz ambiguidade significativamente; (3) prefill para formato — garante saída parseável; (4) few-shot para edge cases — essencial para dados não-uniformes; (5) chain-of-thought — para raciocínio complexo. Use essas técnicas de forma acumulativa para tarefas críticas.
💡
Próximo: Claude em produção — custo real, rate limits, estratégias de caching e como operar a API Anthropic com qualidade em sistemas reais.
🧩
Quiz rápido
3 perguntas · Acerte tudo e ganhe o badge 🎯 Gabarito
Continue lendo