这道题问的其实是,怎么让大模型在遇到复杂问题时,不直接跳到一个答案上,而是像人一样一步一步想清楚再说。核心就一句话:把隐式的推理过程显式化。模型本身就有推理能力,但你不引导它,它就可能走捷径、瞎猜。[[思维链]]就是给它铺一条路,让它沿着走。
具体做法分两种。先说 [[Zero-shot]] CoT,就是零样本,你不需要给任何例子,直接在问题后面加一句触发词。比如问“鸡兔同笼”,你加个“Let's think step by step”,或者中文说“请逐步思考”,模型就会自动开始列步骤、算方程。这个适合你临时问个问题,不想费劲写例子。
另一种是 [[Few-shot]] CoT,少样本,你得先给一两个完整的问答例子,每个例子都包含推理步骤和最终答案。比如“小明有5个苹果,给了小红2个,又买了3个,还剩几个?”然后你写推理过程,再写答案。这样模型看到新问题,就会模仿你的格式,也写出推理链。这个更可控,适合对输出格式有要求的生产环境。
设计示例有几个原则,我重点讲两个。一个是多样性,你给的例子要覆盖不同题型和推理模式,别全是加减法,也要有乘除、逻辑判断,否则模型容易过拟合。另一个是步数适中,步骤太短等于没引导,太长又增加噪声,模型可能学到无关细节。还有答案必须正确,格式要一致,这些是基本要求。
思维链最擅长的是数学推理、符号逻辑、多步决策这类需要显式路径的任务。比如在客服退款场景里,用户说“我买了个手机,用了三天屏幕碎了,想退货”,模型需要先判断是不是质量问题、再看是否在退货期、然后考虑运费谁付,每一步都要推理。用思维链,模型就能写出“第一步查订单时间,第二步看售后政策,第三步……”这样可追溯的推理链。
但这里有个边界。简单任务用思维链反而浪费,比如问“今天天气怎么样”,直接答就行,加推理链只会多花 token 还拖慢速度。还有就是模型能力不足时,思维链可能产生[[幻觉]],小模型推理能力弱,它硬编出来的步骤可能是错的,但看着还挺像回事。所以上线前我会特别关注推理链的准确性,用一些验证集来检查中间步骤和最终答案是否一致。
另外,思维链和 [[Self-Consistency]] 结合起来效果更好,就是同一个问题跑多次思维链,然后投票选出最一致的答案,能大幅提升稳定性。
所以整体上,我会把思维链看成复杂推理任务的标准组件,但不是万能药。简单任务用直接回答,复杂任务加上思维链,再配合自一致性或者验证机制,这样落地才靠谱。