“你有没有试过让AI直接算一道复杂的数学题,结果它瞎猜一个数?但如果让它一步一步算,它就突然变聪明了……”


这背后,就是大模型里最经典、也最关键的技术 ——思维链(Chain of Thoughts, CoT)

这篇文章,会尽量使用最容易理解的方式,讲明白思维链到底是什么、为什么它能提升 AI 能力、它的两种常用形式,以及进阶的自洽性思维链(Self-Consistency) 是怎么让 AI 更稳定、更准确的。从原理到示例、再到实际使用,一次性把 CoT 讲清楚。

一 思维链——Chain of Thoughts, CoT

Chain of Thoughts:是一种引导大模型显式生成中间推理步骤的提示方法,核心是让模型在给出答案前,先把思考过程说出来,然后再回答。

它诞生于 2022 年 Google 的经典论文,一经提出就大幅提升了大模型在数学、逻辑、常识推理上的准确率,成为现代 LLM 的标配能力。

其实思维链被发现是偶然的,但是现在已知的理论:“思维链可以提高大模型的能力”来反推一下为什么思维链会有效果。

思维链最直接的效果,就是扩充了上下文(context)信息,从而提升 AI 后续输出的准确率。通过思维链生成的丰富推理内容,将大模型带入了相关语境,让它更稳定地进行符合语境的概率生成,最终让输出更连贯、更合理。

例子: 让 AI 计算 12 + 13 + 14 + 13 + 23 + 45 + 67 = ?


①没有思维链

  • 模型只做一件事:
  • P (12 + 13 + 14 + 13 + 23 + 45 + 67 =|next word ) = ?

模型直接预测等号后面应该接什么数字。可是其实很难直接通过这么长的前置条件猜出结果,问题在于,这个长算式在训练数据里几乎不可能出现过,模型无法一步到位直接算出结果,只能靠概率硬猜,很容易出错。

②有思维链

思维链的作用,就是生成大量有用的上下文,把复杂问题拆成一连串简单问题,一步步引导模型。

  • 模型会先分步推导:
  • 先算 12 + 13,
  • 此时条件变成:P (12 + 13 = | next word) = ?

这种简单加法在训练数据里大量存在,模型很容易准确输出 25。接着再算 25 + 14,再把结果作为新的上文,继续算下一位……每一步都只处理短上下文、简单计算,模型每一步都能稳定、准确地生成。最终一步步累积,自然得到正确答案。


思维链本质上是在扩充、引导上下文,把模型 “拉到” 它擅长的简单语境里,用稳定的概率输出,一步步拼出正确结果。

二 两种最常用的 CoT 形式

2.1 Zero-shot CoT(零样本思维链)

不用示例,只加一句指令就能激活:

  • 请一步步思考
  • Let's think step by step
  • 请分步骤解释并给出答案

这个话的有效性验证的相关论文如下所示:

  • Chain-of-Thought Prompting Elicits Reasoning in Large Language Models(22年NeurIPS) 
  • Let’s Verify Step by Step(2023 年OpenAI 团队)

2. 2 Few-shot CoT(少样本思维链)

给 1–3 个 “问题 + 步骤 + 答案” 的示例,让模型模仿格式与逻辑,复杂任务效果更强。

例子 多步加法计算


  • 示例 1

问题:3 + 5 =?思考:先算 3 + 5,结果是 8。答案:8

  • 示例 2

问题:10 + 7 + 2 =?思考:先算 10 + 7 = 17,再算 17 + 2 = 19。答案:19

然后再给模型的新问题

  • 问题:12 + 13 + 14 + 13 + 23 + 45 + 67 =?

模型就会模仿示例输出:

  • 思考:先算 12 + 13 = 25,再算 25 + 14 = 39,再算 39 + 13 = 52,再算 52 + 23 = 75,再算 75 + 45 = 120,再算 120 + 67 = 187。
  • 答案:187

只不过现有大模型都对这类计算问题使用了思维链进行了优化,再现在的大模型中已经很难测试出来有CoT和无CoT的区别了。

