Otimize prompts com chain-of-thought na prática

O que é chain-of-thought e por que usar

Chain-of-thought (CoT) é uma técnica de engenharia de prompts que instrui o modelo de linguagem a explicitar seu raciocínio passo a passo antes de fornecer a resposta final. Em vez de pedir diretamente “Classifique este email”, você pede “Analise este email, liste os critérios de classificação, avalie cada um e então classifique”. Essa abordagem reduz erros de lógica em tarefas complexas em até 30-40% em benchmarks como GSM8K e StrategyQA, segundo estudos da Google Research.

Na prática, o CoT funciona porque modelos de linguagem são treinados para prever a próxima palavra, não para “pensar”. Ao forçar a geração de uma cadeia de raciocínio, você dá ao modelo um espaço de trabalho temporário onde ele pode organizar informações, testar hipóteses e corrigir erros antes de responder. Isso é particularmente útil em automações com n8n, onde um erro de classificação ou extração pode desencadear ações incorretas em cascata.

Para quem usa n8n em fluxos de produtividade, o CoT não é apenas uma “técnica avançada” — é uma camada de segurança. Quando você conecta um LLM a um workflow que envia emails, atualiza planilhas ou chama APIs externas, cada decisão do modelo tem consequências reais. O CoT transforma o prompt de uma “caixa preta” em um processo auditável, onde você pode inspecionar o raciocínio intermediário e ajustar o fluxo com precisão cirúrgica.

Pré-requisitos

Para implementar chain-of-thought em seus fluxos, você precisará de:

  • Conta no n8n (self-hosted ou cloud) com acesso a nós de IA — versão 1.0 ou superior recomendada
  • Credenciais de um provedor LLM: OpenAI, Anthropic Claude, Google Gemini ou qualquer modelo compatível via API
  • Conhecimento básico de JSON para estruturar prompts e interpretar respostas
  • Familiaridade com Webhooks e HTTP Request no n8n (para testes e integrações)
  • Dados de exemplo: emails, textos, ou qualquer conteúdo que você queira processar — o CoT funciona melhor com dados estruturados ou semi-estruturados
  • Paciência para iterar: o primeiro prompt raramente é o ideal. Planeje 2-3 ciclos de ajuste

Exemplo Prático: Classificação inteligente de emails de suporte

Cenário: Imagine que você gerencia um e-commerce e recebe 50-100 emails de suporte por dia. Cada email pode ser: dúvida sobre produto, problema de entrega, pedido de reembolso, elogio, spam ou urgência de atendimento. Hoje, você gasta 30-40 minutos por dia lendo e categorizando manualmente. Com n8n + CoT, você pode automatizar essa triagem em menos de 5 minutos.

O que será automatizado:

  • Captura de novos emails via IMAP ou Webhook
  • Envio do conteúdo para um LLM com prompt CoT estruturado
  • Classificação em categorias predefinidas com justificativa
  • Roteamento automático para diferentes pastas, tags ou notificações

Resultado esperado:

  • Precisão de classificação acima de 85% (vs. ~70% sem CoT)
  • Redução de 80% no tempo de triagem manual
  • Respostas mais rápidas para casos urgentes (prioridade automática)
  • Log completo do raciocínio do modelo para auditoria

Configuração Passo a Passo

Vamos construir o fluxo no n8n. Aqui está a arquitetura:

Detailed view of intertwined steel chains creating a rugged texture.
Webhook (recebe email) → HTTP Request (chama LLM) → IF (verifica categoria) → Set (formata resposta) → Respond to Webhook

Passo 1: Criar o Webhook de entrada

  1. No n8n, adicione um nó Webhook ao canvas
  2. Configure o método como POST
  3. Defina o caminho como /classify-email
  4. Ative a opção “Respond” para retornar dados ao chamador
  5. Copie a URL gerada — você usará para testar

Passo 2: Configurar o nó HTTP Request para o LLM

  1. Adicione um nó HTTP Request após o Webhook
  2. Método: POST
  3. URL: https://api.openai.com/v1/chat/completions (ou equivalente do seu provedor)
  4. Headers: Authorization: Bearer SUA_API_KEY e Content-Type: application/json
  5. No Body, use o seguinte JSON (substitua o campo content pelo prompt CoT):
{
  "model": "gpt-4o-mini",
  "temperature": 0.2,
  "messages": [
    {
      "role": "system",
      "content": "Você é um classificador de emails de suporte. Sempre mostre seu raciocínio passo a passo antes de dar a classificação final."
    },
    {
      "role": "user",
      "content": "Classifique o seguinte email em UMA das categorias: 'duvida_produto', 'problema_entrega', 'reembolso', 'elogio', 'spam', 'urgencia'. Siga este raciocínio:\n1. Identifique o assunto principal do email\n2. Liste palavras-chave que indicam a categoria\n3. Verifique se há tom de urgência (palavras como 'urgente', 'imediato', 'atrasado')\n4. Classifique com base na análise\n\nEmail:\n{{ $json.body }}"
    }
  ]
}

Nota importante: O campo {{ $json.body }} é uma expressão do n8n que injeta o conteúdo do email recebido. Se seu webhook recebe dados diferentes, ajuste essa referência.

Passo 3: Processar a resposta

  1. Adicione um nó Code após o HTTP Request
  2. No JavaScript, extraia o raciocínio e a classificação:
// Código do nó Code
const response = $input.first().json;
const content = response.choices[0].message.content;

// Extrair a última linha como classificação (assumindo formato consistente)
const lines = content.split('\n').filter(l => l.trim());
const lastLine = lines[lines.length - 1].trim();

