跳转至

Reasoning Patterns

大语言模型(LLM)本身的推理能力是有限的——它们倾向于一步到位地给出答案,而非经过深思熟虑的多步推演。为了弥补这一局限,研究者们提出了多种推理模式(Reasoning Patterns),使LLM能够更系统、更可靠地解决复杂问题。这些推理模式是构建现代AI Agent的核心基础。


CoT (Chain of Thought)

基本原理

CoT(Chain of Thought,思维链)是所有现代Agent框架的基础。其核心思想非常直观:与其让模型直接输出最终答案,不如引导它逐步展示推理过程,就像人类在解题时会在草稿纸上写下中间步骤一样。

CoT的理论依据在于:当模型被要求生成中间推理步骤时,它能够将复杂问题分解为更简单的子问题,从而显著提升在算术推理、常识推理和符号推理等任务上的表现。

Few-shot CoT

Few-shot CoT由Wei et al. (2022)在论文《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》中提出。其方法是在prompt中提供若干包含详细推理步骤的示例(exemplars),引导模型模仿这种逐步推理的模式:

Q: Roger有5个网球,他又买了2筒网球,每筒有3个,请问他现在有多少个网球?
A: Roger一开始有5个网球。2筒网球共有2×3=6个。5+6=11。答案是11。

Q: 食堂有23个苹果,用掉20个后又买了6个,请问现在有多少个?
A: 食堂一开始有23个苹果。用掉20个后剩23-20=3个。又买了6个,3+6=9。答案是9。

Zero-shot CoT

Kojima et al. (2022) 发现,仅需在prompt末尾添加一句 "Let's think step by step",即可在不提供任何示例的情况下激发模型的逐步推理能力。这一发现意义重大——它表明大型语言模型内部已经具备了链式推理的潜力,只需要一个简单的触发指令即可释放。

Q: 一个杂货商有一些苹果,他卖掉40%后剩下420个,他原来有多少个?
A: Let's think step by step.

Self-Consistency (SC)

Self-Consistency(自一致性)由Wang et al. (2023)提出,是对CoT的重要增强。其核心思想是:对同一问题多次采样不同的推理路径,然后通过多数投票(majority voting)选出最一致的答案

工作流程如下:

  1. 对同一个问题,使用较高的temperature进行多次CoT推理(例如采样10~40条不同的推理链)
  2. 每条推理链独立地得出一个答案
  3. 对所有答案进行多数投票,选择出现频率最高的答案作为最终输出

SC的优势在于:它不依赖于单一推理路径的正确性,而是通过多条路径的"民主投票"来提高结果的可靠性。即使某些推理链出错,只要多数路径能收敛到正确答案,最终结果就是正确的。


ReAct

基本原理

ReAct(Reason + Act)由Yao et al. (2023)在论文《ReAct: Synergizing Reasoning and Acting in Language Models》中提出。其核心理念是:不要指望LLM一步就能给出最终答案,而是让Agent像人一样,思考与行动交错进行

ReAct的关键创新在于将推理(Reasoning)和行动(Acting)统一在一个交错的循环中:

Thought: 我需要查找某个信息来回答这个问题
Action: Search["关键词"]
Observation: [搜索返回的结果]
Thought: 根据搜索结果,我现在知道了...但还需要确认...
Action: Lookup["补充信息"]
Observation: [查找返回的结果]
Thought: 现在我有足够的信息来回答问题了
Action: Finish["最终答案"]

与纯CoT和纯Act的对比

方法 推理能力 行动能力 局限性
纯CoT 无法获取外部信息,容易产生幻觉
纯Act 缺乏规划,行动盲目
ReAct 推理与行动相互支撑,更可靠

纯CoT的问题在于,模型只能依赖其训练数据中的知识进行推理,无法与外部世界交互——当遇到需要实时信息或模型不确定的知识时,容易产生事实性错误(幻觉)。纯Act的问题则在于,模型在没有明确推理的情况下直接采取行动,缺乏对目标和策略的深度思考。ReAct将两者结合,让推理指导行动的方向,让行动的结果(Observation)反馈给推理,形成一个正向循环。

ReAct在Agent中的应用

ReAct模式是当前主流Agent框架(如LangChain、LlamaIndex)的默认推理模式。在实际应用中,ReAct循环通常与工具调用(Tool Use)结合:Agent的"Action"就是调用某个工具(搜索引擎、代码解释器、API等),"Observation"就是工具返回的结果。


Reflexion

基本原理

Reflexion由Shinn et al. (2023)在论文《Reflexion: Language Agents with Verbal Reinforcement Learning》中提出。它引入了一种自我反思(self-reflection)机制,使Agent能够从失败中学习,而无需更新模型权重。

传统强化学习通过标量奖励信号(如+1/-1)来更新策略,但这种信号过于稀疏,难以指导具体的行为改进。Reflexion的核心洞见是:用自然语言形式的反思(linguistic feedback)代替标量奖励,让Agent用语言描述自己的错误和改进方向。

工作流程

Reflexion的完整循环包含三个核心组件:

  1. Actor(行动者):执行任务并生成动作轨迹(trajectory)
  2. Evaluator(评估者):评估Actor的输出质量,判断任务是否成功
  3. Self-Reflection(自我反思):当任务失败时,生成自然语言形式的反思总结

具体流程如下:

第1次尝试:
  Actor执行任务 → 得到结果 → Evaluator判断:失败
  → Self-Reflection: "我在第3步犯了错误,我把X误认为Y,
     下次应该先验证X的准确性再继续"

第2次尝试:
  Actor执行任务(参考之前的反思) → 得到结果 → Evaluator判断:失败
  → Self-Reflection: "虽然这次避免了上次的错误,但在最后一步
     我遗漏了约束条件Z,下次需要在最终检查时加入Z的验证"

