思维链:从直觉到推理的跨越

大语言模型在简单问答上表现惊艳,但面对数学推导、逻辑推理、多步决策等复杂任务时,直接给出答案往往出错。原因很简单:模型在单次前向传播中压缩了所有推理过程,信息瓶颈导致中间步骤丢失。

思维链(Chain-of-Thought, CoT)的核心思想是:强制模型显式输出中间推理步骤,再得出最终答案。 这不是让模型"思考更深",而是为模型提供额外的 token 预算来承载中间计算。

Zero-shot CoT vs Few-shot CoT

Zero-shot CoT

最简单的 CoT 触发方式——在 Prompt 末尾追加一句话:

问题:一个商店有 23 个苹果,卖了 17 个,又进货了 12 个。现在有多少个苹果?

让我们一步一步思考。

模型输出:

1. 初始有 23 个苹果
2. 卖出 17 个:23 - 17 = 6
3. 进货 12 个:6 + 12 = 18
4. 现在有 18 个苹果

关键点: “让我们一步一步思考”(Let’s think step by step)这句话在 GSM8K 基准上将准确率从 17.7% 提升到 78.7%(GPT-3.5)。这个魔法的本质是引导模型进入"推理模式"的 token 分布。

Few-shot CoT

在 Prompt 中提供带推理过程的示例:

问题:小明有 5 个球,小红给了他 3 个,他送给小华 2 个。小明现在有几个球?
推理:小明初始有 5 个球,小红给他 3 个后变为 5+3=8 个,送给小华 2 个后变为 8-2=6 个。
答案:6

问题:一辆公交车上有 28 人,到站下了 13 人,上了 9 人。现在车上有多少人?
推理:

模型会模仿示例中的推理格式,逐步推导。

对比

维度Zero-shot CoTFew-shot CoT
实现复杂度极低(一句话)中等(需构造示例)
推理格式控制弱(模型自由发挥)强(示例定义格式)
Token 消耗高(示例占用 context)
适用任务通用推理特定格式/领域任务
准确率提升显著但波动大更稳定可控

Self-Consistency:多路径投票

单一 CoT 路径存在随机错误。Self-Consistency 的策略是:

  1. 对同一问题采样多条 CoT 推理路径(temperature > 0)
  2. 提取每条路径的最终答案
  3. 对答案进行多数投票
import openai

def self_consistency_answer(question, n_samples=5):
    answers = []
    for _ in range(n_samples):
        prompt = f"{question}\n\n让我们一步一步思考。"
        resp = openai.chat.completions.create(
            model="gpt-4",
            messages=[{"role": "user", "content": prompt}],
            temperature=0.7,  # 关键:非零温度引入多样性
            max_tokens=512
        )
        # 提取最终答案(需根据任务设计解析逻辑)
        answer = extract_answer(resp.choices[0].message.content)
        answers.append(answer)
    
    # 多数投票
    from collections import Counter
    return Counter(answers).most_common(1)[0][0]

效果: 在 GSM8K 上,Self-Consistency 将 GPT-3.5 的准确率从 78.7% 提升到 ~85%,代价是 N 倍的 API 调用。

适用条件: 答案空间离散且可比较(数学题、分类任务)。对开放生成任务效果有限。

Tree-of-Thought (ToT):探索与回溯

CoT 是线性推理链。但真正的问题解决往往需要探索多条路径、评估、回溯。Tree-of-Thought 将推理结构化为搜索树:

根问题
├── 思路 A
│   ├── 子思路 A1 → 评估:3/5
│   └── 子思路 A2 → 评估:5/5 → 继续
│       └── 子思路 A2a → 答案 ✓
├── 思路 B
│   └── 子思路 B1 → 评估:1/5 → 剪枝
└── 思路 C
    └── 子思路 C1 → 评估:2/5 → 剪枝

ToT 的四个核心操作:

  1. 思维分解(Decomposition):将问题拆为可独立评估的子问题
  2. 思维生成(Generation):为每个节点生成 K 个候选下一步
  3. 状态评估(Evaluation):对每个状态打分,决定是否继续/剪枝
  4. 搜索算法(Search):BFS 或 DFS 遍历思维树
def tot_solve(problem, max_depth=3, breadth=3):
    """简化版 Tree-of-Thought 求解器"""
    frontier = [{"state": problem, "path": [], "score": 1.0}]
    
    for depth in range(max_depth):
        candidates = []
        for node in frontier:
            # 生成 breadth 个候选思路
            thoughts = generate_thoughts(node["state"], n=breadth)
            for thought in thoughts:
                new_state = thought["next_state"]
                score = evaluate_state(new_state)
                if score < 0.3:  # 剪枝
                    continue
                candidates.append({
                    "state": new_state,
                    "path": node["path"] + [thought["description"]],
                    "score": score
                })
        
        # 保留 top-K
        frontier = sorted(candidates, key=lambda x: -x["score"])[:breadth]
    
    return frontier[0]["path"] if frontier else []

代价: ToT 的 API 调用次数是 O(breadth × depth),成本显著高于 CoT。适合高价值、低频率的复杂推理任务。

Graph-of-Thought (GoT):拓扑推理

GoT 进一步泛化 ToT——推理不限于树结构,而是有向图:

  • 聚合(Aggregation):多条推理路径的结果合并为一个节点
  • 回溯(Backtracking):任意节点可回指之前的状态
  • 循环(Refinement):对同一节点迭代优化

典型场景:论文综述写作——多线程收集文献,聚合要点,发现矛盾后回溯修正。

特性CoTSelf-ConsistencyToTGoT
推理结构线性链多条独立链有向图
回溯能力有(剪枝)有(任意回溯)
路径合并投票
API 调用1NO(b×d)O(节点数+边数)
适用复杂度低-中中-高

适用场景与限制

适合 CoT 的场景

  • 数学推理:多步计算、应用题
  • 逻辑推理:三段论、条件推断
  • 常识推理:因果关系、时序判断
  • 代码调试:错误分析、修复推导
  • 规划任务:旅行规划、资源分配

不适合或效果有限的场景

  • 简单事实检索:直接知识问答,CoT 反而引入噪声
  • 模式识别:图像分类、情感分析等直觉型任务
  • 创意写作:推理链限制创造力
  • 极长推理链:超过模型有效 context 时,CoT 退化

核心限制

  1. CoT ≠ 真推理:模型并不真正"推理",而是生成统计上合理的推理文本。中间步骤可能看似正确但逻辑有误。
  2. 错误传播:链中任一步出错,后续步骤基于错误前提继续。
  3. 格式敏感:不同的推理格式引导效果差异大,需要实验调优。
  4. 成本倍增:推理 token 增加输出长度,直接推高 API 成本和延迟。

实战建议

  1. 从 Zero-shot CoT 开始:最简方案先试,效果不够再加复杂度
  2. 格式约束:用结构化格式(如编号列表、JSON)约束推理过程,便于解析和验证
  3. 验证机制:在推理链中加入自检步骤——“让我验证一下:18 + 5 = 23 ✓”
  4. 组合策略:高价值任务用 ToT,常规任务用 CoT + Self-Consistency
  5. 监控成本:推理 token 通常占总输出 60-80%,做好预算管理

思维链技术的本质是给模型"思考的带宽"。它不是万能药,但在需要结构化推理的任务上,是目前最有效的 Prompt 工程技术之一。随着模型原生推理能力(如 o1/o3 系列)的提升,CoT 的部分功能将被内化为模型能力,但在可预见的未来,显式的推理引导仍然是 Prompt 工程的核心技能。

加入讨论

这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。

碳基与硅基的智慧碰撞,认知差异创造无限可能。