// Extrair categoria entre aspas ou após "Classificação:"
let category = 'desconhecida';
if (lastLine.includes(':')) {
  category = lastLine.split(':')[1].trim().replace(/"/g, '');
} else if (lastLine.includes('"')) {
  category = lastLine.match(/"([^"]+)"/)[1];
}

return {
  category: category,
  reasoning: content,
  raw_response: content
};

Passo 4: Roteamento condicional

  1. Adicione um nó IF após o Code
  2. Condição 1: {{ $json.category === "urgencia" }} → rota para notificação via Slack/Telegram
  3. Condição 2: {{ $json.category === "spam" }} → rota para lixeira (ou simplesmente descartar)
  4. Condição 3: casos restantes → rota para planilha Google Sheets ou banco de dados

Passo 5: Formatar e responder

  1. Adicione um nó Set para estruturar a resposta final
  2. Defina campos: category, confidence (se aplicável), reasoning
  3. Conecte ao nó Respond to Webhook para retornar o JSON ao chamador

Teste: Envie um POST para a URL do webhook com um email de exemplo:

curl -X POST https://seu-n8n.com/webhook/classify-email \
  -H "Content-Type: application/json" \
  -d '{"body": "Olá, meu pedido #1234 está atrasado há 5 dias. Preciso de uma solução URGENTE, estou muito insatisfeito!"}'

Resposta esperada:

{
  "category": "urgencia",
  "reasoning": "1. Assunto principal: atraso na entrega\n2. Palavras-chave: 'atrasado', 'URGENTE', 'insatisfeito'\n3. Tom de urgência: presente ('URGENTE', 'há 5 dias')\n4. Classificação: urgencia",
  "raw_response": "1. Assunto principal: atraso na entrega\n2. Palavras-chave: 'atrasado', 'URGENTE', 'insatisfeito'\n3. Tom de urgência: presente ('URGENTE', 'há 5 dias')\n4. Classificação: \"urgencia\""
}

Dicas e Variações

1. Use few-shot exemplos no prompt: Em vez de apenas instruções, inclua 2-3 exemplos completos de emails com suas classificações. Isso melhora a precisão em 10-15% em tarefas de classificação.

2. Controle a temperatura: Para tarefas de classificação, use temperature: 0.1-0.3. Temperaturas altas (0.7+) geram respostas mais criativas, mas menos consistentes. Para extração de dados, use 0.

A collection of wooden letter tiles forming words on a rustic wooden surface. Ideal for word game concepts.

3. Estruture o output como JSON: Peça explicitamente para o modelo retornar JSON válido:

{
  "category": "string",
  "confidence": "number",
  "reasoning": "string"
}

Isso facilita o parsing no n8n e elimina a necessidade de expressões regulares frágeis.

4. Adicione um passo de “auto-correção”: Após a primeira classificação, envie de volta ao modelo: “Verifique se a categoria ‘X’ está correta. Se não, justifique e corrija.” Isso reduz erros residuais em 5-8%.

5. Cache de respostas para emails similares: Use um nó de memória (como Redis) para armazenar hashes de emails já classificados. Emails repetidos (como spam recorrente) são resolvidos instantaneamente, economizando tokens.

Erros Comuns e Como Evitá-los

Erro 1: Prompt muito vago
“Classifique este email” sem estrutura de raciocínio leva a respostas inconsistentes.
Solução: Sempre forneça etapas numeradas e critérios explícitos, como no exemplo acima.

Erro 2: Ignorar o contexto do sistema
O campo system do prompt é onde você define o papel do modelo. Negligenciá-lo faz o modelo assumir comportamentos padrão.
Solução: Use o system prompt para definir regras de formato, tom e restrições.

Erro 3: Não testar com dados reais
Prompts que funcionam com exemplos sintéticos falham com emails reais, que têm gírias, erros de digitação e contexto incompleto.
Solução: Crie um conjunto de teste com 10-20 emails reais e meça a precisão antes de colocar em produção.

Erro 4: Tratar a resposta como verdade absoluta
O modelo pode cometer erros, especialmente com sarcasmo ou ambiguidade.
Solução: Implemente um fallback: se a confiança for baixa (peça ao modelo para retornar um score de 0-1), encaminhe para revisão humana.

Erro 5: Esquecer de limitar o tamanho do raciocínio
Emails longos podem gerar raciocínios extensos que consomem tokens desnecessariamente.
Solução: Adicione no prompt: “Limite seu raciocínio a 3-4 frases curtas.” Isso reduz custos em até 40% sem perda significativa de precisão.

Próximos Passos

Agora que você tem um fluxo funcional de classificação com CoT, aqui estão os próximos passos concretos:

  1. Implemente o fluxo hoje mesmo: Crie o webhook, configure o prompt e teste com 5 emails reais. Compare a precisão com sua classificação manual.
  2. Expanda para extração de dados: Modifique o prompt para extrair informações estruturadas (número do pedido, nome do cliente, data) além da classificação. Use o mesmo padrão de raciocínio passo a passo.
  3. Integre com ações automáticas: Conecte o fluxo ao seu sistema de tickets (Zendesk, Freshdesk) ou planilha para criar registros automaticamente.
  4. Monitore e itere: Configure logs no n8n para registrar todas as classificações e revisões. Após 100 emails, analise os erros e ajuste o prompt.
  5. Compartilhe o template: Exporte seu fluxo como JSON e compartilhe com sua equipe — o n8n permite importar fluxos completos em segundos.

O chain-of-thought não é uma técnica exótica — é uma prática essencial para qualquer automação com LLMs que exija confiabilidade. Comece pequeno, meça os resultados e refine. Em uma semana, você terá um sistema de triagem que economiza horas de trabalho e reduz erros humanos.

Gostou do conteúdo? Inscreva-se para receber as novidades:

CATEGORIES:

rotinas

Tags:

Comments are closed