O que é chain-of-thought?
Chain-of-thought é pedir ao modelo que escreva os passos intermediários antes da resposta final. Em vez de devolver só o número, ele devolve a conta. A técnica aumenta a taxa de acerto em problemas de várias etapas, porque cada passo escrito entra no contexto do passo seguinte. Custa tokens de saída e não ajuda em toda tarefa.
O nome apareceu em janeiro de 2022, num paper do Google que mediu o efeito com oito exemplos no prompt e nenhum treino1. É a técnica mais simples da família de raciocínio em LLM, e a única que você aplica mudando uma frase.
Há duas maneiras de pedir. Você cola exemplos já resolvidos passo a passo dentro do prompt, que é o few-shot CoT, ou acrescenta uma frase gatilho sem exemplo nenhum, que é o zero-shot CoT. As duas produzem passos. O que muda é quem escreve o formato deles.
Em nenhuma das duas nada é alterado no modelo. Chain-of-thought é uma decisão de texto no prompt e uma conta maior de tokens de saída.
Os passos viram contexto
Um modelo gera um token por vez, e cada token gerado passa a fazer parte da entrada dos seguintes. Quando ele escreve “4.800 × 1,15 = 5.520”, esse 5.520 existe no texto. O passo de agosto lê um número, não uma intenção.
Essa é a explicação curta, e ela é insuficiente sozinha. O time que publicou o paper testou três hipóteses concorrentes e derrubou duas delas com ablações que valem conhecer, porque cada uma corresponde a um mal-entendido comum sobre a técnica1.
“O ganho vem de produzir a equação.” Eles pediram só a equação antes da resposta, sem o texto em volta. No GSM8K isso quase não ajudou. Os enunciados são difíceis de traduzir direto para uma equação, e é justamente a linguagem intermediária que faz a tradução acontecer. Em datasets de um ou dois passos, em que a equação sai fácil do enunciado, a variante funcionou.
“O ganho vem de gastar mais computação.” Eles mandaram o modelo emitir uma sequência de pontos com o mesmo comprimento da equação necessária, sem conteúdo nenhum. O resultado ficou igual ao da resposta direta. Tokens vazios não compram nada. O que compra é o que está escrito neles.
“O ganho vem de ativar conhecimento relevante.” Eles moveram a cadeia para depois da resposta. Se o efeito fosse de aquecimento, o modelo se beneficiaria do mesmo jeito. Também ficou igual à resposta direta. A ordem importa porque a dependência é sequencial.
Do lado teórico, o resultado que sustenta isso é de 2023: gerar tokens intermediários amplia de verdade o que um transformer decoder consegue computar, e o tamanho do ganho depende de quantos tokens você deixa ele gerar. Com um número linear de passos de decodificação, a classe de problemas resolvidos cresce de forma demonstrável em relação à resposta imediata2. É a versão formal de uma frase simples: profundidade fixa por token, quantidade de tokens variável.
Vale registrar que a ideia é mais velha que o nome. Em 2021, um trabalho chamou isso de scratchpad e mostrou que pedir os resultados intermediários permitia a um modelo somar inteiros longos e até simular a execução de programas, tarefas que ele errava quando tinha que responder de uma passada só3.
As duas formas de pedir
No few-shot CoT você escreve dois a oito exemplos completos no prompt, cada um com pergunta, passos e resposta. O modelo copia o formato. É a versão do paper original e continua sendo a mais controlável: você decide o nível de detalhe, o vocabulário e onde a resposta final aparece.
No zero-shot CoT você acrescenta uma frase como “vamos pensar passo a passo” e não dá exemplo. Um trabalho de maio de 2022 mediu isso no text-davinci-002: a exatidão no MultiArith foi de 17,7% para 78,7%, e no GSM8K de 10,4% para 40,7%4. É quase de graça em termos de prompt, e o preço é perder o controle do formato de saída.
Um detalhe do zero-shot que quase todo tutorial omite: no paper, ele é um procedimento de duas chamadas. A primeira acrescenta a frase gatilho e colhe a cadeia. A segunda cola essa cadeia de volta no prompt junto com um segundo gatilho, do tipo “portanto, a resposta em algarismos é”, e colhe só o resultado4. Sem essa segunda chamada, alguém precisa extrair o número do texto corrido, que é exatamente o problema que o exemplar do few-shot resolve de graça.
A escolha na prática é menos filosófica do que parece. Se você precisa fazer parsing da resposta, few-shot ganha, porque o exemplar fixa a última linha e você paga uma chamada em vez de duas. Se é uma pergunta pontual e você vai ler o resultado com os olhos, zero-shot resolve e não infla o prompt.
A anatomia de um exemplar
Um exemplar de chain-of-thought tem três partes, e a terceira é a que costuma ser esquecida.
O enunciado define o tipo de problema. O raciocínio mostra o caminho, em frases curtas, uma operação por frase. A resposta final isolada é uma linha no fim, em formato fixo, do tipo “A resposta é 5”. Ela existe para o seu código conseguir extrair o resultado sem ler a cadeia inteira.
Sem essa última linha você vai fazer regex em texto livre, e texto livre gerado por modelo muda de forma entre chamadas. O paper original terminava todo exemplar com “The answer is”, e não por estilo: é o contrato de saída.
Há uma consequência que aparece na primeira semana de uso. Se o seu exemplar escreve os passos em três frases, o modelo escreve três frases. Se escreve em onze, ele escreve onze e você paga por onze. O comprimento da cadeia é herdado do exemplar, não escolhido pelo modelo.
O que o paper de 2022 mediu
Separar o que foi medido do que se concluiu depois evita boa parte da confusão que circula sobre a técnica.
O que foi medido: com o PaLM de 540 bilhões de parâmetros e oito exemplos com passos, a taxa de solução no GSM8K subiu de 18% com prompt padrão para 57%. O estado da arte anterior, um GPT-3 de 175B ajustado com verificador, estava em 55%, e o GPT-3 ajustado sem verificador em 33%1. Oito exemplos batendo um treino inteiro é o que fez a técnica pegar.
O que também foi medido, e se cita menos: o ganho depende da escala. Abaixo de mais ou menos 100 bilhões de parâmetros, pedir passos produzia cadeias fluentes e erradas, e a exatidão ficava abaixo da resposta direta1. A conclusão de que “CoT sempre ajuda” não está no paper.
E há a variância entre quem escreve os exemplos. Três autores escreveram cadeias independentes para os mesmos oito exemplares. Na tarefa de rastrear moedas viradas, um deles chegou a 99,6% e outro a 71,4%, ambos acima dos 50% do prompt padrão1. A técnica é robusta na direção, e bastante sensível na magnitude.
Onde não ajuda
Este é o ponto em que a literatura mudou de opinião, e em que a maior parte do conteúdo sobre CoT ficou desatualizada.
Uma meta-análise de setembro de 2024 revisou mais de cem trabalhos que usaram chain-of-thought e rodou avaliação própria em 20 datasets com 14 modelos. O ganho apareceu concentrado em matemática e raciocínio lógico ou simbólico. No resto, foi pequeno. No MMLU, gerar a resposta direta deu exatidão praticamente idêntica à do CoT, com uma exceção reveladora: quando a pergunta ou a resposta continha um sinal de igual, indicando operação simbólica5.
Os mesmos autores separaram planejamento de execução e encontraram que boa parte do ganho do CoT vem de melhorar a execução simbólica, e que nessa parte ele perde para um solver externo5. A implicação prática é direta: se o seu problema tem uma calculadora, um interpretador ou um validador do outro lado, delegar rende mais que pedir passos.
Onde a técnica não muda nada, na prática: extrair campos de um documento, classificar sentimento, reescrever texto, responder sobre um fato único que está no contexto. Em todas essas você paga a cadeia e recebe o mesmo resultado.
Em classificação há um caso pior que empate. Pedir a justificativa antes do rótulo dá ao modelo várias frases para construir um argumento, e um argumento construído tende a ser concluído. Se as três primeiras frases foram na direção de “reclamação grave”, a quarta dificilmente sai como “elogio”. Inverter a ordem, rótulo primeiro e justificativa depois, remove esse efeito e mantém a explicação para quem for auditar.
Onde falha
O erro de um passo contamina os seguintes. Se a etapa de julho sai errada, as duas seguintes serão coerentes com ela. A resposta final chega com aparência de rigor e um número errado, que é a pior combinação possível para quem revisa por amostragem.
A cadeia não é prova do processo. O texto que aparece justifica a resposta, mas não é necessariamente o que a determinou. Isso tem medição própria e um artigo próprio, em a cadeia de pensamento é fiel?. Para depurar, a cadeia serve; para auditar, não basta.
Em modelo de raciocínio, atrapalha. Modelos treinados para produzir o processo internamente já fazem esse trabalho antes de responder. Instruir “pense passo a passo” por cima empilha um segundo processo sobre um que já existe, e costuma piorar tanto a exatidão quanto o custo.
A cadeia vaza para o usuário. O raciocínio contém tentativas, hesitações e às vezes o conteúdo do seu prompt de sistema reescrito com outras palavras. Se você mostrar a saída bruta na interface, está publicando um rascunho. O contrato da última linha existe também para isso: você extrai a resposta e descarta o resto.
Quanto custa
Números de ordem de grandeza, com as premissas à vista.
Uma cadeia curta para um problema aritmético fica entre 100 e 300 tokens de saída. A resposta direta equivalente tem de 1 a 10. Isso põe o custo de saída de cada chamada entre 20 e 100 vezes o da versão sem passos, e token de saída é o item caro do catálogo em praticamente todo provedor.
A latência é o custo que o usuário sente. Geração roda na ordem de dezenas de tokens por segundo, então uma cadeia de 250 tokens coloca alguns segundos entre a pergunta e a linha da resposta. Numa fila em lote isso é irrelevante. Num campo de busca, é a diferença entre um produto usável e um que parece travado.
No few-shot há ainda o custo de entrada: oito exemplares com raciocínio somam alguns milhares de tokens repetidos em toda chamada. Esse é o único dos três custos que o prompt caching resolve bem, porque o bloco de exemplares é idêntico entre requisições e não muda com a pergunta.
Para dar forma à conta: 50 mil perguntas por mês com resposta direta de 8 tokens somam 400 mil tokens de saída. As mesmas 50 mil com cadeia de 250 tokens somam 12,5 milhões. Não é o preço unitário que decide, é esse fator de trinta — e ele não muda quando o preço do token cai, porque cai para os dois lados.
Como escrever um chain-of-thought que funciona
- Confirme que o problema tem passos. Se você não conseguiria escrever a solução em etapas, o modelo também não. Pergunta de fato único não tem o que encadear.
- Comece pelo zero-shot. Uma frase gatilho custa nada e diz em cinco minutos se a tarefa responde à técnica. Só monte exemplares se o ganho aparecer.
- Escreva de dois a quatro exemplares, não oito. O ganho satura rápido e cada exemplar entra em toda chamada. Oito era o número do paper, não uma receita.
- Uma operação por frase. Cadeia com duas contas na mesma linha é onde os erros de aritmética se escondem, porque o resultado intermediário não fica escrito.
- Termine todo exemplar com a mesma linha de resposta. É o que o seu parser vai ler. Sem ela, você depende do modelo escolher o mesmo formato duas vezes seguidas.
- Delegue a aritmética quando puder. Se há um interpretador disponível, quatro linhas de código valem mais que a cadeia mais caprichada.
- Meça com os números trocados. Rode os mesmos problemas com valores diferentes. Se o acerto some, o que você mediu foi memorização.
O passo 3 é o que mais economiza dinheiro em produção, e o passo 7 é o que mais muda a leitura do resultado. Os dois levam menos de uma hora.
Footnotes
-
Wei et al. (2022) mediram o efeito em aritmética, senso comum e raciocínio simbólico; reportaram GSM8K de 18% para 57% com PaLM 540B e oito exemplares; mostraram que o ganho só aparece acima de cerca de 100B de parâmetros; e derrubaram por ablação as hipóteses de que o efeito viria da equação, de computação extra ou de ativação de conhecimento. ↩ ↩2 ↩3 ↩4 ↩5
-
Merrill e Sabharwal (2023) provaram que gerar tokens intermediários amplia a classe de problemas que um transformer decoder resolve, e que o tamanho do ganho depende de quantos passos de decodificação são permitidos. ↩
-
Nye et al. (2021) chamaram a técnica de scratchpad e mostraram que emitir resultados intermediários permitia somar inteiros longos e simular execução de programas, tarefas em que a resposta em uma passada falhava. ↩
-
Kojima et al. (2022) mediram o efeito de uma única frase gatilho sem exemplos: MultiArith de 17,7% para 78,7% e GSM8K de 10,4% para 40,7% no text-davinci-002. ↩ ↩2
-
Sprague et al. (2024) fizeram meta-análise de mais de cem trabalhos e avaliação própria em 20 datasets com 14 modelos: o ganho se concentra em matemática e raciocínio simbólico, e no MMLU some quando não há operação simbólica envolvida. ↩ ↩2
Perguntas frequentes
- O que é chain of thought em uma frase?
- É pedir ao modelo que escreva os passos intermediários antes da resposta final. Em vez de devolver o resultado, ele devolve a conta e depois o resultado. O ganho aparece em problemas que exigem várias etapas encadeadas, e não em perguntas de fato único.
- Qual é um exemplo de chain of thought?
- Uma fatura de R$ 4.800 sobe 15% em julho e cai 10% em agosto. A resposta direta tende a somar os percentuais e dizer R$ 5.040. Com passos, o modelo escreve 4.800 × 1,15 = 5.520, depois 5.520 × 0,90 = 4.968, e chega em R$ 4.968.
- Chain of thought funciona em qualquer modelo?
- Não. O paper de 2022 mediu ganho apenas acima de mais ou menos 100 bilhões de parâmetros; abaixo disso os passos gerados eram ruins e a exatidão caía em relação à resposta direta. Modelos pequenos escrevem cadeias que parecem certas e chegam ao lugar errado.
- Qual a diferença entre CoT e um modelo de raciocínio?
- No chain-of-thought você pede os passos e eles saem na resposta, onde você lê e paga por eles. Um modelo de raciocínio já foi treinado para produzir esse processo internamente antes de responder. Pedir CoT por cima dele costuma atrapalhar em vez de somar.
- Chain of thought sempre melhora o resultado?
- Não. Uma meta-análise de 2024 com mais de cem trabalhos encontrou ganho concentrado em matemática e lógica simbólica, e quase nenhum no resto. Em tarefas de conhecimento, extração e classificação, os passos custam tokens e latência sem mexer na exatidão, e às vezes dão ao modelo espaço para se convencer do rótulo errado.
- Pedir os passos deixa a resposta mais lenta?
- Sim, e é o custo mais visível. Uma cadeia de 250 tokens gerada a algumas dezenas de tokens por segundo adiciona segundos antes da resposta aparecer. Em processamento em lote isso não importa; em uma interface onde alguém espera, importa muito.
Referências
- Wei, J. et al.. Chain-of-Thought Prompting Elicits Reasoning in Large Language Models (2022)arXiv:2201.11903
- Nye, M. et al.. Show Your Work: Scratchpads for Intermediate Computation with Language Models (2021)arXiv:2112.00114
- Kojima, T. et al.. Large Language Models are Zero-Shot Reasoners (2022)arXiv:2205.11916
- Merrill, W. e Sabharwal, A.. The Expressive Power of Transformers with Chain of Thought (2023)arXiv:2310.07923
- Sprague, Z. et al.. To CoT or not to CoT? Chain-of-thought helps mainly on math and symbolic reasoning (2024)arXiv:2409.12183