超越零样本的推理增强

Prompt工程已从简单的指令编写进化为一门系统化的方法论。在需要复杂推理的任务中,恰当的推理增强技术可以将模型准确率提升30-50%。

思维链(Chain-of-Thought)

基本CoT

思维链的核心思想是让模型"展示推理过程"。通过在prompt中加入"让我们一步步思考"或提供推理示例:

Q: 一个商店有23个苹果,卖了17个后又进了8个,现在有多少苹果?
A: 让我们一步步思考。
  初始数量:23
  卖出17个后:23 - 17 = 6
  又进了8个后:6 + 8 = 14
  答案:14

CoT对数学推理、逻辑推理和多步规划任务效果显著。在GSM8K数学基准上,CoT将GPT-4的准确率从约75%提升到92%。

Zero-shot CoT

最简单的CoT只需在prompt末尾添加:

让我们一步步思考。

这五个字的魔力在于:它激活了模型在预训练阶段学到的"推理模式",使模型生成中间推理步骤而非直接跳到答案。

Few-shot CoT

提供2-4个带有推理过程的示例,效果更好但消耗更多token。关键是示例的推理过程要正确且简洁——过长的推理链反而会降低性能。

自一致性(Self-Consistency)

核心思想

CoT的一个问题是:同一条推理路径可能系统性偏向错误答案。自一致性通过生成多条推理路径并投票选择最一致的答案:

def self_consistency(prompt, n_samples=5, temperature=0.7):
    responses = []
    for _ in range(n_samples):
        response = llm.generate(
            prompt + "\n让我们一步步思考。",
            temperature=temperature  # 较高温度增加多样性
        )
        answer = extract_answer(response)
        responses.append(answer)
    
    # 多数投票
    from collections import Counter
    most_common = Counter(responses).most_common(1)[0]
    return most_common[0]

在GSM8K上,自一致性将准确率从92%进一步提升到96%+。代价是推理成本增加5倍。

采样策略

  • 温度:0.5-0.8之间最佳,太低缺乏多样性,太高推理质量下降
  • 采样数:5-10个样本是性价比最优区间
  • 停止条件:如果前3个答案一致,可以提前停止

思维树(Tree-of-Thought)

核心思想

CoT是线性推理,ToT将推理过程组织为树形结构,支持分支探索和回溯:

class ThoughtNode:
    def __init__(self, thought, parent=None):
        self.thought = thought
        self.parent = parent
        self.children = []
        self.value = 0  评估值
        self.visited = False

def tree_of_thought(problem, max_depth=4, branching=3):
    root = ThoughtNode(problem)
    frontier = [root]
    
    for depth in range(max_depth):
        next_frontier = []
        for node in frontier:
            # 生成branching个可能的下一步思考
            thoughts = generate_thoughts(node, n=branching)
            for thought in thoughts:
                child = ThoughtNode(thought, parent=node)
                # 评估这个思考方向的价值
                child.value = evaluate_thought(thought, problem)
                node.children.append(child)
                next_frontier.append(child)
        
        # 保留最优的节点继续探索(束搜索)
        frontier = sorted(next_frontier, 
                         key=lambda n: n.value, reverse=True)[:branching]
    
    # 回溯最优路径
    return trace_best_path(root)

适用场景

ToT在以下场景中明显优于CoT:

  • 24点游戏:需要尝试多种运算组合
  • 创意写作:需要探索不同情节方向
  • 约束满足问题:需要在多约束下搜索解空间

对于简单的问答或单步推理,ToT的收益不显著且成本很高。

思维图(Graph-of-Thought)

GoT将推理结构进一步泛化为任意图结构,允许:

  • 合并多条推理路径的结论
  • 循环改进(对同一问题多次思考)
  • 跨分支的信息共享
def graph_of_thought(problem):
    graph = ReasoningGraph()
    
    # 初始分解
    subproblems = decompose(problem)
    for sp in subproblems:
        graph.add_node(sp)
    
    # 并行推理
    for node in graph.nodes:
        if not node.solved:
            solution = solve_subproblem(node)
            node.solution = solution
    
    # 合并解
    final_solution = merge_solutions(graph)
    return final_solution

推理时计算扩展

Best-of-N采样

生成N个回答,用一个奖励模型选择最好的:

def best_of_n(prompt, n=4, reward_model=None):
    candidates = [llm.generate(prompt, temperature=0.8) for _ in range(n)]
    if reward_model:
        scores = [reward_model.score(prompt, c) for c in candidates]
        return candidates[argmax(scores)]
    return candidates[0]  # 无奖励模型时取第一个

过程奖励模型(PRM)

与只评估最终结果的结果奖励模型不同,PRM评估推理过程中的每一步:

def prm_guided_search(prompt, max_steps=10):
    current = prompt
    for step in range(max_steps):
        # 生成多个候选推理步骤
        candidates = [generate_step(current) for _ in range(4)]
        # PRM评估每一步
        scores = [prm.score(current, c) for c in candidates]
        # 选择最优步骤
        best = candidates[argmax(scores)]
        current += best
        if is_complete(best):
            break
    return current

这种方法类似o1的推理机制,通过在推理过程中做搜索来提升质量。

实用Prompt模板

分析型任务模板

你是一位[角色]。请按以下步骤分析这个问题:

1. 问题理解:复述问题,明确已知条件和目标
2. 信息收集:列出解决这个问题需要的信息
3. 方案设计:提出2-3个可能的解决方案
4. 方案评估:从[维度1]、[维度2]、[维度3]评估每个方案
5. 最优选择:选择最佳方案并说明理由
6. 风险分析:列出可能的风险和缓解措施

问题:[具体问题]

调试型任务模板

以下代码有bug,请按以下步骤调试:

1. 理解意图:代码应该实现什么功能
2. 执行追踪:手动模拟执行过程
3. 错误定位:在哪个步骤出现了问题
4. 根因分析:为什么会产生这个错误
5. 修复方案:如何修复
6. 验证方案:如何确认修复正确

代码:
[代码内容]
错误信息:[如有]

结语

推理增强技术是Prompt工程中最具技术含量的部分。从CoT的线性推理到ToT的树搜索再到PRM引导的过程搜索,推理时计算扩展正在成为提升模型能力的新维度。这些技术的本质是用更多推理时间换取更高质量的输出——一种与训练时计算扩展互补的扩展维度。