1. ReAct框架与规划框架概述
ReAct(Reasoning and Acting)是一种将推理(Reasoning)与行动(Acting)相结合的智能体框架,其核心思想是通过Thought-Action-Observation循环实现任务的逐步分解与执行。这个框架最早在2022年的论文《ReAct: Synergizing Reasoning and Acting in Language Models》中被提出,现已成为构建基于大模型的智能体系统的主流范式之一。
在实际应用中,ReAct框架特别适合解决需要多步推理和工具调用的复杂任务。比如当我们需要开发一个能够自动分析股票市场数据的智能体时,传统的端到端模型可能难以处理这种需要分步查询、计算和判断的任务。而采用ReAct框架,智能体可以自主决定:先查询某支股票的历史数据(Action),观察返回结果(Observation),然后思考这些数据意味着什么(Thought),再决定下一步是计算技术指标还是直接给出投资建议。
关键提示:ReAct与传统流水线的本质区别在于,它的每个决策都是基于当前环境状态动态生成的,而不是预先定义好的固定流程。这使得系统具备了处理意外情况和调整策略的能力。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Thought-Action-Observation循环详解
2.1 循环的组成要素
一个完整的TAO(Thought-Action-Observation)循环包含三个关键阶段:
-
Thought(思考):智能体分析当前状态,决定下一步行动策略。这个阶段通常会生成类似人类的推理过程,例如:
code复制
用户需要查询北京明天的天气。我现有天气API的访问权限,应该先确定API的调用参数。 -
Action(行动):根据思考结果执行具体操作,通常分为:
- 工具调用(如调用搜索引擎、API)
- 信息询问(向用户请求更多输入)
- 直接响应(当可以立即回答时)
-
Observation(观察):获取行动结果并提取关键信息。例如调用天气API后,需要从返回的JSON中提取温度、降水概率等核心数据。
2.2 循环的终止条件
一个合理的ReAct实现必须明确定义循环结束的条件,常见的有:
- 任务完成(生成最终答案)
- 达到最大迭代次数(防止无限循环)
- 遇到无法解决的错误
- 用户主动中断
在实际编码中,我通常会这样实现终止判断:
python复制def should_terminate(history, max_steps=10):
if len(history) >= max_steps:
return True, "达到最大步数限制"
last_action = history[-1]["action"]
if last_action.get("type") == "final_answer":
return True, "任务完成"
if "error" in last_action.get("re
