intermediate45 minLição 3 de 5

Técnicas Avançadas de Prompt

Domine Chain-of-Thought, Few-Shot, Saídas Estruturadas, Self-Consistency e Tree-of-Thoughts.

Técnicas Avançadas de Prompt

Por que Técnicas Avançadas?

Prompting básico funciona para tarefas simples, mas raciocínio complexo, saídas estruturadas e problemas especializados exigem abordagens mais sofisticadas. Cada técnica nesta lição aborda uma limitação específica do prompting básico — desde melhorar o raciocínio passo a passo até permitir exploração multi-caminho.

Quando o Prompting Básico é Insuficiente

LimitaçãoTentativa BásicaTécnica Avançada
Problemas de matemática/lógica multi-passoModelo adivinha resposta finalChain-of-Thought: raciocínio passo a passo
Formatos de saída desconhecidosModelo inventa formato erradoFew-Shot: exemplos guiam o modelo
Necessidade de saída legível por máquinaRespostas de texto inconsistentesSaídas Estruturadas: modo JSON
Resposta única pode estar erradaSem forma de verificar correçãoSelf-Consistency: votação majoritária
Exploração/planejamento complexoModelo segue um caminhoTree-of-Thoughts: múltiplos ramos

Chain-of-Thought (CoT) Prompting

Chain-of-Thought prompting encoraja o modelo a dividir problemas em passos intermediários de raciocínio. Em vez de pular diretamente para uma resposta, o modelo "mostra seu trabalho," o que tanto melhora a precisão quanto torna erros mais fáceis de depurar.

Fluxo de Raciocínio CoT

100%

Sequência Completa de Raciocínio CoT

100%

Exemplo CoT

P: Uma loja tem 15 maçãs. Elas vendem 4, depois recebem uma entrega que dobra a quantidade atual de maçãs. Quantas maçãs elas têm agora? Vamos pensar passo a passo: 1. Comece com 15 maçãs 2. Depois de vender 4: 15 - 4 = 11 maçãs 3. Entrega dobra a quantidade atual: 11 * 2 = 22 maçãs Resposta: 22
ℹ️Note

Simplesmente adicionar "Vamos pensar passo a passo" ao seu prompt pode melhorar significativamente o desempenho de raciocínio em problemas de matemática e lógica.

⚠️Warning

Custos de token do CoT: Chain-of-Thought pode aumentar os tokens de saída em 3-10x porque o modelo gera passos intermediários de raciocínio antes da resposta final. Para aplicações sensíveis a custo, considere usar prompts mais curtos como "Explique brevemente" ou limitar max_tokens. Para um sistema de produção processando milhões de requisições, este multiplicador de tokens afeta diretamente seus custos.

CoT em Código

python
from openai import OpenAI client = OpenAI() # Sem CoT response_direct = client.chat.completions.create( model="gpt-4", messages=[ {"role": "user", "content": "Se uma camisa custa R$40 e está com 25% de desconto, mais 8% de imposto, qual é o preço final?"} ], temperature=0.0 ) print("Direto:", response_direct.choices[0].message.content) # Com CoT response_cot = client.chat.completions.create( model="gpt-4", messages=[ {"role": "user", "content": """Se uma camisa custa R$40 e está com 25% de desconto, mais 8% de imposto, qual é o preço final? Vamos pensar passo a passo:"""} ], temperature=0.0 ) print("\nCoT:", response_cot.choices[0].message.content)

Variantes de CoT

VarianteDescriçãoMelhor Para
Zero-shot CoTApenas adicione "Vamos pensar passo a passo"Melhoria rápida de raciocínio
Few-shot CoTForneça cadeias de raciocínio de exemploFormato consistente, problemas mais difíceis
CoT EstruturadoExija passos numerados ou formato de marcadoresDepuração, trilhas de auditoria
CoT Multi-promptPeça raciocínio, depois resposta em chamadas separadasProblemas complexos que precisam verificação

Few-Shot e Multi-Shot Prompting

Few-shot prompting fornece exemplos no prompt para guiar o comportamento do modelo.

