

Técnicas avançadas de prompt engineering para Claude, GPT-4 e modelos open-source. Padrões, anti-padrões e benchmarks com dados reais de produção.
Prompt engineering é frequentemente subestimado como "só escrever texto". Na prática, é uma disciplina de engenharia com padrões, anti-padrões e métricas mensuráveis. Neste artigo, compartilho técnicas que uso em produção.
Um system prompt eficaz tem estrutura clara:
[IDENTIDADE] Quem é o modelo e qual seu papel
[CONTEXTO] Informações sobre o sistema e usuário
[CAPACIDADES] O que o modelo pode e não pode fazer
[FORMATO] Como estruturar as respostas
[EXEMPLOS] Few-shot examples quando necessário
[RESTRIÇÕES] Limites e comportamentos proibidos
[IDENTIDADE] Quem é o modelo e qual seu papel
[CONTEXTO] Informações sobre o sistema e usuário
[CAPACIDADES] O que o modelo pode e não pode fazer
[FORMATO] Como estruturar as respostas
[EXEMPLOS] Few-shot examples quando necessário
[RESTRIÇÕES] Limites e comportamentos proibidos
Você é Arquimedes, um professor de matemática especializado em ensino adaptativo para estudantes do ensino fundamental e médio.
IDENTIDADE:
- Nome: Arquimedes
- Especialidade: Matemática básica e intermediária
- Tom: Encorajador, paciente, entusiasmado com matemática
- Idioma: Sempre responda no idioma da pergunta do aluno
CAPACIDADES:
- Explicar conceitos matemáticos com exemplos do cotidiano
- Criar exercícios adaptados ao nível do aluno
- Identificar e corrigir erros de raciocínio com gentileza
- Usar analogias criativas para conceitos abstratos
FORMATO DE RESPOSTA:
- Respostas curtas para perguntas simples (2-3 parágrafos)
- Use LaTeX para fórmulas: $x^2 + y^2 = z^2$
- Sempre termine com uma pergunta de verificação ou exercício prático
- Nunca dê a resposta diretamente — guie o aluno ao raciocínio
RESTRIÇÕES:
- Não resolva exercícios de provas ou trabalhos escolares diretamente
- Não discuta tópicos fora de matemática
- Se o aluno demonstrar frustração, ofereça uma abordagem mais simples
Você é Arquimedes, um professor de matemática especializado em ensino adaptativo para estudantes do ensino fundamental e médio.
IDENTIDADE:
- Nome: Arquimedes
- Especialidade: Matemática básica e intermediária
- Tom: Encorajador, paciente, entusiasmado com matemática
- Idioma: Sempre responda no idioma da pergunta do aluno
CAPACIDADES:
- Explicar conceitos matemáticos com exemplos do cotidiano
- Criar exercícios adaptados ao nível do aluno
- Identificar e corrigir erros de raciocínio com gentileza
- Usar analogias criativas para conceitos abstratos
FORMATO DE RESPOSTA:
- Respostas curtas para perguntas simples (2-3 parágrafos)
- Use LaTeX para fórmulas: $x^2 + y^2 = z^2$
- Sempre termine com uma pergunta de verificação ou exercício prático
- Nunca dê a resposta diretamente — guie o aluno ao raciocínio
RESTRIÇÕES:
- Não resolva exercícios de provas ou trabalhos escolares diretamente
- Não discuta tópicos fora de matemática
- Se o aluno demonstrar frustração, ofereça uma abordagem mais simples
Para problemas que exigem raciocínio multi-step, CoT é essencial:
cot_prompt = """
Resolva o seguinte problema passo a passo.
Problema: {problem}
Instruções:
1. Primeiro, identifique o que está sendo pedido
2. Liste as informações fornecidas
3. Escolha a abordagem matemática adequada
4. Execute cada passo mostrando o raciocínio
5. Verifique a resposta
Mostre seu raciocínio completo antes de dar a resposta final.
"""
cot_prompt = """
Resolva o seguinte problema passo a passo.
Problema: {problem}
Instruções:
1. Primeiro, identifique o que está sendo pedido
2. Liste as informações fornecidas
3. Escolha a abordagem matemática adequada
4. Execute cada passo mostrando o raciocínio
5. Verifique a resposta
Mostre seu raciocínio completo antes de dar a resposta final.
"""
Few-shot examples melhoram consistência quando o formato de saída é crítico:
few_shot_examples = [
{
"input": "Qual é 15% de 200?",
"output": """
**Passo 1**: Converter porcentagem em decimal
15% = 15/100 = 0,15
**Passo 2**: Multiplicar pelo valor
0,15 × 200 = 30
**Resposta**: 15% de 200 é **30**.
*Quer tentar um exercício similar?*
"""
},
# Mais exemplos...
]
few_shot_examples = [
{
"input": "Qual é 15% de 200?",
"output": """
**Passo 1**: Converter porcentagem em decimal
15% = 15/100 = 0,15
**Passo 2**: Multiplicar pelo valor
0,15 × 200 = 30
**Resposta**: 15% de 200 é **30**.
*Quer tentar um exercício similar?*
"""
},
# Mais exemplos...
]
Claude responde especialmente bem a XML tags para estruturar a saída:
Analise o contrato abaixo e extraia as informações solicitadas.
<contrato>
{texto_do_contrato}
</contrato>
Retorne sua análise no formato:
<analise>
<partes>Lista das partes envolvidas</partes>
<vigencia>Período de vigência</vigencia>
<valor>Valor do contrato</valor>
<clausulas_criticas>Cláusulas que merecem atenção</clausulas_criticas>
</analise>
Analise o contrato abaixo e extraia as informações solicitadas.
<contrato>
{texto_do_contrato}
</contrato>
Retorne sua análise no formato:
<analise>
<partes>Lista das partes envolvidas</partes>
<vigencia>Período de vigência</vigencia>
<valor>Valor do contrato</valor>
<clausulas_criticas>Cláusulas que merecem atenção</clausulas_criticas>
</analise>
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Extraia entidades do texto: ..."}],
response_format={
"type": "json_schema",
"json_schema": {
"name": "entities",
"strict": True,
"schema": {
"type": "object",
"properties": {
"pessoas": {"type": "array", "items": {"type": "string"}},
"organizacoes": {"type": "array", "items": {"type": "string"}},
"datas": {"type": "array", "items": {"type": "string"}},
},
"required": ["pessoas", "organizacoes", "datas"],
"additionalProperties": False,
}
}
}
)
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Extraia entidades do texto: ..."}],
response_format={
"type": "json_schema",
"json_schema": {
"name": "entities",
"strict": True,
"schema": {
"type": "object",
"properties": {
"pessoas": {"type": "array", "items": {"type": "string"}},
"organizacoes": {"type": "array", "items": {"type": "string"}},
"datas": {"type": "array", "items": {"type": "string"}},
},
"required": ["pessoas", "organizacoes", "datas"],
"additionalProperties": False,
}
}
}
)
Após testar centenas de variações de prompts em produção, aqui estão meus dados:
| Técnica | Melhoria na Precisão | Custo Adicional |
|---|---|---|
| Chain-of-Thought | +23% | +40% tokens |
| Few-shot (3 exemplos) | +18% | +30% tokens |
| XML tags (Claude) | +15% | Neutro |
| Role prompting | +12% | Neutro |
| Instrução negativa | +8% | Neutro |
1. Prompts muito longos sem estrutura: mais de 2000 tokens sem hierarquia clara degrada a atenção do modelo.
2. Instruções contraditórias: "seja conciso" e "explique em detalhes" no mesmo prompt criam outputs inconsistentes.
3. Não versionar prompts: trate prompts como código. Use git, teste antes de deployar, monitore métricas.
4. Ignorar o contexto do modelo: Claude e GPT-4 têm personalidades diferentes. O que funciona em um pode não funcionar no outro.
Prompt engineering é engenharia. Meça, itere, versione e monitore. A diferença entre um prompt mediano e um excelente pode ser de 20-30% na qualidade das respostas — o que em produção se traduz diretamente em satisfação do usuário.
Moises Costa é AI Engineer e especialista em LLM applications. Conecte-se no LinkedIn.