Pular para o conteúdo
mnzes

O que é chain-of-thought?

PorDiógenes MenezesAprendendo IA em público

13 min de leitura

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.

sem passoscom passosjunho: R$ 4.800+15% em julho-10% em agostoquanto foi agosto?R$ 5.040(+15% e -10%viraram +5%)junho: R$ 4.800+15% em julho-10% em agostoquanto foi agosto?julho: 4.800 x 1,15 = 5.520agosto: 5.520 x 0,90 = 4.968resposta: R$ 4.968
Figura 1A composição de dois percentuais não é a soma deles. Escrever a etapa de julho obriga o modelo a fixar 5.520 antes de aplicar o desconto de agosto.

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.

o que o modelo lêo que ele escrevea pergunta5.520geraa pergunta+ 5.5204.968a pergunta+ 5.520 + 4.968R$ 4.968
Figura 2O que o modelo lê na terceira linha inclui o que ele mesmo escreveu na primeira. O rascunho não é decoração: é a entrada do passo seguinte.

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

Q: enunciado do exemploA: os passos do cálculoA resposta é 5.o exemplar, dentro do promptQ: a sua perguntaA: o modelo continuano mesmo formatoa última linha é o contrato:é dela que o parser tira a resposta
Figura 3O exemplar ensina três coisas ao mesmo tempo: que passos existem, como eles são escritos e onde a resposta final aparece para ser extraída.

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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. Delegue a aritmética quando puder. Se há um interpretador disponível, quatro linhas de código valem mais que a cadeia mais caprichada.
  7. 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

  1. 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

  2. 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.

  3. 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.

  4. 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

  5. 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

  1. Wei, J. et al.. Chain-of-Thought Prompting Elicits Reasoning in Large Language Models (2022)arXiv:2201.11903
  2. Nye, M. et al.. Show Your Work: Scratchpads for Intermediate Computation with Language Models (2021)arXiv:2112.00114
  3. Kojima, T. et al.. Large Language Models are Zero-Shot Reasoners (2022)arXiv:2205.11916
  4. Merrill, W. e Sabharwal, A.. The Expressive Power of Transformers with Chain of Thought (2023)arXiv:2310.07923
  5. Sprague, Z. et al.. To CoT or not to CoT? Chain-of-thought helps mainly on math and symbolic reasoning (2024)arXiv:2409.12183