这道题问的是什么时候要用[[思维链]],其实本质是在问:大模型的推理能力什么时候需要显式地拆成中间步骤,而不是直接给答案。因为模型天生是黑盒,你问它5+3它直接蹦出8,但问它一个多步问题,比如‘小明有5个苹果,给了小红2个,又买了3个,现在有几个?’它可能直接猜6,但中间跳步就会错。CoT就是让模型把‘5-2=3,3+3=6’这一步一步写出来,把隐式推理显式化。
那什么场景下必须用呢?先说边界。简单问题,比如‘今天天气怎么样’,直接回答就行,不需要CoT。但遇到复杂数学推理、多跳推理、需要可解释性的决策,或者[[Agent]]规划,就必须上CoT。举个例子,客服退款场景:用户说‘我买了两件衣服,一件199,一件299,用了满300减50的券,后来退了一件199的,应该退我多少钱?’这种问题,如果直接让模型回答,它可能算错,因为涉及多步计算和券分摊。用CoT的话,模型会一步步写:‘总价199+299=498,用券后498-50=448,分摊到两件衣服,每件折扣比例是448/498≈0.9,所以退的那件实际支付199*0.9≈179.1,退179.1元。’这样中间步骤就显式了,不仅准确,而且可解释。
再一个,Agent规划场景,比如模型要调用多个工具。你让它‘订一个明天从北京到上海的机票,再订一家离虹桥机场近的酒店’,如果不用CoT,模型可能直接输出一个乱序的Action。用CoT配合[[ReAct]],模型会输出:Thought: 先查航班,再查酒店,需要知道航班到达时间才能选靠近机场的酒店。Action: search_flight(北京, 上海, 明天)。然后根据结果再Action: search_hotel(虹桥机场附近)。这样每一步都有推理,出错也能回溯到具体步骤。
但落地时有个风险,就是CoT会消耗更多Token,而且对模型能力有要求。如果模型本身逻辑能力弱,CoT反而可能放大错误,因为中间步骤越多,错误累积的概率越高。所以前提是模型得有基本的推理能力,比如GPT-4或Claude这种级别的。上线我会特别关注token成本和延迟,如果业务对实时性要求高,比如客服实时对话,我会在简单问题上直接回答,只在复杂问题上触发CoT,或者用[[Zero-shot]] CoT,加一句‘Let's think step by step’动态触发。
另外,光靠单条CoT路径还不够,因为模型可能走错分支。所以我更倾向用[[Self-Consistency]],采样多条CoT路径,然后投票选最一致的答案。比如刚才的退款问题,跑5次,4次都算出179.1,那就很稳。这其实引出一个问题:CoT的路径多样性和答案一致性怎么平衡?这个我后面可以再展开。
所以总结一下,我会把CoT看成一种‘推理脚手架’,在需要可解释性和复杂推理时必用,但不会无脑全上。我的取舍是:简单问题直接答,复杂问题用CoT+Self-Consistency,Agent场景用CoT+ReAct。这样既控制了成本,又保证了质量和可解释性。