使用生成模型进行推理 → 让 AI “思考”起来

#2025/12/31 #ai

在前面的章节中,我们学会了如何构建高级提示词、使用链式提示。这些技术已经很强大了,

但我们还能做得更好——让AI真正“思考“起来

模型会推理通常被认为是通过记忆训练数据和模式匹配展现出这种行为的

这里的 推理 和 现在流行的 推理模型的 推理不是一回事情,详见 5. 关于“推理“和“推理模型“的区别

目录

一、什么是推理?为什么需要它?

核心概念对比

人类的两种思维方式

思维系统特点AI类比
系统1自动、直觉、即时模型直接生成答案(无思考)
系统2有意识、缓慢、有逻辑模型先思考再回答(有推理过程)

举个例子

问题:咖啡厅有23个苹果,用了20个做午餐,又买了6个,现在有多少个?  

❌ 系统1式回答(直接蹦答案):  
"9个。"  

✅ 系统2式回答(展示推理过程):  
"让我们一步步思考:  
1. 开始有23个苹果  
2. 用了20个做午餐:23 - 20 = 3个  
3. 又买了6个:3 + 6 = 9个  
所以答案是9个。"  

关键观察

  • 虽然AI可能不是“真正的“推理(更像是模式匹配和记忆)
  • 但通过提示工程,我们可以模仿推理过程****
  • 这能显著改进输出质量

二、思维链(Chain-of-Thought):先思考再回答

核心思想

不要直接给答案,先展示思考过程!

两种实现方式

方式1:少样本思维链(Few-Shot CoT)

给模型看示例,教它如何思考:

prompt = """  
Q: 咖啡厅有23个苹果,用了20个做午餐,又买了6个,现在有多少个?  
A: 咖啡厅原本有23个苹果。  
   用了20个做午餐,剩下 23 - 20 = 3个。  
   又买了6个,所以有 3 + 6 = 9个。  
   答案是9。  

Q: 罗杰有5个网球。他又买了2罐网球,每罐3个。现在他有多少个网球?  
A:   
"""  

关键点

  • 在提示词中展示完整的推理过程
  • 模型会模仿这种“思考模式
  • 适用于数学、逻辑推理等复杂任务

{%}|624

图:思维链提示通过推理示例,引导生成模型在回答中运用推理

方式2:零样本思维链(Zero-Shot CoT)

不给示例,用魔法短语

prompt = """  
咖啡厅有23个苹果,用了20个做午餐,又买了6个,现在有多少个?  
让我们逐步思考。  
"""  

# 模型输出:  
# 步骤1:从初始数量23个苹果开始  
# 步骤2:减去用掉的20个,23 - 20 = 3个  
# 步骤3:加上买的6个,3 + 6 = 9个  
# 答案是9个苹果  

魔法短语变体

  • “Let’s think step-by-step.”(让我们逐步思考)
  • “Take a deep breath and let’s think step-by-step.”(深呼吸,让我们逐步思考)
  • “Let’s solve this problem step-by-step.”(让我们一步步解决)

{%}|528

图:不使用示例的思维链提示。它用“让我们逐步思考”来引导推理

为什么有效?

增加计算资源投入

  • 每生成一个词元,模型都在“思考“
  • 推理过程中的每个词元都能让后续输出更稳定
  • 比直接蹦答案使用了更多计算资源

三、自洽性(Self-Consistency):采样多个答案

核心思想

不要只生成一个答案,生成多个,然后投票选最佳!

实现流程

同一个问题 → 生成多个不同的推理路径 → 投票选出最常见的答案  

代码示例

# 设置采样参数(允许随机性)  
pipe = pipeline(  
    "text-generation",  
    model=model,  
    tokenizer=tokenizer,  
    do_sample=True,        # 开启采样  
    temperature=0.7,       # 控制随机性  
    top_p=0.9  
)  

prompt = """  
咖啡厅有23个苹果,用了20个做午餐,又买了6个,现在有多少个?  
让我们逐步思考。  
"""  

# 生成多个答案  
answers = []  
for i in range(5):  # 生成5个不同答案  
    output = pipe(prompt)  
    answers.append(output)  

# 从多个答案中选择最常见的  
# (这里需要解析出最终数字并投票)  

{%}|496

图:通过对多个推理路径进行采样,我们可以使用多数投票来提取最可能的答案

优势

✅ 减少偶然错误
✅ 对于有多种解题思路的问题特别有效
✅ 提高答案的可靠性

注意事项

  • ⚠️ 需要多次调用模型(计算成本高)
  • ⚠️ 速度较慢
  • ⚠️ 需要解析和对比多个输出

四、思维树(Tree-of-Thought):探索多条路径

核心思想

像下棋一样,探索多个可能的思考分支,评分后选择最优路径。

工作流程

                    问题  
                     ↓  
        ┌───────────┼───────────┐  
     思路A        思路B        思路C  
    (评分7)      (评分9)      (评分4)  
        ↓            ↓            ↓  
    继续探索      继续探索      剪枝(放弃)  
        ↓            ↓  
     方案A1       方案B1  
                  (评分最高)  
                     ↓  
                  最终答案  

{%}|528

图:利用树状结构,生成模型可以生成待评分的中间思考过程。最有希望的思考过程会被保留,而较差的会被剪枝

适用场景

  • 创意写作
    • 探索不同故事发展方向
  • 复杂规划
    • 考虑多种策略方案
  • 需要深度思考的问题

缺点

  • ❌ 需要大量模型调用(非常慢)
  • ❌ 计算成本极高
  • ❌ 实现复杂

简化版本

可以通过提示词模拟(无需真实构建树结构):

prompt = """  
你是一个创意写作团队,包含3位专家。  
请针对以下问题,每位专家提出不同的解决思路,  
然后投票选出最佳方案。  

问题:如何让一个科幻故事的开头更吸引人?  
"""  

五、三种技术对比

技术核心机制模型调用次数速度适用场景
思维链展示推理过程1次数学、逻辑推理
自洽性采样多个答案多次(3-10次)中等需要高可靠性的任务
思维树探索多条路径非常多次创意、复杂规划

六、实战建议

第一步:从思维链开始

# 最简单的改进  
prompt = "你的问题 + 让我们逐步思考。"  

第二步:复杂问题使用自洽性

# 对关键决策生成多个答案  
for i in range(5):  
    answer = model.generate(prompt)  
    # 收集并投票  

第三步:创意任务考虑思维树

# 让多个"专家"讨论  
prompt = """  
你是3位专家组成的团队...  
Expert 1: [思路1]  
Expert 2: [思路2]  
Expert 3: [思路3]  
最终结论:...  
"""  

七、关键要点总结

概念一句话记忆代码关键词
系统1 vs 系统2直觉 vs 推理直接生成 vs 先思考
思维链展示思考过程“Let’s think step-by-step”
自洽性多次采样投票do_sample=True + 循环
思维树探索多条路径多专家讨论

八、注意事项

1. 不是真正的推理

AI 只是在模仿推理的表面形式,本质还是模式匹配。但实用效果很好!

2. 成本与收益的平衡

思维链 < 自洽性 < 思维树  
(成本从低到高)  

根据任务重要性选择合适的方法。

3. 持续实验

  • 没有万能公式
  • 不同模型效果不同
  • 需要针对具体问题调整

核心启示

推理技术的本质

  • 不是让模型变聪明
  • 而是让模型充分利用其已有能力
  • 通过更好的提示词设计,释放潜力