引言:推理模式是Agent的"思维操作系统"
当AI Agent面对"规划从北京到上海的3天商务行程,预算8000元,需包含2场会议"这样的复杂任务时,它如何思考?是直接调用工具查机票,还是先拆解任务步骤?是出错后重新尝试,还是能从错误中学习?这些"思考方式"的差异,源于Agent采用的推理模式——它们是Agent的"思维操作系统",决定了智能体解决问题的效率、准确性和进化能力。
从让模型"分步解题"的思维链(CoT),到"边思考边行动"的ReAct,再到能"自我反思"的Reflexion,以及"并行高效执行"的ReWOO,AI Agent的推理模式已形成完整技术体系。这些模式并非相互替代,而是各有擅长:CoT擅长复杂逻辑推理,ReAct擅长工具交互,Reflexion擅长持续进化,ReWOO擅长高效并行任务。
本文将系统解析这四大推理模式的核心原理、实战代码、适用场景,并通过可视化图表对比其优劣,帮助读者掌握"为不同任务选择合适推理模式"的能力——这是构建高效AI Agent的关键前提。
一、思维链(Chain-of-Thought, CoT):让Agent"想清楚再做"
1.1 核心思想:显式拆解推理步骤
思维链(CoT)的本质是模仿人类"分步思考"的认知过程,让Agent在解决复杂问题时,先输出中间推理步骤,再得出最终结论。它解决了传统大模型"跳步推理"导致的错误——例如计算"18÷(3×2)"时,直接输出"3"可能是错的,但分步写"Step1:先算3×2=6;Step2:再算18÷6=3"则能大幅降低错误率。
# 传统输出(无CoT)
输入:1+2+3+4-5-6=?
输出:-1
# CoT输出(显式步骤)
输入:1+2+3+4-5-6=?
输出:
Step1:先计算加法部分:1+2=3;3+3=6;6+4=10
Step2:再计算减法部分:10-5=5;5-6=-1
最终答案:-1
1.2 技术实现:用Prompt诱导分步推理
CoT无需复杂架构,主要通过提示工程触发。最经典的提示词是"Let’s think step by step"(让我们一步步思考),中文可使用"请分步推理"。
基础Prompt模板:
def cot_prompt(question):
return f"""
问题:{
question}
请按照以下步骤解决:
1. 拆解问题核心要素
2. 逐步推理每个子问题
3. 整合结果得出答案
分步推理:
"""
# 示例:解决逻辑谜题
question = "甲、乙、丙三人中,一人是医生,一人是教师,一人是工程师。已知:甲不是医生,乙不是教师,丙不是工程师。请问谁是医生?"
prompt = cot_prompt(question)
response = llm.generate(prompt) # 调用大模型生成推理步骤
输出结果(CoT推理过程):
分步推理:
1. 核心要素:三人职业分别为医生、教师、工程师,需根据排除条件匹配。
2. 子问题1:甲不是医生 → 甲可能是教师或工程师。
3. 子问题2:乙不是教师 → 乙可能是医生或工程师。
4. 子问题3:丙不是工程师 → 丙可能是医生或教师。
5. 假设丙是医生:则丙的职业确定,剩余职业为教师和工程师。
- 甲不能是医生(已满足),可分配教师;
- 乙不能是教师,只能分配工程师(符合条件)。
6. 验证是否矛盾:无冲突,因此假设成立。
最终答案:丙是医生。
1.3 进化变体:应对不同场景的CoT增强版
变体名称 | 核心改进 | 适用场景 | 示例Prompt |
---|---|---|---|
Zero-Shot CoT | 无需示例,仅用指令触发分步推理 | 简单逻辑/数学问题 | “请分步解决这个问题” |
Few-Shot CoT | 提供少量带步骤的示例,让模型模仿 | 复杂推理问题(如几何证明) | “示例1:…(带步骤) 你的问题:…” |
Self-Consistency | 生成多条推理路径,投票选择最佳答案 | 高风险决策(如医疗诊断) | “生成3种解题思路,最终选择最合理的” |
Least-to-Most | 先解决简单子问题,再逐步解决复杂问题 | 多层级问题(如编程调试) | “先分析每个函数的作用,再排查调用错误” |
1.4 优势与局限
优势:
- 提升复杂问题准确率:在数学推理、逻辑谜题等任务中,准确率可提升30%-50%;
- 推理过程可解释:显式步骤让人类能追溯Agent的"思考轨迹",便于纠错;
- 实现简单:无需修改模型,仅通过Prompt即可触发。
局限:
- 无法验证结果:步骤正确不代表结论正确(如计算错误);
- 不支持工具交互:纯推理,无法调用外部工具获取实时信息;
- 增加Token消耗:步骤描述会占用更多上下文空间。
1.5 适用场景
- 数学计算:如方程求解、微积分运算(需分步展示推导过程);
- 逻辑推理:如谜题、案件分析(需拆解条件链);
- 规划类任务:如会议排期(需考虑时间冲突等约束)。
二、ReAct(Reason+Act):让Agent"边想边做"
2.1 核心突破:推理与行动的闭环循环
ReAct的革命性在于将"推理(Reason)"与"行动(Act)"绑定为闭环,让Agent在解决问题时,能根据推理结果调用工具,再根据工具返回的观察结果调整推理——类似人类"思考→尝试→观察→再思考"的过程。
例如,当用户问"今天北京的PM2.5指数是多少,适合户外活动吗?",ReAct的流程是:
Thought(需要查北京PM2.5)→ Act(调用空气质量API)→ Observation(返回指数80)→ Thought(80属于良,适合户外活动)→ 输出答案
2.2 工作流程:四步循环机制
graph TD
A[用户问题] --> B[Thought<br>(推理下一步行动)]
B --> C{需要工具?}
C -- 是 --> D[Act<br>(调用工具,如API)]
D --> E[Observation<br>(工具返回结果)]
E --> B
C -- 否 --> F[输出最终答案]
步骤详解:
- Thought(推理):分析问题,决定是否需要调用工具、调用什么工具;
- Act(行动):若需要工具,生成结构化调用指令(如函数名+参数);
- Observation(观察):执行工具调用,获取返回结果(如API数据);
- 循环迭代:将观察结果纳入上下文,重复Thought步骤,直至可直接回答。
2.3 代码实现:ReAct循环的核心逻辑
以下是用Python实现的ReAct循环伪代码,以"查询天气并判断是否适合野餐"为例:
class ReActAgent:
def __init__(self, tools):
self.tools = tools # 工具列表,如天气查询工具
self.history = [] # 存储(Thought, Act, Observation)轨迹
def run(self, question, max_steps=5):
for _ in range(max_steps): # 限制最大步数,避免无限循环
# Step 1: 生成Thought(推理下一步)
thought = self.generate_thought(question)
self.history.append({
"type"