Agent 推理模式有哪些?ReAct 又是啥、怎么实现?
用一张地图、一个真实循环演示和三段交互,把"Agent 怎么思考、怎么行动"彻底讲透。
一、一句话答案
Agent 推理模式,指的是「大模型智能体在完成任务时,决定下一步做什么」的一套控制流策略:是闷头推理、边想边干、先规划后执行,还是干完再反思、多人协作?
其中 ReAct 是最经典、最常用的一类:它让模型把「思考」和「行动」交错进行 —— 想一步、做一次工具调用、看一眼结果、再想下一步,直到给出答案。
二、先建立认知:什么是「推理模式」
普通一次性的对话,模型「想一下就回答」。但 Agent 要干活(查资料、跑代码、调 API),它得有一个反复决策的过程:
「下一步怎么决定」这套规则,就是推理模式。不同模式 = 不同的决策节奏与结构。它决定了 Agent 聪不聪明、稳不稳、贵不贵。
三、主流推理模式总览
把常见模式按「是否调用工具」「是否先做计划 / 反思」排成一张地图:
四、六种模式逐一讲
① CoT 链式思考
把问题拆成一步步推理,只在脑子里走,不调工具。适合纯知识题。缺点是「想当然」,易幻觉。
② ReAct 想+做交错 ⭐
边推理边行动:Thought → Action → Observation 循环。能用工具获取真实信息,又能思考。最常用。
③ Plan-and-Execute
先让模型产出完整计划,再逐条执行。适合步骤多、需全局把控的任务;缺点是计划可能脱离实际。
④ Reflexion 反思
执行后让模型自我批评(哪错了、怎么改),把反思写回记忆,下一轮改进。擅长试错型任务。
⑤ ToT 树状思考
像下棋一样分叉探索多条思路,评估后回溯选最优。质量高但 token 消耗大。
⑥ Multi-Agent 协作
多个角色(规划者/执行者/批评者)分工辩论。适合大型复杂项目,但协调和成本复杂。
五、ReAct 是啥
ReAct = Reasoning(推理) + Acting(行动)。由 Yao 等人在 2022 年论文《ReAct: Synergizing Reasoning and Acting in Language Models》提出。
核心思想:让大模型在生成回答的过程中,交替产生两种内容——
- Thought(想法):模型用自然语言「小声嘀咕」自己的推理、计划、判断;不展示给用户,但写进上下文引导下一步。
- Action(行动):模型决定调用某个工具,并给出参数。
- Observation(观察):工具返回的结果,再喂回给模型。
三者循环:Thought → Action → Observation → Thought → … → Finish(答案)。
六、为什么需要 ReAct(对比就懂)
只有 CoT(纯想)
模型凭记忆推理,拿不到实时/外部事实,容易自信地胡说(幻觉)。
只有 Act(纯做)
直接调工具但不思考,不会规划、不会根据结果调整,步骤乱。
ReAct(想+做)
想法指导行动、行动反馈校正想法,既接地气又不乱,还能追溯过程。
七、ReAct 的格式长这样
靠 Prompt 约定一种固定格式,让模型按套路输出。典型格式:
Thought: 我需要先查出特斯拉的股票代码。 Action: search[特斯拉 股票代码] Observation: 特斯拉在纳斯达克上市,代码 TSLA。 Thought: 已知代码 TSLA,现在查今日涨跌。 Action: get_stock[TSLA] Observation: TSLA 今日 +2.3%(上涨)。 Thought: 信息齐全,可以总结了。 Action: Finish[特斯拉代码 TSLA,今日上涨 2.3%。]
八、ReAct 具体怎么实现(六部件 + 主循环)
ReAct 不是模型自带的魔法,而是 「Prompt + 一段运行时代码」 拼出来的。需要 6 个部件:
1. Prompt 模板
系统提示 + 少量 few-shot 示例,明确 Thought/Action/Observation 格式与可用工具清单。
2. 工具注册表
每个工具有 name / description / 参数 schema(如 JSON Schema),供模型选 & 程序校验。
3. 解析器
用正则或结构化输出,从模型文本里抠出 Action 和参数;抠不出则让模型重试。
4. 执行器
按 Action 调用对应工具,捕获异常,拿到 Observation(超时/报错也写回)。
5. 记忆/草稿本
把每轮 Thought/Action/Observation 依次追加到上下文,作为后续输入(scratchpad)。
6. 终止条件
出现 Finish 动作,或达到最大步数(防死循环)。
主循环(伪代码)
# 初始化 scratchpad = system_prompt + few_shot_examples + "Question: " + question # 主循环 for step in range(max_steps): response = llm(scratchpad) # 模型继续往下写 thought, action, args = parse(response) # 解析 Thought / Action scratchpad += thought # 想法写回上下文 if action == "Finish": return args # 给出最终答案 observation = run_tool(action, args) # 执行工具 scratchpad += f"Action: {action}[{args}]\nObservation: {observation}\n" return "超过最大步数,未完成"
while 循环 + 一个「把模型输出解析成工具调用」的胶水层。理解这层胶水,你就理解了 90% 的 Agent 框架(LangChain 的 AgentExecutor、LlamaIndex 的 ReActAgent 都是这个骨架)。
九、交互1:ReAct 循环步进器(亲手走一遍)
下面用前面的「特斯拉股价」问题,点「下一步」逐步展开 Thought → Action → Observation,看草稿本如何一点点长大。
十、交互2:三模式对比(同一问题不同表现)
同一个问题,切换 CoT / Act-only / ReAct,看它们各自会怎样应对「需要查实时数据」的任务。
问题:「特斯拉今天股价涨了还是跌了?」(模型训练数据里没有今天的数据)
十一、交互3:选型决策器(该用哪种模式?)
点一个你的任务场景,直接告诉你该选哪种推理模式。
十二、ReAct 的优缺点与常见坑
✅ 优点
- 能用工具获取真实信息,减少幻觉。
- 过程可解释、可审计(有完整轨迹)。
- 实现简单,几乎所有 Agent 框架都支持。
- 灵活:根据 Observation 动态调整计划。
⚠️ 缺点与坑
- 上下文爆栈:步数多时草稿本很长,token 贵。
- 死循环:模型反复调同一个工具 → 需 max_steps 兜底。
- 解析失败:模型不按格式输出 → 要靠重试/纠错。
- 错误传播:某步 Observation 错,后面全歪。
十三、小结速记
| 问题 | 答案 |
|---|---|
| Agent 推理模式有哪些? | CoT / ReAct / Plan-Execute / Reflexion / ToT / Multi-Agent 等 |
| ReAct 是啥? | Reasoning + Acting:Thought→Action→Observation 循环,边想边干 |
| 为什么用它? | 纯想易幻觉、纯做易混乱;ReAct 让推理与行动协同 |
| 怎么实现? | Prompt 模板 + 工具注册表 + 解析器 + 执行器 + 草稿本 + 终止条件,套一个 while 循环 |
| 核心难点? | 解析模型输出、控上下文长度、防死循环与错误传播 |
agent-tools.html(工具调用机制)、agent-paradigms-compare.html(ReAct / Plan-and-Execute / Reflection 三大范式对比与选型);Transformer 系列讲「模型本身」,Agent 系列讲「怎么让模型动手干活」。