思维链提示(CoT):什么时候该让模型“一步一步想”
在大模型的发展过程中,有一个发现颇具代表性:在提示词中加入一句“让我们一步一步地思考”,模型在数学应用题和逻辑推理题上的准确率就会显著提高。 这类方法被称为思维链(Chain-of-Thought,CoT)提示。它的原理并不复杂,但在实际使用中,需要清楚它在什么情况下有效、什么情况下多余。
为什么思维链有效
大语言模型逐个 Token 生成输出,每个 Token 的计算量是固定的。如果直接要求模型输出一道复杂数学题的答案,相当于要求它在“一步之内”完成所有推理,这超出了单步计算的能力。
当模型先写出中间步骤时:
- 复杂问题被拆解:每一步只需要完成一个相对简单的推理;
- 中间结果被记录:后续步骤可以基于已经写出的中间结果继续计算,而不必在“脑中”记住所有信息;
- 错误更容易被发现:无论是模型自己还是人类审阅者,都可以检查推理过程中的问题。
可以把它理解为给模型提供了“草稿纸”。
常见写法
零样本思维链
在问题后面加上“请一步一步地分析”或“请先列出推理过程,再给出最终答案”。简单易用。
少样本思维链
在示例中展示完整的推理过程,让模型学习推理的方式和详细程度,参见少样本提示。
结构化推理
指定推理的步骤框架,例如:“第一步,提取题目中的已知条件;第二步,确定需要求解的量;第三步,列出计算过程;第四步,检查结果是否合理;最后给出答案。”
先分析后结论
在结构化输出中,把分析字段放在结论字段之前,例如先输出 analysis,再输出 decision,参见让大模型稳定输出 JSON。
自我检查
在得出答案后,要求模型从另一个角度验证答案,或者检查推理过程中是否有错误。
适合使用思维链的场景
- 数学与计算:多步骤的应用题、数值推导;
- 逻辑推理:需要串联多个条件得出结论的问题;
- 复杂判断:需要综合多个因素做出判断,例如评估一份合同的风险等级;
- 多步骤规划:制定计划、拆解任务;
- 代码调试:分析错误原因需要逐步追踪代码逻辑。
不适合使用思维链的场景
- 简单事实问答:“北京是哪个国家的首都”不需要推理过程;
- 简单分类和抽取:模式明确的任务,额外的推理只会增加成本;
- 创意写作:推理过程可能让文字变得刻板;
- 延迟敏感的场景:推理过程会显著增加输出长度和响应时间。
对于简单任务,强制要求模型进行长篇推理,有时还会导致“想太多”:把简单问题复杂化,反而得出错误结论。
思维链与推理模型
新一代推理模型已经通过训练把“先思考再回答”的能力内化了,它们会自动生成内部推理过程,参见推理模型是怎么“想”的。对于这类模型:
- 通常不需要再在提示中要求“一步一步思考”;
- 过于详细的步骤指令可能干扰模型自己的推理策略;
- 更重要的是清楚地描述问题、目标和约束条件。
对于普通对话模型,思维链提示仍然是提升复杂任务表现的有效方法。
实用建议
区分推理过程和最终答案
如果输出要被程序使用,要求模型把最终答案放在固定的位置或字段中,便于提取。推理过程可以记录在日志中用于调试,不一定要展示给最终用户。
推理过程不等于真实原因
模型写出的推理过程看起来合理,但不一定反映它“真正”的计算过程,也可能包含错误步骤。对于关键结论,仍需独立验证,参见大模型幻觉的成因。
权衡成本
推理过程会增加输出 Token 数量。在大规模调用的场景中,评估思维链带来的准确率提升是否值得额外的成本和延迟。
用评测说话
在你的任务上,对比使用和不使用思维链的效果,而不是想当然地认为加上就一定更好。
小结
思维链提示通过让模型写出中间推理步骤,提升了复杂推理任务的表现,原理类似于给模型提供草稿纸。它适合数学、逻辑、复杂判断和规划任务,但对简单任务和延迟敏感场景并无必要。使用推理模型时一般无需额外要求,而对普通模型,在正确的场景中使用思维链,依然是提示工程中最有价值的技巧之一。