三 自洽性思维链(Self-Consistency)

参考论文:arxiv.org/pdf/2203.11171


以一个示例说明了自洽性方法。我们首先对语言模型使用链式思维提示,然后不再使用贪婪方式解码最优推理路径,而是提出了一种“采样与边缘化”的解码过程:我们首先从语言模型的解码器中进行采样,以生成一组多样化的推理路径;每条推理路径可能会导出不同的最终答案,因此我们通过对这些采样推理路径进行边缘化,从最终答案集中选出最一致的答案作为最优解。这种方法类比于人类经验:当多种不同的思维方式导出相同的答案时,人们往往对该答案更有信心。与其他解码方法相比,自洽性避免了贪婪解码中常见的重复性和局部最优问题,同时缓解了单次采样生成所带来的随机性。

所以简单话来说就是同一个问题,多用几个思维链去得到答案,然后选择答案相同的;上述例子使用三种不同的思维链分别得到对应的答案,18 26 18 ;但是由于两个思维链都得到了答案18,根据自洽性思维链(Self-Consistency)的观点来说,大模型选择答案18作为最后的答案。

实际使用:

为了让模型有不同的推理路径,我们需要调整生成参数,获取不同的思维链路径

参数 推荐值 作用
temperature 0.5 - 0.7 越高多样性越大,但过低会缺乏变化,过高容易跑偏
top_p 0.9 - 1.0 核采样,控制候选词范围
采样次数 5 - 10次 次数越多越稳定,但成本也越高
import openai
from collections import Counter

def self_consistency(question, n_samples=5, temperature=0.7):
    """
    自洽性推理函数
    
    Args:
        question: 输入问题
        n_samples: 采样次数
        temperature: 温度参数,控制多样性
    
    Returns:
        final_answer: 多数投票后的最终答案
        all_answers: 所有生成的答案列表
    """
    
    # 1. 构建思维链提示
    prompt = f"""问题:{question}
请一步步思考,最后给出答案。
思考:"""
    
    # 2. 多次采样生成不同推理路径
    responses = []
    for i in range(n_samples):
        response = openai.ChatCompletion.create(
            model="gpt-4",
            messages=[{"role": "user", "content": prompt}],
            temperature=temperature,  # 调整温度增加多样性
            max_tokens=500
        )
        
        # 提取完整回复(包含推理过程和答案)
        full_response = response.choices[0].message.content
        responses.append(full_response)
        print(f"推理路径 {i+1}: {full_response}\n")
    
    # 3. 从每个回复中提取最终答案
    # 这里假设答案在最后一句话,或者包含"答案是"等关键词
    def extract_answer(text):
        # 简单示例:提取最后一个数字
        import re
        numbers = re.findall(r'\d+', text)
        return numbers[-1] if numbers else None
    
    answers = [extract_answer(r) for r in responses if extract_answer(r)]
    
    # 4. 多数投票
    if answers:
        final_answer = Counter(answers).most_common(1)[0][0]
        print(f"\n所有答案: {answers}")
        print(f"最终选定: {final_answer}")
        return final_answer, answers
    else:
        return None, []

# 使用示例
question = "12 + 13 + 14 + 13 + 23 + 45 + 67 = ?"
result, all_answers = self_consistency(question, n_samples=5, temperature=0.7)
推理路径 1: 先算12+13=25,25+14=39,39+13=52,52+23=75,75+45=120,120+67=187。答案是187。
推理路径 2: 12+13=25,然后加14得39,加13得52,加23得75,加45得120,最后加67得187。所以答案是187。
推理路径 3: 逐步计算:12+13=25,25+14=39,39+13=52,52+23=75,75+45=120,120+67=187。因此答案是187。
推理路径 4: 先算所有数总和:12+13=25,加14=39,加13=52,加23=75,加45=120,加67=187。答案是187。
推理路径 5: 12+13+14+13=52,再加23=75,再加45=120,最后加67=187。所以答案是187。

所有答案: ['187', '187', '187', '187', '187']
最终选定: 187

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