Reasoning na Converse: quando pensar mais vale o token
- ⬜✍️ Engenharia de prompt no Bedrock: o que muda entre Nova, Claude e Llama(AWS Bedrock — GenAI em Produção)
Recomendamos completar os pré-requisitos antes de seguir, mas nada te impede de continuar.
A alavanca que troca custo por acerto
Modelos de raciocínio produzem um bloco de pensamento antes da resposta final. Não é um truque de prompt: é um modo de operação em que o modelo gasta tokens de saída explorando o problema, e só depois escreve a resposta. Na Converse API do Bedrock isso se liga por configuração, não por instrução — e essa distinção é a primeira coisa a entender.
A troca é direta e mensurável: você paga mais tokens de saída e espera mais tempo, em troca de mais acerto em tarefa que exige encadear passos. Como toda troca, ela é boa em algumas tarefas e desperdício em outras — e o erro caro é ligar em tudo, porque o custo aparece em toda chamada e o ganho só nas difíceis.
Pedir "pense passo a passo" não é a mesma coisa
A instrução em linguagem natural faz o modelo escrever o raciocínio dentro da resposta, misturado com ela. O modo de raciocínio devolve o pensamento num bloco SEPARADO, que você pode registrar para depuração e não mostrar ao usuário. A diferença prática é grande: com a instrução, tirar o raciocínio da tela exige um pós-processamento frágil; com o modo, é escolher qual bloco renderizar.
Como se liga na Converse, e onde isso mora no contrato
O raciocínio é um recurso específico de família, então ele entra por `additionalModelRequestFields` — o mesmo campo que isola toda dependência de modelo. É coerente com o desenho da Converse: a estrutura é comum, o que só uma família entende fica concentrado num lugar.
r = brt.converse(
modelId=MODELO_COM_RACIOCINIO,
messages=[{"role": "user", "content": [{"text": pergunta}]}],
inferenceConfig={"maxTokens": 4096},
additionalModelRequestFields={
"reasoning_config": {"type": "enabled", "budget_tokens": 2048}
},
)
# A resposta traz DOIS tipos de bloco. Renderize só o segundo.
for bloco in r["output"]["message"]["content"]:
if "reasoningContent" in bloco:
registrar_para_depuracao(bloco["reasoningContent"])
elif "text" in bloco:
mostrar_ao_usuario(bloco["text"])O orçamento de raciocínio sai de dentro do maxTokens
O `budget_tokens` do raciocínio não é um orçamento paralelo: ele consome o mesmo teto de saída. Configurar `maxTokens` em 1024 e `budget_tokens` em 2048 produz resposta truncada ou erro, porque o pensamento sozinho já estoura o limite. A regra prática é deixar folga confortável entre os dois — o raciocínio precisa caber E ainda sobrar espaço para a resposta.
Há uma segunda restrição que costuma pegar quem está migrando: com raciocínio ligado, os parâmetros de amostragem em geral não podem ser ajustados livremente. Se a sua camada de configuração sempre envia `temperature`, ela vai falhar na primeira chamada com raciocínio — e o erro parece um problema de permissão até alguém ler a mensagem inteira.
Você ligou o raciocínio com `budget_tokens: 2048` e manteve `maxTokens: 1024`. O que acontece?
Quando ligar, e quando é desperdício
| Tarefa | Raciocínio ajuda? | Por quê |
|---|---|---|
| Classificar chamado em uma de oito categorias | Não | Decisão de um passo; o custo aparece em toda chamada e o acerto quase não muda |
| Extrair campos de um documento estruturado | Não | É reconhecimento, não encadeamento; invista em prompt e em critério de parada |
| Conciliar dois relatórios e explicar a divergência | Sim | Exige comparar, hipotetizar e descartar — é encadeamento de passos |
| Escolher entre três arquiteturas dado um conjunto de restrições | Sim | Há trade-off a percorrer, e o pensamento explícito reduz o salto para a conclusão |
| Depurar por que um cálculo deu diferente do esperado | Sim | A resposta certa depende de refazer o caminho, não de recuperar um fato |
| Responder pergunta factual com base em documento recuperado | Não | O trabalho difícil foi do retrieval; o modelo só precisa ler e citar |
O padrão é reconhecível: raciocínio paga quando a resposta exige PERCORRER, e não paga quando exige RECUPERAR. Um sistema de RAG bem construído transforma muita pergunta difícil em pergunta de recuperação — e é por isso que ligar raciocínio antes de arrumar o retrieval costuma ser gastar dinheiro para compensar um índice ruim.
Roteamento: a decisão que evita pagar pelo caso fácil
A configuração mais econômica raramente é "ligado" ou "desligado" para tudo. É decidir por requisição, e a decisão pode ser simples:
- Classifique a entrada com um modelo pequeno e barato — a pergunta é de recuperação ou de raciocínio?
- Rote as de recuperação para o caminho sem raciocínio, com modelo menor e teto de saída apertado.
- Rote as de raciocínio para o caminho com pensamento habilitado, e registre o bloco de raciocínio para auditoria.
- Meça a distribuição real. Se 90% das perguntas caem no caminho barato, o roteador se paga no primeiro dia; se 10% caem, ele é complexidade sem retorno e deve ser removido.
O último passo é o que separa engenharia de configuração
A decisão de rotear só é boa se a distribuição justificar. Medir antes de construir o roteador evita o caso clássico de adicionar uma peça que serve a uma minoria de requisições e passa a ser mais um componente para operar, depurar e explicar a quem chegar depois.
Observabilidade e custo
| O que medir | Por quê | Onde some |
|---|---|---|
| Tokens de raciocínio por requisição | É a parcela que cresce sem aparecer na resposta | Somado a tokens de saída, vira um número só na fatura |
| Latência com e sem raciocínio | O tempo até o primeiro token muda de patamar | Média esconde; olhe percentil alto |
| Taxa de acerto nos dois caminhos | É o único jeito de saber se o gasto comprou algo | Sem suíte de avaliação, a decisão vira preferência |
| Distribuição do roteador | Define se o roteador se paga | Nunca instrumentada, e o roteador vira dogma |
A conta que fecha o assunto é simples de montar e quase nunca é feita: acerto com raciocínio menos acerto sem, dividido pelo custo adicional. Se cada ponto percentual de acerto custa mais do que o erro custa ao negócio, a resposta é desligar — e essa é uma conta que só o seu domínio responde.
Um sistema de RAG responde perguntas sobre uma base de documentos e erra em 18% dos casos. Ligar raciocínio é a primeira coisa a tentar?
Anti-padrões
| Anti-padrão | Por que acontece | O que quebra |
|---|---|---|
| Ligar raciocínio para todas as requisições | Melhorou no caso difícil que testaram | Custo e latência sobem em 100% do tráfego para ganho em uma fração |
| Mostrar o bloco de raciocínio ao usuário | Parece transparência | Expõe hipótese descartada como se fosse conclusão, e confunde mais do que esclarece |
| budget_tokens sem folga no maxTokens | Os dois números foram configurados separadamente | Resposta truncada em caso de borda, quando o modelo decide pensar mais |
| Ligar raciocínio antes de arrumar o retrieval | É uma linha de configuração contra uma semana de trabalho | Paga o sintoma para sempre e o índice ruim continua lá |
| Não registrar o bloco de raciocínio | Não vai para a tela mesmo | Perde-se a melhor fonte de depuração que o modo oferece |
Sua aplicação sempre envia `temperature` na chamada. Ao ligar o raciocínio, as requisições passam a falhar. Por quê?
Próximo passo
Com prompt estável, ferramentas expostas com segurança e a decisão de raciocínio tomada por medição, o que falta é fechar o laço de qualidade: uma suíte de avaliação que rode contra qualquer combinação dessas escolhas e devolva um número. É o assunto do módulo de evals.
Perguntas frequentes
❓ Raciocínio na Converse e "pense passo a passo": qual a diferença?
❓ Quando raciocínio vale o custo adicional no Bedrock?
❓ Por que minha chamada com raciocínio está truncando a resposta?
Terminou de ler?
Marcar como concluído registra o XP, mantém sua sequência e coloca 3 cartas deste módulo na fila de revisão espaçada.
Próximos passos sugeridos
Temas deste módulo
Discussão
Carregando comentários…