让 AI 从瞎猜到推理高手:思维链的神奇魔法
这篇文章介绍了AI大模型中的思维链(Chain of Thought, CoT)技术,它能显著提升AI在复杂问题上的推理能力。思维链通过让AI逐步展示推理过程,将复杂问题拆解为简单步骤,从而提高准确性。文章解释了两种常用形式:零样本思维链(直接指令激活)和少样本思维链(通过示例引导),并介绍了进阶的自洽性思维链(Self-Consistency)技术,即通过多次采样不同推理路径选择最一致的答案来提
“你有没有试过让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)

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


所有评论(0)