第3次尝试:
  Actor执行任务(参考所有历史反思) → 得到结果 → Evaluator判断:成功!

Verbal Reinforcement Learning

Reflexion可以被视为一种"语言强化学习"(Verbal RL):

  • 传统RL:通过数值奖励更新网络权重 → 改变策略
  • Verbal RL:通过自然语言反思更新记忆 → 改变行为

这种方法的优势在于:反思内容是人类可读的,便于调试和理解Agent的学习过程;同时不需要梯度更新,适用于任何黑盒LLM。

应用场景

Reflexion在以下场景中表现出色:

  • 代码生成:生成代码 → 运行测试 → 根据错误信息反思 → 修复代码
  • 决策任务:在交互式环境中(如ALFWorld)完成多步任务
  • 推理任务:在需要多次尝试的复杂推理问题中逐步逼近正确答案

ToT (Tree of Thoughts)

基本原理

ToT(Tree of Thoughts,思维树)由Yao et al. (2024)在论文《Tree of Thoughts: Deliberate Problem Solving with Large Language Models》中提出。如果说CoT是一条线性的推理链,那么ToT则将推理过程拓展为一棵树状结构,允许模型在多个可能的推理方向上进行探索和回溯。

ToT的核心思想是:

  1. 思维分解:将问题的解决过程分解为若干中间步骤(thoughts)
  2. 多路径生成:在每个步骤上生成多个候选思维
  3. 评估与选择:对每个候选思维进行评估(可由LLM自身评估或外部评估)
  4. 搜索策略:使用系统化的搜索算法在思维树中寻找最优路径

搜索策略:BFS vs DFS

ToT支持两种经典的搜索策略:

广度优先搜索 (BFS)

  • 在每一层保留最有希望的 \(k\) 个节点
  • 适合需要全局比较的问题
  • 优势:不容易错过全局最优解
  • 劣势:内存和计算开销较大

深度优先搜索 (DFS)

  • 沿着最有希望的分支一路深入
  • 遇到死路时回溯到上一层,尝试其他分支
  • 适合搜索空间很深但正确路径相对集中的问题
  • 优势:内存效率高
  • 劣势:可能陷入局部最优

与CoT的关键区别

特性 CoT ToT
推理结构 线性链 树状结构
候选路径 1条(或SC中多条独立链) 每步多个分支,可回溯
搜索策略 无(顺序生成) BFS / DFS
中间评估 每步评估候选思维
适用场景 一般推理任务 需要探索和回溯的复杂问题
计算开销 较高(多次LLM调用)

典型应用

ToT在以下类型的问题中优势明显:

  • 24点游戏:用4个数字和四则运算得到24,需要尝试多种组合
  • 创意写作:需要探索不同的叙事方向并选择最佳路径
  • 数学证明:需要尝试不同的证明策略

Plan-and-Execute

基本原理

Plan-and-Execute是一种相对稳健的Agent设计思路,其核心在于将规划与执行解耦

  • 规划 (Planning):首先,让LLM完整地分析用户需求,并制定出一个详细的、分步骤的行动计划(Plan)
  • 执行 (Executing):然后,Agent(或另一个LLM)严格按照这个计划,一步一步地执行,直到计划完成

这种设计的灵感来源于经典AI规划领域,与ReAct的"边想边做"形成鲜明对比——Plan-and-Execute强调"先想清楚,再动手做"。

LLMCompiler

LLMCompiler (Kim et al., 2024) 是Plan-and-Execute模式的一个重要优化。其核心思想是:在规划阶段生成一个任务DAG(有向无环图),然后识别其中可以并行执行的任务,从而大幅提升执行效率。

工作流程:

  1. Planner:分析任务依赖关系,生成任务DAG
  2. Task Fetching Unit:调度可并行的任务同时执行
  3. Joiner:汇总所有任务结果,判断是否需要重新规划

动态重规划 (Replanning)

在实际应用中,初始计划往往无法完美执行——环境可能发生变化,某些步骤可能失败,或者执行过程中发现了新的信息。因此,现代Plan-and-Execute框架通常支持动态重规划

  • 每执行完一个步骤后,评估当前状态
  • 如果发现偏离预期,触发重规划
  • 基于已完成的步骤和新信息,生成更新后的计划
  • 继续执行更新后的计划

这种机制使得Plan-and-Execute在保持结构化优势的同时,也具备了一定的灵活性。


各方法对比总结

方法 核心思想 推理结构 外部交互 自我修正 计算开销 典型应用场景
CoT 逐步推理 线性链 无(SC可部分弥补) 数学推理、常识问答
ReAct 思考-行动交替 线性循环 有(工具调用) 通过观察修正 信息检索、多步任务
Reflexion 从失败中反思 多轮迭代 可有 有(语言反思) 中~高 代码生成、决策任务
ToT 树状探索 树状结构 通过回溯修正 需要搜索的创意/数学问题
Plan-and-Execute 先规划后执行 分阶段 有(工具调用) 动态重规划 复杂多步工作流

如何选择

  • 简单推理任务:CoT已足够
  • 需要外部信息的任务:ReAct
  • 允许多次尝试且有明确反馈的任务:Reflexion
  • 搜索空间大、需要探索的问题:ToT
  • 结构化的多步工作流:Plan-and-Execute

在实际的Agent系统中,这些推理模式往往不是孤立使用的,而是根据任务特点进行组合。例如,一个Agent可能使用Plan-and-Execute进行整体规划,在每个执行步骤中使用ReAct与工具交互,并在失败时触发Reflexion进行反思和重试。


评论 #