TécnicaExemplos FornecidosMelhor Para
Zero-Shot0 exemplosTarefas simples, padrões comuns
Few-Shot1-5 exemplosFormatos específicos, tarefas novas
Multi-Shot5+ exemplosPadrões complexos, alternativa a fine-tuning

Exemplo Few-Shot: Análise de Sentimento

Classifique o sentimento como POSITIVO, NEGATIVO ou NEUTRO. Exemplo 1: Avaliação: "Este filme foi incrível, melhor que vi o ano todo!" Sentimento: POSITIVO Exemplo 2: Avaliação: "Serviço terrível, nunca mais volto." Sentimento: NEGATIVO Exemplo 3: Avaliação: "O restaurante fica na rua 5." Sentimento: NEUTRO Agora classifique: Avaliação: "Produto funciona como descrito, nada excepcional." Sentimento:
💡Tip

Escolhendo os exemplos certos: Selecione exemplos que cubram a gama de entradas esperadas. Inclua casos de borda e exemplos ambíguos. Exemplos mal escolhidos (ex: todos sentimento positivo quando o conjunto de teste tem sentimento misto) enviesam o modelo. Além disso, a ordem importa — modelos tendem a ser mais influenciados pelo último exemplo (viés de recência).

Few-Shot em Código

python
from openai import OpenAI client = OpenAI() # Exemplos few-shot exemplos = [ {"avaliacao": "Este filme foi incrível, melhor que vi o ano todo!", "sentimento": "POSITIVO"}, {"avaliacao": "Serviço terrível, nunca mais volto.", "sentimento": "NEGATIVO"}, {"avaliacao": "O restaurante fica na rua 5.", "sentimento": "NEUTRO"}, ] def few_shot_classificar(texto_avaliacao: str, exemplos: list[dict]) -> str: prompt = "Classifique o sentimento como POSITIVO, NEGATIVO ou NEUTRO.\n\n" for i, ex in enumerate(exemplos, 1): prompt += f"Exemplo {i}:\nAvaliação: \"{ex['avaliacao']}\"\nSentimento: {ex['sentimento']}\n\n" prompt += f"Agora classifique:\nAvaliação: \"{texto_avaliacao}\"\nSentimento:" response = client.chat.completions.create( model="gpt-4", messages=[{"role": "user", "content": prompt}], temperature=0.0 ) return response.choices[0].message.content.strip() teste = "Produto funciona como descrito, nada excepcional." print(few_shot_classificar(teste, exemplos))

Saídas Estruturadas (Modo JSON)

Muitos LLMs suportam formatos de saída estruturados, críticos para integração programática.

