Em setembro de 2024, a OpenAI lançou o o1 e quebrou um paradigma: scaling não termina no pre-train, continua na hora da inferência. Em janeiro de 2025, DeepSeek-R1 reproduziu a técnica em open-weights. Em 2026, "reasoning model" virou categoria estabelecida: o1, o3, o3-pro, Claude extended thinking, Gemini Thinking, DeepSeek-R1, Qwen-QwQ. Mesma família de arquitetura — diferenças sutis e estratégicas que importam para escolher e operar.
A segunda lei de scaling
O paper original do o1 (OpenAI Learning to Reason with LLMs, set/2024) revelou o gráfico que mudou tudo: accuracy em AIME (math olympiad) é log-linear em (a) pretrain compute e também em (b) test-time compute. Duas leis de scaling independentes que combinam.
Implicação econômica: data centers de inferência viraram tão grandes quanto data centers de treino. AWS Trainium2, NVIDIA Blackwell B200, TPU v6 — toda esta geração foi desenhada para inference compute.
Comparativo arquitetural dos 4 grandes
| Modelo | Quem | Reasoning visível? | Budget control | Tool intercalado? |
|---|---|---|---|---|
| o1 / o3 / o3-pro | OpenAI | Não (oculto) | reasoning_effort low/med/high | Não (em 2026) |
| Claude extended thinking | Anthropic | Sim (block thinking) | thinking.budget_tokens | Sim (interleaved) |
| Gemini 2.0/2.5 Thinking | Google DeepMind | Sim (configurable) | thinking_budget | Parcial |
| DeepSeek-R1 | DeepSeek | Sim (<think> tags) | max_tokens + temperature | Não (single-pass) |
| Qwen-QwQ | Alibaba | Sim | max_thinking_tokens | Não |
| Kimi-k1.5 | Moonshot | Sim | thinking_mode | Parcial |
Visibilidade do reasoning é decisão de produto, não capability. Anthropic publicou que extended thinking visível ajuda usuários a confiar e debugar. OpenAI argumenta que esconder protege contra destilação por competidores. Ambos têm casos legítimos.
API: como chamar reasoning models
# Claude 4.7 Opus com extended thinking
import anthropic
client = anthropic.Anthropic()
message = client.messages.create(
model="claude-opus-4-7",
max_tokens=16000,
thinking={
"type": "enabled",
"budget_tokens": 8000, # 1k mínimo, 64k máximo
},
messages=[{
"role": "user",
"content": "Prove que sqrt(2) é irracional usando contradição.",
}]
)
# Resposta contém blocos:
# [{"type": "thinking", "thinking": "Hmm, deixa eu pensar..."},
# {"type": "text", "text": "Demonstração:..."}]
for block in message.content:
if block.type == "thinking":
print("=== THINKING ===")
print(block.thinking)
elif block.type == "text":
print("=== RESPOSTA ===")
print(block.text)# OpenAI o3 (sem visibility do thinking)
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="o3",
reasoning_effort="high", # low/medium/high
messages=[{
"role": "user",
"content": "Prove que sqrt(2) é irracional usando contradição.",
}]
)
# Não há acesso ao conteúdo do reasoning
print(response.choices[0].message.content)
print(f"Reasoning tokens: {response.usage.completion_tokens_details.reasoning_tokens}")
print(f"Output tokens: {response.usage.completion_tokens}")
# reasoning_tokens são cobrados mesmo invisíveis# DeepSeek-R1 via API ou local
curl https://api.deepseek.com/chat/completions \
-H "Authorization: Bearer $DEEPSEEK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-reasoner",
"messages": [{"role": "user", "content": "Prove sqrt(2) irracional."}],
"max_tokens": 8000
}'
# Resposta contém "reasoning_content" + "content"
# reasoning_content tem o <think>...</think> expandidoArquitetura runtime de uma reasoning model
Quando usar reasoning model vs LLM padrão
📋 Você está construindo um agente de análise de código que detecta bugs sutis em pull requests.
Detecção de bug sutil é raciocínio multi-step: rastrear data flow, verificar invariants, considerar edge cases. Reasoning model com thinking longo permite ao modelo simular execução, voltar atrás, considerar alternativas. LLM padrão tende a hallucinar análise plausível mas superficial.
Alt: GPT-4o ou Claude Sonnet (sem thinking) —
Alt: Ensemble: Sonnet primeiro filtra, o3 analisa profundo —
| Task | Modelo padrão | Reasoning model |
|---|---|---|
| Chat casual | ✅ Ideal | ❌ Overkill, lento |
| Sumarização | ✅ Ideal | ⚠️ Talvez excesso |
| Math olympiad | ❌ Insuficiente | ✅ Crítico |
| Code debugging complexo | ⚠️ Marginal | ✅ Brilha |
| Análise jurídica | ⚠️ Marginal | ✅ Ideal |
| RAG simple | ✅ Ideal | ❌ Custa caro |
| Multi-step planning | ❌ Falha | ✅ Brilha |
| Tool use simples | ✅ Ideal | ❌ Overhead |
Custo e latência: o tradeoff
Latência: reasoning model pode levar 10–120 segundos por query. Para UX interativo, considere streaming do thinking (Claude/Gemini suportam) para mostrar progresso, ou cache de thinking para queries similares.
Linha do tempo das reasoning models
Reasoning model como agente
Perguntas frequentes
❓ Reasoning model alucina menos?
❓ Posso fine-tunar reasoning model?
❓ Reasoning model é melhor que CoT prompting?
❓ Como debugar quando reasoning model erra?