python
from openai import OpenAI import json client = OpenAI() response = client.chat.completions.create( model="gpt-4-turbo-preview", messages=[ {"role": "system", "content": "Extraia dados do cliente e retorne como JSON."}, {"role": "user", "content": """ Extraia informações deste email: "Olá, sou João Silva da Acme Corp. Meu telefone é 555-0123. Gostaria de pedir 10 unidades do plano PRO a R$99/mês." """} ], response_format={"type": "json_object"} # Modo JSON ativado ) # Parse da saída estruturada result = json.loads(response.choices[0].message.content) print(json.dumps(result, indent=2, ensure_ascii=False))

Saída Esperada:

json
{ "cliente": { "nome": "João Silva", "empresa": "Acme Corp", "telefone": "555-0123" }, "pedido": { "produto": "plano PRO", "quantidade": 10, "preco": 99, "ciclo_faturamento": "mensal" } }
💡Tip

Validação de modo JSON: Sempre valide saídas JSON antes de usá-las em produção. Use json.loads() com try/except para capturar JSON malformado. Considere usar modelos Pydantic para validação de esquema em aplicações Python.

Validação de Esquema JSON

python
import json from typing import Optional from pydantic import BaseModel, Field, ValidationError class Cliente(BaseModel): nome: str empresa: str telefone: Optional[str] = None class Pedido(BaseModel): produto: str quantidade: int = Field(gt=0) preco: float = Field(gt=0) ciclo_faturamento: str class ResultadoExtracao(BaseModel): cliente: Cliente pedido: Pedido # Parse e valida a saída da API raw_json = '{"cliente": {"nome": "João Silva", "empresa": "Acme Corp"}, "pedido": {"produto": "plano PRO", "quantidade": 10, "preco": 99, "ciclo_faturamento": "mensal"}}' try: validated = ResultadoExtracao(**json.loads(raw_json)) print(f"Validado: {validated.model_dump_json(indent=2, ensure_ascii=False)}") except ValidationError as e: print(f"Falha na validação: {e}") # Anthropic Claude - saída estruturada via prompt de sistema import anthropic client = anthropic.Anthropic() response = client.messages.create( model="claude-3-opus-20240229", max_tokens=1000, system="Você extrai dados para JSON. Apenas produza JSON válido, sem outro texto.", messages=[ {"role": "user", "content": "Extraia: João, Acme Corp, 555-0123, 10 unidades plano PRO R$99/mês"} ] ) print(response.content[0].text)

Self-Consistency

Self-Consistency gera múltiplos caminhos de raciocínio e seleciona a resposta mais frequente. É como perguntar a três especialistas separadamente e tomar o voto da maioria — caminhos de raciocínio diversos reduzem a chance de qualquer erro único determinar a resposta final.

Gere 3 soluções diferentes para este problema, depois escolha a resposta mais comum: Problema: Um trem viaja a 60 km/h por 2 horas, depois 80 km/h por 1 hora. Qual é a velocidade média? Solução 1: - Distância 1: 60 * 2 = 120 km - Distância 2: 80 * 1 = 80 km - Total: 200 km em 3 horas - Média: 200/3 = 66.67 km/h Solução 2: - Fórmula da média = distância total / tempo total - Distância total = (60*2) + (80*1) = 200 - Tempo total = 3 - 200/3 = 66.67 km/h Solução 3: - Apenas média das velocidades: (60+80)/2 = 70 km/h Resposta mais comum: 66.67 km/h (aparece 2 vezes)

Self-Consistency em Código

python
from openai import OpenAI from collections import Counter client = OpenAI() def self_consistency(problema: str, n_caminhos: int = 3, temperature: float = 0.7) -> list[str]: """Gera n caminhos de raciocínio e retorna o mais frequente.""" respostas = [] for i in range(n_caminhos): response = client.chat.completions.create( model="gpt-4", messages=[ {"role": "user", "content": f"{problema}\n\nVamos pensar passo a passo:"} ], temperature=temperature, ) respostas.append(response.choices[0].message.content) print(f"\nCaminho {i+1}:\n{respostas[-1]}") return respostas problema = "Um trem viaja a 60 km/h por 2 horas, depois 80 km/h por 1 hora. Qual é a velocidade média?" resultados = self_consistency(problema, n_caminhos=3)

Tree-of-Thoughts (ToT)

Tree-of-Thoughts explora múltiplos caminhos de raciocínio simultaneamente, como uma árvore de decisão. Diferente do CoT que segue uma cadeia de raciocínio, ToT se ramifica, avalia cada ramo e continua caminhos promissores ou poda becos sem saída.

100%

Fluxograma de Ramificação Tree-of-Thoughts

100%
⚠️Warning

Self-Consistency e Tree-of-Thoughts exigem múltiplas chamadas de API, aumentando significativamente custo e latência. Use apenas quando técnicas de chamada única não forem suficientes.

Template de Prompt ToT

Quero que você resolva este problema usando raciocínio Tree-of-Thoughts. Problema: {problema} Instruções: 1. Primeiro, gere {num_ramos} abordagens iniciais diferentes para este problema 2. Para cada abordagem, pense no primeiro passo 3. Avalie cada abordagem — qual parece mais promissora? 4. Para a abordagem mais promissora, continue desenvolvendo-a 5. Repita: explore, avalie, foque, até chegar a uma resposta Comece listando {num_ramos} maneiras diferentes de abordar este problema:

Comparação de Técnicas

TécnicaComplexidadeMelhor Caso de UsoGanho de DesempenhoCusto de Token
Chain-of-ThoughtBaixaMatemática, lógica, problemas multi-passos+20-50% no raciocínio2-5x aumento
Few-ShotBaixaClassificação, correspondência de formato+10-30% vs zero-shot1-2x (tokens exemplo)
Modo JSONBaixaIntegração API, dados estruturadosCrítico para confiabilidadeMínimo (instrução formato)
Self-ConsistencyMédiaVotação em múltiplas saídas+5-15% vs CoT único3-10x (múltiplas respostas)
Tree-of-ThoughtsAltaBusca/exploração complexa+25-60% em problemas difíceis5-20x (muitos ramos)

Quando Usar Cada Técnica

CenárioTécnica RecomendadaPorquê
Problema de matemáticaCoTPasso a passo simples funciona melhor
Classificar emails de clientesFew-ShotExemplos esclarecem categorias ambíguas
Extrair dados para banco de dadosModo JSONSaída legível por máquina necessária
Diagnóstico médico críticoSelf-Consistency + CoTSegurança exige votação majoritária
Estratégia de jogo/quebra-cabeça novoTree-of-ThoughtsNecessário explorar múltiplas abordagens
Resumir um documentoCoT (se complexo) ou Zero-ShotSimples geralmente é melhor
📌Important

Combinação de técnicas: Estas técnicas não são mutuamente exclusivas. Você pode combinar CoT com Few-Shot (fornecer cadeias de raciocínio de exemplo), usar Self-Consistency com Modo JSON, ou usar ToT com saídas estruturadas. Combinar técnicas pode compor benefícios — mas também compor custos de token.


Perguntas de Prática

Practice Question

Um analista de dados precisa que o LLM extraia informações de clientes de emails e as retorne em um formato legível por máquina para inserção em banco de dados. Qual técnica ele deve usar?

Practice Question

Adicionar a frase "Vamos pensar passo a passo" a um problema de matemática melhora a precisão ao incentivar o modelo a:

Practice Question

Uma tarefa de análise de sentimento requer que o modelo classifique avaliações como POSITIVO, NEGATIVO ou NEUTRO. O prompt inclui três exemplos rotulados antes de pedir ao modelo para classificar uma nova avaliação. Esta abordagem é conhecida como:

Practice Question

Uma equipe de pesquisa precisa resolver um quebra-cabeça lógico inédito que requer explorar diferentes abordagens de raciocínio simultaneamente, como uma árvore de decisão. Qual técnica eles devem usar?

Practice Question

Qual é o principal trade-off ao usar Self-Consistency ou Tree-of-Thoughts em comparação com técnicas mais simples?

Practice Question

Um desenvolvedor implementa um sistema onde o LLM primeiro gera uma cadeia de raciocínio, depois produz uma saída JSON. Que combinação de técnicas é esta?

Practice Question

Uma equipe executa CoT em uma tarefa de classificação simples e vê a precisão diminuir em comparação com zero-shot. Qual é a explicação mais provável?

Practice Question

Um sistema de produção processa 1M requisições/mês. Mudar de zero-shot para CoT aumenta tokens de saída de 50 para 200 por requisição. A $0.03/1K tokens, qual é o aumento de custo mensal?

Practice Question

Um desenvolvedor usa few-shot prompting com exemplos ordenados: NEGATIVO, POSITIVO, NEUTRO. O modelo classifica mal a maioria dos casos de teste como NEUTRO. Qual é a causa mais provável?

Practice Question

Um engenheiro de prompt valida uma saída JSON com Pydantic e captura um ValidationError. O que eles devem fazer a seguir?


Success

Principais Aprendizados:

  • Chain-of-Thought (CoT): "Vamos pensar passo a passo" melhora o raciocínio em matemática/lógica
  • Few-Shot: Forneça 1-5 exemplos para guiar o formato e estilo da saída
  • Saídas Estruturadas (Modo JSON): Crítico para integração programática de APIs
  • Self-Consistency: Gere múltiplas saídas e selecione a resposta mais frequente
  • Tree-of-Thoughts: Explore múltiplos ramos de raciocínio como uma árvore de decisão
  • Técnicas avançadas custam mais tokens—equilibre necessidades de desempenho com custo
  • Técnicas podem ser combinadas: CoT + JSON, Few-Shot + CoT, Self-Consistency + Saídas Estruturadas
  • Para tarefas simples, técnicas mais simples geralmente superam as complexas
  • Sempre valide saídas estruturadas antes do uso em produção
Progresso60%